From b70c9d6249df47a7dc5a161422ed230e785be06e Mon Sep 17 00:00:00 2001 From: Ville Pihlava Date: Tue, 3 Sep 2024 16:25:09 +0300 Subject: [PATCH 001/213] Change GraphQL schema for carsAllowed and generate files. --- .../gtfs/generated/GraphQLDataFetchers.java | 33 ++++++++++--------- .../apis/gtfs/generated/GraphQLTypes.java | 9 +++++ .../apis/gtfs/generated/graphql-codegen.yml | 1 + .../opentripplanner/apis/gtfs/schema.graphqls | 26 +++++++++++++++ 4 files changed, 54 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java index 67944543580..a33a5d31f10 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java @@ -12,16 +12,30 @@ import org.locationtech.jts.geom.Geometry; import org.opentripplanner.api.resource.DebugOutput; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLAbsoluteDirection; +import org.opentripplanner.transit.model.organization.Agency; +import org.opentripplanner.routing.alertpatch.TransitAlert; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLAlertCauseType; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLAlertEffectType; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLAlertSeverityLevelType; +import org.opentripplanner.routing.vehicle_parking.VehicleParking; +import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; +import org.opentripplanner.service.vehiclerental.model.VehicleRentalStationUris; +import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; +import org.opentripplanner.service.vehiclerental.model.RentalVehicleEntityCounts; +import org.opentripplanner.service.vehiclerental.model.RentalVehicleTypeCount; +import org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLBikesAllowed; +import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLCarsAllowed; +import org.opentripplanner.transit.model.timetable.booking.BookingInfo; +import org.opentripplanner.transit.model.timetable.booking.BookingTime; +import org.opentripplanner.routing.graphfinder.PatternAtStop; +import org.opentripplanner.model.plan.Emissions; +import org.opentripplanner.apis.gtfs.model.FeedPublisher; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLInputField; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLOccupancyStatus; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLRelativeDirection; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLRoutingErrorCode; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLTransitMode; -import org.opentripplanner.apis.gtfs.model.FeedPublisher; import org.opentripplanner.apis.gtfs.model.PlanPageInfo; import org.opentripplanner.apis.gtfs.model.RideHailingProvider; import org.opentripplanner.apis.gtfs.model.StopPosition; @@ -36,37 +50,24 @@ import org.opentripplanner.model.fare.FareProduct; import org.opentripplanner.model.fare.FareProductUse; import org.opentripplanner.model.fare.RiderCategory; -import org.opentripplanner.model.plan.Emissions; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.Leg; import org.opentripplanner.model.plan.LegTime; import org.opentripplanner.model.plan.StopArrival; import org.opentripplanner.model.plan.WalkStep; -import org.opentripplanner.routing.alertpatch.TransitAlert; import org.opentripplanner.routing.api.response.RoutingError; import org.opentripplanner.routing.graphfinder.NearbyStop; -import org.opentripplanner.routing.graphfinder.PatternAtStop; +import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.routing.graphfinder.PlaceAtDistance; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; import org.opentripplanner.routing.vehicle_parking.VehicleParkingState; import org.opentripplanner.service.realtimevehicles.model.RealtimeVehicle; import org.opentripplanner.service.realtimevehicles.model.RealtimeVehicle.StopRelationship; -import org.opentripplanner.service.vehiclerental.model.RentalVehicleEntityCounts; import org.opentripplanner.service.vehiclerental.model.RentalVehicleType; -import org.opentripplanner.service.vehiclerental.model.RentalVehicleTypeCount; -import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; -import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; -import org.opentripplanner.service.vehiclerental.model.VehicleRentalStationUris; import org.opentripplanner.service.vehiclerental.model.VehicleRentalSystem; -import org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle; import org.opentripplanner.transit.model.basic.Money; import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.network.TripPattern; -import org.opentripplanner.transit.model.organization.Agency; -import org.opentripplanner.transit.model.timetable.Trip; -import org.opentripplanner.transit.model.timetable.booking.BookingInfo; -import org.opentripplanner.transit.model.timetable.booking.BookingTime; public class GraphQLDataFetchers { @@ -1148,6 +1149,8 @@ public interface GraphQLTrip { public DataFetcher blockId(); + public DataFetcher carsAllowed(); + public DataFetcher departureStoptime(); public DataFetcher directionId(); diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java index 67051444cdf..06f515466ac 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java @@ -566,6 +566,12 @@ public void setGraphQLBannedNetworks(List bannedNetworks) { } } + public enum GraphQLCarsAllowed { + ALLOWED, + NOT_ALLOWED, + NO_INFORMATION, + } + public static class GraphQLCyclingOptimizationInput { private GraphQLTriangleCyclingFactorsInput triangle; @@ -1492,6 +1498,7 @@ public enum GraphQLPlanAccessMode { BICYCLE, BICYCLE_PARKING, BICYCLE_RENTAL, + CAR, CAR_DROP_OFF, CAR_PARKING, CAR_RENTAL, @@ -1575,6 +1582,7 @@ public enum GraphQLPlanDirectMode { public enum GraphQLPlanEgressMode { BICYCLE, BICYCLE_RENTAL, + CAR, CAR_PICKUP, CAR_RENTAL, FLEX, @@ -1877,6 +1885,7 @@ public void setGraphQLWalk(GraphQLWalkPreferencesInput walk) { public enum GraphQLPlanTransferMode { BICYCLE, + CAR, WALK, } diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml b/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml index 29490a28b78..fb72e63986c 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml @@ -53,6 +53,7 @@ config: RentalVehicle: org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle#VehicleRentalVehicle VehicleRentalUris: org.opentripplanner.service.vehiclerental.model.VehicleRentalStationUris#VehicleRentalStationUris BikesAllowed: org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLBikesAllowed#GraphQLBikesAllowed + CarsAllowed: org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLCarsAllowed#GraphQLCarsAllowed BookingInfo: org.opentripplanner.transit.model.timetable.booking.BookingInfo#BookingInfo BookingTime: org.opentripplanner.transit.model.timetable.booking.BookingTime#BookingTime CarPark: org.opentripplanner.routing.vehicle_parking.VehicleParking#VehicleParking diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index 927af19f8b1..dee8d0b7a60 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -2267,6 +2267,8 @@ type Trip implements Node { ): Stoptime "Whether bikes are allowed on board the vehicle running this trip" bikesAllowed: BikesAllowed + "Whether cars are allowed on board the vehicle running this trip" + carsAllowed: CarsAllowed blockId: String "Departure time from the first stop" departureStoptime( @@ -2774,6 +2776,15 @@ enum BikesAllowed { NO_INFORMATION } +enum CarsAllowed { + "The vehicle being used on this particular trip can accommodate at least one car." + ALLOWED + "No cars are allowed on this trip." + NOT_ALLOWED + "There is no car information for the trip." + NO_INFORMATION +} + """ Predefined optimization alternatives for bicycling routing. For more customization, one can use the triangle factors. @@ -3062,6 +3073,11 @@ enum PlanAccessMode { """ BICYCLE_RENTAL """ + Driving a car from the origin to the destination. + TODO add more thorough description + """ + CAR + """ Getting dropped off by a car to a location that is accessible with a car. Note, this can include walking after the drop-off. """ @@ -3171,6 +3187,11 @@ enum PlanEgressMode { """ BICYCLE_RENTAL """ + Driving a car from the origin to the destination. + TODO add more thorough description + """ + CAR + """ Getting picked up by a car from a location that is accessible with a car. Note, this can include walking before the pickup. """ @@ -3208,6 +3229,11 @@ enum PlanTransferMode { cycling if the mode used for access and egress is also `BICYCLE`. """ BICYCLE + """ + Driving a car from the origin to the destination. + TODO add more thorough description + """ + CAR "Walking between transit vehicles (typically between stops)." WALK } From 3efe676f264f8f9301e8e20506ed5f3cc834213a Mon Sep 17 00:00:00 2001 From: Ville Pihlava Date: Tue, 3 Sep 2024 16:30:42 +0300 Subject: [PATCH 002/213] Add functionality for cars on trips. --- .../api/parameter/QualifiedModeSet.java | 7 +++-- .../apis/gtfs/datafetchers/TripImpl.java | 7 +++++ .../apis/gtfs/mapping/CarsAllowedMapper.java | 17 ++++++++++ .../routerequest/AccessModeMapper.java | 1 + .../routerequest/EgressModeMapper.java | 1 + .../routerequest/ModePreferencesMapper.java | 5 +++ .../routerequest/TransferModeMapper.java | 1 + .../mapping/RequestModesMapper.java | 5 +-- .../module/StreetLinkerModule.java | 31 ++++++++++++++++++- .../gtfs/mapping/CarAccessMapper.java | 22 +++++++++++++ .../gtfs/mapping/TripMapper.java | 1 + ...RouteRequestTransitDataProviderFilter.java | 16 ++++++++++ .../routing/api/request/StreetMode.java | 4 +-- .../transit/model/network/CarAccess.java | 11 +++++++ .../transit/model/timetable/Trip.java | 9 ++++++ .../transit/model/timetable/TripBuilder.java | 12 +++++++ 16 files changed, 141 insertions(+), 9 deletions(-) create mode 100644 src/main/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapper.java create mode 100644 src/main/java/org/opentripplanner/gtfs/mapping/CarAccessMapper.java create mode 100644 src/main/java/org/opentripplanner/transit/model/network/CarAccess.java diff --git a/src/main/java/org/opentripplanner/api/parameter/QualifiedModeSet.java b/src/main/java/org/opentripplanner/api/parameter/QualifiedModeSet.java index c6f1a3d74ec..6e62c4ea78a 100644 --- a/src/main/java/org/opentripplanner/api/parameter/QualifiedModeSet.java +++ b/src/main/java/org/opentripplanner/api/parameter/QualifiedModeSet.java @@ -126,9 +126,10 @@ public RequestModes getRequestModes() { mBuilder.withEgressMode(StreetMode.CAR_HAILING); mBuilder.withDirectMode(StreetMode.WALK); } else { - mBuilder.withAccessMode(StreetMode.WALK); - mBuilder.withTransferMode(StreetMode.WALK); - mBuilder.withEgressMode(StreetMode.WALK); + // Cars can use transit, for example, with car ferries. + mBuilder.withAccessMode(StreetMode.CAR); + mBuilder.withTransferMode(StreetMode.CAR); + mBuilder.withEgressMode(StreetMode.CAR); mBuilder.withDirectMode(StreetMode.CAR); } } 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 21bff637976..0ec7d63b101 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/TripImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/TripImpl.java @@ -20,7 +20,9 @@ import org.opentripplanner.apis.gtfs.generated.GraphQLDataFetchers; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLBikesAllowed; +import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLCarsAllowed; import org.opentripplanner.apis.gtfs.mapping.BikesAllowedMapper; +import org.opentripplanner.apis.gtfs.mapping.CarsAllowedMapper; import org.opentripplanner.apis.gtfs.model.TripOccupancy; import org.opentripplanner.apis.support.SemanticHash; import org.opentripplanner.framework.time.ServiceDateUtils; @@ -172,6 +174,11 @@ public DataFetcher bikesAllowed() { return environment -> BikesAllowedMapper.map(getSource(environment).getBikesAllowed()); } + @Override + public DataFetcher carsAllowed() { + return environment -> CarsAllowedMapper.map(getSource(environment).getCarsAllowed()); + } + @Override public DataFetcher blockId() { return environment -> getSource(environment).getGtfsBlockId(); diff --git a/src/main/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapper.java b/src/main/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapper.java new file mode 100644 index 00000000000..0c479a8664c --- /dev/null +++ b/src/main/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapper.java @@ -0,0 +1,17 @@ +package org.opentripplanner.apis.gtfs.mapping; + +import javax.annotation.Nonnull; +import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLCarsAllowed; +import org.opentripplanner.transit.model.network.CarAccess; + +public class CarsAllowedMapper { + + @Nonnull + public static GraphQLCarsAllowed map(@Nonnull CarAccess carsAllowed) { + return switch (carsAllowed) { + case UNKNOWN -> GraphQLCarsAllowed.NO_INFORMATION; + case ALLOWED -> GraphQLCarsAllowed.ALLOWED; + case NOT_ALLOWED -> GraphQLCarsAllowed.NOT_ALLOWED; + }; + } +} diff --git a/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/AccessModeMapper.java b/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/AccessModeMapper.java index ac4c90a1a56..e0e3ac0bbb2 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/AccessModeMapper.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/AccessModeMapper.java @@ -13,6 +13,7 @@ public static StreetMode map(GraphQLTypes.GraphQLPlanAccessMode mode) { case BICYCLE -> StreetMode.BIKE; case BICYCLE_RENTAL -> StreetMode.BIKE_RENTAL; case BICYCLE_PARKING -> StreetMode.BIKE_TO_PARK; + case CAR -> StreetMode.CAR; case CAR_RENTAL -> StreetMode.CAR_RENTAL; case CAR_PARKING -> StreetMode.CAR_TO_PARK; case CAR_DROP_OFF -> StreetMode.CAR_PICKUP; diff --git a/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/EgressModeMapper.java b/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/EgressModeMapper.java index f03b160ac97..ddcaa255f2a 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/EgressModeMapper.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/EgressModeMapper.java @@ -12,6 +12,7 @@ public static StreetMode map(GraphQLTypes.GraphQLPlanEgressMode mode) { return switch (mode) { case BICYCLE -> StreetMode.BIKE; case BICYCLE_RENTAL -> StreetMode.BIKE_RENTAL; + case CAR -> StreetMode.CAR; case CAR_RENTAL -> StreetMode.CAR_RENTAL; case CAR_PICKUP -> StreetMode.CAR_PICKUP; case FLEX -> StreetMode.FLEXIBLE; diff --git a/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/ModePreferencesMapper.java b/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/ModePreferencesMapper.java index 32d3456df57..663e93acca9 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/ModePreferencesMapper.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/ModePreferencesMapper.java @@ -168,5 +168,10 @@ private static void validateStreetModes(JourneyRequest journey) { "If BICYCLE is used for access, egress or transfer, then it should be used for all." ); } + if (modes.contains(StreetMode.CAR) && modes.size() != 1) { + throw new IllegalArgumentException( + "If CAR is used for access, egress or transfer, then it should be used for all." + ); + } } } diff --git a/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/TransferModeMapper.java b/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/TransferModeMapper.java index ffa7363e3a7..18d2c0e3811 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/TransferModeMapper.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/TransferModeMapper.java @@ -10,6 +10,7 @@ public class TransferModeMapper { public static StreetMode map(GraphQLTypes.GraphQLPlanTransferMode mode) { return switch (mode) { + case CAR -> StreetMode.CAR; case BICYCLE -> StreetMode.BIKE; case WALK -> StreetMode.WALK; }; diff --git a/src/main/java/org/opentripplanner/apis/transmodel/mapping/RequestModesMapper.java b/src/main/java/org/opentripplanner/apis/transmodel/mapping/RequestModesMapper.java index 974b8dd10c3..849d39e35e7 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/mapping/RequestModesMapper.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/mapping/RequestModesMapper.java @@ -10,7 +10,8 @@ class RequestModesMapper { - private static final Predicate IS_BIKE = m -> m == StreetMode.BIKE; + private static final Predicate IS_BIKE_OR_CAR = m -> + m == StreetMode.BIKE || m == StreetMode.CAR; private static final String accessModeKey = "accessMode"; private static final String egressModeKey = "egressMode"; private static final String directModeKey = "directMode"; @@ -27,7 +28,7 @@ static RequestModes mapRequestModes(Map modesInput) { ensureValueAndSet(accessMode, mBuilder::withAccessMode); ensureValueAndSet((StreetMode) modesInput.get(egressModeKey), mBuilder::withEgressMode); ensureValueAndSet((StreetMode) modesInput.get(directModeKey), mBuilder::withDirectMode); - Optional.ofNullable(accessMode).filter(IS_BIKE).ifPresent(mBuilder::withTransferMode); + Optional.ofNullable(accessMode).filter(IS_BIKE_OR_CAR).ifPresent(mBuilder::withTransferMode); return mBuilder.build(); } diff --git a/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java b/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java index 48e6e484a0c..fbb65a5a850 100644 --- a/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java +++ b/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java @@ -25,6 +25,7 @@ import org.opentripplanner.street.model.vertex.VehicleParkingEntranceVertex; import org.opentripplanner.street.search.TraverseMode; import org.opentripplanner.street.search.TraverseModeSet; +import org.opentripplanner.transit.model.network.CarAccess; import org.opentripplanner.transit.model.site.GroupStop; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.StopLocation; @@ -102,6 +103,31 @@ public void linkTransitStops(Graph graph, TransitModel transitModel) { ); } + // The stops that are used by transit capable of transporting cars need to be connected to the road network (e.g. car ferries). + Set stopLocationsUsedForCarsAllowedTrips = Set.of(); + stopLocationsUsedForCarsAllowedTrips = + transitModel + .getAllTripPatterns() + .stream() + .filter(t -> + t + .getScheduledTimetable() + .getTripTimes() + .stream() + .anyMatch(tt -> tt.getTrip().getCarsAllowed() == CarAccess.ALLOWED) + ) + .flatMap(t -> t.getStops().stream()) + .collect(Collectors.toSet()); + + stopLocationsUsedForCarsAllowedTrips.addAll( + stopLocationsUsedForCarsAllowedTrips + .stream() + .filter(GroupStop.class::isInstance) + .map(GroupStop.class::cast) + .flatMap(g -> g.getChildLocations().stream().filter(RegularStop.class::isInstance)) + .toList() + ); + for (TransitStopVertex tStop : vertices) { // Stops with pathways do not need to be connected to the street network, since there are explicit entrances defined for that if (tStop.hasPathways()) { @@ -116,7 +142,10 @@ public void linkTransitStops(Graph graph, TransitModel transitModel) { StopLinkType linkType = StopLinkType.WALK_ONLY; if ( - OTPFeature.FlexRouting.isOn() && stopLocationsUsedForFlexTrips.contains(tStop.getStop()) + ( + OTPFeature.FlexRouting.isOn() && stopLocationsUsedForFlexTrips.contains(tStop.getStop()) + ) || + stopLocationsUsedForCarsAllowedTrips.contains(tStop.getStop()) ) { linkType = StopLinkType.WALK_AND_CAR; } diff --git a/src/main/java/org/opentripplanner/gtfs/mapping/CarAccessMapper.java b/src/main/java/org/opentripplanner/gtfs/mapping/CarAccessMapper.java new file mode 100644 index 00000000000..d328d1aa06e --- /dev/null +++ b/src/main/java/org/opentripplanner/gtfs/mapping/CarAccessMapper.java @@ -0,0 +1,22 @@ +package org.opentripplanner.gtfs.mapping; + +import org.onebusaway.gtfs.model.Trip; +import org.opentripplanner.transit.model.network.CarAccess; + +/** + * Model car access for GTFS trips. + */ +class CarAccessMapper { + + public static CarAccess mapForTrip(Trip rhs) { + int carsAllowed = rhs.getCarsAllowed(); + switch (carsAllowed) { + case 1: + return CarAccess.ALLOWED; + case 2: + return CarAccess.NOT_ALLOWED; + default: + return CarAccess.UNKNOWN; + } + } +} diff --git a/src/main/java/org/opentripplanner/gtfs/mapping/TripMapper.java b/src/main/java/org/opentripplanner/gtfs/mapping/TripMapper.java index 3a62ba2b269..9f2663dd9b3 100644 --- a/src/main/java/org/opentripplanner/gtfs/mapping/TripMapper.java +++ b/src/main/java/org/opentripplanner/gtfs/mapping/TripMapper.java @@ -71,6 +71,7 @@ private Trip doMap(org.onebusaway.gtfs.model.Trip rhs) { lhs.withShapeId(AgencyAndIdMapper.mapAgencyAndId(rhs.getShapeId())); lhs.withWheelchairBoarding(WheelchairAccessibilityMapper.map(rhs.getWheelchairAccessible())); lhs.withBikesAllowed(BikeAccessMapper.mapForTrip(rhs)); + lhs.withCarsAllowed(CarAccessMapper.mapForTrip(rhs)); var trip = lhs.build(); mapSafeTimePenalty(rhs).ifPresent(f -> flexSafeTimePenalties.put(trip, f)); diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilter.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilter.java index 44d9f3cdb3d..2fa4a9dff15 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilter.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilter.java @@ -12,6 +12,7 @@ import org.opentripplanner.transit.model.basic.Accessibility; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.BikeAccess; +import org.opentripplanner.transit.model.network.CarAccess; import org.opentripplanner.transit.model.network.RoutingTripPattern; import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.model.timetable.TripTimes; @@ -20,6 +21,8 @@ public class RouteRequestTransitDataProviderFilter implements TransitDataProvide private final boolean requireBikesAllowed; + private final boolean requireCarsAllowed; + private final boolean wheelchairEnabled; private final WheelchairPreferences wheelchairPreferences; @@ -41,6 +44,7 @@ public class RouteRequestTransitDataProviderFilter implements TransitDataProvide public RouteRequestTransitDataProviderFilter(RouteRequest request) { this( request.journey().transfer().mode() == StreetMode.BIKE, + request.journey().transfer().mode() == StreetMode.CAR, request.wheelchair(), request.preferences().wheelchair(), request.preferences().transit().includePlannedCancellations(), @@ -53,6 +57,7 @@ public RouteRequestTransitDataProviderFilter(RouteRequest request) { // This constructor is used only for testing public RouteRequestTransitDataProviderFilter( boolean requireBikesAllowed, + boolean requireCarsAllowed, boolean wheelchairEnabled, WheelchairPreferences wheelchairPreferences, boolean includePlannedCancellations, @@ -61,6 +66,7 @@ public RouteRequestTransitDataProviderFilter( List filters ) { this.requireBikesAllowed = requireBikesAllowed; + this.requireCarsAllowed = requireCarsAllowed; this.wheelchairEnabled = wheelchairEnabled; this.wheelchairPreferences = wheelchairPreferences; this.includePlannedCancellations = includePlannedCancellations; @@ -83,6 +89,10 @@ public static BikeAccess bikeAccessForTrip(Trip trip) { return trip.getRoute().getBikesAllowed(); } + public static CarAccess carAccessForTrip(Trip trip) { + return trip.getCarsAllowed(); + } + @Override public boolean tripPatternPredicate(TripPatternForDate tripPatternForDate) { for (TransitFilter filter : filters) { @@ -103,6 +113,12 @@ public boolean tripTimesPredicate(TripTimes tripTimes, boolean withFilters) { } } + if (requireCarsAllowed) { + if (carAccessForTrip(trip) != CarAccess.ALLOWED) { + return false; + } + } + if (wheelchairEnabled) { if ( wheelchairPreferences.trip().onlyConsiderAccessible() && diff --git a/src/main/java/org/opentripplanner/routing/api/request/StreetMode.java b/src/main/java/org/opentripplanner/routing/api/request/StreetMode.java index 56e716d9d62..cbc2764f030 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/StreetMode.java +++ b/src/main/java/org/opentripplanner/routing/api/request/StreetMode.java @@ -36,10 +36,8 @@ public enum StreetMode implements DocumentedEnum { SCOOTER_RENTAL(Feature.ACCESS, Feature.EGRESS, Feature.WALKING, Feature.SCOOTER, Feature.RENTING), /** * Car only - *

- * Direct mode only. */ - CAR(Feature.ACCESS, Feature.DRIVING), + CAR(Feature.ACCESS, Feature.TRANSFER, Feature.EGRESS, Feature.DRIVING), /** * Start in the car, drive to a parking area, and walk the rest of the way. *

diff --git a/src/main/java/org/opentripplanner/transit/model/network/CarAccess.java b/src/main/java/org/opentripplanner/transit/model/network/CarAccess.java new file mode 100644 index 00000000000..0a7a4f91845 --- /dev/null +++ b/src/main/java/org/opentripplanner/transit/model/network/CarAccess.java @@ -0,0 +1,11 @@ +package org.opentripplanner.transit.model.network; + +/** + * GTFS codes: + * 0 = unknown / unspecified, 1 = cars allowed, 2 = cars NOT allowed + */ +public enum CarAccess { + UNKNOWN, + NOT_ALLOWED, + ALLOWED, +} diff --git a/src/main/java/org/opentripplanner/transit/model/timetable/Trip.java b/src/main/java/org/opentripplanner/transit/model/timetable/Trip.java index 5a1e9150e78..ac16ec0173a 100644 --- a/src/main/java/org/opentripplanner/transit/model/timetable/Trip.java +++ b/src/main/java/org/opentripplanner/transit/model/timetable/Trip.java @@ -17,6 +17,7 @@ import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.framework.LogInfo; import org.opentripplanner.transit.model.network.BikeAccess; +import org.opentripplanner.transit.model.network.CarAccess; import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.organization.Operator; @@ -33,6 +34,7 @@ public final class Trip extends AbstractTransitEntity impleme private final Direction direction; private final BikeAccess bikesAllowed; + private final CarAccess carsAllowed; private final Accessibility wheelchairBoarding; private final String gtfsBlockId; @@ -52,6 +54,7 @@ public final class Trip extends AbstractTransitEntity impleme : route.getNetexSubmode(); this.direction = requireNonNullElse(builder.getDirection(), Direction.UNKNOWN); this.bikesAllowed = requireNonNullElse(builder.getBikesAllowed(), route.getBikesAllowed()); + this.carsAllowed = requireNonNullElse(builder.getCarsAllowed(), CarAccess.UNKNOWN); this.wheelchairBoarding = requireNonNullElse(builder.getWheelchairBoarding(), Accessibility.NO_INFORMATION); this.netexAlteration = requireNonNullElse(builder.getNetexAlteration(), TripAlteration.PLANNED); @@ -137,6 +140,11 @@ public BikeAccess getBikesAllowed() { return bikesAllowed; } + @Nonnull + public CarAccess getCarsAllowed() { + return carsAllowed; + } + @Nonnull public Accessibility getWheelchairBoarding() { return wheelchairBoarding; @@ -200,6 +208,7 @@ public boolean sameAs(@Nonnull Trip other) { Objects.equals(this.shapeId, other.shapeId) && Objects.equals(this.direction, other.direction) && Objects.equals(this.bikesAllowed, other.bikesAllowed) && + Objects.equals(this.carsAllowed, other.carsAllowed) && Objects.equals(this.wheelchairBoarding, other.wheelchairBoarding) && Objects.equals(this.netexAlteration, other.netexAlteration) ); diff --git a/src/main/java/org/opentripplanner/transit/model/timetable/TripBuilder.java b/src/main/java/org/opentripplanner/transit/model/timetable/TripBuilder.java index 063dfe10da2..5ed0616831d 100644 --- a/src/main/java/org/opentripplanner/transit/model/timetable/TripBuilder.java +++ b/src/main/java/org/opentripplanner/transit/model/timetable/TripBuilder.java @@ -6,6 +6,7 @@ import org.opentripplanner.transit.model.framework.AbstractEntityBuilder; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.BikeAccess; +import org.opentripplanner.transit.model.network.CarAccess; import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.organization.Operator; @@ -21,6 +22,7 @@ public class TripBuilder extends AbstractEntityBuilder { private FeedScopedId shapeId; private Direction direction; private BikeAccess bikesAllowed; + private CarAccess carsAllowed; private Accessibility wheelchairBoarding; private String gtfsBlockId; private String netexInternalPlanningCode; @@ -44,6 +46,7 @@ public class TripBuilder extends AbstractEntityBuilder { this.shapeId = original.getShapeId(); this.direction = original.getDirection(); this.bikesAllowed = original.getBikesAllowed(); + this.carsAllowed = original.getCarsAllowed(); this.wheelchairBoarding = original.getWheelchairBoarding(); this.netexInternalPlanningCode = original.getNetexInternalPlanningCode(); } @@ -151,11 +154,20 @@ public BikeAccess getBikesAllowed() { return bikesAllowed; } + public CarAccess getCarsAllowed() { + return carsAllowed; + } + public TripBuilder withBikesAllowed(BikeAccess bikesAllowed) { this.bikesAllowed = bikesAllowed; return this; } + public TripBuilder withCarsAllowed(CarAccess carsAllowed) { + this.carsAllowed = carsAllowed; + return this; + } + public Accessibility getWheelchairBoarding() { return wheelchairBoarding; } From a555f3dee169349f18c32fe315b7572ad98925be Mon Sep 17 00:00:00 2001 From: Ville Pihlava Date: Tue, 3 Sep 2024 16:31:14 +0300 Subject: [PATCH 003/213] Add tests for cars on trips. --- .../gtfs/mapping/CarsAllowedMapperTest.java | 21 +++++ .../module/StreetLinkerModuleTest.java | 69 ++++++++++++++ .../gtfs/mapping/CarAccessMapperTest.java | 26 ++++++ .../gtfs/mapping/TripMapperTest.java | 5 ++ ...eRequestTransitDataProviderFilterTest.java | 90 +++++++++++++++++++ .../transit/model/timetable/TripTest.java | 5 ++ 6 files changed, 216 insertions(+) create mode 100644 src/test/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapperTest.java create mode 100644 src/test/java/org/opentripplanner/gtfs/mapping/CarAccessMapperTest.java diff --git a/src/test/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapperTest.java b/src/test/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapperTest.java new file mode 100644 index 00000000000..a2a1b40a5e8 --- /dev/null +++ b/src/test/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapperTest.java @@ -0,0 +1,21 @@ +package org.opentripplanner.apis.gtfs.mapping; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Arrays; +import org.junit.jupiter.api.Test; +import org.opentripplanner.transit.model.network.CarAccess; + +class CarsAllowedMapperTest { + + @Test + void mapping() { + Arrays + .stream(CarAccess.values()) + .filter(ba -> ba != CarAccess.UNKNOWN) + .forEach(d -> { + var mapped = CarsAllowedMapper.map(d); + assertEquals(d.toString(), mapped.toString()); + }); + } +} diff --git a/src/test/java/org/opentripplanner/graph_builder/module/StreetLinkerModuleTest.java b/src/test/java/org/opentripplanner/graph_builder/module/StreetLinkerModuleTest.java index 06b10575ef9..e5f77f57659 100644 --- a/src/test/java/org/opentripplanner/graph_builder/module/StreetLinkerModuleTest.java +++ b/src/test/java/org/opentripplanner/graph_builder/module/StreetLinkerModuleTest.java @@ -9,12 +9,14 @@ import static org.opentripplanner.street.model.StreetTraversalPermission.PEDESTRIAN; import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.Test; import org.opentripplanner.ext.flex.trip.UnscheduledTrip; import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; +import org.opentripplanner.model.StopTime; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.street.model._data.StreetModelForTest; import org.opentripplanner.street.model.edge.Edge; @@ -23,7 +25,15 @@ import org.opentripplanner.street.model.vertex.TransitStopVertex; import org.opentripplanner.transit.model._data.TransitModelForTest; import org.opentripplanner.transit.model.framework.Deduplicator; +import org.opentripplanner.transit.model.network.CarAccess; +import org.opentripplanner.transit.model.network.Route; +import org.opentripplanner.transit.model.network.StopPattern; +import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.site.RegularStop; +import org.opentripplanner.transit.model.site.StopLocation; +import org.opentripplanner.transit.model.timetable.RealTimeTripTimes; +import org.opentripplanner.transit.model.timetable.Trip; +import org.opentripplanner.transit.model.timetable.TripTimesFactory; import org.opentripplanner.transit.service.StopModel; import org.opentripplanner.transit.service.TransitModel; @@ -92,6 +102,37 @@ void linkFlexStop() { }); } + @Test + void linkCarsAllowedStop() { + var model = new TestModel(); + var carsAllowedTrip = TransitModelForTest + .of() + .trip("carsAllowedTrip") + .withCarsAllowed(CarAccess.ALLOWED) + .build(); + model.withCarsAllowedTrip(carsAllowedTrip, model.stop()); + + var module = model.streetLinkerModule(); + + module.buildGraph(); + + assertTrue(model.stopVertex().isConnectedToGraph()); + + // Because the stop is used by a carsAllowed trip it needs to be linked to both the walk and car edge + assertEquals(2, model.stopVertex().getOutgoing().size()); + var linkToWalk = model.outgoingLinks().getFirst(); + SplitterVertex walkSplit = (SplitterVertex) linkToWalk.getToVertex(); + + assertTrue(walkSplit.isConnectedToWalkingEdge()); + assertFalse(walkSplit.isConnectedToDriveableEdge()); + + var linkToCar = model.outgoingLinks().getLast(); + SplitterVertex carSplit = (SplitterVertex) linkToCar.getToVertex(); + + assertFalse(carSplit.isConnectedToWalkingEdge()); + assertTrue(carSplit.isConnectedToDriveableEdge()); + } + private static class TestModel { private final TransitStopVertex stopVertex; @@ -155,5 +196,33 @@ public RegularStop stop() { public void withFlexTrip(UnscheduledTrip flexTrip) { transitModel.addFlexTrip(flexTrip.getId(), flexTrip); } + + public void withCarsAllowedTrip(Trip trip, StopLocation... stops) { + Route route = TransitModelForTest.route("carsAllowedRoute").build(); + var stopTimes = Arrays + .stream(stops) + .map(s -> { + var stopTime = new StopTime(); + stopTime.setStop(s); + stopTime.setArrivalTime(30); + stopTime.setDepartureTime(60); + stopTime.setTrip(trip); + return stopTime; + }) + .toList(); + StopPattern stopPattern = new StopPattern(stopTimes); + TripPattern tripPattern = TransitModelForTest + .tripPattern("carsAllowedTripPattern", route) + .withStopPattern(stopPattern) + .build(); + RealTimeTripTimes tripTimes = TripTimesFactory.tripTimes( + trip, + stopTimes, + transitModel.getDeduplicator() + ); + + tripPattern.add(tripTimes); + transitModel.addTripPattern(tripPattern.getId(), tripPattern); + } } } diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/CarAccessMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/CarAccessMapperTest.java new file mode 100644 index 00000000000..a312d9967d6 --- /dev/null +++ b/src/test/java/org/opentripplanner/gtfs/mapping/CarAccessMapperTest.java @@ -0,0 +1,26 @@ +package org.opentripplanner.gtfs.mapping; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; +import org.onebusaway.gtfs.model.Route; +import org.onebusaway.gtfs.model.Trip; +import org.opentripplanner.transit.model.network.CarAccess; + +public class CarAccessMapperTest { + + private static final int CARS_ALLOWED = 1; + private static final int CARS_NOT_ALLOWED = 2; + + @Test + public void testTripProvidedValues() { + Trip trip = new Trip(); + assertEquals(CarAccess.UNKNOWN, CarAccessMapper.mapForTrip(trip)); + + trip.setCarsAllowed(CARS_ALLOWED); + assertEquals(CarAccess.ALLOWED, CarAccessMapper.mapForTrip(trip)); + + trip.setCarsAllowed(CARS_NOT_ALLOWED); + assertEquals(CarAccess.NOT_ALLOWED, CarAccessMapper.mapForTrip(trip)); + } +} diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/TripMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/TripMapperTest.java index 964c3d8155e..98f5519926c 100644 --- a/src/test/java/org/opentripplanner/gtfs/mapping/TripMapperTest.java +++ b/src/test/java/org/opentripplanner/gtfs/mapping/TripMapperTest.java @@ -14,6 +14,7 @@ import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.transit.model.basic.Accessibility; import org.opentripplanner.transit.model.network.BikeAccess; +import org.opentripplanner.transit.model.network.CarAccess; import org.opentripplanner.transit.model.timetable.Direction; public class TripMapperTest { @@ -21,6 +22,7 @@ public class TripMapperTest { private static final String FEED_ID = "FEED"; private static final AgencyAndId AGENCY_AND_ID = new AgencyAndId("A", "1"); private static final int BIKES_ALLOWED = 1; + private static final int CARS_ALLOWED = 1; private static final String BLOCK_ID = "Block Id"; private static final int DIRECTION_ID = 1; private static final String TRIP_HEADSIGN = "Trip Headsign"; @@ -47,6 +49,7 @@ private static TripMapper defaultTripMapper() { TRIP.setId(AGENCY_AND_ID); TRIP.setBikesAllowed(BIKES_ALLOWED); + TRIP.setCarsAllowed(CARS_ALLOWED); TRIP.setBlockId(BLOCK_ID); TRIP.setDirectionId(Integer.toString(DIRECTION_ID)); TRIP.setRoute(data.route); @@ -78,6 +81,7 @@ void testMap() throws Exception { assertEquals(TRIP_SHORT_NAME, result.getShortName()); assertEquals(Accessibility.POSSIBLE, result.getWheelchairBoarding()); assertEquals(BikeAccess.ALLOWED, result.getBikesAllowed()); + assertEquals(CarAccess.ALLOWED, result.getCarsAllowed()); } @Test @@ -99,6 +103,7 @@ void testMapWithNulls() throws Exception { assertEquals(Direction.UNKNOWN, result.getDirection()); assertEquals(Accessibility.NO_INFORMATION, result.getWheelchairBoarding()); assertEquals(BikeAccess.UNKNOWN, result.getBikesAllowed()); + assertEquals(CarAccess.UNKNOWN, result.getCarsAllowed()); } /** Mapping the same object twice, should return the same instance. */ diff --git a/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilterTest.java b/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilterTest.java index be6266ccdbe..c5dea627d5a 100644 --- a/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilterTest.java +++ b/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilterTest.java @@ -34,6 +34,7 @@ import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.BikeAccess; +import org.opentripplanner.transit.model.network.CarAccess; import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.network.RouteBuilder; import org.opentripplanner.transit.model.network.RoutingTripPattern; @@ -107,6 +108,7 @@ void testWheelchairAccess(Accessibility wheelchair, WheelchairPreferences access .getRoutingTripPattern(); var filter = new RouteRequestTransitDataProviderFilter( + false, false, true, accessibility, @@ -157,6 +159,7 @@ void testRealtimeCancelledStops(boolean includeRealtimeCancellations) { .getRoutingTripPattern(); var filter = new RouteRequestTransitDataProviderFilter( + false, false, false, DEFAULT_ACCESSIBILITY, @@ -202,6 +205,7 @@ void notFilteringExpectedTripPatternForDateTest() { TripPatternForDate tripPatternForDate = createTestTripPatternForDate(); var filter = new RouteRequestTransitDataProviderFilter( + false, false, false, DEFAULT_ACCESSIBILITY, @@ -221,6 +225,7 @@ void bannedRouteFilteringTest() { TripPatternForDate tripPatternForDate = createTestTripPatternForDate(); var filter = new RouteRequestTransitDataProviderFilter( + false, false, false, DEFAULT_ACCESSIBILITY, @@ -246,6 +251,7 @@ void bannedTripFilteringTest() { TRIP_ID, ROUTE, BikeAccess.NOT_ALLOWED, + CarAccess.NOT_ALLOWED, TransitMode.BUS, null, Accessibility.NOT_POSSIBLE, @@ -253,6 +259,7 @@ void bannedTripFilteringTest() { ); var filter = new RouteRequestTransitDataProviderFilter( + false, false, false, DEFAULT_ACCESSIBILITY, @@ -281,6 +288,7 @@ void matchModeFilterAndBannedAgencyFilter() { ); var filter = new RouteRequestTransitDataProviderFilter( + false, false, false, DEFAULT_ACCESSIBILITY, @@ -316,6 +324,7 @@ void matchCombinedModesAndBannedAgencyFilter() { ); var filter = new RouteRequestTransitDataProviderFilter( + false, false, false, DEFAULT_ACCESSIBILITY, @@ -347,6 +356,7 @@ void matchSelectedAgencyExcludedSubMode() { ); var filter = new RouteRequestTransitDataProviderFilter( + false, false, false, DEFAULT_ACCESSIBILITY, @@ -386,6 +396,7 @@ void transitModeFilteringTest() { TRIP_ID, ROUTE, BikeAccess.NOT_ALLOWED, + CarAccess.NOT_ALLOWED, TransitMode.BUS, TransmodelTransportSubmode.LOCAL_BUS.getValue(), Accessibility.NOT_POSSIBLE, @@ -412,6 +423,7 @@ void notFilteringExpectedTripTimesTest() { TRIP_ID, ROUTE, BikeAccess.NOT_ALLOWED, + CarAccess.NOT_ALLOWED, TransitMode.BUS, null, Accessibility.NOT_POSSIBLE, @@ -419,6 +431,7 @@ void notFilteringExpectedTripTimesTest() { ); var filter = new RouteRequestTransitDataProviderFilter( + false, false, false, DEFAULT_ACCESSIBILITY, @@ -439,6 +452,36 @@ void bikesAllowedFilteringTest() { TRIP_ID, ROUTE, BikeAccess.NOT_ALLOWED, + CarAccess.NOT_ALLOWED, + TransitMode.BUS, + null, + Accessibility.NOT_POSSIBLE, + null + ); + + var filter = new RouteRequestTransitDataProviderFilter( + true, + false, + true, + WheelchairPreferences.DEFAULT, + false, + false, + Set.of(), + List.of(AllowAllTransitFilter.of()) + ); + + boolean valid = filter.tripTimesPredicate(tripTimes, true); + + assertFalse(valid); + } + + @Test + void carsAllowedFilteringTest() { + TripTimes tripTimes = createTestTripTimes( + TRIP_ID, + ROUTE, + BikeAccess.NOT_ALLOWED, + CarAccess.NOT_ALLOWED, TransitMode.BUS, null, Accessibility.NOT_POSSIBLE, @@ -446,6 +489,7 @@ void bikesAllowedFilteringTest() { ); var filter = new RouteRequestTransitDataProviderFilter( + false, true, true, WheelchairPreferences.DEFAULT, @@ -466,6 +510,7 @@ void removeInaccessibleTrip() { TRIP_ID, ROUTE, BikeAccess.NOT_ALLOWED, + CarAccess.NOT_ALLOWED, TransitMode.BUS, null, Accessibility.NOT_POSSIBLE, @@ -473,6 +518,7 @@ void removeInaccessibleTrip() { ); var filter = new RouteRequestTransitDataProviderFilter( + false, false, true, WheelchairPreferences.DEFAULT, @@ -493,6 +539,7 @@ void keepAccessibleTrip() { TRIP_ID, ROUTE, BikeAccess.NOT_ALLOWED, + CarAccess.NOT_ALLOWED, TransitMode.BUS, null, Accessibility.POSSIBLE, @@ -500,6 +547,7 @@ void keepAccessibleTrip() { ); var filter = new RouteRequestTransitDataProviderFilter( + false, false, true, WheelchairPreferences.DEFAULT, @@ -520,6 +568,7 @@ void keepRealTimeAccessibleTrip() { TRIP_ID, ROUTE, BikeAccess.NOT_ALLOWED, + CarAccess.NOT_ALLOWED, TransitMode.BUS, null, Accessibility.NOT_POSSIBLE, @@ -527,6 +576,7 @@ void keepRealTimeAccessibleTrip() { ); var filter = new RouteRequestTransitDataProviderFilter( + false, false, true, WheelchairPreferences.DEFAULT, @@ -549,6 +599,7 @@ void includePlannedCancellationsTest() { TRIP_ID, ROUTE, BikeAccess.NOT_ALLOWED, + CarAccess.NOT_ALLOWED, TransitMode.BUS, null, Accessibility.NOT_POSSIBLE, @@ -558,6 +609,7 @@ void includePlannedCancellationsTest() { TRIP_ID, ROUTE, BikeAccess.NOT_ALLOWED, + CarAccess.NOT_ALLOWED, TransitMode.BUS, null, Accessibility.NOT_POSSIBLE, @@ -566,6 +618,7 @@ void includePlannedCancellationsTest() { // Given var filter1 = new RouteRequestTransitDataProviderFilter( + false, false, false, WheelchairPreferences.DEFAULT, @@ -587,6 +640,7 @@ void includePlannedCancellationsTest() { // Given var filter2 = new RouteRequestTransitDataProviderFilter( + false, false, false, DEFAULT_ACCESSIBILITY, @@ -613,6 +667,7 @@ void includeRealtimeCancellationsTest() { TRIP_ID, ROUTE, BikeAccess.NOT_ALLOWED, + CarAccess.NOT_ALLOWED, TransitMode.BUS, null, Accessibility.NOT_POSSIBLE, @@ -623,6 +678,7 @@ void includeRealtimeCancellationsTest() { TRIP_ID, ROUTE, BikeAccess.NOT_ALLOWED, + CarAccess.NOT_ALLOWED, TransitMode.BUS, null, Accessibility.NOT_POSSIBLE, @@ -632,6 +688,7 @@ void includeRealtimeCancellationsTest() { // Given var filter1 = new RouteRequestTransitDataProviderFilter( + false, false, false, WheelchairPreferences.DEFAULT, @@ -653,6 +710,7 @@ void includeRealtimeCancellationsTest() { // Given var filter2 = new RouteRequestTransitDataProviderFilter( + false, false, false, DEFAULT_ACCESSIBILITY, @@ -709,12 +767,34 @@ void testBikesAllowed() { ); } + @Test + void testCarsAllowed() { + RouteBuilder routeBuilder = TransitModelForTest.route("1"); + TripBuilder trip = Trip.of(TransitModelForTest.id("T1")).withRoute(routeBuilder.build()); + + assertEquals( + CarAccess.UNKNOWN, + RouteRequestTransitDataProviderFilter.carAccessForTrip(trip.build()) + ); + trip.withCarsAllowed(CarAccess.ALLOWED); + assertEquals( + CarAccess.ALLOWED, + RouteRequestTransitDataProviderFilter.carAccessForTrip(trip.build()) + ); + trip.withCarsAllowed(CarAccess.NOT_ALLOWED); + assertEquals( + CarAccess.NOT_ALLOWED, + RouteRequestTransitDataProviderFilter.carAccessForTrip(trip.build()) + ); + } + @Test void multipleFilteringTest() { TripTimes matchingTripTimes = createTestTripTimes( TRIP_ID, ROUTE, BikeAccess.ALLOWED, + CarAccess.NOT_ALLOWED, TransitMode.BUS, null, Accessibility.POSSIBLE, @@ -724,6 +804,7 @@ void multipleFilteringTest() { TRIP_ID, ROUTE, BikeAccess.ALLOWED, + CarAccess.NOT_ALLOWED, TransitMode.RAIL, null, Accessibility.POSSIBLE, @@ -733,6 +814,7 @@ void multipleFilteringTest() { TRIP_ID, ROUTE, BikeAccess.NOT_ALLOWED, + CarAccess.NOT_ALLOWED, TransitMode.RAIL, null, Accessibility.POSSIBLE, @@ -742,6 +824,7 @@ void multipleFilteringTest() { TRIP_ID, ROUTE, BikeAccess.NOT_ALLOWED, + CarAccess.NOT_ALLOWED, TransitMode.RAIL, null, Accessibility.NOT_POSSIBLE, @@ -751,6 +834,7 @@ void multipleFilteringTest() { TRIP_ID, ROUTE, BikeAccess.ALLOWED, + CarAccess.NOT_ALLOWED, TransitMode.BUS, null, Accessibility.NOT_POSSIBLE, @@ -760,6 +844,7 @@ void multipleFilteringTest() { TRIP_ID, ROUTE, BikeAccess.ALLOWED, + CarAccess.NOT_ALLOWED, TransitMode.BUS, null, Accessibility.POSSIBLE, @@ -768,6 +853,7 @@ void multipleFilteringTest() { var filter = new RouteRequestTransitDataProviderFilter( true, + false, true, DEFAULT_ACCESSIBILITY, false, @@ -790,6 +876,7 @@ private boolean validateModesOnTripTimes( TripTimes tripTimes ) { var filter = new RouteRequestTransitDataProviderFilter( + false, false, false, DEFAULT_ACCESSIBILITY, @@ -867,6 +954,7 @@ private RealTimeTripTimes createTestTripTimes( FeedScopedId tripId, Route route, BikeAccess bikeAccess, + CarAccess carAccess, TransitMode mode, String submode, Accessibility wheelchairBoarding, @@ -878,6 +966,7 @@ private RealTimeTripTimes createTestTripTimes( .withMode(mode) .withNetexSubmode(submode) .withBikesAllowed(bikeAccess) + .withCarsAllowed(carAccess) .withWheelchairBoarding(wheelchairBoarding) .withNetexAlteration(tripAlteration) .build(); @@ -896,6 +985,7 @@ private TripTimes createTestTripTimesWithSubmode(String submode) { TRIP_ID, ROUTE, BikeAccess.NOT_ALLOWED, + CarAccess.NOT_ALLOWED, TransitMode.BUS, submode, Accessibility.NOT_POSSIBLE, diff --git a/src/test/java/org/opentripplanner/transit/model/timetable/TripTest.java b/src/test/java/org/opentripplanner/transit/model/timetable/TripTest.java index 3a3f35643fa..eeaa979257d 100644 --- a/src/test/java/org/opentripplanner/transit/model/timetable/TripTest.java +++ b/src/test/java/org/opentripplanner/transit/model/timetable/TripTest.java @@ -12,6 +12,7 @@ import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.BikeAccess; +import org.opentripplanner.transit.model.network.CarAccess; import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.organization.Operator; @@ -24,6 +25,7 @@ class TripTest { private static final Direction DIRECTION = Direction.INBOUND; public static final NonLocalizedString HEAD_SIGN = new NonLocalizedString("head sign"); private static final BikeAccess BIKE_ACCESS = BikeAccess.ALLOWED; + private static final CarAccess CAR_ACCESS = CarAccess.ALLOWED; private static final TransitMode TRANSIT_MODE = TransitMode.BUS; private static final String BLOCK_ID = "blockId"; private static final TripAlteration TRIP_ALTERATION = TripAlteration.CANCELLATION; @@ -43,6 +45,7 @@ class TripTest { .withDirection(DIRECTION) .withHeadsign(HEAD_SIGN) .withBikesAllowed(BIKE_ACCESS) + .withCarsAllowed(CAR_ACCESS) .withMode(TRANSIT_MODE) .withGtfsBlockId(BLOCK_ID) .withNetexAlteration(TRIP_ALTERATION) @@ -84,6 +87,7 @@ void copy() { assertEquals(DIRECTION, copy.getDirection()); assertEquals(HEAD_SIGN, copy.getHeadsign()); assertEquals(BIKE_ACCESS, copy.getBikesAllowed()); + assertEquals(CAR_ACCESS, copy.getCarsAllowed()); assertEquals(TRANSIT_MODE, copy.getMode()); assertEquals(BLOCK_ID, copy.getGtfsBlockId()); assertEquals(TRIP_ALTERATION, copy.getNetexAlteration()); @@ -110,6 +114,7 @@ void sameAs() { assertFalse(subject.sameAs(subject.copy().withDirection(Direction.OUTBOUND).build())); assertFalse(subject.sameAs(subject.copy().withHeadsign(new NonLocalizedString("X")).build())); assertFalse(subject.sameAs(subject.copy().withBikesAllowed(BikeAccess.NOT_ALLOWED).build())); + assertFalse(subject.sameAs(subject.copy().withCarsAllowed(CarAccess.NOT_ALLOWED).build())); assertFalse(subject.sameAs(subject.copy().withMode(TransitMode.RAIL).build())); assertFalse(subject.sameAs(subject.copy().withGtfsBlockId("X").build())); assertFalse( From 5afc63c34cc4b4a577468f7791085f0d8b879bcb Mon Sep 17 00:00:00 2001 From: Ville Pihlava Date: Thu, 5 Sep 2024 12:36:03 +0300 Subject: [PATCH 004/213] Remove changes to QualifiedModeSet. --- .../opentripplanner/api/parameter/QualifiedModeSet.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/opentripplanner/api/parameter/QualifiedModeSet.java b/src/main/java/org/opentripplanner/api/parameter/QualifiedModeSet.java index 6e62c4ea78a..c6f1a3d74ec 100644 --- a/src/main/java/org/opentripplanner/api/parameter/QualifiedModeSet.java +++ b/src/main/java/org/opentripplanner/api/parameter/QualifiedModeSet.java @@ -126,10 +126,9 @@ public RequestModes getRequestModes() { mBuilder.withEgressMode(StreetMode.CAR_HAILING); mBuilder.withDirectMode(StreetMode.WALK); } else { - // Cars can use transit, for example, with car ferries. - mBuilder.withAccessMode(StreetMode.CAR); - mBuilder.withTransferMode(StreetMode.CAR); - mBuilder.withEgressMode(StreetMode.CAR); + mBuilder.withAccessMode(StreetMode.WALK); + mBuilder.withTransferMode(StreetMode.WALK); + mBuilder.withEgressMode(StreetMode.WALK); mBuilder.withDirectMode(StreetMode.CAR); } } From c644034c08cda3eaf5fb5b8c59dd293524ae3cfe Mon Sep 17 00:00:00 2001 From: Ville Pihlava Date: Tue, 10 Sep 2024 09:20:08 +0300 Subject: [PATCH 005/213] Fix format. --- .../gtfs/generated/GraphQLDataFetchers.java | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java index a33a5d31f10..0a0d231299c 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java @@ -12,30 +12,17 @@ import org.locationtech.jts.geom.Geometry; import org.opentripplanner.api.resource.DebugOutput; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLAbsoluteDirection; -import org.opentripplanner.transit.model.organization.Agency; -import org.opentripplanner.routing.alertpatch.TransitAlert; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLAlertCauseType; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLAlertEffectType; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLAlertSeverityLevelType; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; -import org.opentripplanner.service.vehiclerental.model.VehicleRentalStationUris; -import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; -import org.opentripplanner.service.vehiclerental.model.RentalVehicleEntityCounts; -import org.opentripplanner.service.vehiclerental.model.RentalVehicleTypeCount; -import org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLBikesAllowed; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLCarsAllowed; -import org.opentripplanner.transit.model.timetable.booking.BookingInfo; -import org.opentripplanner.transit.model.timetable.booking.BookingTime; -import org.opentripplanner.routing.graphfinder.PatternAtStop; -import org.opentripplanner.model.plan.Emissions; -import org.opentripplanner.apis.gtfs.model.FeedPublisher; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLInputField; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLOccupancyStatus; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLRelativeDirection; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLRoutingErrorCode; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLTransitMode; +import org.opentripplanner.apis.gtfs.model.FeedPublisher; import org.opentripplanner.apis.gtfs.model.PlanPageInfo; import org.opentripplanner.apis.gtfs.model.RideHailingProvider; import org.opentripplanner.apis.gtfs.model.StopPosition; @@ -50,24 +37,37 @@ import org.opentripplanner.model.fare.FareProduct; import org.opentripplanner.model.fare.FareProductUse; import org.opentripplanner.model.fare.RiderCategory; +import org.opentripplanner.model.plan.Emissions; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.Leg; import org.opentripplanner.model.plan.LegTime; import org.opentripplanner.model.plan.StopArrival; import org.opentripplanner.model.plan.WalkStep; +import org.opentripplanner.routing.alertpatch.TransitAlert; import org.opentripplanner.routing.api.response.RoutingError; import org.opentripplanner.routing.graphfinder.NearbyStop; -import org.opentripplanner.transit.model.timetable.Trip; +import org.opentripplanner.routing.graphfinder.PatternAtStop; import org.opentripplanner.routing.graphfinder.PlaceAtDistance; +import org.opentripplanner.routing.vehicle_parking.VehicleParking; import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; import org.opentripplanner.routing.vehicle_parking.VehicleParkingState; import org.opentripplanner.service.realtimevehicles.model.RealtimeVehicle; import org.opentripplanner.service.realtimevehicles.model.RealtimeVehicle.StopRelationship; +import org.opentripplanner.service.vehiclerental.model.RentalVehicleEntityCounts; import org.opentripplanner.service.vehiclerental.model.RentalVehicleType; +import org.opentripplanner.service.vehiclerental.model.RentalVehicleTypeCount; +import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; +import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; +import org.opentripplanner.service.vehiclerental.model.VehicleRentalStationUris; import org.opentripplanner.service.vehiclerental.model.VehicleRentalSystem; +import org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle; import org.opentripplanner.transit.model.basic.Money; import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.network.TripPattern; +import org.opentripplanner.transit.model.organization.Agency; +import org.opentripplanner.transit.model.timetable.Trip; +import org.opentripplanner.transit.model.timetable.booking.BookingInfo; +import org.opentripplanner.transit.model.timetable.booking.BookingTime; public class GraphQLDataFetchers { From 54752ba734c0f9589f8d7fb450145b3298834809 Mon Sep 17 00:00:00 2001 From: Ville Pihlava Date: Tue, 10 Sep 2024 14:02:59 +0300 Subject: [PATCH 006/213] Fix format. --- .../resources/org/opentripplanner/apis/gtfs/schema.graphqls | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index dee8d0b7a60..0162c2090f2 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -2267,9 +2267,9 @@ type Trip implements Node { ): Stoptime "Whether bikes are allowed on board the vehicle running this trip" bikesAllowed: BikesAllowed + blockId: String "Whether cars are allowed on board the vehicle running this trip" carsAllowed: CarsAllowed - blockId: String "Departure time from the first stop" departureStoptime( """ From fe067208d65816fca706f5c0491b95f687ef64a9 Mon Sep 17 00:00:00 2001 From: Ville Pihlava Date: Tue, 17 Sep 2024 14:08:20 +0300 Subject: [PATCH 007/213] Add changes based on review comments. --- .../apis/gtfs/datafetchers/TripImpl.java | 7 --- .../gtfs/generated/GraphQLDataFetchers.java | 3 - .../apis/gtfs/mapping/BikesAllowedMapper.java | 4 +- .../apis/gtfs/mapping/CarsAllowedMapper.java | 4 +- .../mapping/RequestModesMapper.java | 3 + .../module/StreetLinkerModule.java | 42 +------------- .../gtfs/mapping/CarAccessMapper.java | 13 ++--- ...RouteRequestTransitDataProviderFilter.java | 6 +- .../transit/model/network/BikeAccess.java | 3 + .../transit/model/network/CarAccess.java | 3 + .../transit/service/TransitModel.java | 51 +++++++++++++++++ .../opentripplanner/apis/gtfs/schema.graphqls | 15 +++-- .../gtfs/mapping/BikesAllowedMapperTest.java | 15 ++--- .../gtfs/mapping/CarsAllowedMapperTest.java | 15 ++--- .../module/StreetLinkerModuleTest.java | 10 ++-- ...eRequestTransitDataProviderFilterTest.java | 57 ++++++++++++++----- 16 files changed, 138 insertions(+), 113 deletions(-) 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 0ec7d63b101..21bff637976 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/TripImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/TripImpl.java @@ -20,9 +20,7 @@ import org.opentripplanner.apis.gtfs.generated.GraphQLDataFetchers; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLBikesAllowed; -import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLCarsAllowed; import org.opentripplanner.apis.gtfs.mapping.BikesAllowedMapper; -import org.opentripplanner.apis.gtfs.mapping.CarsAllowedMapper; import org.opentripplanner.apis.gtfs.model.TripOccupancy; import org.opentripplanner.apis.support.SemanticHash; import org.opentripplanner.framework.time.ServiceDateUtils; @@ -174,11 +172,6 @@ public DataFetcher bikesAllowed() { return environment -> BikesAllowedMapper.map(getSource(environment).getBikesAllowed()); } - @Override - public DataFetcher carsAllowed() { - return environment -> CarsAllowedMapper.map(getSource(environment).getCarsAllowed()); - } - @Override public DataFetcher blockId() { return environment -> getSource(environment).getGtfsBlockId(); diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java index 0a0d231299c..67944543580 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java @@ -16,7 +16,6 @@ import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLAlertEffectType; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLAlertSeverityLevelType; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLBikesAllowed; -import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLCarsAllowed; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLInputField; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLOccupancyStatus; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLRelativeDirection; @@ -1149,8 +1148,6 @@ public interface GraphQLTrip { public DataFetcher blockId(); - public DataFetcher carsAllowed(); - public DataFetcher departureStoptime(); public DataFetcher directionId(); diff --git a/src/main/java/org/opentripplanner/apis/gtfs/mapping/BikesAllowedMapper.java b/src/main/java/org/opentripplanner/apis/gtfs/mapping/BikesAllowedMapper.java index cd04601d599..79f55f1e50a 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/mapping/BikesAllowedMapper.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/mapping/BikesAllowedMapper.java @@ -1,13 +1,11 @@ package org.opentripplanner.apis.gtfs.mapping; -import javax.annotation.Nonnull; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLBikesAllowed; import org.opentripplanner.transit.model.network.BikeAccess; public class BikesAllowedMapper { - @Nonnull - public static GraphQLBikesAllowed map(@Nonnull BikeAccess bikesAllowed) { + public static GraphQLBikesAllowed map(BikeAccess bikesAllowed) { return switch (bikesAllowed) { case UNKNOWN -> GraphQLBikesAllowed.NO_INFORMATION; case ALLOWED -> GraphQLBikesAllowed.ALLOWED; diff --git a/src/main/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapper.java b/src/main/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapper.java index 0c479a8664c..8b35133e615 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapper.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapper.java @@ -1,13 +1,11 @@ package org.opentripplanner.apis.gtfs.mapping; -import javax.annotation.Nonnull; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLCarsAllowed; import org.opentripplanner.transit.model.network.CarAccess; public class CarsAllowedMapper { - @Nonnull - public static GraphQLCarsAllowed map(@Nonnull CarAccess carsAllowed) { + public static GraphQLCarsAllowed map(CarAccess carsAllowed) { return switch (carsAllowed) { case UNKNOWN -> GraphQLCarsAllowed.NO_INFORMATION; case ALLOWED -> GraphQLCarsAllowed.ALLOWED; diff --git a/src/main/java/org/opentripplanner/apis/transmodel/mapping/RequestModesMapper.java b/src/main/java/org/opentripplanner/apis/transmodel/mapping/RequestModesMapper.java index 849d39e35e7..bf9abd3a60d 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/mapping/RequestModesMapper.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/mapping/RequestModesMapper.java @@ -28,6 +28,9 @@ static RequestModes mapRequestModes(Map modesInput) { ensureValueAndSet(accessMode, mBuilder::withAccessMode); ensureValueAndSet((StreetMode) modesInput.get(egressModeKey), mBuilder::withEgressMode); ensureValueAndSet((StreetMode) modesInput.get(directModeKey), mBuilder::withDirectMode); + // The only cases in which the transferMode isn't WALK are when the accessMode is either BIKE or CAR. + // In these cases, the transferMode is the same as the accessMode. This check is not strictly necessary + // if there is a need for more freedom for specifying the transferMode. Optional.ofNullable(accessMode).filter(IS_BIKE_OR_CAR).ifPresent(mBuilder::withTransferMode); return mBuilder.build(); diff --git a/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java b/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java index fbb65a5a850..402e1e5eedb 100644 --- a/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java +++ b/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java @@ -84,49 +84,11 @@ public void linkTransitStops(Graph graph, TransitModel transitModel) { LOG.info(progress.startMessage()); Set stopLocationsUsedForFlexTrips = Set.of(); - if (OTPFeature.FlexRouting.isOn()) { - stopLocationsUsedForFlexTrips = - transitModel - .getAllFlexTrips() - .stream() - .flatMap(t -> t.getStops().stream()) - .collect(Collectors.toSet()); - - stopLocationsUsedForFlexTrips.addAll( - stopLocationsUsedForFlexTrips - .stream() - .filter(GroupStop.class::isInstance) - .map(GroupStop.class::cast) - .flatMap(g -> g.getChildLocations().stream().filter(RegularStop.class::isInstance)) - .toList() - ); + stopLocationsUsedForFlexTrips = transitModel.getStopLocationsUsedForFlexTrips(); } - // The stops that are used by transit capable of transporting cars need to be connected to the road network (e.g. car ferries). - Set stopLocationsUsedForCarsAllowedTrips = Set.of(); - stopLocationsUsedForCarsAllowedTrips = - transitModel - .getAllTripPatterns() - .stream() - .filter(t -> - t - .getScheduledTimetable() - .getTripTimes() - .stream() - .anyMatch(tt -> tt.getTrip().getCarsAllowed() == CarAccess.ALLOWED) - ) - .flatMap(t -> t.getStops().stream()) - .collect(Collectors.toSet()); - - stopLocationsUsedForCarsAllowedTrips.addAll( - stopLocationsUsedForCarsAllowedTrips - .stream() - .filter(GroupStop.class::isInstance) - .map(GroupStop.class::cast) - .flatMap(g -> g.getChildLocations().stream().filter(RegularStop.class::isInstance)) - .toList() - ); + Set stopLocationsUsedForCarsAllowedTrips = transitModel.getStopLocationsUsedForCarsAllowedTrips(); for (TransitStopVertex tStop : vertices) { // Stops with pathways do not need to be connected to the street network, since there are explicit entrances defined for that diff --git a/src/main/java/org/opentripplanner/gtfs/mapping/CarAccessMapper.java b/src/main/java/org/opentripplanner/gtfs/mapping/CarAccessMapper.java index d328d1aa06e..4034814462b 100644 --- a/src/main/java/org/opentripplanner/gtfs/mapping/CarAccessMapper.java +++ b/src/main/java/org/opentripplanner/gtfs/mapping/CarAccessMapper.java @@ -10,13 +10,10 @@ class CarAccessMapper { public static CarAccess mapForTrip(Trip rhs) { int carsAllowed = rhs.getCarsAllowed(); - switch (carsAllowed) { - case 1: - return CarAccess.ALLOWED; - case 2: - return CarAccess.NOT_ALLOWED; - default: - return CarAccess.UNKNOWN; - } + return switch (carsAllowed) { + case 1 -> CarAccess.ALLOWED; + case 2 -> CarAccess.NOT_ALLOWED; + default -> CarAccess.UNKNOWN; + }; } } diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilter.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilter.java index 2fa4a9dff15..a4f89c0cf7e 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilter.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilter.java @@ -89,10 +89,6 @@ public static BikeAccess bikeAccessForTrip(Trip trip) { return trip.getRoute().getBikesAllowed(); } - public static CarAccess carAccessForTrip(Trip trip) { - return trip.getCarsAllowed(); - } - @Override public boolean tripPatternPredicate(TripPatternForDate tripPatternForDate) { for (TransitFilter filter : filters) { @@ -114,7 +110,7 @@ public boolean tripTimesPredicate(TripTimes tripTimes, boolean withFilters) { } if (requireCarsAllowed) { - if (carAccessForTrip(trip) != CarAccess.ALLOWED) { + if (trip.getCarsAllowed() != CarAccess.ALLOWED) { return false; } } diff --git a/src/main/java/org/opentripplanner/transit/model/network/BikeAccess.java b/src/main/java/org/opentripplanner/transit/model/network/BikeAccess.java index 536a01a9b14..043c93e04e6 100644 --- a/src/main/java/org/opentripplanner/transit/model/network/BikeAccess.java +++ b/src/main/java/org/opentripplanner/transit/model/network/BikeAccess.java @@ -1,6 +1,9 @@ package org.opentripplanner.transit.model.network; /** + * This represents the state of whether bikes are allowed on board trips (or routes). + * If the state is unknown, bikes are not allowed. + *

* GTFS codes: * 0 = unknown / unspecified, 1 = bikes allowed, 2 = bikes NOT allowed */ diff --git a/src/main/java/org/opentripplanner/transit/model/network/CarAccess.java b/src/main/java/org/opentripplanner/transit/model/network/CarAccess.java index 0a7a4f91845..e5e15913197 100644 --- a/src/main/java/org/opentripplanner/transit/model/network/CarAccess.java +++ b/src/main/java/org/opentripplanner/transit/model/network/CarAccess.java @@ -1,6 +1,9 @@ package org.opentripplanner.transit.model.network; /** + * This represents the state of whether cars are allowed on board trips. + * If the state is unknown, cars are not allowed. + *

* GTFS codes: * 0 = unknown / unspecified, 1 = cars allowed, 2 = cars NOT allowed */ diff --git a/src/main/java/org/opentripplanner/transit/service/TransitModel.java b/src/main/java/org/opentripplanner/transit/service/TransitModel.java index 84c7597d562..99c0f3fadb8 100644 --- a/src/main/java/org/opentripplanner/transit/service/TransitModel.java +++ b/src/main/java/org/opentripplanner/transit/service/TransitModel.java @@ -19,6 +19,7 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.util.stream.Collectors; import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.opentripplanner.ext.flex.trip.FlexTrip; @@ -44,9 +45,12 @@ import org.opentripplanner.transit.model.framework.AbstractTransitEntity; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.transit.model.network.CarAccess; import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.organization.Agency; import org.opentripplanner.transit.model.organization.Operator; +import org.opentripplanner.transit.model.site.GroupStop; +import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.model.timetable.TripOnServiceDate; import org.opentripplanner.updater.GraphUpdaterManager; @@ -556,6 +560,53 @@ public FlexTrip getFlexTrip(FeedScopedId tripId) { return flexTripsById.get(tripId); } + public Set getStopLocationsUsedForFlexTrips() { + Set stopLocations = getAllFlexTrips() + .stream() + .flatMap(t -> t.getStops().stream()) + .collect(Collectors.toSet()); + + stopLocations.addAll( + stopLocations + .stream() + .filter(GroupStop.class::isInstance) + .map(GroupStop.class::cast) + .flatMap(g -> g.getChildLocations().stream().filter(RegularStop.class::isInstance)) + .toList() + ); + return stopLocations; + } + + /** + * The stops that are used by transit capable of transporting cars need to be + * connected to the road network (e.g. car ferries). This method returns the + * stops that are used by trips that allow cars. + * @return set of stop locations that are used for trips that allow cars + */ + public Set getStopLocationsUsedForCarsAllowedTrips() { + Set stopLocations = getAllTripPatterns() + .stream() + .filter(t -> + t + .getScheduledTimetable() + .getTripTimes() + .stream() + .anyMatch(tt -> tt.getTrip().getCarsAllowed() == CarAccess.ALLOWED) + ) + .flatMap(t -> t.getStops().stream()) + .collect(Collectors.toSet()); + + stopLocations.addAll( + stopLocations + .stream() + .filter(GroupStop.class::isInstance) + .map(GroupStop.class::cast) + .flatMap(g -> g.getChildLocations().stream().filter(RegularStop.class::isInstance)) + .toList() + ); + return stopLocations; + } + private void invalidateIndex() { this.index = null; } diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index 0162c2090f2..618d3cb4850 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -2268,8 +2268,6 @@ type Trip implements Node { "Whether bikes are allowed on board the vehicle running this trip" bikesAllowed: BikesAllowed blockId: String - "Whether cars are allowed on board the vehicle running this trip" - carsAllowed: CarsAllowed "Departure time from the first stop" departureStoptime( """ @@ -3073,8 +3071,9 @@ enum PlanAccessMode { """ BICYCLE_RENTAL """ - Driving a car from the origin to the destination. - TODO add more thorough description + Driving to a stop and boarding a vehicle with the car. + Access can use driving only if the mode used for transfers + and egress is also `CAR`. """ CAR """ @@ -3187,8 +3186,8 @@ enum PlanEgressMode { """ BICYCLE_RENTAL """ - Driving a car from the origin to the destination. - TODO add more thorough description + Driving from a stop to the destination. Egress can use driving only if the mode + used for access and transfers is also `CAR`. """ CAR """ @@ -3230,8 +3229,8 @@ enum PlanTransferMode { """ BICYCLE """ - Driving a car from the origin to the destination. - TODO add more thorough description + Driving between transit vehicles. Transfers can only use driving if the mode + used for access and egress is also `CAR`. """ CAR "Walking between transit vehicles (typically between stops)." diff --git a/src/test/java/org/opentripplanner/apis/gtfs/mapping/BikesAllowedMapperTest.java b/src/test/java/org/opentripplanner/apis/gtfs/mapping/BikesAllowedMapperTest.java index 5ed267f1f4f..af1441e7dc4 100644 --- a/src/test/java/org/opentripplanner/apis/gtfs/mapping/BikesAllowedMapperTest.java +++ b/src/test/java/org/opentripplanner/apis/gtfs/mapping/BikesAllowedMapperTest.java @@ -1,8 +1,7 @@ package org.opentripplanner.apis.gtfs.mapping; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static com.google.common.truth.Truth.assertThat; -import java.util.Arrays; import org.junit.jupiter.api.Test; import org.opentripplanner.transit.model.network.BikeAccess; @@ -10,12 +9,10 @@ class BikesAllowedMapperTest { @Test void mapping() { - Arrays - .stream(BikeAccess.values()) - .filter(ba -> ba != BikeAccess.UNKNOWN) - .forEach(d -> { - var mapped = BikesAllowedMapper.map(d); - assertEquals(d.toString(), mapped.toString()); - }); + assertThat(BikeAccess.ALLOWED.toString()) + .isEqualTo(BikesAllowedMapper.map(BikeAccess.ALLOWED).toString()); + assertThat(BikeAccess.NOT_ALLOWED.toString()) + .isEqualTo(BikesAllowedMapper.map(BikeAccess.NOT_ALLOWED).toString()); + assertThat("NO_INFORMATION").isEqualTo(BikesAllowedMapper.map(BikeAccess.UNKNOWN).toString()); } } diff --git a/src/test/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapperTest.java b/src/test/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapperTest.java index a2a1b40a5e8..9e942eee458 100644 --- a/src/test/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapperTest.java +++ b/src/test/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapperTest.java @@ -1,8 +1,7 @@ package org.opentripplanner.apis.gtfs.mapping; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static com.google.common.truth.Truth.assertThat; -import java.util.Arrays; import org.junit.jupiter.api.Test; import org.opentripplanner.transit.model.network.CarAccess; @@ -10,12 +9,10 @@ class CarsAllowedMapperTest { @Test void mapping() { - Arrays - .stream(CarAccess.values()) - .filter(ba -> ba != CarAccess.UNKNOWN) - .forEach(d -> { - var mapped = CarsAllowedMapper.map(d); - assertEquals(d.toString(), mapped.toString()); - }); + assertThat(CarAccess.ALLOWED.toString()) + .isEqualTo(CarsAllowedMapper.map(CarAccess.ALLOWED).toString()); + assertThat(CarAccess.NOT_ALLOWED.toString()) + .isEqualTo(CarsAllowedMapper.map(CarAccess.NOT_ALLOWED).toString()); + assertThat("NO_INFORMATION").isEqualTo(CarsAllowedMapper.map(CarAccess.UNKNOWN).toString()); } } diff --git a/src/test/java/org/opentripplanner/graph_builder/module/StreetLinkerModuleTest.java b/src/test/java/org/opentripplanner/graph_builder/module/StreetLinkerModuleTest.java index e5f77f57659..a71921148aa 100644 --- a/src/test/java/org/opentripplanner/graph_builder/module/StreetLinkerModuleTest.java +++ b/src/test/java/org/opentripplanner/graph_builder/module/StreetLinkerModuleTest.java @@ -1,6 +1,6 @@ package org.opentripplanner.graph_builder.module; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static com.google.common.truth.Truth.assertThat; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertInstanceOf; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -51,7 +51,7 @@ void linkingIsIdempotent() { module.buildGraph(); assertTrue(model.stopVertex().isConnectedToGraph()); - assertEquals(1, model.stopVertex().getOutgoing().size()); + assertThat(model.stopVertex().getOutgoing()).hasSize(1); } @Test @@ -63,7 +63,7 @@ void linkRegularStop() { assertTrue(model.stopVertex().isConnectedToGraph()); - assertEquals(1, model.stopVertex().getOutgoing().size()); + assertThat(model.stopVertex().getOutgoing()).hasSize(1); var outgoing = model.outgoingLinks().getFirst(); assertInstanceOf(StreetTransitStopLink.class, outgoing); @@ -87,7 +87,7 @@ void linkFlexStop() { assertTrue(model.stopVertex().isConnectedToGraph()); // stop is used by a flex trip, needs to be linked to both the walk and car edge - assertEquals(2, model.stopVertex().getOutgoing().size()); + assertThat(model.stopVertex().getOutgoing()).hasSize(2); var linkToWalk = model.outgoingLinks().getFirst(); SplitterVertex walkSplit = (SplitterVertex) linkToWalk.getToVertex(); @@ -119,7 +119,7 @@ void linkCarsAllowedStop() { assertTrue(model.stopVertex().isConnectedToGraph()); // Because the stop is used by a carsAllowed trip it needs to be linked to both the walk and car edge - assertEquals(2, model.stopVertex().getOutgoing().size()); + assertThat(model.stopVertex().getOutgoing()).hasSize(2); var linkToWalk = model.outgoingLinks().getFirst(); SplitterVertex walkSplit = (SplitterVertex) linkToWalk.getToVertex(); diff --git a/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilterTest.java b/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilterTest.java index c5dea627d5a..c3fe0756bb0 100644 --- a/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilterTest.java +++ b/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilterTest.java @@ -1,5 +1,6 @@ package org.opentripplanner.routing.algorithm.raptoradapter.transit.request; +import static com.google.common.truth.Truth.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -769,23 +770,53 @@ void testBikesAllowed() { @Test void testCarsAllowed() { - RouteBuilder routeBuilder = TransitModelForTest.route("1"); - TripBuilder trip = Trip.of(TransitModelForTest.id("T1")).withRoute(routeBuilder.build()); - - assertEquals( - CarAccess.UNKNOWN, - RouteRequestTransitDataProviderFilter.carAccessForTrip(trip.build()) - ); - trip.withCarsAllowed(CarAccess.ALLOWED); - assertEquals( + TripTimes tripTimesCarsAllowed = createTestTripTimes( + TRIP_ID, + ROUTE, + BikeAccess.UNKNOWN, CarAccess.ALLOWED, - RouteRequestTransitDataProviderFilter.carAccessForTrip(trip.build()) + TransitMode.FERRY, + null, + Accessibility.NO_INFORMATION, + TripAlteration.PLANNED ); - trip.withCarsAllowed(CarAccess.NOT_ALLOWED); - assertEquals( + + TripTimes tripTimesCarsNotAllowed = createTestTripTimes( + TRIP_ID, + ROUTE, + BikeAccess.UNKNOWN, CarAccess.NOT_ALLOWED, - RouteRequestTransitDataProviderFilter.carAccessForTrip(trip.build()) + TransitMode.FERRY, + null, + Accessibility.NO_INFORMATION, + TripAlteration.PLANNED ); + + TripTimes tripTimesCarsUnknown = createTestTripTimes( + TRIP_ID, + ROUTE, + BikeAccess.UNKNOWN, + CarAccess.UNKNOWN, + TransitMode.FERRY, + null, + Accessibility.NO_INFORMATION, + TripAlteration.PLANNED + ); + + RouteRequestTransitDataProviderFilter filter = new RouteRequestTransitDataProviderFilter( + false, + true, + false, + DEFAULT_ACCESSIBILITY, + false, + false, + Set.of(), + List.of(AllowAllTransitFilter.of()) + ); + + assertThat(filter.tripTimesPredicate(tripTimesCarsAllowed, false)).isTrue(); + assertThat(filter.tripTimesPredicate(tripTimesCarsNotAllowed, false)).isFalse(); + assertThat(filter.tripTimesPredicate(tripTimesCarsUnknown, false)).isFalse(); } @Test From 7e1022fce9eb2d7282830bf87e916ac279c4fc7a Mon Sep 17 00:00:00 2001 From: Ville Pihlava Date: Fri, 20 Sep 2024 14:12:22 +0300 Subject: [PATCH 008/213] Add changes to comments and tests. --- .../transit/model/network/BikeAccess.java | 1 - .../transit/model/network/CarAccess.java | 1 - .../apis/gtfs/mapping/BikesAllowedMapperTest.java | 11 +++++------ .../apis/gtfs/mapping/CarsAllowedMapperTest.java | 11 +++++------ 4 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/opentripplanner/transit/model/network/BikeAccess.java b/src/main/java/org/opentripplanner/transit/model/network/BikeAccess.java index 043c93e04e6..c0d850e9ce7 100644 --- a/src/main/java/org/opentripplanner/transit/model/network/BikeAccess.java +++ b/src/main/java/org/opentripplanner/transit/model/network/BikeAccess.java @@ -2,7 +2,6 @@ /** * This represents the state of whether bikes are allowed on board trips (or routes). - * If the state is unknown, bikes are not allowed. *

* GTFS codes: * 0 = unknown / unspecified, 1 = bikes allowed, 2 = bikes NOT allowed diff --git a/src/main/java/org/opentripplanner/transit/model/network/CarAccess.java b/src/main/java/org/opentripplanner/transit/model/network/CarAccess.java index e5e15913197..2fca43cfb32 100644 --- a/src/main/java/org/opentripplanner/transit/model/network/CarAccess.java +++ b/src/main/java/org/opentripplanner/transit/model/network/CarAccess.java @@ -2,7 +2,6 @@ /** * This represents the state of whether cars are allowed on board trips. - * If the state is unknown, cars are not allowed. *

* GTFS codes: * 0 = unknown / unspecified, 1 = cars allowed, 2 = cars NOT allowed diff --git a/src/test/java/org/opentripplanner/apis/gtfs/mapping/BikesAllowedMapperTest.java b/src/test/java/org/opentripplanner/apis/gtfs/mapping/BikesAllowedMapperTest.java index af1441e7dc4..035d3605a21 100644 --- a/src/test/java/org/opentripplanner/apis/gtfs/mapping/BikesAllowedMapperTest.java +++ b/src/test/java/org/opentripplanner/apis/gtfs/mapping/BikesAllowedMapperTest.java @@ -1,18 +1,17 @@ package org.opentripplanner.apis.gtfs.mapping; -import static com.google.common.truth.Truth.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; +import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLBikesAllowed; import org.opentripplanner.transit.model.network.BikeAccess; class BikesAllowedMapperTest { @Test void mapping() { - assertThat(BikeAccess.ALLOWED.toString()) - .isEqualTo(BikesAllowedMapper.map(BikeAccess.ALLOWED).toString()); - assertThat(BikeAccess.NOT_ALLOWED.toString()) - .isEqualTo(BikesAllowedMapper.map(BikeAccess.NOT_ALLOWED).toString()); - assertThat("NO_INFORMATION").isEqualTo(BikesAllowedMapper.map(BikeAccess.UNKNOWN).toString()); + assertEquals(GraphQLBikesAllowed.NO_INFORMATION, BikesAllowedMapper.map(BikeAccess.UNKNOWN)); + assertEquals(GraphQLBikesAllowed.NOT_ALLOWED, BikesAllowedMapper.map(BikeAccess.NOT_ALLOWED)); + assertEquals(GraphQLBikesAllowed.ALLOWED, BikesAllowedMapper.map(BikeAccess.ALLOWED)); } } diff --git a/src/test/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapperTest.java b/src/test/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapperTest.java index 9e942eee458..a38df9b685b 100644 --- a/src/test/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapperTest.java +++ b/src/test/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapperTest.java @@ -1,18 +1,17 @@ package org.opentripplanner.apis.gtfs.mapping; -import static com.google.common.truth.Truth.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; +import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLCarsAllowed; import org.opentripplanner.transit.model.network.CarAccess; class CarsAllowedMapperTest { @Test void mapping() { - assertThat(CarAccess.ALLOWED.toString()) - .isEqualTo(CarsAllowedMapper.map(CarAccess.ALLOWED).toString()); - assertThat(CarAccess.NOT_ALLOWED.toString()) - .isEqualTo(CarsAllowedMapper.map(CarAccess.NOT_ALLOWED).toString()); - assertThat("NO_INFORMATION").isEqualTo(CarsAllowedMapper.map(CarAccess.UNKNOWN).toString()); + assertEquals(GraphQLCarsAllowed.NO_INFORMATION, CarsAllowedMapper.map(CarAccess.UNKNOWN)); + assertEquals(GraphQLCarsAllowed.NOT_ALLOWED, CarsAllowedMapper.map(CarAccess.NOT_ALLOWED)); + assertEquals(GraphQLCarsAllowed.ALLOWED, CarsAllowedMapper.map(CarAccess.ALLOWED)); } } From f3e982b244595a393cba56e6376064456429ae68 Mon Sep 17 00:00:00 2001 From: Ville Pihlava Date: Tue, 24 Sep 2024 09:43:26 +0300 Subject: [PATCH 009/213] Remove unused carsAllowed related information from schema. --- .../apis/gtfs/generated/GraphQLTypes.java | 6 ------ .../apis/gtfs/generated/graphql-codegen.yml | 1 - .../apis/gtfs/mapping/CarsAllowedMapper.java | 15 --------------- .../opentripplanner/apis/gtfs/schema.graphqls | 9 --------- .../gtfs/mapping/CarsAllowedMapperTest.java | 17 ----------------- 5 files changed, 48 deletions(-) delete mode 100644 src/main/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapper.java delete mode 100644 src/test/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapperTest.java diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java index 06f515466ac..e93fca59ac6 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java @@ -566,12 +566,6 @@ public void setGraphQLBannedNetworks(List bannedNetworks) { } } - public enum GraphQLCarsAllowed { - ALLOWED, - NOT_ALLOWED, - NO_INFORMATION, - } - public static class GraphQLCyclingOptimizationInput { private GraphQLTriangleCyclingFactorsInput triangle; diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml b/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml index fb72e63986c..29490a28b78 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml @@ -53,7 +53,6 @@ config: RentalVehicle: org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle#VehicleRentalVehicle VehicleRentalUris: org.opentripplanner.service.vehiclerental.model.VehicleRentalStationUris#VehicleRentalStationUris BikesAllowed: org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLBikesAllowed#GraphQLBikesAllowed - CarsAllowed: org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLCarsAllowed#GraphQLCarsAllowed BookingInfo: org.opentripplanner.transit.model.timetable.booking.BookingInfo#BookingInfo BookingTime: org.opentripplanner.transit.model.timetable.booking.BookingTime#BookingTime CarPark: org.opentripplanner.routing.vehicle_parking.VehicleParking#VehicleParking diff --git a/src/main/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapper.java b/src/main/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapper.java deleted file mode 100644 index 8b35133e615..00000000000 --- a/src/main/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.opentripplanner.apis.gtfs.mapping; - -import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLCarsAllowed; -import org.opentripplanner.transit.model.network.CarAccess; - -public class CarsAllowedMapper { - - public static GraphQLCarsAllowed map(CarAccess carsAllowed) { - return switch (carsAllowed) { - case UNKNOWN -> GraphQLCarsAllowed.NO_INFORMATION; - case ALLOWED -> GraphQLCarsAllowed.ALLOWED; - case NOT_ALLOWED -> GraphQLCarsAllowed.NOT_ALLOWED; - }; - } -} diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index 618d3cb4850..01f4d30d487 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -2774,15 +2774,6 @@ enum BikesAllowed { NO_INFORMATION } -enum CarsAllowed { - "The vehicle being used on this particular trip can accommodate at least one car." - ALLOWED - "No cars are allowed on this trip." - NOT_ALLOWED - "There is no car information for the trip." - NO_INFORMATION -} - """ Predefined optimization alternatives for bicycling routing. For more customization, one can use the triangle factors. diff --git a/src/test/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapperTest.java b/src/test/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapperTest.java deleted file mode 100644 index a38df9b685b..00000000000 --- a/src/test/java/org/opentripplanner/apis/gtfs/mapping/CarsAllowedMapperTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.opentripplanner.apis.gtfs.mapping; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import org.junit.jupiter.api.Test; -import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLCarsAllowed; -import org.opentripplanner.transit.model.network.CarAccess; - -class CarsAllowedMapperTest { - - @Test - void mapping() { - assertEquals(GraphQLCarsAllowed.NO_INFORMATION, CarsAllowedMapper.map(CarAccess.UNKNOWN)); - assertEquals(GraphQLCarsAllowed.NOT_ALLOWED, CarsAllowedMapper.map(CarAccess.NOT_ALLOWED)); - assertEquals(GraphQLCarsAllowed.ALLOWED, CarsAllowedMapper.map(CarAccess.ALLOWED)); - } -} From b7e0460d26953f5a41240f0466c10cc2c1888b39 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Thu, 26 Sep 2024 19:19:49 +0300 Subject: [PATCH 010/213] Clarify @Nullable and @Nonnull usage --- doc/dev/decisionrecords/Codestyle.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/dev/decisionrecords/Codestyle.md b/doc/dev/decisionrecords/Codestyle.md index f9ffc1a9056..b302ce2b4a6 100644 --- a/doc/dev/decisionrecords/Codestyle.md +++ b/doc/dev/decisionrecords/Codestyle.md @@ -158,6 +158,13 @@ What to put in Javadoc: - Is it immutable or should anything be treated as immutable - Is it a utility class of static methods that should not be instantiated +### Annotations + +- On methods: + - Method should be marked as `@Nullable` if it can return null values + - Use of `@Nonnull` on methods should be avoided as it's the default behaviour + - Method parameters can be marked as `@Nullable` or `@Nonnull` + ## JavaScript As of #206, we From 1d36e7c8837c97aa8d51f6bc2bd77ef42e13b6e6 Mon Sep 17 00:00:00 2001 From: Ville Pihlava Date: Fri, 27 Sep 2024 13:40:34 +0300 Subject: [PATCH 011/213] Change location of function and make if statement chain more compact. --- .../module/StreetLinkerModule.java | 20 ++++++++++++++++++- ...RouteRequestTransitDataProviderFilter.java | 12 ++++------- .../transit/service/TransitModel.java | 17 ---------------- 3 files changed, 23 insertions(+), 26 deletions(-) diff --git a/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java b/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java index 402e1e5eedb..0930f5a4576 100644 --- a/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java +++ b/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java @@ -85,7 +85,7 @@ public void linkTransitStops(Graph graph, TransitModel transitModel) { Set stopLocationsUsedForFlexTrips = Set.of(); if (OTPFeature.FlexRouting.isOn()) { - stopLocationsUsedForFlexTrips = transitModel.getStopLocationsUsedForFlexTrips(); + stopLocationsUsedForFlexTrips = getStopLocationsUsedForFlexTrips(transitModel); } Set stopLocationsUsedForCarsAllowedTrips = transitModel.getStopLocationsUsedForCarsAllowedTrips(); @@ -326,6 +326,24 @@ private VehicleParking removeVehicleParkingEntranceVertexFromGraph( } } + private Set getStopLocationsUsedForFlexTrips(TransitModel transitModel) { + Set stopLocations = transitModel + .getAllFlexTrips() + .stream() + .flatMap(t -> t.getStops().stream()) + .collect(Collectors.toSet()); + + stopLocations.addAll( + stopLocations + .stream() + .filter(GroupStop.class::isInstance) + .map(GroupStop.class::cast) + .flatMap(g -> g.getChildLocations().stream().filter(RegularStop.class::isInstance)) + .toList() + ); + return stopLocations; + } + private enum StopLinkType { /** * Only ensure that the link leads to a walkable edge. diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilter.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilter.java index a4f89c0cf7e..514a5b56f9a 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilter.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilter.java @@ -103,16 +103,12 @@ public boolean tripPatternPredicate(TripPatternForDate tripPatternForDate) { public boolean tripTimesPredicate(TripTimes tripTimes, boolean withFilters) { final Trip trip = tripTimes.getTrip(); - if (requireBikesAllowed) { - if (bikeAccessForTrip(trip) != BikeAccess.ALLOWED) { - return false; - } + if (requireBikesAllowed && bikeAccessForTrip(trip) != BikeAccess.ALLOWED) { + return false; } - if (requireCarsAllowed) { - if (trip.getCarsAllowed() != CarAccess.ALLOWED) { - return false; - } + if (requireCarsAllowed && trip.getCarsAllowed() != CarAccess.ALLOWED) { + return false; } if (wheelchairEnabled) { diff --git a/src/main/java/org/opentripplanner/transit/service/TransitModel.java b/src/main/java/org/opentripplanner/transit/service/TransitModel.java index 99c0f3fadb8..b2347bf6351 100644 --- a/src/main/java/org/opentripplanner/transit/service/TransitModel.java +++ b/src/main/java/org/opentripplanner/transit/service/TransitModel.java @@ -560,23 +560,6 @@ public FlexTrip getFlexTrip(FeedScopedId tripId) { return flexTripsById.get(tripId); } - public Set getStopLocationsUsedForFlexTrips() { - Set stopLocations = getAllFlexTrips() - .stream() - .flatMap(t -> t.getStops().stream()) - .collect(Collectors.toSet()); - - stopLocations.addAll( - stopLocations - .stream() - .filter(GroupStop.class::isInstance) - .map(GroupStop.class::cast) - .flatMap(g -> g.getChildLocations().stream().filter(RegularStop.class::isInstance)) - .toList() - ); - return stopLocations; - } - /** * The stops that are used by transit capable of transporting cars need to be * connected to the road network (e.g. car ferries). This method returns the From 39634b52d5d851574d2874ce0b676496727c9e64 Mon Sep 17 00:00:00 2001 From: Ville Pihlava Date: Fri, 27 Sep 2024 15:18:52 +0300 Subject: [PATCH 012/213] Change test to conform with new changes. --- .../graph_builder/module/StreetLinkerModuleTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/test/java/org/opentripplanner/graph_builder/module/StreetLinkerModuleTest.java b/src/test/java/org/opentripplanner/graph_builder/module/StreetLinkerModuleTest.java index a71921148aa..e4d62a0dbd6 100644 --- a/src/test/java/org/opentripplanner/graph_builder/module/StreetLinkerModuleTest.java +++ b/src/test/java/org/opentripplanner/graph_builder/module/StreetLinkerModuleTest.java @@ -211,17 +211,17 @@ public void withCarsAllowedTrip(Trip trip, StopLocation... stops) { }) .toList(); StopPattern stopPattern = new StopPattern(stopTimes); - TripPattern tripPattern = TransitModelForTest - .tripPattern("carsAllowedTripPattern", route) - .withStopPattern(stopPattern) - .build(); RealTimeTripTimes tripTimes = TripTimesFactory.tripTimes( trip, stopTimes, transitModel.getDeduplicator() ); + TripPattern tripPattern = TransitModelForTest + .tripPattern("carsAllowedTripPattern", route) + .withStopPattern(stopPattern) + .withScheduledTimeTableBuilder(builder -> builder.addTripTimes(tripTimes)) + .build(); - tripPattern.add(tripTimes); transitModel.addTripPattern(tripPattern.getId(), tripPattern); } } From a4f955fe210ef24de81ab00a296ae9957e0fa7f8 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Sun, 6 Oct 2024 20:09:27 +0100 Subject: [PATCH 013/213] improve area handling --- .../graph_builder/module/osm/OsmDatabase.java | 5 +- .../openstreetmap/model/OSMWay.java | 6 ++- .../openstreetmap/model/OSMWithTags.java | 9 +++- .../openstreetmap/model/OSMWayTest.java | 51 +++++++++++++++++++ 4 files changed, 65 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java b/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java index 60525b3cb6c..a52b4824e10 100644 --- a/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java +++ b/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java @@ -254,10 +254,7 @@ public void addWay(OSMWay way) { applyLevelsForWay(way); /* An area can be specified as such, or be one by default as an amenity */ - if ( - (way.isArea() || way.isParkAndRide() || way.isBikeParking() || way.isBoardingArea()) && - way.getNodeRefs().size() > 2 - ) { + if (way.isArea()) { // this is an area that's a simple polygon. So we can just add it straight // to the areas, if it's not part of a relation. if (!areaWayIds.contains(wayId)) { diff --git a/src/main/java/org/opentripplanner/openstreetmap/model/OSMWay.java b/src/main/java/org/opentripplanner/openstreetmap/model/OSMWay.java index b1e90044bf2..f5eb115e4ff 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/model/OSMWay.java +++ b/src/main/java/org/opentripplanner/openstreetmap/model/OSMWay.java @@ -138,7 +138,11 @@ public boolean isBackwardEscalator() { } public boolean isArea() { - return isTag("area", "yes"); + return ( + !isTag("area", "no") && + (isTag("area", "yes") || isParking() || isBikeParking() || isBoardingArea()) && + getNodeRefs().size() > 2 + ); } /** diff --git a/src/main/java/org/opentripplanner/openstreetmap/model/OSMWithTags.java b/src/main/java/org/opentripplanner/openstreetmap/model/OSMWithTags.java index b53739bf6a1..2b228f2c537 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/model/OSMWithTags.java +++ b/src/main/java/org/opentripplanner/openstreetmap/model/OSMWithTags.java @@ -423,6 +423,13 @@ public boolean isPedestrianExplicitlyAllowed() { return doesTagAllowAccess("foot"); } + /** + * @return True if this node / area is a parking. + */ + public boolean isParking() { + return isTag("amenity", "parking"); + } + /** * @return True if this node / area is a park and ride. */ @@ -430,7 +437,7 @@ public boolean isParkAndRide() { String parkingType = getTag("parking"); String parkAndRide = getTag("park_ride"); return ( - isTag("amenity", "parking") && + isParking() && ( (parkingType != null && parkingType.contains("park_and_ride")) || (parkAndRide != null && !parkAndRide.equalsIgnoreCase("no")) diff --git a/src/test/java/org/opentripplanner/openstreetmap/model/OSMWayTest.java b/src/test/java/org/opentripplanner/openstreetmap/model/OSMWayTest.java index c0af4cf2701..c6c4bd49651 100644 --- a/src/test/java/org/opentripplanner/openstreetmap/model/OSMWayTest.java +++ b/src/test/java/org/opentripplanner/openstreetmap/model/OSMWayTest.java @@ -17,6 +17,48 @@ void testIsBicycleDismountForced() { assertTrue(way.isBicycleDismountForced()); } + @Test + void testAreaMustContain3Nodes() { + OSMWay way = new OSMWay(); + way.addTag("area", "yes"); + assertFalse(way.isArea()); + way.addNodeRef(1); + assertFalse(way.isArea()); + way.addNodeRef(2); + assertFalse(way.isArea()); + way.addNodeRef(3); + assertTrue(way.isArea()); + way.addNodeRef(4); + assertTrue(way.isArea()); + } + + @Test + void testAreaTags() { + OSMWay platform = getClosedPolygon(); + platform.addTag("public_transport", "platform"); + assertTrue(platform.isArea()); + platform.addTag("area", "no"); + assertFalse(platform.isArea()); + + OSMWay roundabout = getClosedPolygon(); + roundabout.addTag("highway", "roundabout"); + assertFalse(roundabout.isArea()); + + OSMWay pedestrian = getClosedPolygon(); + pedestrian.addTag("highway", "pedestrian"); + assertFalse(pedestrian.isArea()); + pedestrian.addTag("area", "yes"); + assertTrue(pedestrian.isArea()); + + OSMWay parking = getClosedPolygon(); + parking.addTag("amenity", "parking"); + assertTrue(parking.isArea()); + + OSMWay bikeParking = getClosedPolygon(); + bikeParking.addTag("amenity", "bicycle_parking"); + assertTrue(bikeParking.isArea()); + } + @Test void testIsSteps() { OSMWay way = new OSMWay(); @@ -125,4 +167,13 @@ void escalator() { escalator.addTag("conveying", "whoknows?"); assertFalse(escalator.isEscalator()); } + + private OSMWay getClosedPolygon() { + var way = new OSMWay(); + way.addNodeRef(1); + way.addNodeRef(2); + way.addNodeRef(3); + way.addNodeRef(1); + return way; + } } From 93543b174e78883f8e5bfdff46bf7750165c8063 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Sun, 6 Oct 2024 20:52:05 +0100 Subject: [PATCH 014/213] add indoor tags for area detection --- .../openstreetmap/model/OSMWay.java | 8 ++++++- .../openstreetmap/model/OSMWayTest.java | 24 ++++++++++++------- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/opentripplanner/openstreetmap/model/OSMWay.java b/src/main/java/org/opentripplanner/openstreetmap/model/OSMWay.java index f5eb115e4ff..299c1c6c545 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/model/OSMWay.java +++ b/src/main/java/org/opentripplanner/openstreetmap/model/OSMWay.java @@ -140,11 +140,17 @@ public boolean isBackwardEscalator() { public boolean isArea() { return ( !isTag("area", "no") && - (isTag("area", "yes") || isParking() || isBikeParking() || isBoardingArea()) && + ( + isTag("area", "yes") || isParking() || isBikeParking() || isBoardingArea() || isIndoorArea() + ) && getNodeRefs().size() > 2 ); } + public boolean isIndoorArea() { + return isTag("indoor", "room") || isTag("indoor", "area") || isTag("indoor", "corridor"); + } + /** * Given a set of {@code permissions} check if it can really be applied to both directions * of the way and return the permissions for both cases. diff --git a/src/test/java/org/opentripplanner/openstreetmap/model/OSMWayTest.java b/src/test/java/org/opentripplanner/openstreetmap/model/OSMWayTest.java index c6c4bd49651..c35e2d216af 100644 --- a/src/test/java/org/opentripplanner/openstreetmap/model/OSMWayTest.java +++ b/src/test/java/org/opentripplanner/openstreetmap/model/OSMWayTest.java @@ -34,11 +34,11 @@ void testAreaMustContain3Nodes() { @Test void testAreaTags() { - OSMWay platform = getClosedPolygon(); - platform.addTag("public_transport", "platform"); - assertTrue(platform.isArea()); - platform.addTag("area", "no"); - assertFalse(platform.isArea()); + OSMWay way1 = getClosedPolygon(); + way1.addTag("public_transport", "platform"); + assertTrue(way1.isArea()); + way1.addTag("area", "no"); + assertFalse(way1.isArea()); OSMWay roundabout = getClosedPolygon(); roundabout.addTag("highway", "roundabout"); @@ -50,13 +50,21 @@ void testAreaTags() { pedestrian.addTag("area", "yes"); assertTrue(pedestrian.isArea()); - OSMWay parking = getClosedPolygon(); - parking.addTag("amenity", "parking"); - assertTrue(parking.isArea()); + OSMWay indoorArea = getClosedPolygon(); + indoorArea.addTag("indoor", "area"); + assertTrue(indoorArea.isArea()); OSMWay bikeParking = getClosedPolygon(); bikeParking.addTag("amenity", "bicycle_parking"); assertTrue(bikeParking.isArea()); + + OSMWay corridor = getClosedPolygon(); + corridor.addTag("indoor", "corridor"); + assertTrue(corridor.isArea()); + + OSMWay door = getClosedPolygon(); + door.addTag("indoor", "door"); + assertFalse(door.isArea()); } @Test From cd16137ecfd96aabb584a78ff14de9719858e85d Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Sun, 6 Oct 2024 20:58:16 +0100 Subject: [PATCH 015/213] add properties for indoor tags --- doc/user/osm/Default.md | 2 ++ doc/user/osm/Finland.md | 2 ++ doc/user/osm/Germany.md | 2 ++ doc/user/osm/UK.md | 2 ++ .../openstreetmap/tagmapping/DefaultMapper.java | 2 ++ .../openstreetmap/tagmapping/DefaultMapperTest.java | 9 +++++++++ .../openstreetmap/wayproperty/specifier/WayTestData.java | 6 ++++++ 7 files changed, 25 insertions(+) diff --git a/doc/user/osm/Default.md b/doc/user/osm/Default.md index 814420b791f..1373b499579 100644 --- a/doc/user/osm/Default.md +++ b/doc/user/osm/Default.md @@ -35,6 +35,8 @@ Lower safety values make an OSM way more desirable and higher values less desira | `public_transport=platform` | `PEDESTRIAN` | | | | `railway=platform` | `PEDESTRIAN` | | | | `footway=sidewalk; highway=footway` | `PEDESTRIAN` | | | +| `indoor=area` | `PEDESTRIAN` | | | +| `indoor=corridor` | `PEDESTRIAN` | | | | `mtb:scale=1` | `PEDESTRIAN` | | | | `mtb:scale=2` | `PEDESTRIAN` | | | | `mtb:scale=0` | `PEDESTRIAN_AND_BICYCLE` | | | diff --git a/doc/user/osm/Finland.md b/doc/user/osm/Finland.md index 8a60b5f0b13..820e47c46e0 100644 --- a/doc/user/osm/Finland.md +++ b/doc/user/osm/Finland.md @@ -79,6 +79,8 @@ Lower safety values make an OSM way more desirable and higher values less desira | `public_transport=platform` | `PEDESTRIAN` | | | | `railway=platform` | `PEDESTRIAN` | | | | `footway=sidewalk; highway=footway` | `PEDESTRIAN` | | | +| `indoor=area` | `PEDESTRIAN` | | | +| `indoor=corridor` | `PEDESTRIAN` | | | | `mtb:scale=1` | `PEDESTRIAN` | | | | `mtb:scale=2` | `PEDESTRIAN` | | | | `mtb:scale=0` | `PEDESTRIAN_AND_BICYCLE` | | | diff --git a/doc/user/osm/Germany.md b/doc/user/osm/Germany.md index 922aa3af836..f422022d4f2 100644 --- a/doc/user/osm/Germany.md +++ b/doc/user/osm/Germany.md @@ -44,6 +44,8 @@ Lower safety values make an OSM way more desirable and higher values less desira | `public_transport=platform` | `PEDESTRIAN` | | | | `railway=platform` | `PEDESTRIAN` | | | | `footway=sidewalk; highway=footway` | `PEDESTRIAN` | | | +| `indoor=area` | `PEDESTRIAN` | | | +| `indoor=corridor` | `PEDESTRIAN` | | | | `mtb:scale=1` | `PEDESTRIAN` | | | | `mtb:scale=2` | `PEDESTRIAN` | | | | `mtb:scale=0` | `PEDESTRIAN_AND_BICYCLE` | | | diff --git a/doc/user/osm/UK.md b/doc/user/osm/UK.md index 4a640caf95c..d5e401e40cc 100644 --- a/doc/user/osm/UK.md +++ b/doc/user/osm/UK.md @@ -49,6 +49,8 @@ Lower safety values make an OSM way more desirable and higher values less desira | `public_transport=platform` | `PEDESTRIAN` | | | | `railway=platform` | `PEDESTRIAN` | | | | `footway=sidewalk; highway=footway` | `PEDESTRIAN` | | | +| `indoor=area` | `PEDESTRIAN` | | | +| `indoor=corridor` | `PEDESTRIAN` | | | | `mtb:scale=1` | `PEDESTRIAN` | | | | `mtb:scale=2` | `PEDESTRIAN` | | | | `mtb:scale=0` | `PEDESTRIAN_AND_BICYCLE` | | | diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapper.java index c5d1c0d1582..fe498333aac 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapper.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapper.java @@ -67,6 +67,8 @@ public void populateProperties(WayPropertySet props) { props.setProperties("public_transport=platform", pedestrianWayProperties); props.setProperties("railway=platform", pedestrianWayProperties); props.setProperties("footway=sidewalk;highway=footway", pedestrianWayProperties); + props.setProperties("indoor=area", pedestrianWayProperties); + props.setProperties("indoor=corridor", pedestrianWayProperties); props.setProperties("mtb:scale=1", pedestrianWayProperties); props.setProperties("mtb:scale=2", pedestrianWayProperties); diff --git a/src/test/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapperTest.java b/src/test/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapperTest.java index 2a8988dda61..8de9661f547 100644 --- a/src/test/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapperTest.java +++ b/src/test/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapperTest.java @@ -3,6 +3,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.opentripplanner.street.model.StreetTraversalPermission.ALL; +import static org.opentripplanner.street.model.StreetTraversalPermission.NONE; import static org.opentripplanner.street.model.StreetTraversalPermission.PEDESTRIAN; import static org.opentripplanner.street.model.StreetTraversalPermission.PEDESTRIAN_AND_BICYCLE; @@ -121,6 +122,14 @@ void stairs() { assertEquals(PEDESTRIAN, props.getPermission()); } + @Test + void indoor() { + var corridor = wps.getDataForWay(WayTestData.indoor("corridor")); + assertEquals(PEDESTRIAN, corridor.getPermission()); + var area = wps.getDataForWay(WayTestData.indoor("area")); + assertEquals(PEDESTRIAN, area.getPermission()); + } + @Test void footDiscouraged() { var regular = WayTestData.pedestrianTunnel(); diff --git a/src/test/java/org/opentripplanner/openstreetmap/wayproperty/specifier/WayTestData.java b/src/test/java/org/opentripplanner/openstreetmap/wayproperty/specifier/WayTestData.java index b09f690f794..7ca0901561a 100644 --- a/src/test/java/org/opentripplanner/openstreetmap/wayproperty/specifier/WayTestData.java +++ b/src/test/java/org/opentripplanner/openstreetmap/wayproperty/specifier/WayTestData.java @@ -218,4 +218,10 @@ public static OSMWithTags zooPlatform() { way.addTag("usage", "tourism"); return way; } + + public static OSMWithTags indoor(String value) { + var way = new OSMWithTags(); + way.addTag("indoor", value); + return way; + } } From b929da86ff32e8a5086e3f2457d898c9bd524959 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Mon, 7 Oct 2024 11:48:22 +0100 Subject: [PATCH 016/213] update comment --- .../graph_builder/module/osm/OsmDatabase.java | 1 - .../java/org/opentripplanner/openstreetmap/model/OSMWay.java | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java b/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java index a52b4824e10..5fe0280270c 100644 --- a/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java +++ b/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java @@ -253,7 +253,6 @@ public void addWay(OSMWay way) { applyLevelsForWay(way); - /* An area can be specified as such, or be one by default as an amenity */ if (way.isArea()) { // this is an area that's a simple polygon. So we can just add it straight // to the areas, if it's not part of a relation. diff --git a/src/main/java/org/opentripplanner/openstreetmap/model/OSMWay.java b/src/main/java/org/opentripplanner/openstreetmap/model/OSMWay.java index 299c1c6c545..f2bd687495d 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/model/OSMWay.java +++ b/src/main/java/org/opentripplanner/openstreetmap/model/OSMWay.java @@ -137,6 +137,11 @@ public boolean isBackwardEscalator() { return isEscalator() && "backward".equals(this.getTag("conveying")); } + /** + * Returns true if the way is considered an area. + * + * An area can be specified as such, or be one by default as an amenity. + */ public boolean isArea() { return ( !isTag("area", "no") && From a7952e392976d933d576d7078a834ae0eaf4aa2a Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Mon, 7 Oct 2024 11:52:58 +0100 Subject: [PATCH 017/213] use more descriptive name --- .../openstreetmap/model/OSMWayTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/test/java/org/opentripplanner/openstreetmap/model/OSMWayTest.java b/src/test/java/org/opentripplanner/openstreetmap/model/OSMWayTest.java index c35e2d216af..0aeaf36ff49 100644 --- a/src/test/java/org/opentripplanner/openstreetmap/model/OSMWayTest.java +++ b/src/test/java/org/opentripplanner/openstreetmap/model/OSMWayTest.java @@ -34,11 +34,11 @@ void testAreaMustContain3Nodes() { @Test void testAreaTags() { - OSMWay way1 = getClosedPolygon(); - way1.addTag("public_transport", "platform"); - assertTrue(way1.isArea()); - way1.addTag("area", "no"); - assertFalse(way1.isArea()); + OSMWay platform = getClosedPolygon(); + platform.addTag("public_transport", "platform"); + assertTrue(platform.isArea()); + platform.addTag("area", "no"); + assertFalse(platform.isArea()); OSMWay roundabout = getClosedPolygon(); roundabout.addTag("highway", "roundabout"); From 953d894762989d84422ed5e9db11f2bceddf3a6a Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Tue, 8 Oct 2024 10:11:21 +0100 Subject: [PATCH 018/213] make indoor areas routable --- .../opentripplanner/openstreetmap/model/OSMWithTags.java | 6 +++++- .../openstreetmap/model/OSMWithTagsTest.java | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/opentripplanner/openstreetmap/model/OSMWithTags.java b/src/main/java/org/opentripplanner/openstreetmap/model/OSMWithTags.java index 2b228f2c537..23511f83022 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/model/OSMWithTags.java +++ b/src/main/java/org/opentripplanner/openstreetmap/model/OSMWithTags.java @@ -549,7 +549,7 @@ public void setOsmProvider(OsmProvider provider) { public boolean isRoutable() { if (isOneOfTags("highway", NON_ROUTABLE_HIGHWAYS)) { return false; - } else if (hasTag("highway") || isPlatform()) { + } else if (hasTag("highway") || isPlatform() || isIndoorRoutable()) { if (isGeneralAccessDenied()) { // There are exceptions. return ( @@ -566,6 +566,10 @@ public boolean isRoutable() { return false; } + public boolean isIndoorRoutable() { + return isTag("indoor", "area") || isTag("indoor", "corridor"); + } + /** * Is this a link to another road, like a highway ramp. */ diff --git a/src/test/java/org/opentripplanner/openstreetmap/model/OSMWithTagsTest.java b/src/test/java/org/opentripplanner/openstreetmap/model/OSMWithTagsTest.java index 3b50d0bff0d..cbc7635113c 100644 --- a/src/test/java/org/opentripplanner/openstreetmap/model/OSMWithTagsTest.java +++ b/src/test/java/org/opentripplanner/openstreetmap/model/OSMWithTagsTest.java @@ -212,6 +212,8 @@ void isWheelchairAccessible() { @Test void isRoutable() { assertFalse(WayTestData.zooPlatform().isRoutable()); + assertTrue(WayTestData.indoor("area").isRoutable()); + assertFalse(WayTestData.indoor("room").isRoutable()); } @Test From 3ad5c228d7056866f2ccc78da9b4241c429e74fd Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Tue, 8 Oct 2024 15:17:43 +0300 Subject: [PATCH 019/213] Update transit model readme --- src/main/java/org/opentripplanner/transit/model/package.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/opentripplanner/transit/model/package.md b/src/main/java/org/opentripplanner/transit/model/package.md index 9c10c88828c..98df088bec4 100644 --- a/src/main/java/org/opentripplanner/transit/model/package.md +++ b/src/main/java/org/opentripplanner/transit/model/package.md @@ -23,10 +23,10 @@ All transit entities must have an ID. Transit entities ar "root" level are consi roots_. -#### @Nonnull and @Nullable entity fields +#### Non-null and nullable entity fields -All fields getters(except primitive types) should be annotated with `@Nullable` or `@Nonnull`. None -null field should be enforced in the Entity constructor by using `Objects.requireNonNull`, +All fields getters(except primitive types) should be annotated with `@Nullable` if they can return null. +Non-nullability of fields should be enforced in the Entity constructor by using `Objects.requireNonNull`, `Objects.requireNonNullElse` or `ObjectUtils.ifNotNull`. We should enforce this for all fields required in both GTFS and in the Nordic NeTEx Profile. For enumeration types using a special value like `UNKNOWN` is preferred over making the field optional. From d1bbfff98c6d20b361bdab9221929f864136639e Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Tue, 8 Oct 2024 16:52:59 +0300 Subject: [PATCH 020/213] Further clarify @Nonnull and @Nullable usage --- doc/dev/decisionrecords/Codestyle.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/doc/dev/decisionrecords/Codestyle.md b/doc/dev/decisionrecords/Codestyle.md index b302ce2b4a6..7c2dcf7688c 100644 --- a/doc/dev/decisionrecords/Codestyle.md +++ b/doc/dev/decisionrecords/Codestyle.md @@ -161,9 +161,17 @@ What to put in Javadoc: ### Annotations - On methods: - - Method should be marked as `@Nullable` if it can return null values - - Use of `@Nonnull` on methods should be avoided as it's the default behaviour - - Method parameters can be marked as `@Nullable` or `@Nonnull` + - Method should be marked as `@Nullable` if they can return null values + - Method parameters should be marked as `@Nullable`. +- On fields: + - Fields should often be marked as `@Nullable` if they are nullable. If the class + only exposes the field through a simple getter method, using the annotation on field is optional, + but on the getter method it is required. + +Use of `@Nonnull` annotation is not allowed. It should be assumed methods/parameters/fields +are non-null if they are not marked as `@Nullable`. However, there are places where the +`@Nullable` annotation is missing even if it should have been used. Those can be updated +to use the `@Nullable` annotation. ## JavaScript From 83d8e3e3c0ffc52eb85710403aacf15774d51ca6 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Wed, 9 Oct 2024 11:05:11 +0300 Subject: [PATCH 021/213] Update doc/dev/decisionrecords/Codestyle.md Co-authored-by: Henrik Abrahamsson <127481124+habrahamsson-skanetrafiken@users.noreply.github.com> --- doc/dev/decisionrecords/Codestyle.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/dev/decisionrecords/Codestyle.md b/doc/dev/decisionrecords/Codestyle.md index 7c2dcf7688c..be777e36337 100644 --- a/doc/dev/decisionrecords/Codestyle.md +++ b/doc/dev/decisionrecords/Codestyle.md @@ -162,7 +162,7 @@ What to put in Javadoc: - On methods: - Method should be marked as `@Nullable` if they can return null values - - Method parameters should be marked as `@Nullable`. + - Method parameters should be marked as `@Nullable` if they can take null values. - On fields: - Fields should often be marked as `@Nullable` if they are nullable. If the class only exposes the field through a simple getter method, using the annotation on field is optional, From 9b1a57707d2522a79f6998af91ef260ed8da3205 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Thu, 10 Oct 2024 16:43:55 +0300 Subject: [PATCH 022/213] Require use of @Nullable on fields and remove annotations from transit model readme --- doc/dev/decisionrecords/Codestyle.md | 4 +--- src/main/java/org/opentripplanner/transit/model/package.md | 1 - 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/doc/dev/decisionrecords/Codestyle.md b/doc/dev/decisionrecords/Codestyle.md index be777e36337..c554e3c9cd9 100644 --- a/doc/dev/decisionrecords/Codestyle.md +++ b/doc/dev/decisionrecords/Codestyle.md @@ -164,9 +164,7 @@ What to put in Javadoc: - Method should be marked as `@Nullable` if they can return null values - Method parameters should be marked as `@Nullable` if they can take null values. - On fields: - - Fields should often be marked as `@Nullable` if they are nullable. If the class - only exposes the field through a simple getter method, using the annotation on field is optional, - but on the getter method it is required. + - Fields should be marked as `@Nullable` if they are nullable. Use of `@Nonnull` annotation is not allowed. It should be assumed methods/parameters/fields are non-null if they are not marked as `@Nullable`. However, there are places where the diff --git a/src/main/java/org/opentripplanner/transit/model/package.md b/src/main/java/org/opentripplanner/transit/model/package.md index 98df088bec4..26ed7facde3 100644 --- a/src/main/java/org/opentripplanner/transit/model/package.md +++ b/src/main/java/org/opentripplanner/transit/model/package.md @@ -25,7 +25,6 @@ roots_. #### Non-null and nullable entity fields -All fields getters(except primitive types) should be annotated with `@Nullable` if they can return null. Non-nullability of fields should be enforced in the Entity constructor by using `Objects.requireNonNull`, `Objects.requireNonNullElse` or `ObjectUtils.ifNotNull`. We should enforce this for all fields required in both GTFS and in the Nordic NeTEx Profile. For enumeration types using a special value From 11f01231b69e68ece4259fc3cc0c64deefc607b6 Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Thu, 10 Oct 2024 16:52:13 +0200 Subject: [PATCH 023/213] Clear added patterns in TimetableSnapshot --- .../model/TimetableSnapshot.java | 29 ++++++++- .../model/TimetableSnapshotTest.java | 61 +++++++++++++++++++ 2 files changed, 88 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/opentripplanner/model/TimetableSnapshot.java b/src/main/java/org/opentripplanner/model/TimetableSnapshot.java index 6b1190a66b3..cec4460a4d2 100644 --- a/src/main/java/org/opentripplanner/model/TimetableSnapshot.java +++ b/src/main/java/org/opentripplanner/model/TimetableSnapshot.java @@ -404,8 +404,13 @@ public void clear(String feedId) { boolean newTripPatternsForModifiedTripsWereCleared = clearNewTripPatternsForModifiedTrips( feedId ); + boolean addedTripPatternsWereCleared = clearRealtimeAddedTripPatterns(feedId); // If this snapshot was modified, it will be dirty after the clear actions. - if (timetablesWereCleared || newTripPatternsForModifiedTripsWereCleared) { + if ( + timetablesWereCleared || + newTripPatternsForModifiedTripsWereCleared || + addedTripPatternsWereCleared + ) { dirty = true; } } @@ -550,7 +555,7 @@ private boolean clearTimetables(String feedId) { } /** - * Clear all realtime added trip patterns matching the provided feed id. + * Clear new trip patterns for modified trips matching the provided feed id. * * @param feedId feed id to clear out * @return true if the newTripPatternForModifiedTrip changed as a result of the call @@ -561,6 +566,26 @@ private boolean clearNewTripPatternsForModifiedTrips(String feedId) { .removeIf(tripIdAndServiceDate -> feedId.equals(tripIdAndServiceDate.tripId().getFeedId())); } + /** + * Clear all realtime added routes, trip patterns and trips matching the provided feed id. + * + * */ + private boolean clearRealtimeAddedTripPatterns(String feedId) { + boolean removedEntry = realTimeAddedTrips + .keySet() + .removeIf(id -> feedId.equals(id.getFeedId())); + realTimeAddedPatternForTrip.keySet().removeIf(trip -> feedId.equals(trip.getId().getFeedId())); + realTimeAddedTripOnServiceDateForTripAndDay + .keySet() + .removeIf(tripOnServiceDate -> feedId.equals(tripOnServiceDate.tripId().getFeedId())); + realTimeAddedTripOnServiceDateById.keySet().removeIf(id -> feedId.equals(id.getFeedId())); + realTimeAddedPatternsForRoute + .keySet() + .removeIf(route -> feedId.equals(route.getId().getFeedId())); + realtimeAddedRoutes.keySet().removeIf(id -> feedId.equals(id.getFeedId())); + return removedEntry; + } + /** * Add the patterns to the stop index, only if they come from a modified pattern */ diff --git a/src/test/java/org/opentripplanner/model/TimetableSnapshotTest.java b/src/test/java/org/opentripplanner/model/TimetableSnapshotTest.java index ffdfc027b76..466f9f0cb84 100644 --- a/src/test/java/org/opentripplanner/model/TimetableSnapshotTest.java +++ b/src/test/java/org/opentripplanner/model/TimetableSnapshotTest.java @@ -16,16 +16,23 @@ import java.time.ZoneId; import java.util.ConcurrentModificationException; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.opentripplanner.ConstantsForTests; import org.opentripplanner.TestOtpModel; import org.opentripplanner._support.time.ZoneIds; +import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.framework.Result; +import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.network.TripPattern; +import org.opentripplanner.transit.model.timetable.Trip; +import org.opentripplanner.transit.model.timetable.TripIdAndServiceDate; +import org.opentripplanner.transit.model.timetable.TripOnServiceDate; import org.opentripplanner.transit.model.timetable.TripTimes; +import org.opentripplanner.transit.model.timetable.TripTimesFactory; import org.opentripplanner.transit.service.TransitModel; import org.opentripplanner.updater.spi.UpdateError; import org.opentripplanner.updater.trip.BackwardsDelayPropagationType; @@ -33,6 +40,7 @@ public class TimetableSnapshotTest { private static final ZoneId timeZone = ZoneIds.GMT; + public static final LocalDate SERVICE_DATE = LocalDate.of(2024, 1, 1); private static Map patternIndex; static String feedId; @@ -304,6 +312,59 @@ void testCannotRevertReadOnlyTimetableSnapshot() { ); } + @Test + void testClear() { + TimetableSnapshot snapshot = new TimetableSnapshot(); + TripPattern pattern = patternIndex.get(new FeedScopedId(feedId, "1.1")); + Trip trip = pattern.scheduledTripsAsStream().findFirst().orElseThrow(); + + TripIdAndServiceDate tripIdAndServiceDate = new TripIdAndServiceDate( + trip.getId(), + SERVICE_DATE + ); + TripTimes updatedTriptimes = TripTimesFactory.tripTimes( + trip, + List.of(new StopTime()), + new Deduplicator() + ); + RealTimeTripUpdate realTimeTripUpdate = new RealTimeTripUpdate( + pattern, + updatedTriptimes, + SERVICE_DATE, + TripOnServiceDate.of(trip.getId()).withTrip(trip).withServiceDate(SERVICE_DATE).build(), + true, + true + ); + + snapshot.update(realTimeTripUpdate); + + assertNotNull(snapshot.getRealTimeAddedTrip(trip.getId())); + assertNotNull(snapshot.getRealTimeAddedPatternForTrip(trip)); + assertNotNull(snapshot.getRealTimeAddedPatternForRoute(pattern.getRoute())); + assertNotNull(snapshot.getRealTimeAddedTripOnServiceDateById(trip.getId())); + assertNotNull(snapshot.getRealTimeAddedTripOnServiceDateForTripAndDay(tripIdAndServiceDate)); + assertNotNull(snapshot.getRealtimeAddedRoute(pattern.getRoute().getId())); + + snapshot.clear(trip.getId().getFeedId()); + + assertNull(snapshot.getRealTimeAddedTrip(trip.getId())); + assertNull(snapshot.getRealTimeAddedPatternForTrip(trip)); + assertNull(snapshot.getRealTimeAddedTripOnServiceDateById(trip.getId())); + assertNull(snapshot.getRealTimeAddedTripOnServiceDateForTripAndDay(tripIdAndServiceDate)); + assertNull(snapshot.getRealtimeAddedRoute(pattern.getRoute().getId())); + assertTrue(snapshot.getRealTimeAddedPatternForRoute(pattern.getRoute()).isEmpty()); + + snapshot.update(realTimeTripUpdate); + snapshot.clear("another feed id"); + + assertNotNull(snapshot.getRealTimeAddedTrip(trip.getId())); + assertNotNull(snapshot.getRealTimeAddedPatternForTrip(trip)); + assertNotNull(snapshot.getRealTimeAddedPatternForRoute(pattern.getRoute())); + assertNotNull(snapshot.getRealTimeAddedTripOnServiceDateById(trip.getId())); + assertNotNull(snapshot.getRealTimeAddedTripOnServiceDateForTripAndDay(tripIdAndServiceDate)); + assertNotNull(snapshot.getRealtimeAddedRoute(pattern.getRoute().getId())); + } + private static TimetableSnapshot createCommittedSnapshot() { TimetableSnapshot timetableSnapshot = new TimetableSnapshot(); return timetableSnapshot.commit(null, true); From a79eb77520297118d406e5e203f7c50b59d61485 Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Thu, 10 Oct 2024 17:32:45 +0200 Subject: [PATCH 024/213] Fix unit test --- .../java/org/opentripplanner/model/TimetableSnapshotTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/opentripplanner/model/TimetableSnapshotTest.java b/src/test/java/org/opentripplanner/model/TimetableSnapshotTest.java index 466f9f0cb84..3a82b45dc21 100644 --- a/src/test/java/org/opentripplanner/model/TimetableSnapshotTest.java +++ b/src/test/java/org/opentripplanner/model/TimetableSnapshotTest.java @@ -340,7 +340,7 @@ void testClear() { assertNotNull(snapshot.getRealTimeAddedTrip(trip.getId())); assertNotNull(snapshot.getRealTimeAddedPatternForTrip(trip)); - assertNotNull(snapshot.getRealTimeAddedPatternForRoute(pattern.getRoute())); + assertFalse(snapshot.getRealTimeAddedPatternForRoute(pattern.getRoute()).isEmpty()); assertNotNull(snapshot.getRealTimeAddedTripOnServiceDateById(trip.getId())); assertNotNull(snapshot.getRealTimeAddedTripOnServiceDateForTripAndDay(tripIdAndServiceDate)); assertNotNull(snapshot.getRealtimeAddedRoute(pattern.getRoute().getId())); @@ -359,7 +359,7 @@ void testClear() { assertNotNull(snapshot.getRealTimeAddedTrip(trip.getId())); assertNotNull(snapshot.getRealTimeAddedPatternForTrip(trip)); - assertNotNull(snapshot.getRealTimeAddedPatternForRoute(pattern.getRoute())); + assertFalse(snapshot.getRealTimeAddedPatternForRoute(pattern.getRoute()).isEmpty()); assertNotNull(snapshot.getRealTimeAddedTripOnServiceDateById(trip.getId())); assertNotNull(snapshot.getRealTimeAddedTripOnServiceDateForTripAndDay(tripIdAndServiceDate)); assertNotNull(snapshot.getRealtimeAddedRoute(pattern.getRoute().getId())); From c8d07e0550ea626402d98bf9f6157a095aaa51fb Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Fri, 11 Oct 2024 13:58:57 +0300 Subject: [PATCH 025/213] Transform package-info java files to md and remove some --- .../ext/datastore/gs/package-info.java | 8 ------- .../ext/datastore/gs/package-info.md | 6 +++++ .../ext/restapi/resources/package-info.java | 5 ----- .../ext/restapi/resources/package-info.md | 4 ++++ .../api/parameter/package-info.java | 6 ----- .../api/parameter/package-info.md | 5 +++++ .../graph_builder/issues/package-info.java | 7 ------ .../graph_builder/issues/package-info.md | 6 +++++ .../netex/loader/parser/package-info.java | 2 -- .../transferoptimization/package-info.java | 4 ---- .../visualizer/package-info.java | 6 ----- .../visualizer/package-info.md | 5 +++++ ...Testdocument.pdf => MMRI_Testdocument.pdf} | Bin .../opentripplanner/mmri/package-info.java | 21 ------------------ .../org/opentripplanner/mmri/package-info.md | 19 ++++++++++++++++ 15 files changed, 45 insertions(+), 59 deletions(-) delete mode 100644 src/ext/java/org/opentripplanner/ext/datastore/gs/package-info.java create mode 100644 src/ext/java/org/opentripplanner/ext/datastore/gs/package-info.md delete mode 100644 src/ext/java/org/opentripplanner/ext/restapi/resources/package-info.java create mode 100644 src/ext/java/org/opentripplanner/ext/restapi/resources/package-info.md delete mode 100644 src/main/java/org/opentripplanner/api/parameter/package-info.java create mode 100644 src/main/java/org/opentripplanner/api/parameter/package-info.md delete mode 100644 src/main/java/org/opentripplanner/graph_builder/issues/package-info.java create mode 100644 src/main/java/org/opentripplanner/graph_builder/issues/package-info.md delete mode 100644 src/main/java/org/opentripplanner/netex/loader/parser/package-info.java delete mode 100644 src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/package-info.java delete mode 100644 src/main/java/org/opentripplanner/visualizer/package-info.java create mode 100644 src/main/java/org/opentripplanner/visualizer/package-info.md rename src/test/java/org/opentripplanner/mmri/{MMRI Testdocument.pdf => MMRI_Testdocument.pdf} (100%) delete mode 100644 src/test/java/org/opentripplanner/mmri/package-info.java create mode 100644 src/test/java/org/opentripplanner/mmri/package-info.md diff --git a/src/ext/java/org/opentripplanner/ext/datastore/gs/package-info.java b/src/ext/java/org/opentripplanner/ext/datastore/gs/package-info.java deleted file mode 100644 index 82ebac6c832..00000000000 --- a/src/ext/java/org/opentripplanner/ext/datastore/gs/package-info.java +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Add support for Google Cloud Storage, getting all input files and storing the graph.obj in the - * cloud. - *

- * This implementation will use the existing {@link org.opentripplanner.standalone.config.OtpConfigLoader} - * to load config from the local disk. - */ -package org.opentripplanner.ext.datastore.gs; diff --git a/src/ext/java/org/opentripplanner/ext/datastore/gs/package-info.md b/src/ext/java/org/opentripplanner/ext/datastore/gs/package-info.md new file mode 100644 index 00000000000..22ae44bb3e3 --- /dev/null +++ b/src/ext/java/org/opentripplanner/ext/datastore/gs/package-info.md @@ -0,0 +1,6 @@ +# Google cloud storage integration + +Add support for Google Cloud Storage, getting all input files and storing the graph.obj in the +cloud. + +This implementation will use the existing OtpConfigLoader to load config from the local disk. diff --git a/src/ext/java/org/opentripplanner/ext/restapi/resources/package-info.java b/src/ext/java/org/opentripplanner/ext/restapi/resources/package-info.java deleted file mode 100644 index 7b66666ee5d..00000000000 --- a/src/ext/java/org/opentripplanner/ext/restapi/resources/package-info.java +++ /dev/null @@ -1,5 +0,0 @@ -/** - * This package contains the JAX-RS-annotated REST resource classes for the OpenTripPlanner public - * API, i.e. the Jersey REST endpoints. - */ -package org.opentripplanner.ext.restapi.resources; diff --git a/src/ext/java/org/opentripplanner/ext/restapi/resources/package-info.md b/src/ext/java/org/opentripplanner/ext/restapi/resources/package-info.md new file mode 100644 index 00000000000..a4bb7eb6f4f --- /dev/null +++ b/src/ext/java/org/opentripplanner/ext/restapi/resources/package-info.md @@ -0,0 +1,4 @@ +# JAX-RS-annotated REST resource classes + +This package contains the JAX-RS-annotated REST resource classes for the OpenTripPlanner public +API, i.e. the Jersey REST endpoints. diff --git a/src/main/java/org/opentripplanner/api/parameter/package-info.java b/src/main/java/org/opentripplanner/api/parameter/package-info.java deleted file mode 100644 index ed9df0c1f61..00000000000 --- a/src/main/java/org/opentripplanner/api/parameter/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * This package contains classes which interpret incoming HTTP query parameters. Query parameters - * arrive as Strings, and Jersey will automatically call constructors with a single String - * argument. - */ -package org.opentripplanner.api.parameter; diff --git a/src/main/java/org/opentripplanner/api/parameter/package-info.md b/src/main/java/org/opentripplanner/api/parameter/package-info.md new file mode 100644 index 00000000000..75c928773f9 --- /dev/null +++ b/src/main/java/org/opentripplanner/api/parameter/package-info.md @@ -0,0 +1,5 @@ +# HTTP query parameters + +This package contains classes which interpret incoming HTTP query parameters. Query parameters +arrive as Strings, and Jersey will automatically call constructors with a single String +argument. diff --git a/src/main/java/org/opentripplanner/graph_builder/issues/package-info.java b/src/main/java/org/opentripplanner/graph_builder/issues/package-info.java deleted file mode 100644 index db899fdd206..00000000000 --- a/src/main/java/org/opentripplanner/graph_builder/issues/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Graph builder data import issues represent errors or exceptional conditions encountered during - * the graph building process. They contain descriptive messages and potentially references to the - * objects in the graph that they annotate which facilitate visualization and cataloging/mapping of - * problems. - */ -package org.opentripplanner.graph_builder.issues; diff --git a/src/main/java/org/opentripplanner/graph_builder/issues/package-info.md b/src/main/java/org/opentripplanner/graph_builder/issues/package-info.md new file mode 100644 index 00000000000..424605d5240 --- /dev/null +++ b/src/main/java/org/opentripplanner/graph_builder/issues/package-info.md @@ -0,0 +1,6 @@ +# Graph building issues + +Graph builder data import issues represent errors or exceptional conditions encountered during +the graph building process. They contain descriptive messages and potentially references to the +objects in the graph that they annotate which facilitate visualization and cataloging/mapping of +problems. diff --git a/src/main/java/org/opentripplanner/netex/loader/parser/package-info.java b/src/main/java/org/opentripplanner/netex/loader/parser/package-info.java deleted file mode 100644 index a0b9cd00721..00000000000 --- a/src/main/java/org/opentripplanner/netex/loader/parser/package-info.java +++ /dev/null @@ -1,2 +0,0 @@ -package org.opentripplanner.netex.loader.parser; -// TODO OTP2 - This package need Unit tests diff --git a/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/package-info.java b/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/package-info.java deleted file mode 100644 index 22163201b6e..00000000000 --- a/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Package documentation - */ -package org.opentripplanner.routing.algorithm.transferoptimization; diff --git a/src/main/java/org/opentripplanner/visualizer/package-info.java b/src/main/java/org/opentripplanner/visualizer/package-info.java deleted file mode 100644 index e189c27956f..00000000000 --- a/src/main/java/org/opentripplanner/visualizer/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * This package contains classes used for visualizing OpenTripPlanner graphs. This graph visualizer - * is intended for debugging purposes and may therefore have arcane developer-oriented features and - * grow new UI components as needed. - */ -package org.opentripplanner.visualizer; diff --git a/src/main/java/org/opentripplanner/visualizer/package-info.md b/src/main/java/org/opentripplanner/visualizer/package-info.md new file mode 100644 index 00000000000..f1b60dde32f --- /dev/null +++ b/src/main/java/org/opentripplanner/visualizer/package-info.md @@ -0,0 +1,5 @@ +# Graph visualizer + +This package contains classes used for visualizing OpenTripPlanner graphs. This graph visualizer +is intended for debugging purposes and may therefore have arcane developer-oriented features and +grow new UI components as needed. diff --git a/src/test/java/org/opentripplanner/mmri/MMRI Testdocument.pdf b/src/test/java/org/opentripplanner/mmri/MMRI_Testdocument.pdf similarity index 100% rename from src/test/java/org/opentripplanner/mmri/MMRI Testdocument.pdf rename to src/test/java/org/opentripplanner/mmri/MMRI_Testdocument.pdf diff --git a/src/test/java/org/opentripplanner/mmri/package-info.java b/src/test/java/org/opentripplanner/mmri/package-info.java deleted file mode 100644 index 563a92abdc5..00000000000 --- a/src/test/java/org/opentripplanner/mmri/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * What is this package doing here? - *

- * In 2013, significant improvements were made to OTP as part of a precommercial procurement project - * in The Netherlands called MMRI ("MultiModale ReisInformatie" => "multimodal travel information"). - * This project is itself part of a larger project called "Better Benutten" => "better utilization". - * Most effort concentrated on the implementation of GTFS-RT updates and related improvements to the - * architecture of OTP. Additionally, a testing module was developed to verify that all the planners - * that were involved in the project (not just OTP) met a minimum set of requirements. OTP was first - * to pass all tests, ahead of two different solutions. Unfortunately, having two sets of tests does - * not make it simpler to continuously verify that OTP still functions correctly, which is why these - * MMRI tests have now been added to OTP's own test suite. These versions are intended to be a close - * approximation of reality, but several minor shortcuts have been taken, like applying trip updates - * directly to the graph instead of going through the thread-safe graph writer framework. Given that - * thread-safety is a technical issue and not a functional one, this is considered to be - * acceptable. - *

- * The test cases are described here. and in - * here - */ -package org.opentripplanner.mmri; diff --git a/src/test/java/org/opentripplanner/mmri/package-info.md b/src/test/java/org/opentripplanner/mmri/package-info.md new file mode 100644 index 00000000000..5d4f541f1cb --- /dev/null +++ b/src/test/java/org/opentripplanner/mmri/package-info.md @@ -0,0 +1,19 @@ +# MMRI ("MultiModale ReisInformatie" => "multimodal travel information") + +What is this package doing here? + +In 2013, significant improvements were made to OTP as part of a precommercial procurement project +in The Netherlands called MMRI ("MultiModale ReisInformatie" => "multimodal travel information"). +This project is itself part of a larger project called "Better Benutten" => "better utilization". +Most effort concentrated on the implementation of GTFS-RT updates and related improvements to the +architecture of OTP. Additionally, a testing module was developed to verify that all the planners +that were involved in the project (not just OTP) met a minimum set of requirements. OTP was first +to pass all tests, ahead of two different solutions. Unfortunately, having two sets of tests does +not make it simpler to continuously verify that OTP still functions correctly, which is why these +MMRI tests have now been added to OTP's own test suite. These versions are intended to be a close +approximation of reality, but several minor shortcuts have been taken, like applying trip updates +directly to the graph instead of going through the thread-safe graph writer framework. Given that +thread-safety is a technical issue and not a functional one, this is considered to be +acceptable. + +The test cases are described [here](https://github.com/plannerstack/testset) and [here](./MMRI_Testdocument.pdf) From a6aa0ae6ef74a3855c3a922d8a2cb8e3c4a8d7a5 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Fri, 11 Oct 2024 16:35:20 +0300 Subject: [PATCH 026/213] Generate package-info.java files with a template that uses @ParametersAreNonnullByDefault --- .gitignore | 1 + pom.xml | 24 +++++++++++++++++++ .../templates/package-info-template.java | 4 ++++ 3 files changed, 29 insertions(+) create mode 100644 src/build/templates/package-info-template.java diff --git a/.gitignore b/.gitignore index 6fac28d2178..3227500244d 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,7 @@ o_o_standalone_config_IncludeFileDirectiveTest_part.json .venv/ _site/ build/ +!/src/build/ dist/ doc/user/_build/ gen-java/ diff --git a/pom.xml b/pom.xml index 1f5bb3ed8a3..1ad24efdb9f 100644 --- a/pom.xml +++ b/pom.xml @@ -515,6 +515,30 @@ com.google.protobuf:protoc:3.22.0:exe:${os.detected.classifier} + + + com.github.bohnman + package-info-maven-plugin + 1.1.0 + + + ${project.basedir}/src/main/java + ${project.basedir}/target/generated-sources + + + ** + + + + + + + + generate + + + + diff --git a/src/build/templates/package-info-template.java b/src/build/templates/package-info-template.java new file mode 100644 index 00000000000..7cbb693f540 --- /dev/null +++ b/src/build/templates/package-info-template.java @@ -0,0 +1,4 @@ +@ParametersAreNonnullByDefault +package org.opentripplanner; + +import javax.annotation.ParametersAreNonnullByDefault; From a41fad277cff456704e1d3eed51b1a7921bca797 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Sun, 13 Oct 2024 19:35:30 +0200 Subject: [PATCH 027/213] refactor: Move OTP application integration out of the Raptor module. --- .../OTPRequestTimeoutException.java | 7 ++-- .../raptor/api/request/RaptorEnvironment.java | 41 +++++++++++++++++++ .../api/request/RaptorTuningParameters.java | 5 --- .../raptor/configure/RaptorConfig.java | 38 ++++++++--------- .../raptor/rangeraptor/RangeRaptor.java | 9 ++-- .../service/RangeRaptorDynamicSearch.java | 7 ++-- .../service/ViaRangeRaptorDynamicSearch.java | 3 +- .../raptoradapter/router/TransitRouter.java | 7 ++-- .../config/configure/ConfigModule.java | 16 +++++++- .../RaptorEnvironmentFactory.java | 41 +++++++++++++++++++ .../routerconfig/TransitRoutingConfig.java | 3 +- .../opentripplanner/TestServerContext.java | 6 ++- .../transit/speed_test/SpeedTest.java | 6 ++- 13 files changed, 140 insertions(+), 49 deletions(-) create mode 100644 application/src/main/java/org/opentripplanner/raptor/api/request/RaptorEnvironment.java create mode 100644 application/src/main/java/org/opentripplanner/standalone/config/routerconfig/RaptorEnvironmentFactory.java diff --git a/application/src/main/java/org/opentripplanner/framework/application/OTPRequestTimeoutException.java b/application/src/main/java/org/opentripplanner/framework/application/OTPRequestTimeoutException.java index a8b0789d7c0..9d71314f153 100644 --- a/application/src/main/java/org/opentripplanner/framework/application/OTPRequestTimeoutException.java +++ b/application/src/main/java/org/opentripplanner/framework/application/OTPRequestTimeoutException.java @@ -18,10 +18,9 @@ public String getMessage() { /** * The Grizzly web server is configured with a transaction timeout and will set the interrupt - * flag on the current thread. OTP does not have many blocking operations which check the - * interrupted flag, so instead we need to do the check manually. The check has a small - * performance overhead so try to place the check in the beginning of significantly big block of - * calculations. + * flag on the current thread. OTP has few blocking operations which check the interrupted flag, + * so instead we need to do the check manually. The check has a small performance overhead, so + * try to place the check at the beginning of a significant calculations. */ public static void checkForTimeout() { // We call yield() to allow monitoring thread to interrupt current thread. If this work or not diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorEnvironment.java b/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorEnvironment.java new file mode 100644 index 00000000000..30e3abb5b27 --- /dev/null +++ b/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorEnvironment.java @@ -0,0 +1,41 @@ +package org.opentripplanner.raptor.api.request; + +import java.util.concurrent.ExecutorService; +import javax.annotation.Nullable; + +/** + * The raptor environment provides a few hooks and integration points to the caller. The default + * implementation will work just fine, override to adjust Raptor to the calling application. + */ +public interface RaptorEnvironment { + Runnable NOOP = () -> {}; + + /** + * Use the timeout-hook to register a callback from Raptor. The hook is called periodically to + * check if a time-out is reached. The hook should then exit with an exception handled by the + * caller. Raptor does not have blocking method calls so just calling {@link Thread#interrupt()} + * will not terminate the Raptor search. + */ + default Runnable timeoutHook() { + return NOOP; + } + + /** + * Raptor has support for running a few things in parallel. If Raptor catches an + * {@link InterruptedException}, Raptor will convert the checked exception to an unchecked + * exception. The default is {@link RuntimeException}. Override this method to map + * {@link InterruptedException} to your prefered runtime exception. + */ + default RuntimeException mapInterruptedException(InterruptedException e) { + return new RuntimeException(e); + } + + /** + * Inject a thread pool into Raptor to run part of the raptor search in parallel. If no + * thread pool is provided, then Raptor runs everything in the caller thread. + */ + @Nullable + default ExecutorService threadPool() { + return null; + } +} diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorTuningParameters.java b/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorTuningParameters.java index d80c50ed7f5..a85fc3069f6 100644 --- a/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorTuningParameters.java +++ b/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorTuningParameters.java @@ -20,11 +20,6 @@ default int iterationDepartureStepInSeconds() { return 60; } - /** see {@link org.opentripplanner.standalone.config.routerconfig.TransitRoutingConfig} **/ - default int searchThreadPoolSize() { - return 0; - } - /** * Coefficients used to calculate raptor-search-window parameters dynamically from heuristics. */ diff --git a/application/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java b/application/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java index cc488448304..e481435c6c4 100644 --- a/application/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java +++ b/application/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java @@ -1,10 +1,8 @@ package org.opentripplanner.raptor.configure; import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import javax.annotation.Nullable; -import org.opentripplanner.framework.concurrent.OtpRequestThreadFactory; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; +import org.opentripplanner.raptor.api.request.RaptorEnvironment; import org.opentripplanner.raptor.api.request.RaptorRequest; import org.opentripplanner.raptor.api.request.RaptorTuningParameters; import org.opentripplanner.raptor.rangeraptor.DefaultRangeRaptorWorker; @@ -27,26 +25,26 @@ /** * This class is responsible for creating a new search and holding application scoped Raptor state. *

- * This class should have APPLICATION scope. It manage a threadPool, and hold a reference to the - * application tuning parameters. + * This class should have APPLICATION scope. It keeps a reference to the environment ant the + * tuning parameters. The environment has a thread-pool, which should be APPLICATION scope. * * @param The TripSchedule type defined by the user of the raptor API. */ public class RaptorConfig { - private final ExecutorService threadPool; + private final RaptorEnvironment environment; private final RaptorTuningParameters tuningParameters; /** The service is not final, because it depends on the request. */ private PassThroughPointsService passThroughPointsService = null; - public RaptorConfig(RaptorTuningParameters tuningParameters) { + public RaptorConfig(RaptorTuningParameters tuningParameters, RaptorEnvironment environment) { this.tuningParameters = tuningParameters; - this.threadPool = createNewThreadPool(tuningParameters.searchThreadPoolSize()); + this.environment = environment; } public static RaptorConfig defaultConfigForTest() { - return new RaptorConfig<>(new RaptorTuningParameters() {}); + return new RaptorConfig<>(new RaptorTuningParameters() {}, new RaptorEnvironment() {}); } public SearchContext context(RaptorTransitDataProvider transit, RaptorRequest request) { @@ -114,19 +112,23 @@ public Heuristics createHeuristic( } public boolean isMultiThreaded() { - return threadPool != null; + return threadPool() != null; } public ExecutorService threadPool() { - return threadPool; + return environment.threadPool(); } public void shutdown() { - if (threadPool != null) { - threadPool.shutdown(); + if (threadPool() != null) { + threadPool().shutdown(); } } + public RuntimeException mapInterruptedException(InterruptedException e) { + return environment.mapInterruptedException(e); + } + public RaptorSearchWindowCalculator searchWindowCalculator() { return new RaptorSearchWindowCalculator(tuningParameters.dynamicSearchWindowCoefficients()); } @@ -164,14 +166,8 @@ private RangeRaptor createRangeRaptor(SearchContext ctx, RangeRaptorWorker ctx.roundTracker(), ctx.calculator(), ctx.createLifeCyclePublisher(), - ctx.performanceTimers() + ctx.performanceTimers(), + environment.timeoutHook() ); } - - @Nullable - private ExecutorService createNewThreadPool(int size) { - return size > 0 - ? Executors.newFixedThreadPool(size, OtpRequestThreadFactory.of("raptor-%d")) - : null; - } } diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/RangeRaptor.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/RangeRaptor.java index 02c39f9e52c..02fb2a627e9 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/RangeRaptor.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/RangeRaptor.java @@ -2,7 +2,6 @@ import static java.util.Objects.requireNonNull; -import org.opentripplanner.framework.application.OTPRequestTimeoutException; import org.opentripplanner.raptor.api.debug.RaptorTimers; import org.opentripplanner.raptor.api.model.RaptorConstants; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; @@ -66,6 +65,8 @@ public final class RangeRaptor implements RaptorRo private final LifeCycleEventPublisher lifeCycle; + private final Runnable timeoutHook; + private final int minNumberOfRounds; public RangeRaptor( @@ -75,7 +76,8 @@ public RangeRaptor( RoundTracker roundTracker, RaptorTransitCalculator calculator, LifeCycleEventPublisher lifeCyclePublisher, - RaptorTimers timers + RaptorTimers timers, + Runnable timeoutHook ) { this.worker = requireNonNull(worker); this.transitData = requireNonNull(transitData); @@ -85,6 +87,7 @@ public RangeRaptor( this.minNumberOfRounds = accessPaths.calculateMaxNumberOfRides(); this.roundTracker = requireNonNull(roundTracker); this.lifeCycle = requireNonNull(lifeCyclePublisher); + this.timeoutHook = requireNonNull(timeoutHook); } public RaptorRouterResult route() { @@ -165,7 +168,7 @@ private int round() { * Run the raptor search for this particular iteration departure time */ private void setupIteration(int iterationDepartureTime) { - OTPRequestTimeoutException.checkForTimeout(); + timeoutHook.run(); roundTracker.setupIteration(); lifeCycle.prepareForNextRound(round()); lifeCycle.setupIteration(iterationDepartureTime); diff --git a/application/src/main/java/org/opentripplanner/raptor/service/RangeRaptorDynamicSearch.java b/application/src/main/java/org/opentripplanner/raptor/service/RangeRaptorDynamicSearch.java index 5353804f414..c2a174d646a 100644 --- a/application/src/main/java/org/opentripplanner/raptor/service/RangeRaptorDynamicSearch.java +++ b/application/src/main/java/org/opentripplanner/raptor/service/RangeRaptorDynamicSearch.java @@ -11,7 +11,6 @@ import java.util.concurrent.Future; import java.util.stream.Collectors; import javax.annotation.Nullable; -import org.opentripplanner.framework.application.OTPRequestTimeoutException; import org.opentripplanner.raptor.RaptorService; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.api.request.RaptorRequest; @@ -182,10 +181,10 @@ private void runHeuristicsInParallel() { Thread.currentThread().interrupt(); // propagate interruption to the running task. asyncResult.cancel(true); - throw new OTPRequestTimeoutException(); + throw config.mapInterruptedException(e); } catch (ExecutionException e) { - if (e.getCause() instanceof DestinationNotReachedException) { - throw new DestinationNotReachedException(); + if (e.getCause() instanceof DestinationNotReachedException dnr) { + throw dnr; } LOG.error(e.getMessage() + ". Request: " + originalRequest, e); throw new IllegalStateException( diff --git a/application/src/main/java/org/opentripplanner/raptor/service/ViaRangeRaptorDynamicSearch.java b/application/src/main/java/org/opentripplanner/raptor/service/ViaRangeRaptorDynamicSearch.java index 4476e40464f..cfd12f65b3a 100644 --- a/application/src/main/java/org/opentripplanner/raptor/service/ViaRangeRaptorDynamicSearch.java +++ b/application/src/main/java/org/opentripplanner/raptor/service/ViaRangeRaptorDynamicSearch.java @@ -11,7 +11,6 @@ import java.util.concurrent.Future; import java.util.stream.Collectors; import javax.annotation.Nullable; -import org.opentripplanner.framework.application.OTPRequestTimeoutException; import org.opentripplanner.raptor.RaptorService; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.api.request.RaptorRequest; @@ -182,7 +181,7 @@ private void runHeuristicsInParallel() { Thread.currentThread().interrupt(); // propagate interruption to the running task. asyncResult.cancel(true); - throw new OTPRequestTimeoutException(); + throw config.mapInterruptedException(e); } catch (ExecutionException e) { if (e.getCause() instanceof DestinationNotReachedException) { throw new DestinationNotReachedException(); diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java index e72d8ee1427..8040c16d800 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java @@ -288,11 +288,10 @@ private Collection fetchAccessEgresses(AccessEgre } /** - * Given a list of {@code results} shift the access ones which contain driving - * so that they only start at the time when the ride hailing vehicle can actually be there - * to pick up passengers. + * Given a list of {@code results} shift the access ones that contain driving so that they only + * start at the time when the ride hailing vehicle can actually be there to pick up passengers. *

- * If there are accesses/egresses with only walking then they remain unchanged. + * If there are accesses/egresses with only walking, then they remain unchanged. *

* This method is a good candidate to be moved to the access/egress filter chain when that has * been added. diff --git a/application/src/main/java/org/opentripplanner/standalone/config/configure/ConfigModule.java b/application/src/main/java/org/opentripplanner/standalone/config/configure/ConfigModule.java index b7d7084f7ba..4f75f3984d5 100644 --- a/application/src/main/java/org/opentripplanner/standalone/config/configure/ConfigModule.java +++ b/application/src/main/java/org/opentripplanner/standalone/config/configure/ConfigModule.java @@ -3,12 +3,14 @@ import dagger.Module; import dagger.Provides; import jakarta.inject.Singleton; +import org.opentripplanner.raptor.api.request.RaptorEnvironment; import org.opentripplanner.raptor.configure.RaptorConfig; import org.opentripplanner.routing.algorithm.raptoradapter.transit.TripSchedule; import org.opentripplanner.standalone.config.BuildConfig; import org.opentripplanner.standalone.config.ConfigModel; import org.opentripplanner.standalone.config.OtpConfig; import org.opentripplanner.standalone.config.RouterConfig; +import org.opentripplanner.standalone.config.routerconfig.RaptorEnvironmentFactory; /** * Map {@link ConfigModel} into more specific types like {@link BuildConfig} to simplify @@ -34,7 +36,17 @@ static RouterConfig provideRouterConfig(ConfigModel model) { @Provides @Singleton - static RaptorConfig providesRaptorConfig(ConfigModel config) { - return new RaptorConfig<>(config.routerConfig().transitTuningConfig()); + static RaptorConfig providesRaptorConfig( + RouterConfig routerConfig, + RaptorEnvironment environment + ) { + return new RaptorConfig<>(routerConfig.transitTuningConfig(), environment); + } + + @Provides + @Singleton + static RaptorEnvironment providesRaptorEnvironment(RouterConfig routerConfig) { + int searchThreadPoolSize = routerConfig.transitTuningConfig().searchThreadPoolSize(); + return RaptorEnvironmentFactory.create(searchThreadPoolSize); } } diff --git a/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/RaptorEnvironmentFactory.java b/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/RaptorEnvironmentFactory.java new file mode 100644 index 00000000000..e2cd5d6dee7 --- /dev/null +++ b/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/RaptorEnvironmentFactory.java @@ -0,0 +1,41 @@ +package org.opentripplanner.standalone.config.routerconfig; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import javax.annotation.Nullable; +import org.opentripplanner.framework.application.OTPRequestTimeoutException; +import org.opentripplanner.framework.concurrent.OtpRequestThreadFactory; +import org.opentripplanner.raptor.api.request.RaptorEnvironment; + +/** + * Create {@link RaptorEnvironment} from config and adapt it to the OTP application. + */ +public class RaptorEnvironmentFactory { + + public static RaptorEnvironment create(final int threadPoolSize) { + return new RaptorEnvironment() { + @Override + public Runnable timeoutHook() { + return OTPRequestTimeoutException::checkForTimeout; + } + + /** + * OTP web server will interrupt all request threads in case of a timeout. In OTP + * such events should be mapped to {@link OTPRequestTimeoutException}, witch will + * later be mapped to the right API response. + */ + @Override + public RuntimeException mapInterruptedException(InterruptedException e) { + return new OTPRequestTimeoutException(); + } + + @Nullable + @Override + public ExecutorService threadPool() { + return threadPoolSize > 0 + ? Executors.newFixedThreadPool(threadPoolSize, OtpRequestThreadFactory.of("raptor-%d")) + : null; + } + }; + } +} diff --git a/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/TransitRoutingConfig.java b/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/TransitRoutingConfig.java index 34465cff27a..74dbfd4bab9 100644 --- a/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/TransitRoutingConfig.java +++ b/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/TransitRoutingConfig.java @@ -112,7 +112,7 @@ public TransitRoutingConfig( no extra threads are started and the search is done in one thread. """ ) - .asInt(dft.searchThreadPoolSize()); + .asInt(0); // Dynamic Search Window this.stopBoardAlightDuringTransferCost = c @@ -244,7 +244,6 @@ public int iterationDepartureStepInSeconds() { return iterationDepartureStepInSeconds; } - @Override public int searchThreadPoolSize() { return searchThreadPoolSize; } diff --git a/application/src/test/java/org/opentripplanner/TestServerContext.java b/application/src/test/java/org/opentripplanner/TestServerContext.java index 90dca6ff840..9e6a5a8acf6 100644 --- a/application/src/test/java/org/opentripplanner/TestServerContext.java +++ b/application/src/test/java/org/opentripplanner/TestServerContext.java @@ -19,6 +19,7 @@ import org.opentripplanner.service.worldenvelope.model.WorldEnvelope; import org.opentripplanner.standalone.api.OtpServerRequestContext; import org.opentripplanner.standalone.config.RouterConfig; +import org.opentripplanner.standalone.config.routerconfig.RaptorEnvironmentFactory; import org.opentripplanner.standalone.server.DefaultServerRequestContext; import org.opentripplanner.street.model.StreetLimitationParameters; import org.opentripplanner.street.service.DefaultStreetLimitationParametersService; @@ -42,7 +43,10 @@ public static OtpServerRequestContext createServerContext( DefaultServerRequestContext context = DefaultServerRequestContext.create( routerConfig.transitTuningConfig(), routerConfig.routingRequestDefaults(), - new RaptorConfig<>(routerConfig.transitTuningConfig()), + new RaptorConfig<>( + routerConfig.transitTuningConfig(), + RaptorEnvironmentFactory.create(routerConfig.transitTuningConfig().searchThreadPoolSize()) + ), graph, new DefaultTransitService(transitModel), Metrics.globalRegistry, diff --git a/application/src/test/java/org/opentripplanner/transit/speed_test/SpeedTest.java b/application/src/test/java/org/opentripplanner/transit/speed_test/SpeedTest.java index 85a33281f81..a97042ee710 100644 --- a/application/src/test/java/org/opentripplanner/transit/speed_test/SpeedTest.java +++ b/application/src/test/java/org/opentripplanner/transit/speed_test/SpeedTest.java @@ -29,6 +29,7 @@ import org.opentripplanner.standalone.config.BuildConfig; import org.opentripplanner.standalone.config.ConfigModel; import org.opentripplanner.standalone.config.OtpConfigLoader; +import org.opentripplanner.standalone.config.routerconfig.RaptorEnvironmentFactory; import org.opentripplanner.standalone.config.routerconfig.VectorTileConfig; import org.opentripplanner.standalone.server.DefaultServerRequestContext; import org.opentripplanner.transit.service.DefaultTransitService; @@ -108,7 +109,10 @@ public SpeedTest( DefaultServerRequestContext.create( config.transitRoutingParams, config.request, - new RaptorConfig<>(config.transitRoutingParams), + new RaptorConfig<>( + config.transitRoutingParams, + RaptorEnvironmentFactory.create(config.transitRoutingParams.searchThreadPoolSize()) + ), graph, new DefaultTransitService(transitModel), timer.getRegistry(), From d3f7d709f8d068f76b6cd900df1d19288f9d2b65 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Tue, 15 Oct 2024 10:41:09 +0100 Subject: [PATCH 028/213] use isOneOfTags for testing OSM objects against multiple values --- .../main/java/org/opentripplanner/osm/model/OsmWay.java | 9 ++++++++- .../java/org/opentripplanner/osm/model/OsmWithTags.java | 7 ++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/osm/model/OsmWay.java b/application/src/main/java/org/opentripplanner/osm/model/OsmWay.java index 710d41425e7..0bd7b5a8975 100644 --- a/application/src/main/java/org/opentripplanner/osm/model/OsmWay.java +++ b/application/src/main/java/org/opentripplanner/osm/model/OsmWay.java @@ -14,6 +14,13 @@ public class OsmWay extends OsmWithTags { "backward", "reversible" ); + + private static final Set INDOOR_AREA_VALUES = Set.of( + "room", + "corridor", + "area" + ); + private final TLongList nodes = new TLongArrayList(); public void addNodeRef(long nodeRef) { @@ -153,7 +160,7 @@ public boolean isArea() { } public boolean isIndoorArea() { - return isTag("indoor", "room") || isTag("indoor", "area") || isTag("indoor", "corridor"); + return isOneOfTags("indoor", INDOOR_AREA_VALUES); } /** diff --git a/application/src/main/java/org/opentripplanner/osm/model/OsmWithTags.java b/application/src/main/java/org/opentripplanner/osm/model/OsmWithTags.java index cbc77a10fbf..28dd1db9fae 100644 --- a/application/src/main/java/org/opentripplanner/osm/model/OsmWithTags.java +++ b/application/src/main/java/org/opentripplanner/osm/model/OsmWithTags.java @@ -44,6 +44,11 @@ public class OsmWithTags { "bus_guideway", "escape" ); + + private static final Set INDOOR_ROUTABLE_VALUES = Set.of( + "corridor", + "area" + ); private static final Set LEVEL_TAGS = Set.of("level", "layer"); private static final Set DEFAULT_LEVEL = Set.of("0"); @@ -557,7 +562,7 @@ public boolean isRoutable() { } public boolean isIndoorRoutable() { - return isTag("indoor", "area") || isTag("indoor", "corridor"); + return isOneOfTags("indoor", INDOOR_ROUTABLE_VALUES); } /** From 6dbaf214a78e2479ae8241df04bf8a56e4364794 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Tue, 15 Oct 2024 10:47:37 +0100 Subject: [PATCH 029/213] renamed isArea to isAreaWay as the logic has changed --- .../opentripplanner/graph_builder/module/osm/OsmDatabase.java | 2 +- .../src/main/java/org/opentripplanner/osm/model/OsmWay.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java b/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java index cd396c53cd3..a560b96b2ab 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java @@ -253,7 +253,7 @@ public void addWay(OsmWay way) { applyLevelsForWay(way); - if (way.isArea()) { + if (way.isAreaWay()) { // this is an area that's a simple polygon. So we can just add it straight // to the areas, if it's not part of a relation. if (!areaWayIds.contains(wayId)) { diff --git a/application/src/main/java/org/opentripplanner/osm/model/OsmWay.java b/application/src/main/java/org/opentripplanner/osm/model/OsmWay.java index 0bd7b5a8975..31a0d8d9442 100644 --- a/application/src/main/java/org/opentripplanner/osm/model/OsmWay.java +++ b/application/src/main/java/org/opentripplanner/osm/model/OsmWay.java @@ -149,7 +149,7 @@ public boolean isBackwardEscalator() { * * An area can be specified as such, or be one by default as an amenity. */ - public boolean isArea() { + public boolean isAreaWay() { return ( !isTag("area", "no") && ( From 32a97b7fdd4f3dc5c7cc1c920f08b1cb26661dd1 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Tue, 15 Oct 2024 11:14:28 +0100 Subject: [PATCH 030/213] only check for routable areas instead of areas in general --- .../graph_builder/module/osm/OsmDatabase.java | 2 +- .../org/opentripplanner/osm/model/OsmWay.java | 20 +++++++------------ .../osm/model/OsmWithTags.java | 7 ++----- 3 files changed, 10 insertions(+), 19 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java b/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java index a560b96b2ab..e6727190b54 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java @@ -253,7 +253,7 @@ public void addWay(OsmWay way) { applyLevelsForWay(way); - if (way.isAreaWay()) { + if (way.isRoutableArea()) { // this is an area that's a simple polygon. So we can just add it straight // to the areas, if it's not part of a relation. if (!areaWayIds.contains(wayId)) { diff --git a/application/src/main/java/org/opentripplanner/osm/model/OsmWay.java b/application/src/main/java/org/opentripplanner/osm/model/OsmWay.java index 31a0d8d9442..7b5fbe56748 100644 --- a/application/src/main/java/org/opentripplanner/osm/model/OsmWay.java +++ b/application/src/main/java/org/opentripplanner/osm/model/OsmWay.java @@ -14,13 +14,7 @@ public class OsmWay extends OsmWithTags { "backward", "reversible" ); - - private static final Set INDOOR_AREA_VALUES = Set.of( - "room", - "corridor", - "area" - ); - + private final TLongList nodes = new TLongArrayList(); public void addNodeRef(long nodeRef) { @@ -149,20 +143,20 @@ public boolean isBackwardEscalator() { * * An area can be specified as such, or be one by default as an amenity. */ - public boolean isAreaWay() { + public boolean isRoutableArea() { return ( !isTag("area", "no") && ( - isTag("area", "yes") || isParking() || isBikeParking() || isBoardingArea() || isIndoorArea() + isTag("area", "yes") || + isParking() || + isBikeParking() || + isBoardingArea() || + isIndoorRoutable() ) && getNodeRefs().size() > 2 ); } - public boolean isIndoorArea() { - return isOneOfTags("indoor", INDOOR_AREA_VALUES); - } - /** * Given a set of {@code permissions} check if it can really be applied to both directions * of the way and return the permissions for both cases. diff --git a/application/src/main/java/org/opentripplanner/osm/model/OsmWithTags.java b/application/src/main/java/org/opentripplanner/osm/model/OsmWithTags.java index 28dd1db9fae..cbaf4652b34 100644 --- a/application/src/main/java/org/opentripplanner/osm/model/OsmWithTags.java +++ b/application/src/main/java/org/opentripplanner/osm/model/OsmWithTags.java @@ -44,11 +44,8 @@ public class OsmWithTags { "bus_guideway", "escape" ); - - private static final Set INDOOR_ROUTABLE_VALUES = Set.of( - "corridor", - "area" - ); + + private static final Set INDOOR_ROUTABLE_VALUES = Set.of("corridor", "area"); private static final Set LEVEL_TAGS = Set.of("level", "layer"); private static final Set DEFAULT_LEVEL = Set.of("0"); From a8a7829672cdff551a80d468f34b6f85038a84af Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Tue, 15 Oct 2024 12:07:09 +0100 Subject: [PATCH 031/213] fix test cases --- .../opentripplanner/osm/model/OsmWayTest.java | 48 +++++++++---------- .../wayproperty/specifier/WayTestData.java | 4 +- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/application/src/test/java/org/opentripplanner/osm/model/OsmWayTest.java b/application/src/test/java/org/opentripplanner/osm/model/OsmWayTest.java index 16a7498f94b..9ac9457a9ec 100644 --- a/application/src/test/java/org/opentripplanner/osm/model/OsmWayTest.java +++ b/application/src/test/java/org/opentripplanner/osm/model/OsmWayTest.java @@ -19,52 +19,52 @@ void testIsBicycleDismountForced() { @Test void testAreaMustContain3Nodes() { - OSMWay way = new OSMWay(); + OsmWay way = new OsmWay(); way.addTag("area", "yes"); - assertFalse(way.isArea()); + assertFalse(way.isRoutableArea()); way.addNodeRef(1); - assertFalse(way.isArea()); + assertFalse(way.isRoutableArea()); way.addNodeRef(2); - assertFalse(way.isArea()); + assertFalse(way.isRoutableArea()); way.addNodeRef(3); - assertTrue(way.isArea()); + assertTrue(way.isRoutableArea()); way.addNodeRef(4); - assertTrue(way.isArea()); + assertTrue(way.isRoutableArea()); } @Test void testAreaTags() { - OSMWay platform = getClosedPolygon(); + OsmWay platform = getClosedPolygon(); platform.addTag("public_transport", "platform"); - assertTrue(platform.isArea()); + assertTrue(platform.isRoutableArea()); platform.addTag("area", "no"); - assertFalse(platform.isArea()); + assertFalse(platform.isRoutableArea()); - OSMWay roundabout = getClosedPolygon(); + OsmWay roundabout = getClosedPolygon(); roundabout.addTag("highway", "roundabout"); - assertFalse(roundabout.isArea()); + assertFalse(roundabout.isRoutableArea()); - OSMWay pedestrian = getClosedPolygon(); + OsmWay pedestrian = getClosedPolygon(); pedestrian.addTag("highway", "pedestrian"); - assertFalse(pedestrian.isArea()); + assertFalse(pedestrian.isRoutableArea()); pedestrian.addTag("area", "yes"); - assertTrue(pedestrian.isArea()); + assertTrue(pedestrian.isRoutableArea()); - OSMWay indoorArea = getClosedPolygon(); + OsmWay indoorArea = getClosedPolygon(); indoorArea.addTag("indoor", "area"); - assertTrue(indoorArea.isArea()); + assertTrue(indoorArea.isRoutableArea()); - OSMWay bikeParking = getClosedPolygon(); + OsmWay bikeParking = getClosedPolygon(); bikeParking.addTag("amenity", "bicycle_parking"); - assertTrue(bikeParking.isArea()); + assertTrue(bikeParking.isRoutableArea()); - OSMWay corridor = getClosedPolygon(); + OsmWay corridor = getClosedPolygon(); corridor.addTag("indoor", "corridor"); - assertTrue(corridor.isArea()); + assertTrue(corridor.isRoutableArea()); - OSMWay door = getClosedPolygon(); + OsmWay door = getClosedPolygon(); door.addTag("indoor", "door"); - assertFalse(door.isArea()); + assertFalse(door.isRoutableArea()); } @Test @@ -176,8 +176,8 @@ void escalator() { assertFalse(escalator.isEscalator()); } - private OSMWay getClosedPolygon() { - var way = new OSMWay(); + private OsmWay getClosedPolygon() { + var way = new OsmWay(); way.addNodeRef(1); way.addNodeRef(2); way.addNodeRef(3); diff --git a/application/src/test/java/org/opentripplanner/osm/wayproperty/specifier/WayTestData.java b/application/src/test/java/org/opentripplanner/osm/wayproperty/specifier/WayTestData.java index 8238a44a9f4..e075955f6c4 100644 --- a/application/src/test/java/org/opentripplanner/osm/wayproperty/specifier/WayTestData.java +++ b/application/src/test/java/org/opentripplanner/osm/wayproperty/specifier/WayTestData.java @@ -219,8 +219,8 @@ public static OsmWithTags zooPlatform() { return way; } - public static OSMWithTags indoor(String value) { - var way = new OSMWithTags(); + public static OsmWithTags indoor(String value) { + var way = new OsmWithTags(); way.addTag("indoor", value); return way; } From b992e361ea98de2989422cc7274a4b0df648955d Mon Sep 17 00:00:00 2001 From: Henrik Abrahamsson Date: Fri, 11 Oct 2024 14:02:34 +0200 Subject: [PATCH 032/213] Add @Nullable annotations to Trip and Leg --- .../impl/CombinedInterlinedTransitLeg.java | 2 ++ .../ext/flex/FlexibleTransitLeg.java | 2 ++ .../org/opentripplanner/model/plan/Leg.java | 30 ++++++++++++++++++- .../model/plan/ScheduledTransitLeg.java | 27 ++++++++++------- .../model/plan/UnknownTransitPathLeg.java | 2 ++ .../netex/mapping/ServiceLinkMapper.java | 2 ++ .../transit/model/network/Route.java | 3 ++ .../transit/model/timetable/Trip.java | 28 ++++++++++++----- .../java/org/opentripplanner/GtfsTest.java | 3 +- 9 files changed, 79 insertions(+), 20 deletions(-) diff --git a/application/src/ext/java/org/opentripplanner/ext/fares/impl/CombinedInterlinedTransitLeg.java b/application/src/ext/java/org/opentripplanner/ext/fares/impl/CombinedInterlinedTransitLeg.java index ce838480186..d3608ccf8d9 100644 --- a/application/src/ext/java/org/opentripplanner/ext/fares/impl/CombinedInterlinedTransitLeg.java +++ b/application/src/ext/java/org/opentripplanner/ext/fares/impl/CombinedInterlinedTransitLeg.java @@ -5,6 +5,7 @@ import java.time.ZonedDateTime; import java.util.List; import java.util.Set; +import javax.annotation.Nullable; import org.locationtech.jts.geom.LineString; import org.opentripplanner.framework.collection.ListUtils; import org.opentripplanner.model.fare.FareProductUse; @@ -94,6 +95,7 @@ public List getIntermediateStops() { } @Override + @Nullable public LineString getLegGeometry() { return null; } diff --git a/application/src/ext/java/org/opentripplanner/ext/flex/FlexibleTransitLeg.java b/application/src/ext/java/org/opentripplanner/ext/flex/FlexibleTransitLeg.java index 24f996ca5fe..cf6c229c46f 100644 --- a/application/src/ext/java/org/opentripplanner/ext/flex/FlexibleTransitLeg.java +++ b/application/src/ext/java/org/opentripplanner/ext/flex/FlexibleTransitLeg.java @@ -6,6 +6,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import javax.annotation.Nullable; import org.locationtech.jts.geom.LineString; import org.opentripplanner.ext.flex.edgetype.FlexTripEdge; import org.opentripplanner.framework.i18n.I18NString; @@ -65,6 +66,7 @@ public Agency getAgency() { } @Override + @Nullable public Operator getOperator() { return getTrip().getOperator(); } diff --git a/application/src/main/java/org/opentripplanner/model/plan/Leg.java b/application/src/main/java/org/opentripplanner/model/plan/Leg.java index d9e3a4589d8..185d3f33ab1 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/Leg.java +++ b/application/src/main/java/org/opentripplanner/model/plan/Leg.java @@ -161,6 +161,7 @@ default boolean overlapInTime(Leg other) { /** * For transit legs, the route agency. For non-transit legs {@code null}. */ + @Nullable default Agency getAgency() { return null; } @@ -171,6 +172,7 @@ default Agency getAgency() { * * @see Trip#getOperator() */ + @Nullable default Operator getOperator() { return null; } @@ -178,6 +180,7 @@ default Operator getOperator() { /** * For transit legs, the route. For non-transit legs, null. */ + @Nullable default Route getRoute() { return null; } @@ -198,6 +201,7 @@ default TripOnServiceDate getTripOnServiceDate() { return null; } + @Nullable default Accessibility getTripWheelchairAccessibility() { return null; } @@ -245,6 +249,7 @@ default boolean getRealTime() { return false; } + @Nullable default RealTimeState getRealTimeState() { return null; } @@ -261,6 +266,7 @@ default boolean isFlexibleTrip() { /** * Is this a frequency-based trip with non-strict departure times? */ + @Nullable default Boolean getNonExactFrequency() { return null; } @@ -270,6 +276,7 @@ default Boolean getNonExactFrequency() { * non-strict frequency trips, but could become important for real-time trips, strict frequency * trips, and scheduled trips with empirical headways. */ + @Nullable default Integer getHeadway() { return null; } @@ -293,6 +300,7 @@ default int getAgencyTimeZoneOffset() { * using the Hierarchical Vehicle Type (HVT) codes from the European TPEG standard Also see * http://groups.google.com/group/gtfs-changes/msg/ed917a69cf8c5bef */ + @Nullable default Integer getRouteType() { return null; } @@ -300,6 +308,7 @@ default Integer getRouteType() { /** * For transit legs, the headsign of the bus or train being used. For non-transit legs, null. */ + @Nullable default I18NString getHeadsign() { return null; } @@ -312,6 +321,7 @@ default I18NString getHeadsign() { * for a given trip may happen at service date March 25th and service time 25:00, which in local * time would be Mach 26th 01:00. */ + @Nullable default LocalDate getServiceDate() { return null; } @@ -319,6 +329,7 @@ default LocalDate getServiceDate() { /** * For transit leg, the route's branding URL (if one exists). For non-transit legs, null. */ + @Nullable default String getRouteBrandingUrl() { return null; } @@ -337,6 +348,7 @@ default String getRouteBrandingUrl() { * For transit legs, intermediate stops between the Place where the leg originates and the Place * where the leg ends. For non-transit legs, {@code null}. */ + @Nullable default List getIntermediateStops() { return null; } @@ -344,6 +356,7 @@ default List getIntermediateStops() { /** * The leg's geometry. */ + @Nullable LineString getLegGeometry(); /** @@ -352,6 +365,7 @@ default List getIntermediateStops() { * The elevation profile as a comma-separated list of x,y values. x is the distance from the start * of the leg, y is the elevation at this distance. */ + @Nullable default ElevationProfile getElevationProfile() { return null; } @@ -364,49 +378,59 @@ default List getWalkSteps() { } default Set getStreetNotes() { - return null; + return Set.of(); } default Set getTransitAlerts() { return Set.of(); } + @Nullable default PickDrop getBoardRule() { return null; } + @Nullable default PickDrop getAlightRule() { return null; } + @Nullable default BookingInfo getDropOffBookingInfo() { return null; } + @Nullable default BookingInfo getPickupBookingInfo() { return null; } + @Nullable default ConstrainedTransfer getTransferFromPrevLeg() { return null; } + @Nullable default ConstrainedTransfer getTransferToNextLeg() { return null; } + @Nullable default Integer getBoardStopPosInPattern() { return null; } + @Nullable default Integer getAlightStopPosInPattern() { return null; } + @Nullable default Integer getBoardingGtfsStopSequence() { return null; } + @Nullable default Integer getAlightGtfsStopSequence() { return null; } @@ -414,6 +438,7 @@ default Integer getAlightGtfsStopSequence() { /** * Is this leg walking with a bike? */ + @Nullable default Boolean getWalkingBike() { return null; } @@ -435,10 +460,12 @@ default Float accessibilityScore() { return null; } + @Nullable default Boolean getRentedVehicle() { return null; } + @Nullable default String getVehicleRentalNetwork() { return null; } @@ -453,6 +480,7 @@ default String getVehicleRentalNetwork() { */ int getGeneralizedCost(); + @Nullable default LegReference getLegReference() { return null; } diff --git a/application/src/main/java/org/opentripplanner/model/plan/ScheduledTransitLeg.java b/application/src/main/java/org/opentripplanner/model/plan/ScheduledTransitLeg.java index 7af091531e0..9949d83cdfe 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/ScheduledTransitLeg.java +++ b/application/src/main/java/org/opentripplanner/model/plan/ScheduledTransitLeg.java @@ -96,10 +96,7 @@ protected ScheduledTransitLeg(ScheduledTransitLegBuilder builder) { setDistanceMeters(getDistanceFromCoordinates(transitLegCoordinates)); this.directDistanceMeters = getDistanceFromCoordinates( - List.of( - transitLegCoordinates.get(0), - transitLegCoordinates.get(transitLegCoordinates.size() - 1) - ) + List.of(transitLegCoordinates.getFirst(), transitLegCoordinates.getLast()) ); } @@ -139,22 +136,23 @@ public Boolean isInterlinedWithPreviousLeg() { @Override public Agency getAgency() { - return getTrip().getRoute().getAgency(); + return trip().getRoute().getAgency(); } @Override + @Nullable public Operator getOperator() { - return getTrip().getOperator(); + return trip().getOperator(); } @Override public Route getRoute() { - return getTrip().getRoute(); + return trip().getRoute(); } @Override public Trip getTrip() { - return tripTimes.getTrip(); + return trip(); } @Override @@ -182,7 +180,7 @@ public LegTime end() { @Override public TransitMode getMode() { - return getTrip().getMode(); + return trip().getMode(); } @Override @@ -247,7 +245,7 @@ public double getDirectDistanceMeters() { @Override public Integer getRouteType() { - return getTrip().getRoute().getGtfsType(); + return trip().getRoute().getGtfsType(); } @Override @@ -300,6 +298,7 @@ public Set getTransitAlerts() { } @Override + @Nullable public PickDrop getBoardRule() { if (transferFromPrevLeg != null && transferFromPrevLeg.getTransferConstraint().isStaySeated()) { return null; @@ -308,6 +307,7 @@ public PickDrop getBoardRule() { } @Override + @Nullable public PickDrop getAlightRule() { if (transferToNextLeg != null && transferToNextLeg.getTransferConstraint().isStaySeated()) { return null; @@ -434,6 +434,13 @@ public String toString() { .toString(); } + /** + * Non-null getter for trip + */ + private Trip trip() { + return tripTimes.getTrip(); + } + private List extractTransitLegCoordinates( TripPattern tripPattern, int boardStopIndexInPattern, diff --git a/application/src/main/java/org/opentripplanner/model/plan/UnknownTransitPathLeg.java b/application/src/main/java/org/opentripplanner/model/plan/UnknownTransitPathLeg.java index df43bbcb411..76179a8ee7c 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/UnknownTransitPathLeg.java +++ b/application/src/main/java/org/opentripplanner/model/plan/UnknownTransitPathLeg.java @@ -4,6 +4,7 @@ import java.time.ZonedDateTime; import java.util.List; +import javax.annotation.Nullable; import org.locationtech.jts.geom.LineString; import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.framework.tostring.ToStringBuilder; @@ -84,6 +85,7 @@ public double getDistanceMeters() { } @Override + @Nullable public LineString getLegGeometry() { return null; } diff --git a/application/src/main/java/org/opentripplanner/netex/mapping/ServiceLinkMapper.java b/application/src/main/java/org/opentripplanner/netex/mapping/ServiceLinkMapper.java index 2b2152be4e0..090f475e22e 100644 --- a/application/src/main/java/org/opentripplanner/netex/mapping/ServiceLinkMapper.java +++ b/application/src/main/java/org/opentripplanner/netex/mapping/ServiceLinkMapper.java @@ -3,6 +3,7 @@ import jakarta.xml.bind.JAXBElement; import java.util.Arrays; import java.util.List; +import javax.annotation.Nullable; import net.opengis.gml._3.LineStringType; import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.CoordinateSequence; @@ -116,6 +117,7 @@ private LineString[] generateGeometriesFromServiceLinks( return geometries; } + @Nullable private LineString mapServiceLink( ServiceLink serviceLink, StopPattern stopPattern, diff --git a/application/src/main/java/org/opentripplanner/transit/model/network/Route.java b/application/src/main/java/org/opentripplanner/transit/model/network/Route.java index 206e65f7af9..bd868fba10d 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/network/Route.java +++ b/application/src/main/java/org/opentripplanner/transit/model/network/Route.java @@ -156,6 +156,9 @@ public Integer getGtfsSortOrder() { return gtfsSortOrder; } + /** + * Returns the NeTEx submode for the route. Will return UNKNOWN by default. + */ public SubMode getNetexSubmode() { return netexSubmode; } diff --git a/application/src/main/java/org/opentripplanner/transit/model/timetable/Trip.java b/application/src/main/java/org/opentripplanner/transit/model/timetable/Trip.java index 53ec7207adc..6e829e15866 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/timetable/Trip.java +++ b/application/src/main/java/org/opentripplanner/transit/model/timetable/Trip.java @@ -34,23 +34,35 @@ */ public final class Trip extends AbstractTransitEntity implements LogInfo { - private final Operator operator; private final Route route; - private final FeedScopedId serviceId; - private final String shortName; private final TransitMode mode; - private final SubMode netexSubmode; - private final I18NString headsign; - private final FeedScopedId shapeId; - private final Direction direction; private final BikeAccess bikesAllowed; private final Accessibility wheelchairBoarding; + private final SubMode netexSubmode; + private final TripAlteration netexAlteration; + + @Nullable + private final Operator operator; + + @Nullable + private final FeedScopedId serviceId; + + @Nullable + private final String shortName; + + @Nullable + private final I18NString headsign; + + @Nullable + private final FeedScopedId shapeId; + + @Nullable private final String gtfsBlockId; + @Nullable private final String netexInternalPlanningCode; - private final TripAlteration netexAlteration; Trip(TripBuilder builder) { super(builder.getId()); diff --git a/application/src/test/java/org/opentripplanner/GtfsTest.java b/application/src/test/java/org/opentripplanner/GtfsTest.java index 9b37c488b8e..cdc75674947 100644 --- a/application/src/test/java/org/opentripplanner/GtfsTest.java +++ b/application/src/test/java/org/opentripplanner/GtfsTest.java @@ -7,6 +7,7 @@ import static org.opentripplanner.routing.api.request.StreetMode.WALK; import static org.opentripplanner.updater.trip.BackwardsDelayPropagationType.REQUIRED_NO_DATA; +import com.google.common.truth.Truth; import com.google.transit.realtime.GtfsRealtime.FeedEntity; import com.google.transit.realtime.GtfsRealtime.FeedMessage; import com.google.transit.realtime.GtfsRealtime.TripUpdate; @@ -178,7 +179,7 @@ public void validateLeg( assertEquals(1, leg.getStreetNotes().size()); assertEquals(alert, leg.getStreetNotes().iterator().next().note.toString()); } else { - assertNull(leg.getStreetNotes()); + Truth.assertThat(leg.getStreetNotes()).isEmpty(); } } From 94403bffcb03f398bf2fe6524620beb294b8827c Mon Sep 17 00:00:00 2001 From: Henrik Abrahamsson Date: Thu, 26 Sep 2024 16:39:24 +0200 Subject: [PATCH 033/213] Fix max-stop limit in StreetNearbyStopFinder --- .../strategy/MaxCountSkipEdgeStrategy.java | 34 --------- .../strategy/MaxCountTerminationStrategy.java | 36 ++++++++++ .../nearbystops/StreetNearbyStopFinder.java | 41 +++++------ .../MaxCountSkipEdgeStrategyTest.java | 38 ---------- .../MaxCountTerminationStrategyTest.java | 29 ++++++++ ...reetNearbyStopFinderMultipleLinksTest.java | 71 +++++++++++++++++++ .../StreetNearbyStopFinderTest.java | 8 +-- 7 files changed, 156 insertions(+), 101 deletions(-) delete mode 100644 application/src/main/java/org/opentripplanner/astar/strategy/MaxCountSkipEdgeStrategy.java create mode 100644 application/src/main/java/org/opentripplanner/astar/strategy/MaxCountTerminationStrategy.java delete mode 100644 application/src/test/java/org/opentripplanner/astar/strategy/MaxCountSkipEdgeStrategyTest.java create mode 100644 application/src/test/java/org/opentripplanner/astar/strategy/MaxCountTerminationStrategyTest.java create mode 100644 application/src/test/java/org/opentripplanner/graph_builder/module/nearbystops/StreetNearbyStopFinderMultipleLinksTest.java diff --git a/application/src/main/java/org/opentripplanner/astar/strategy/MaxCountSkipEdgeStrategy.java b/application/src/main/java/org/opentripplanner/astar/strategy/MaxCountSkipEdgeStrategy.java deleted file mode 100644 index 0369e3e29db..00000000000 --- a/application/src/main/java/org/opentripplanner/astar/strategy/MaxCountSkipEdgeStrategy.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.opentripplanner.astar.strategy; - -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. - */ -public class MaxCountSkipEdgeStrategy< - State extends AStarState, Edge extends AStarEdge -> - implements SkipEdgeStrategy { - - private final int maxCount; - private final Predicate shouldIncreaseCount; - - private int visited; - - public MaxCountSkipEdgeStrategy(int count, Predicate shouldIncreaseCount) { - this.maxCount = count; - this.shouldIncreaseCount = shouldIncreaseCount; - this.visited = 0; - } - - @Override - public boolean shouldSkipEdge(State current, Edge edge) { - if (shouldIncreaseCount.test(current)) { - visited++; - } - return visited > maxCount; - } -} diff --git a/application/src/main/java/org/opentripplanner/astar/strategy/MaxCountTerminationStrategy.java b/application/src/main/java/org/opentripplanner/astar/strategy/MaxCountTerminationStrategy.java new file mode 100644 index 00000000000..66c5496c923 --- /dev/null +++ b/application/src/main/java/org/opentripplanner/astar/strategy/MaxCountTerminationStrategy.java @@ -0,0 +1,36 @@ +package org.opentripplanner.astar.strategy; + +import java.util.function.Predicate; +import org.opentripplanner.astar.spi.AStarState; +import org.opentripplanner.astar.spi.SearchTerminationStrategy; + +/** + * This termination strategy is used to terminate an a-star search after a number of states matching + * some criteria has been found. For example it can be used to limit a search to a maximum number of + * stops. + */ +public class MaxCountTerminationStrategy> + implements SearchTerminationStrategy { + + private final int maxCount; + private final Predicate shouldIncreaseCount; + private int count; + + /** + * @param maxCount Terminate the search after this many matching states have been reached. + * @param shouldIncreaseCount A predicate to check if a state should increase the count or not. + */ + public MaxCountTerminationStrategy(int maxCount, Predicate shouldIncreaseCount) { + this.maxCount = maxCount; + this.shouldIncreaseCount = shouldIncreaseCount; + this.count = 0; + } + + @Override + public boolean shouldSearchTerminate(State current) { + if (shouldIncreaseCount.test(current)) { + count++; + } + return count >= maxCount; + } +} diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/nearbystops/StreetNearbyStopFinder.java b/application/src/main/java/org/opentripplanner/graph_builder/module/nearbystops/StreetNearbyStopFinder.java index e54c27249e1..8277bd47e4c 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/nearbystops/StreetNearbyStopFinder.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/nearbystops/StreetNearbyStopFinder.java @@ -11,10 +11,8 @@ import java.util.List; import java.util.Set; import org.opentripplanner.astar.model.ShortestPathTree; -import org.opentripplanner.astar.spi.SkipEdgeStrategy; -import org.opentripplanner.astar.strategy.ComposingSkipEdgeStrategy; import org.opentripplanner.astar.strategy.DurationSkipEdgeStrategy; -import org.opentripplanner.astar.strategy.MaxCountSkipEdgeStrategy; +import org.opentripplanner.astar.strategy.MaxCountTerminationStrategy; import org.opentripplanner.ext.dataoverlay.routing.DataOverlayContext; import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.framework.application.OTPRequestTimeoutException; @@ -30,8 +28,6 @@ import org.opentripplanner.street.model.vertex.Vertex; import org.opentripplanner.street.search.StreetSearchBuilder; import org.opentripplanner.street.search.TraverseMode; -import org.opentripplanner.street.search.request.StreetSearchRequest; -import org.opentripplanner.street.search.request.StreetSearchRequestMapper; import org.opentripplanner.street.search.state.State; import org.opentripplanner.street.search.strategy.DominanceFunctions; import org.opentripplanner.transit.model.site.AreaStop; @@ -46,8 +42,8 @@ public class StreetNearbyStopFinder implements NearbyStopFinder { /** * Construct a NearbyStopFinder for the given graph and search radius. * - * @param maxStopCount The maximum stops to return. 0 means no limit. Regardless of the maxStopCount - * we will always return all the directly connected stops. + * @param maxStopCount The maximum stops to return. 0 means no limit. Regardless of the + * maxStopCount we will always return all the directly connected stops. */ public StreetNearbyStopFinder( Duration durationLimit, @@ -117,23 +113,30 @@ public Collection findNearbyStops( // Return only the origin vertices if there are no valid street modes if ( streetRequest.mode() == StreetMode.NOT_SET || - (maxStopCount != 0 && stopsFound.size() >= maxStopCount) + (maxStopCount > 0 && stopsFound.size() >= maxStopCount) ) { return stopsFound; } stopsFound = new ArrayList<>(stopsFound); - ShortestPathTree spt = StreetSearchBuilder + var streetSearch = StreetSearchBuilder .of() - .setSkipEdgeStrategy(getSkipEdgeStrategy()) + .setSkipEdgeStrategy(new DurationSkipEdgeStrategy<>(durationLimit)) .setDominanceFunction(new DominanceFunctions.MinimumWeight()) .setRequest(request) .setArriveBy(reverseDirection) .setStreetRequest(streetRequest) .setFrom(reverseDirection ? null : originVertices) .setTo(reverseDirection ? originVertices : null) - .setDataOverlayContext(dataOverlayContext) - .getShortestPathTree(); + .setDataOverlayContext(dataOverlayContext); + + if (maxStopCount > 0) { + streetSearch.setTerminationStrategy( + new MaxCountTerminationStrategy<>(maxStopCount, this::hasReachedStop) + ); + } + + ShortestPathTree spt = streetSearch.getShortestPathTree(); // Only used if OTPFeature.FlexRouting.isOn() Multimap locationsMap = ArrayListMultimap.create(); @@ -186,16 +189,6 @@ public Collection findNearbyStops( return stopsFound; } - private SkipEdgeStrategy getSkipEdgeStrategy() { - var durationSkipEdgeStrategy = new DurationSkipEdgeStrategy(durationLimit); - - if (maxStopCount > 0) { - var strategy = new MaxCountSkipEdgeStrategy<>(maxStopCount, this::hasReachedStop); - return new ComposingSkipEdgeStrategy<>(strategy, durationSkipEdgeStrategy); - } - return durationSkipEdgeStrategy; - } - private boolean canBoardFlex(State state, boolean reverse) { Collection edges = reverse ? state.getVertex().getIncoming() @@ -212,13 +205,13 @@ private boolean canBoardFlex(State state, boolean reverse) { *

* 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}. + * the {@link MaxCountTerminationStrategy}. *

* 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 boolean hasReachedStop(State state) { + private boolean hasReachedStop(State state) { var vertex = state.getVertex(); return ( vertex instanceof TransitStopVertex && state.isFinal() && !ignoreVertices.contains(vertex) diff --git a/application/src/test/java/org/opentripplanner/astar/strategy/MaxCountSkipEdgeStrategyTest.java b/application/src/test/java/org/opentripplanner/astar/strategy/MaxCountSkipEdgeStrategyTest.java deleted file mode 100644 index c190ff1abac..00000000000 --- a/application/src/test/java/org/opentripplanner/astar/strategy/MaxCountSkipEdgeStrategyTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.opentripplanner.astar.strategy; - -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.graph_builder.module.nearbystops.StreetNearbyStopFinder; -import org.opentripplanner.street.search.state.TestStateBuilder; - -class MaxCountSkipEdgeStrategyTest { - - private final StreetNearbyStopFinder finder = new StreetNearbyStopFinder(null, 0, null); - - @Test - void countStops() { - var state = TestStateBuilder.ofWalking().stop().build(); - var strategy = new MaxCountSkipEdgeStrategy<>(1, finder::hasReachedStop); - assertFalse(strategy.shouldSkipEdge(state, null)); - assertTrue(strategy.shouldSkipEdge(state, null)); - } - - @Test - void doNotCountStop() { - var state = TestStateBuilder.ofWalking().build(); - var strategy = new MaxCountSkipEdgeStrategy<>(1, finder::hasReachedStop); - 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, finder::hasReachedStop); - assertFalse(strategy.shouldSkipEdge(state, null)); - } -} diff --git a/application/src/test/java/org/opentripplanner/astar/strategy/MaxCountTerminationStrategyTest.java b/application/src/test/java/org/opentripplanner/astar/strategy/MaxCountTerminationStrategyTest.java new file mode 100644 index 00000000000..50a920f1252 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/astar/strategy/MaxCountTerminationStrategyTest.java @@ -0,0 +1,29 @@ +package org.opentripplanner.astar.strategy; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.Test; + +class MaxCountTerminationStrategyTest { + + @Test + void countStates() { + var countAllStatesStrategy = new MaxCountTerminationStrategy<>(3, state -> true); + + assertFalse(countAllStatesStrategy.shouldSearchTerminate(null)); + assertFalse(countAllStatesStrategy.shouldSearchTerminate(null)); + assertTrue(countAllStatesStrategy.shouldSearchTerminate(null)); + assertTrue(countAllStatesStrategy.shouldSearchTerminate(null)); + } + + @Test + void countNoStates() { + var countNoStatesStrategy = new MaxCountTerminationStrategy<>(1, state -> false); + + assertFalse(countNoStatesStrategy.shouldSearchTerminate(null)); + assertFalse(countNoStatesStrategy.shouldSearchTerminate(null)); + assertFalse(countNoStatesStrategy.shouldSearchTerminate(null)); + assertFalse(countNoStatesStrategy.shouldSearchTerminate(null)); + } +} diff --git a/application/src/test/java/org/opentripplanner/graph_builder/module/nearbystops/StreetNearbyStopFinderMultipleLinksTest.java b/application/src/test/java/org/opentripplanner/graph_builder/module/nearbystops/StreetNearbyStopFinderMultipleLinksTest.java new file mode 100644 index 00000000000..3466c1bfd8a --- /dev/null +++ b/application/src/test/java/org/opentripplanner/graph_builder/module/nearbystops/StreetNearbyStopFinderMultipleLinksTest.java @@ -0,0 +1,71 @@ +package org.opentripplanner.graph_builder.module.nearbystops; + +import static com.google.common.truth.Truth.assertThat; +import static org.opentripplanner.graph_builder.module.nearbystops.StreetNearbyStopFinderTest.assertStopAtDistance; +import static org.opentripplanner.graph_builder.module.nearbystops.StreetNearbyStopFinderTest.assertZeroDistanceStop; +import static org.opentripplanner.graph_builder.module.nearbystops.StreetNearbyStopFinderTest.sort; + +import java.time.Duration; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.opentripplanner.framework.geometry.WgsCoordinate; +import org.opentripplanner.routing.algorithm.GraphRoutingTest; +import org.opentripplanner.routing.api.request.RouteRequest; +import org.opentripplanner.routing.api.request.request.StreetRequest; +import org.opentripplanner.street.model.vertex.TransitStopVertex; + +class StreetNearbyStopFinderMultipleLinksTest extends GraphRoutingTest { + + private static final WgsCoordinate origin = new WgsCoordinate(0.0, 0.0); + private TransitStopVertex stopA; + private TransitStopVertex stopB; + private TransitStopVertex stopC; + + @BeforeEach + protected void setUp() throws Exception { + modelOf( + new Builder() { + @Override + public void build() { + var A = intersection("A", origin); + var B = intersection("B", origin.moveEastMeters(100)); + var C = intersection("C", origin.moveEastMeters(200)); + + biStreet(A, B, 100); + biStreet(B, C, 100); + + stopA = stop("StopA", A.toWgsCoordinate()); + stopB = stop("StopB", B.toWgsCoordinate()); + stopC = stop("StopC", C.toWgsCoordinate()); + + biLink(A, stopA); + + // B has many links + biLink(B, stopB); + biLink(B, stopB); + biLink(B, stopB); + biLink(B, stopB); + + biLink(C, stopC); + } + } + ); + } + + @Test + void testMaxStopCountRegression() { + // Max-stop-count should work correctly even though there are multiple links B <-> stopB + var durationLimit = Duration.ofMinutes(10); + var maxStopCount = 3; + var finder = new StreetNearbyStopFinder(durationLimit, maxStopCount, null); + + var sortedNearbyStops = sort( + finder.findNearbyStops(stopA, new RouteRequest(), new StreetRequest(), false) + ); + + assertThat(sortedNearbyStops).hasSize(3); + assertZeroDistanceStop(stopA, sortedNearbyStops.get(0)); + assertStopAtDistance(stopB, 100, sortedNearbyStops.get(1)); + assertStopAtDistance(stopC, 200, sortedNearbyStops.get(2)); + } +} diff --git a/application/src/test/java/org/opentripplanner/graph_builder/module/nearbystops/StreetNearbyStopFinderTest.java b/application/src/test/java/org/opentripplanner/graph_builder/module/nearbystops/StreetNearbyStopFinderTest.java index 261a40454f0..aae02451b33 100644 --- a/application/src/test/java/org/opentripplanner/graph_builder/module/nearbystops/StreetNearbyStopFinderTest.java +++ b/application/src/test/java/org/opentripplanner/graph_builder/module/nearbystops/StreetNearbyStopFinderTest.java @@ -99,7 +99,6 @@ void testMultipleStops() { } @Test - @Disabled("Currently disabled because of a bug in stop counting") void testMaxStopCount() { var durationLimit = Duration.ofMinutes(10); var maxStopCount = 2; @@ -150,7 +149,6 @@ void testIgnoreStops() { } @Test - @Disabled("Currently disabled because of a bug in stop counting") void testIgnoreStopsWithMaxStops() { var durationLimit = Duration.ofMinutes(10); var maxStopCount = 1; @@ -165,14 +163,14 @@ void testIgnoreStopsWithMaxStops() { assertStopAtDistance(stopC, 200, sortedNearbyStops.get(0)); } - private List sort(Collection stops) { + static List sort(Collection stops) { return stops.stream().sorted(Comparator.comparing(x -> x.distance)).toList(); } /** * Verify that the nearby stop is zero distance and corresponds to the expected vertex */ - private void assertZeroDistanceStop(TransitStopVertex expected, NearbyStop nearbyStop) { + static void assertZeroDistanceStop(TransitStopVertex expected, NearbyStop nearbyStop) { assertEquals(expected.getStop(), nearbyStop.stop); assertEquals(0, nearbyStop.distance); assertEquals(0, nearbyStop.edges.size()); @@ -183,7 +181,7 @@ private void assertZeroDistanceStop(TransitStopVertex expected, NearbyStop nearb /** * Verify that the nearby stop is at a specific distance and corresponds to the expected vertex */ - private void assertStopAtDistance( + static void assertStopAtDistance( TransitStopVertex expected, double expectedDistance, NearbyStop nearbyStop From 5cc750a9e67580435866d9b70eb6cae9a46f0231 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Tue, 15 Oct 2024 15:14:19 +0100 Subject: [PATCH 034/213] remove unused imports --- .../org/opentripplanner/osm/tagmapping/DefaultMapperTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/application/src/test/java/org/opentripplanner/osm/tagmapping/DefaultMapperTest.java b/application/src/test/java/org/opentripplanner/osm/tagmapping/DefaultMapperTest.java index 7837c216c31..31073f87e92 100644 --- a/application/src/test/java/org/opentripplanner/osm/tagmapping/DefaultMapperTest.java +++ b/application/src/test/java/org/opentripplanner/osm/tagmapping/DefaultMapperTest.java @@ -4,7 +4,6 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.opentripplanner.street.model.StreetTraversalPermission.ALL; -import static org.opentripplanner.street.model.StreetTraversalPermission.NONE; import static org.opentripplanner.street.model.StreetTraversalPermission.PEDESTRIAN; import static org.opentripplanner.street.model.StreetTraversalPermission.PEDESTRIAN_AND_BICYCLE; From 6cb05b1ac660638f2a7b3aa1926c5bf55289c62d Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Tue, 15 Oct 2024 21:03:42 +0300 Subject: [PATCH 035/213] Minor fixes to docs --- README.md | 9 ++++----- doc/user/Getting-OTP.md | 14 +++++++------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 129771f9bdf..41d889cf15b 100644 --- a/README.md +++ b/README.md @@ -31,11 +31,10 @@ We run a speed test (included in the code) to measure the performance for every ## Repository layout -The main Java server code is in `src/main/`. OTP also includes a Javascript client based on the -Leaflet mapping library in `src/client/`. This client is now primarily used for testing, with most -major deployments building custom clients from reusable components. The Maven build produces a -unified ("shaded") JAR file at `target/otp-VERSION.jar` containing all necessary code and -dependencies to run OpenTripPlanner. +The main Java server code is in `application/src/main/`. OTP also includes a Javascript client based on the +MapLibre mapping library in `client/src/`. This client is now used for testing, with most major +deployments building custom clients from reusable components. The Maven build produces a unified ("shaded") +JAR file at `application/target/otp-VERSION.jar` containing all necessary code and dependencies to run OpenTripPlanner. Additional information and instructions are available in the [main documentation](http://docs.opentripplanner.org/en/dev-2.x/), including a diff --git a/doc/user/Getting-OTP.md b/doc/user/Getting-OTP.md index cfb0102c2a3..92f1e7298fc 100644 --- a/doc/user/Getting-OTP.md +++ b/doc/user/Getting-OTP.md @@ -64,13 +64,13 @@ OTP. If all goes well you should see a success message like the following: [INFO] ------------------------------------------------------------------------ ``` -This build process should produce a JAR file called `otp-x.y.z-shaded.jar` in the `target/` -directory which contains all the compiled OTP classes and their dependencies (the external libraries -they use). The shell script called 'otp' in the root of the cloned repository will start the main -class of that JAR file under a Java virtual machine, so after the Maven build completes you should -be able to run `./otp --help` and see an OTP help message including command line options. Due to the -way Maven works, this script is not executable by default, so you will need to do `chmod u+x ./otp` -before you run it to mark it as executable. +This build process should produce a JAR file called `otp-x.y.z-shaded.jar` in the +`application/target/` directory which contains all the compiled OTP classes and their dependencies +(the external libraries they use). The shell script called 'otp' in the root of the cloned repository +will start the main class of that JAR file under a Java virtual machine, so after the Maven build +completes you should be able to run `./otp --help` and see an OTP help message including command line +options. Due to the way Maven works, this script is not executable by default, so you will need to do +`chmod u+x ./otp` before you run it to mark it as executable. The words "clean package" are the build steps you want to run. You're telling maven to clean up any extraneous junk in the directory, then perform all the build steps, including compilation, up to and From ad69d387029bc560b9a6711ba1f577b170992548 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Tue, 15 Oct 2024 21:17:10 +0300 Subject: [PATCH 036/213] Remove legacy localization docs --- doc/user/Localization.md | 229 --------------------------------------- mkdocs.yml | 1 - 2 files changed, 230 deletions(-) delete mode 100644 doc/user/Localization.md diff --git a/doc/user/Localization.md b/doc/user/Localization.md deleted file mode 100644 index 75d21e96ce4..00000000000 --- a/doc/user/Localization.md +++ /dev/null @@ -1,229 +0,0 @@ -# Localization - -NOTE: This documentation pertains to the client included in the main OTP repository. THIS BUILT-IN -OTP CLIENT IS PROVIDED FOR TEST AND DEBUGGING PURPOSES. IT IS NOT MEANT FOR PRODUCTION USE. - -This page contains instructions for both developers and translators on how to make the OTP interface -usable by people who speak different languages. Developers will need to take certain steps to mark -translatable strings within the source code. Translators will need to edit specific files within the -project to create or revise the translation for their language. - -In OTP we use gettext for localization, for the following reasons: - -- [Plural suport](http://pology.nedohodnik.net/doc/user/en_US/ch-poformat.html#sec-poplurals) -- [Context support](http://pology.nedohodnik.net/doc/user/en_US/ch-poformat.html#sec-poautocmnt) -- Automatic extraction of translatable strings from source code -- [Translator comments](http://pology.nedohodnik.net/doc/user/en_US/ch-poformat.html#sec-poautocmnt) - support -- Source references (we can see where each translated string is used in the source code) - -In the Javascript UI the [i18next](http://i18next.com) library is used. - -Three types of files are used in the OTP localization process: - -- The `.pot` file is the message template. It is a starting point for creating new `.po` files. -- `.po` files are created and edited by translators based on the `.pot` file. -- `.json` files are generated from the `.po` files for each language. -- `.js` files are localization configuration files which specify units and time/date formats. - -Only the `.po` and `.js` files are directly edited. The `.pot` file is created from an automated -analysis of annotated source code. The `.json` files are also automatically generated as an easy way -for the Javascript UI to consume the contents of the `.po` files. - -All translation files are in the directory `/src/client/i18n`. - -## For Software Developers: Adding New Strings - -When you add a string to Javascript source that will be seen by the end user, wherever that string -is referenced you should surround it with a call to a special function. The name of the function -depends on what kind of string it is: - -- basic string: `_tr('string', parameters)` -- basic string with context: `ngettext('context', 'string')` -- string with plural: `ngettext('singular', 'plural', quantity)` -- string with plural and context: `npgettext('context', 'singular', 'plural', quantity)` - -For more detail, -see [Sprintf parameters](http://www.diveintojavascript.com/projects/javascript-sprintf). - -A "context" is any string (preferably short and without whitespace) that is used to disambiguate the -translation of the main string. It is used when developers get input from translators that some -string should be translated in different ways in different parts of the program. Each of those -distinct places will be assigned a different context string. - -When you add strings to the source code, if you think that translators might not understand how the -string is used or what parameters it requires, add translator comments like this: - -```javascript -//TRANSLATORS: Start: location at [time date] (Used in print itinerary -//when do you start your trip) -html += '

' + _tr('Start: %s at %s', this.getStartLocationStr(), this.getStartTimeStr()) + '

'; -``` - -Translator comments must always start with `TRANSLATORS:` and must be in the line immediately before -translated string. Otherwise they won't be extracted together with the string. - -### Examples: - -#### Basic translated string - -```javascript -//TRANSLATORS: Board Public transit route name (agency name -//Stop ID ) start time -html += '
  • ' + _tr('Board') + ': ' + leg.from.name + ' (' + leg.from.stopId.agencyId + ' Stop ID #' + - -//With named sprintf parameters (our preferred option) - -//TRANSLATORS: Start: location at [time date] (Used in print itinerary -//when do you start your trip) -html += '

    ' + _tr('Start: %(location)s at %(time_date)s', { - 'location': this.getStartLocationStr(), - 'time_date': this.getStartTimeStr() -}) + '

    '; - -//With positional sprintf parameters (to be avoided because word order changes between languages) -html += '

    ' + _tr('End: %1$s at %2$s', this.getEndLocationStr(), this.getEndTimeStr()) + '

    '; -``` - -#### Normal string with context - -```javascript - if (leg.headsign) html += pgettext("bus_direction", " to ") + leg.headsign; - -//same string could be different translation -//TRANSLATORS: [distance] to [name of destination] -html += " " + otp.util.Itin.distanceString(leg.distance) + pgettext("direction", " to ") + leg.to.name; - -``` - -#### Plural strings - -```javascript -//TRANSLATORS: widget title -this.setTitle(ngettext("%d Itinerary Returned", "%d Itineraries Returned", this.itineraries.length)); -``` - -If you add new strings to the source code, it is good practice to also update the translation -template and the translations but it is not mandatory (these can be updated later). It is also -recommended to include "i18n string change" in the commit message. - -Updating translations ---------------------- -Translations are updated with the help of [Babel](http://babel.pocoo.org/) -and [i18next-conv](https://github.com/jamuhl/i18next-gettext-converter) (xgettext doesn't yet have -great Javascript support). - -Babel is used to extract strings from the Javascript source code into the shared `.POT` translation -template, and also for updating the existing `.PO` language translations when new strings are -introduced in the template. i18next-conv is used to convert the `.PO` translation files for the -individual languages to `.json` files which are used by the Javascript translation library. - -### Installing Babel - -You can install it from your operating system's package repository (if available) or you can -use [virtualenv](http://simononsoftware.com/virtualenv-tutorial/). - -1. Install virtualenv (This depends on your operating system) -2. Create virtualenv with name .venv in directory where src and other files resides (Root - OpenTripPlanner directory). `virtualenv2 .venv`(python 2) or `python3 -m venv .venv` (python 3) -3. Use virtualenv `source .venv/bin/activate` -4. Install babel `pip install babel` - -If you didn't install babel from virtualenv in root OpenTripPlanner directory you have to add path -to babel in Makefile. change `PYBABEL` variable to path to pybabel. - -### Installing i18next-conv - -i18next-conv requires [nodejs](http://nodejs.org/). - -Once you have NodeJS installed, use `npm install i18next-conv` to install i18next-conv in the same -directory where you created virtualenv. - -### Updating the `.pot` Template - -In the root of the OTP repo, run `make`. The commands in the `Makefile` will extract the -translatable strings from the Javascript files and update the translation template `messages.pot`, -as well as the `.po` translation files for all the different languages. - -Once this is done, you can translate the new strings in the `.po` files. After saving the -updated `.po` file, run -`make update_js` to transform to PO files into `.json`, which is used at runtime by the Javascript -translation library. After you rebuild OTP, all new strings should be visible in the UI. - -## For Translators: Creating New Translations - -The following can get a bit technical. If you want to do a translation but don't want to / know how -to install all this software, post to the [Gitter chat room](https://gitter.im/opentripplanner/OpenTripPlanner) -stating what language you want to translate, and someone will make you a corresponding `.po` file. - -### Creating a New Translation File - -New `.po` files are created from the `.pot` template with the help of `msginit`, which is run like -this: -`msginit init -l -i messages.pot -o .po`, where `` is a culture code. New `.po`files -can also be created with the help of `Poedit`. All translation files should be placed in the -directory `/src/client/i18n`. - -Please use the ISO language code as the culture code (e.g. `fr.po` for French). We will append -country codes in the following limited circumstances: - -- British versus US English (`en_GB.po` and `en_US.po`) -- Brazilian Portuguese `pt_BR.po`, as opposed to `pt.po` for European Portuguese -- Chinese: `zh_TW.po` for traditional characters as used in e.g. Taiwan and Hong Kong, - and `zh_CN.po` for simplified characters as used in mainland China, Singapore, etc. - -These conventions are based on -the [Launchpad Translation](https://help.launchpad.net/Translations/YourProject/ImportingTranslations) -page. - -In Linux you can see the culture codes for all the locales you have installed with the -command `locale -a`. A list of culture codes is also -availible [here](http://download1.parallels.com/SiteBuilder/Windows/docs/3.2/en_US/sitebulder-3.2-win-sdk-localization-pack-creation-guide/30801.htm) -. - -### Performing the Translation - -#### Configuration - -Copy the locale configuration script `English.js` from `/src/client/js/otp/locale` -to `YourLanguage.js` and customize it to your language. Change the name, units, locale_short and -datepicker_locale_short values. Translate infoWidgets and localize the time/date formats. - -Then take the following steps: - -- Add the culture code to the `LANGS` variable in the Makefile` -- Add the new `YourLanguage.js` to the locales variable in `/src/client/js/otp/config.js` -- Add a new datepicker translation to `/src/client/js/lib/jquery-ui/i18n` -- Load the new datepicker translation and `YourLanguage.js` in `/src/client/index.html` - -#### Translating Strings - -For translating the strings themselves, you can use any program that supports gettext files. You can -in theory use any text editor, but programs or plugins purpose-built for translating are -recommended. Most of them support checking parameter correctness, translation memory, web -translating services etc. to make the task easier. - -Here are some such programs (all free and open source): - -- [Poedit](http://poedit.net/) For Linux, Windows, and Mac. Use a version newer then 1.5. This is - the recommended choice for getting started with localization. It supports translation memory and - file context. -- [Web Poedit](https://localise.biz/free/poedit) Usable from within a web browser, you don't have to - install or register -- [Gted](http://www.gted.org/) A plugin for the Eclipse IDE. -- [Lokalize](http://userbase.kde.org/Lokalize) Runs under KDE on Linux, has some Windows support. - Supports translation memory and file context. -- [Virtaal](http://virtaal.translatehouse.org/index.html) For Linux, Windows, and beta for Mac. - Supports Google and Microsoft web translation and other translation memory services. - -All these programs support setting a string to "fuzzy", marking that it needs review etc. in case -you translate something but aren't sure of it's correctness. Sometimes those flags are set -automatically if the original string was changed and translators must check if the translation is -still correct. - -#### Caveats - -Be careful when translating that the translated strings have the same format as the original. If -spaces appear at the start or end of the strings, they must also appear in the translation. The -order of unnamed (positional) parameters may change depending on the target language. You can also -leave parameter out of the translation if it is irrelevant in the target language. diff --git a/mkdocs.yml b/mkdocs.yml index 1364be7be1f..dd060c3ffd1 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -95,7 +95,6 @@ nav: - "Logging": "Logging.md" - Development: - "Developers' Guide": 'Developers-Guide.md' - - Localization: 'Localization.md' - Bibliography: 'Bibliography.md' - Sandbox Development: 'SandboxExtension.md' - Release Checklist: 'ReleaseChecklist.md' From afc52080abd9e8ac7e52233fc84f6bc639303be3 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Tue, 15 Oct 2024 21:18:59 +0300 Subject: [PATCH 037/213] Update src location in docs --- client/README.md | 2 +- doc/templates/BuildConfiguration.md | 2 +- doc/templates/GraphQL-Tutorial.md | 2 +- doc/templates/RouterConfiguration.md | 2 +- doc/user/BuildConfiguration.md | 2 +- doc/user/Frontends.md | 4 ++-- doc/user/RouteRequest.md | 2 +- doc/user/RouterConfiguration.md | 4 ++-- doc/user/Troubleshooting-Routing.md | 2 +- doc/user/apis/GraphQL-Tutorial.md | 2 +- doc/user/sandbox/GoogleCloudStorage.md | 2 +- doc/user/sandbox/transferanalyzer.md | 2 +- 12 files changed, 14 insertions(+), 14 deletions(-) diff --git a/client/README.md b/client/README.md index 54971062971..a646cd1170c 100644 --- a/client/README.md +++ b/client/README.md @@ -22,7 +22,7 @@ generated during build and are not checked into the repository. Use latest LTS version of Node/npm (currently v18). Recommend using a version manager such as `nvm`. The dev and production builds require graphql schema to be present at -`../src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql`. +`../application/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql`. ## Getting started (development) diff --git a/doc/templates/BuildConfiguration.md b/doc/templates/BuildConfiguration.md index 77b03dae500..01bec90fce5 100644 --- a/doc/templates/BuildConfiguration.md +++ b/doc/templates/BuildConfiguration.md @@ -163,7 +163,7 @@ OTP allows you to adjust the elevation values reported in API responses in two w is to store ellipsoid (GPS) elevation values internally, but apply a single geoid difference value in the OTP client where appropriate to display elevations above sea level. This ellipsoid to geoid difference is returned in each trip plan response in the -[ElevationMetadata](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/src/main/java/org/opentripplanner/api/resource/ElevationMetadata.java) +[ElevationMetadata](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/application/src/main/java/org/opentripplanner/api/resource/ElevationMetadata.java) field. Using a single value can be sufficient for smaller OTP deployments, but might result in incorrect values at the edges of larger OTP deployments. If your OTP instance uses this, it is recommended to set a default request value in the `router-config.json` file as follows: diff --git a/doc/templates/GraphQL-Tutorial.md b/doc/templates/GraphQL-Tutorial.md index 2a78be65cc2..b3a59b7d19e 100644 --- a/doc/templates/GraphQL-Tutorial.md +++ b/doc/templates/GraphQL-Tutorial.md @@ -51,4 +51,4 @@ Most people want to get routing results out of OTP, so lets see the query for th Again, please use the autocomplete and documentation viewers to figure out what each input parameter and property means. -More examples for a variety of queries can also be found [in the test code](https://github.com/opentripplanner/OpenTripPlanner/tree/dev-2.x/src/test/resources/org/opentripplanner/apis/gtfs/queries). \ No newline at end of file +More examples for a variety of queries can also be found [in the test code](https://github.com/opentripplanner/OpenTripPlanner/tree/dev-2.x/application/src/test/resources/org/opentripplanner/apis/gtfs/queries). \ No newline at end of file diff --git a/doc/templates/RouterConfiguration.md b/doc/templates/RouterConfiguration.md index 87e4c1693cc..42a78cc41ca 100644 --- a/doc/templates/RouterConfiguration.md +++ b/doc/templates/RouterConfiguration.md @@ -14,7 +14,7 @@ These options can be applied by the OTP server without rebuilding the graph. Certain settings can be provided on the command line, when starting OpenTripPlanner. See the `CommandLineParameters` class -for [a full list of arguments](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/src/main/java/org/opentripplanner/standalone/config/CommandLineParameters.java) +for [a full list of arguments](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/application/src/main/java/org/opentripplanner/standalone/config/CommandLineParameters.java) . ## Routing defaults diff --git a/doc/user/BuildConfiguration.md b/doc/user/BuildConfiguration.md index f5281db0f4e..18f252bc43c 100644 --- a/doc/user/BuildConfiguration.md +++ b/doc/user/BuildConfiguration.md @@ -264,7 +264,7 @@ OTP allows you to adjust the elevation values reported in API responses in two w is to store ellipsoid (GPS) elevation values internally, but apply a single geoid difference value in the OTP client where appropriate to display elevations above sea level. This ellipsoid to geoid difference is returned in each trip plan response in the -[ElevationMetadata](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/src/main/java/org/opentripplanner/api/resource/ElevationMetadata.java) +[ElevationMetadata](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/application/src/main/java/org/opentripplanner/api/resource/ElevationMetadata.java) field. Using a single value can be sufficient for smaller OTP deployments, but might result in incorrect values at the edges of larger OTP deployments. If your OTP instance uses this, it is recommended to set a default request value in the `router-config.json` file as follows: diff --git a/doc/user/Frontends.md b/doc/user/Frontends.md index 8bb32273149..f4b13604b40 100644 --- a/doc/user/Frontends.md +++ b/doc/user/Frontends.md @@ -19,7 +19,7 @@ On the other hand, **production frontends** are intended to be a component of la The main OpenTripPlanner repository currently contains two debug web frontends: - new one currently under development at [`/client`](https://github.com/opentripplanner/OpenTripPlanner/tree/dev-2.x/client). -- the classic one in [`/src/client/classic-debug/`](https://github.com/opentripplanner/OpenTripPlanner/tree/dev-2.x/src/client/classic-debug) +- the classic one in [`/src/client/classic-debug/`](https://github.com/opentripplanner/OpenTripPlanner/tree/dev-2.x/application/src/client/classic-debug) The **new debug client** is a React/TypeScript Single Page App (SPA) that can be served locally or accessed over a content delivery network (CDN). Unlike the original debug client, it connects to the OTP Java backend via the GraphQL API using the Transmodel vocabulary. By default, it is available at the root URL (`http://localhost:8080/` in local operation). @@ -29,7 +29,7 @@ It connects to the OTP Java backend via a REST API using the GTFS vocabulary. Hi It is still available, but has been moved to `http://localhost:8080/classic-debug/` . There is a third piece of software that might qualify as an OTP client: a Java Swing application making use of the Processing visualization library, -located in the [GraphVisualizer class](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/src/main/java/org/opentripplanner/visualizer/GraphVisualizer.java). +located in the [GraphVisualizer class](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/application/src/main/java/org/opentripplanner/visualizer/GraphVisualizer.java). While it would not be accurate to call this a "native" desktop application (as it's cross-platform Java) it is not a web app. This very developer-centric UI is also over a decade old and has been very sparsely maintained, but continues to exist because it can visualize the progress of searches through the street network, providing some insight into the internals of the routing algorithms that are not otherwise visible. diff --git a/doc/user/RouteRequest.md b/doc/user/RouteRequest.md index ea3d0d12c74..b8202d64231 100644 --- a/doc/user/RouteRequest.md +++ b/doc/user/RouteRequest.md @@ -964,7 +964,7 @@ The defaults should work fine, but if you have results with short wait-times dom option or "back-travel", then try to increase the `minSafeWaitTimeFactor`, `backTravelWaitTimeFactor` and/or `extraStopBoardAlightCostsFactor`. -For details on the logic/design see [transfer optimization](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/package.md) +For details on the logic/design see [transfer optimization](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/package.md) package documentation. diff --git a/doc/user/RouterConfiguration.md b/doc/user/RouterConfiguration.md index 711eca3fb87..c4ddc594d55 100644 --- a/doc/user/RouterConfiguration.md +++ b/doc/user/RouterConfiguration.md @@ -14,7 +14,7 @@ These options can be applied by the OTP server without rebuilding the graph. Certain settings can be provided on the command line, when starting OpenTripPlanner. See the `CommandLineParameters` class -for [a full list of arguments](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/src/main/java/org/opentripplanner/standalone/config/CommandLineParameters.java) +for [a full list of arguments](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/application/src/main/java/org/opentripplanner/standalone/config/CommandLineParameters.java) . ## Routing defaults @@ -355,7 +355,7 @@ The provided array of durations is used to increase the search-window for the ne The search window is expanded when the current page return few options. If ZERO result is returned the first duration in the list is used, if ONE result is returned then the second duration is used and so on. The duration is added to the existing search-window and inserted into the next and -previous page cursor. See JavaDoc for [TransitTuningParameters#pagingSearchWindowAdjustments](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/src/main/java/org/opentripplanner/routing/algorithm/raptor/transit/TransitTuningParameters.java)" + +previous page cursor. See JavaDoc for [TransitTuningParameters#pagingSearchWindowAdjustments](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/application/src/main/java/org/opentripplanner/routing/algorithm/raptor/transit/TransitTuningParameters.java)" + for more info." diff --git a/doc/user/Troubleshooting-Routing.md b/doc/user/Troubleshooting-Routing.md index 4e237baa9fc..61f06808bd1 100644 --- a/doc/user/Troubleshooting-Routing.md +++ b/doc/user/Troubleshooting-Routing.md @@ -148,7 +148,7 @@ props.setProperties("surface=mud", StreetTraversalPermission.ALL, 1.5, 1.5, true ``` The Javadoc -of [`OSMSpecifier.java`](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/src/main/java/org/opentripplanner/graph_builder/module/osm/OSMSpecifier.java) +of [`OSMSpecifier.java`](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OSMSpecifier.java) contains the precise documentation about the syntax of the matchers. There are a lot of rules for which tags results in a specific safety score so it's not easy to get diff --git a/doc/user/apis/GraphQL-Tutorial.md b/doc/user/apis/GraphQL-Tutorial.md index 5c4b59e864e..41695de304a 100644 --- a/doc/user/apis/GraphQL-Tutorial.md +++ b/doc/user/apis/GraphQL-Tutorial.md @@ -138,4 +138,4 @@ Most people want to get routing results out of OTP, so lets see the query for th Again, please use the autocomplete and documentation viewers to figure out what each input parameter and property means. -More examples for a variety of queries can also be found [in the test code](https://github.com/opentripplanner/OpenTripPlanner/tree/dev-2.x/src/test/resources/org/opentripplanner/apis/gtfs/queries). \ No newline at end of file +More examples for a variety of queries can also be found [in the test code](https://github.com/opentripplanner/OpenTripPlanner/tree/dev-2.x/application/src/test/resources/org/opentripplanner/apis/gtfs/queries). \ No newline at end of file diff --git a/doc/user/sandbox/GoogleCloudStorage.md b/doc/user/sandbox/GoogleCloudStorage.md index 2fdc688a247..4876857b727 100644 --- a/doc/user/sandbox/GoogleCloudStorage.md +++ b/doc/user/sandbox/GoogleCloudStorage.md @@ -14,7 +14,7 @@ To enable this turn on the feature `GoogleCloudStorage`. OTP can load or store artifacts from one or more Google Cloud Storge locations. Each artifact must be configured in the _build-config.json_: -See [`BuildConfig`](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/src/main/java/org/opentripplanner/standalone/config/BuildConfig.java) +See [`BuildConfig`](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/application/src/main/java/org/opentripplanner/standalone/config/BuildConfig.java) on how to configure artifacts. Example (build-config.json): diff --git a/doc/user/sandbox/transferanalyzer.md b/doc/user/sandbox/transferanalyzer.md index edc1a2579ea..d1dfabe10b2 100644 --- a/doc/user/sandbox/transferanalyzer.md +++ b/doc/user/sandbox/transferanalyzer.md @@ -17,5 +17,5 @@ generates lists of both unusually long and unroutable transfers. These lists can to improve the quality of OSM data for transfer purposes. See javadoc in -[DirectTransferAnalyzer](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/src/ext/java/org/opentripplanner/ext/transferanalyzer/DirectTransferAnalyzer.java) +[DirectTransferAnalyzer](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/application/src/ext/java/org/opentripplanner/ext/transferanalyzer/DirectTransferAnalyzer.java) class \ No newline at end of file From d8bd5f5bf621406845cef59f6d6ab88ffeb90be6 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Tue, 15 Oct 2024 21:19:12 +0300 Subject: [PATCH 038/213] Update schema location in client codegen --- client/codegen.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/codegen.ts b/client/codegen.ts index b5b68a0650a..60299a21a97 100644 --- a/client/codegen.ts +++ b/client/codegen.ts @@ -2,7 +2,7 @@ import type { CodegenConfig } from '@graphql-codegen/cli'; const config: CodegenConfig = { overwrite: true, - schema: '../src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql', + schema: '../application/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql', documents: 'src/**/*.{ts,tsx}', generates: { 'src/gql/': { From 243c232d506ad9b0454454abd2ba849bad52f98f Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Tue, 15 Oct 2024 21:50:48 +0300 Subject: [PATCH 039/213] Minor fixes --- doc/templates/BuildConfiguration.md | 2 +- doc/user/BuildConfiguration.md | 2 +- doc/user/Frontends.md | 2 +- doc/user/RouteRequest.md | 2 +- doc/user/RouterConfiguration.md | 2 +- doc/user/Troubleshooting-Routing.md | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/templates/BuildConfiguration.md b/doc/templates/BuildConfiguration.md index 01bec90fce5..3d1cd5a1db3 100644 --- a/doc/templates/BuildConfiguration.md +++ b/doc/templates/BuildConfiguration.md @@ -163,7 +163,7 @@ OTP allows you to adjust the elevation values reported in API responses in two w is to store ellipsoid (GPS) elevation values internally, but apply a single geoid difference value in the OTP client where appropriate to display elevations above sea level. This ellipsoid to geoid difference is returned in each trip plan response in the -[ElevationMetadata](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/application/src/main/java/org/opentripplanner/api/resource/ElevationMetadata.java) +[ElevationMetadata](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/application/src/ext/java/org/opentripplanner/ext/restapi/model/ElevationMetadata.java) field. Using a single value can be sufficient for smaller OTP deployments, but might result in incorrect values at the edges of larger OTP deployments. If your OTP instance uses this, it is recommended to set a default request value in the `router-config.json` file as follows: diff --git a/doc/user/BuildConfiguration.md b/doc/user/BuildConfiguration.md index 18f252bc43c..99e98066e73 100644 --- a/doc/user/BuildConfiguration.md +++ b/doc/user/BuildConfiguration.md @@ -264,7 +264,7 @@ OTP allows you to adjust the elevation values reported in API responses in two w is to store ellipsoid (GPS) elevation values internally, but apply a single geoid difference value in the OTP client where appropriate to display elevations above sea level. This ellipsoid to geoid difference is returned in each trip plan response in the -[ElevationMetadata](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/application/src/main/java/org/opentripplanner/api/resource/ElevationMetadata.java) +[ElevationMetadata](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/application/src/ext/java/org/opentripplanner/ext/restapi/model/ElevationMetadata.java) field. Using a single value can be sufficient for smaller OTP deployments, but might result in incorrect values at the edges of larger OTP deployments. If your OTP instance uses this, it is recommended to set a default request value in the `router-config.json` file as follows: diff --git a/doc/user/Frontends.md b/doc/user/Frontends.md index f4b13604b40..ac793a4fc85 100644 --- a/doc/user/Frontends.md +++ b/doc/user/Frontends.md @@ -19,7 +19,7 @@ On the other hand, **production frontends** are intended to be a component of la The main OpenTripPlanner repository currently contains two debug web frontends: - new one currently under development at [`/client`](https://github.com/opentripplanner/OpenTripPlanner/tree/dev-2.x/client). -- the classic one in [`/src/client/classic-debug/`](https://github.com/opentripplanner/OpenTripPlanner/tree/dev-2.x/application/src/client/classic-debug) +- the classic one in [`/application/src/client/classic-debug/`](https://github.com/opentripplanner/OpenTripPlanner/tree/dev-2.x/application/src/client/classic-debug) The **new debug client** is a React/TypeScript Single Page App (SPA) that can be served locally or accessed over a content delivery network (CDN). Unlike the original debug client, it connects to the OTP Java backend via the GraphQL API using the Transmodel vocabulary. By default, it is available at the root URL (`http://localhost:8080/` in local operation). diff --git a/doc/user/RouteRequest.md b/doc/user/RouteRequest.md index b8202d64231..ea3d0d12c74 100644 --- a/doc/user/RouteRequest.md +++ b/doc/user/RouteRequest.md @@ -964,7 +964,7 @@ The defaults should work fine, but if you have results with short wait-times dom option or "back-travel", then try to increase the `minSafeWaitTimeFactor`, `backTravelWaitTimeFactor` and/or `extraStopBoardAlightCostsFactor`. -For details on the logic/design see [transfer optimization](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/package.md) +For details on the logic/design see [transfer optimization](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/package.md) package documentation. diff --git a/doc/user/RouterConfiguration.md b/doc/user/RouterConfiguration.md index c4ddc594d55..766ad0de4ef 100644 --- a/doc/user/RouterConfiguration.md +++ b/doc/user/RouterConfiguration.md @@ -355,7 +355,7 @@ The provided array of durations is used to increase the search-window for the ne The search window is expanded when the current page return few options. If ZERO result is returned the first duration in the list is used, if ONE result is returned then the second duration is used and so on. The duration is added to the existing search-window and inserted into the next and -previous page cursor. See JavaDoc for [TransitTuningParameters#pagingSearchWindowAdjustments](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/application/src/main/java/org/opentripplanner/routing/algorithm/raptor/transit/TransitTuningParameters.java)" + +previous page cursor. See JavaDoc for [TransitTuningParameters#pagingSearchWindowAdjustments](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/src/main/java/org/opentripplanner/routing/algorithm/raptor/transit/TransitTuningParameters.java)" + for more info." diff --git a/doc/user/Troubleshooting-Routing.md b/doc/user/Troubleshooting-Routing.md index 61f06808bd1..cd7eaa04c88 100644 --- a/doc/user/Troubleshooting-Routing.md +++ b/doc/user/Troubleshooting-Routing.md @@ -148,7 +148,7 @@ props.setProperties("surface=mud", StreetTraversalPermission.ALL, 1.5, 1.5, true ``` The Javadoc -of [`OSMSpecifier.java`](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OSMSpecifier.java) +of [`OSMSpecifier.java`](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/application/src/main/java/org/opentripplanner/osm/wayproperty/specifier/OsmSpecifier.java) contains the precise documentation about the syntax of the matchers. There are a lot of rules for which tags results in a specific safety score so it's not easy to get From 7b4be494b652975bb7490645c4f5bc5af67ac356 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Mon, 14 Oct 2024 12:10:39 +0200 Subject: [PATCH 040/213] refactor: Remove dependency from Raptor to DefaultCostCalculator, TripScheduleBoardSearch, and ValueObjectToStringBuilder. --- .../raptor/api/view/ArrivalView.java | 3 +- .../support/TimeBasedBoardingSupport.java | 4 --- .../raptor/spi/BoardAndAlightTime.java | 30 +++++++++---------- .../request/TripScheduleBoardSearch.java | 2 +- 4 files changed, 17 insertions(+), 22 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/raptor/api/view/ArrivalView.java b/application/src/main/java/org/opentripplanner/raptor/api/view/ArrivalView.java index 862f7f17fb6..2dffbbe5733 100644 --- a/application/src/main/java/org/opentripplanner/raptor/api/view/ArrivalView.java +++ b/application/src/main/java/org/opentripplanner/raptor/api/view/ArrivalView.java @@ -10,7 +10,6 @@ import org.opentripplanner.raptor.api.model.RaptorValueFormatter; import org.opentripplanner.raptor.api.model.TransitArrival; import org.opentripplanner.raptor.spi.RaptorCostCalculator; -import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.DefaultCostCalculator; /** * The purpose of the stop-arrival-view is to provide a common interface for stop-arrivals for @@ -157,7 +156,7 @@ default String asString() { String arrival = "[" + TimeUtils.timeToStrCompact(arrivalTime()) + - cost(c1(), DefaultCostCalculator.ZERO_COST, RaptorValueFormatter::formatC1) + + cost(c1(), RaptorCostCalculator.ZERO_COST, RaptorValueFormatter::formatC1) + cost(c2(), RaptorConstants.NOT_SET, RaptorValueFormatter::formatC2) + "]"; return switch (arrivedBy()) { diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/support/TimeBasedBoardingSupport.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/support/TimeBasedBoardingSupport.java index 9ecd2bbf100..2b5c4694409 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/support/TimeBasedBoardingSupport.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/support/TimeBasedBoardingSupport.java @@ -13,7 +13,6 @@ import org.opentripplanner.raptor.spi.RaptorConstrainedBoardingSearch; import org.opentripplanner.raptor.spi.RaptorTimeTable; import org.opentripplanner.raptor.spi.RaptorTripScheduleSearch; -import org.opentripplanner.routing.algorithm.raptoradapter.transit.request.TripScheduleBoardSearch; /** * This class contains code which is shared by all time-dependent {@link RoutingStrategy}s. @@ -119,9 +118,6 @@ private int earliestBoardTime(int prevArrivalTime, int boardSlack) { return calculator.plusDuration(prevArrivalTime, boardSlack); } - /** - * Create a trip search using {@link TripScheduleBoardSearch}. - */ private RaptorTripScheduleSearch createTripSearch(RaptorTimeTable timeTable) { if (!inFirstIteration && isFirstRound(round) && !hasTimeDependentAccess) { // For the first round of every iteration(except the first) we restrict the first diff --git a/application/src/main/java/org/opentripplanner/raptor/spi/BoardAndAlightTime.java b/application/src/main/java/org/opentripplanner/raptor/spi/BoardAndAlightTime.java index 94744f4bd61..9c0f8264511 100644 --- a/application/src/main/java/org/opentripplanner/raptor/spi/BoardAndAlightTime.java +++ b/application/src/main/java/org/opentripplanner/raptor/spi/BoardAndAlightTime.java @@ -1,7 +1,8 @@ package org.opentripplanner.raptor.spi; import java.util.Objects; -import org.opentripplanner.framework.tostring.ValueObjectToStringBuilder; +import org.opentripplanner.framework.time.DurationUtils; +import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; /** @@ -68,19 +69,18 @@ public boolean equals(Object o) { @Override public String toString() { - return ValueObjectToStringBuilder - .of() - .addText("[") - .addObj(trip.pattern().stopIndex(boardStopPos)) - .addText(" ~ ") - .addServiceTime(boardTime()) - .addText(" ") - .addServiceTime(alightTime()) - .addText("(") - .addDurationSec(alightTime() - boardTime()) - .addText(") ~ ") - .addObj(trip.pattern().stopIndex(alightStopPos)) - .addText("]") - .toString(); + return ( + "[" + + trip.pattern().stopIndex(boardStopPos) + + " ~ " + + TimeUtils.timeToStrCompact(boardTime()) + + " " + + TimeUtils.timeToStrCompact(alightTime()) + + "(" + + DurationUtils.durationToStr(alightTime() - boardTime()) + + ") ~ " + + trip.pattern().stopIndex(alightStopPos) + + "]" + ); } } diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripScheduleBoardSearch.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripScheduleBoardSearch.java index db08dd2dada..4ec306f84b3 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripScheduleBoardSearch.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripScheduleBoardSearch.java @@ -15,7 +15,7 @@ * trips are ordered after the FIRST stop boarding times. We also assume that trips do not pass each * other; Hence trips IN SERVICE on a given day will be in order for all other stops too. *

    - * The search use a binary search if the number of trip schedules is above a given threshold. A + * The search uses a binary search if the number of trip schedules is above a given threshold. A * linear search is slow when the number of schedules is very large, let say more than 300 trip * schedules. * From 1b8da589d7472a9519cde8610719c51ff099fbdf Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Tue, 15 Oct 2024 20:24:11 +0200 Subject: [PATCH 041/213] Fix: Regression error in passThroughPoints in the Transmodel API The list of ids inside passThroughPoints is allowed to be empty or null. We cannot change this - that would be a breaking change. So, when the via search enforced this, the API was not backward compatible anymore. This commit reverts the behavior and just ignores the passThroughPoints if the list of ids is null or empty. This bug was introduced in PR #6084. --- .../mapping/TripViaLocationMapper.java | 23 +++- .../model/plan/ViaLocationInputType.java | 9 +- .../request/via/PassThroughViaLocation.java | 3 +- .../api/request/via/VisitViaLocation.java | 3 +- .../apis/transmodel/schema.graphql | 4 +- .../mapping/TripViaLocationMapperTest.java | 125 ++++++++++++++++-- 6 files changed, 144 insertions(+), 23 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/mapping/TripViaLocationMapper.java b/application/src/main/java/org/opentripplanner/apis/transmodel/mapping/TripViaLocationMapper.java index 50845aecef7..5f572c89da0 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/mapping/TripViaLocationMapper.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/mapping/TripViaLocationMapper.java @@ -6,6 +6,8 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.Objects; +import javax.annotation.Nullable; import org.opentripplanner.apis.transmodel.model.plan.TripQuery; import org.opentripplanner.apis.transmodel.model.plan.ViaLocationInputType; import org.opentripplanner.apis.transmodel.support.OneOfInputValidator; @@ -30,6 +32,7 @@ static List toLegacyPassThroughLocations( return passThroughPoints .stream() .map(TripViaLocationMapper::mapLegacyPassThroughViaLocation) + .filter(Objects::nonNull) .collect(toList()); } @@ -65,6 +68,13 @@ private static PassThroughViaLocation mapPassThroughViaLocation(Map mapStopLocationIds(Map map) { var c = (Collection) map.get(ViaLocationInputType.FIELD_STOP_LOCATION_IDS); + + // When coordinates are added, we need to accept null here... + if (c == null) { + throw new IllegalArgumentException( + "'" + ViaLocationInputType.FIELD_STOP_LOCATION_IDS + "' is not set!" + ); + } return c.stream().map(TransitIdMapper::mapIDToDomain).toList(); } @@ -72,12 +82,17 @@ private static List mapStopLocationIds(Map map) { * @deprecated Legacy passThrough, use via instead */ @Deprecated + @Nullable private static ViaLocation mapLegacyPassThroughViaLocation(Map inputMap) { final String name = (String) inputMap.get("name"); - final List stopLocationIds = - ((List) inputMap.get("placeIds")).stream() - .map(TransitIdMapper::mapIDToDomain) - .toList(); + List placeIds = (List) inputMap.get("placeIds"); + if (placeIds == null || placeIds.isEmpty()) { + return null; + } + final List stopLocationIds = placeIds + .stream() + .map(TransitIdMapper::mapIDToDomain) + .toList(); return new PassThroughViaLocation(name, stopLocationIds); } } diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/ViaLocationInputType.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/ViaLocationInputType.java index a808d934eed..ef13f8db18e 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/ViaLocationInputType.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/ViaLocationInputType.java @@ -5,6 +5,7 @@ import graphql.language.StringValue; import graphql.schema.GraphQLInputObjectType; +import graphql.schema.GraphQLInputType; import graphql.schema.GraphQLList; import graphql.schema.GraphQLNonNull; import java.time.Duration; @@ -84,7 +85,7 @@ be accepted. To visit a coordinate, the traveler must walk(bike or drive) to the b .name(FIELD_STOP_LOCATION_IDS) .description(DOC_STOP_LOCATION_IDS) - .type(gqlListOfNonNullStrings()) + .type(requiredListOfNonNullStrings()) ) /* TODO: Add support for coordinates @@ -101,7 +102,7 @@ be accepted. To visit a coordinate, the traveler must walk(bike or drive) to the b .name(FIELD_STOP_LOCATION_IDS) .description(DOC_STOP_LOCATION_IDS) - .type(gqlListOfNonNullStrings()) + .type(requiredListOfNonNullStrings()) ) .build(); @@ -119,7 +120,7 @@ be accepted. To visit a coordinate, the traveler must walk(bike or drive) to the ) .build(); - private static GraphQLList gqlListOfNonNullStrings() { - return new GraphQLList(new GraphQLNonNull(GraphQLString)); + private static GraphQLInputType requiredListOfNonNullStrings() { + return new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(GraphQLString))); } } diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/via/PassThroughViaLocation.java b/application/src/main/java/org/opentripplanner/routing/api/request/via/PassThroughViaLocation.java index 1116031cec6..aa75a634004 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/via/PassThroughViaLocation.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/via/PassThroughViaLocation.java @@ -16,7 +16,8 @@ public PassThroughViaLocation(@Nullable String label, Collection s super(label, stopLocationIds); if (stopLocationIds.isEmpty()) { throw new IllegalArgumentException( - "A pass through via location must have at least one stop location. Label: " + label + "A pass through via location must have at least one stop location." + + (label == null ? "" : " Label: " + label) ); } } diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/via/VisitViaLocation.java b/application/src/main/java/org/opentripplanner/routing/api/request/via/VisitViaLocation.java index 2b59a749a1d..096fbfabc0b 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/via/VisitViaLocation.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/via/VisitViaLocation.java @@ -41,7 +41,8 @@ public VisitViaLocation( if (stopLocationIds().isEmpty() && coordinates().isEmpty()) { throw new IllegalArgumentException( - "A via location must have at least one stop location or a coordinate. Label: " + label + "A via location must have at least one stop location or a coordinate." + + (label == null ? "" : " Label: " + label) ); } } diff --git a/application/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql b/application/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql index 9aa743fd42d..2f3aef2d9a2 100644 --- a/application/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/application/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -2204,7 +2204,7 @@ input TripPassThroughViaLocationInput { stop place or a group of stop places. It is enough to visit ONE of the locations listed. """ - stopLocationIds: [String!] + stopLocationIds: [String!]! } """ @@ -2239,7 +2239,7 @@ input TripVisitViaLocationInput { stop place or a group of stop places. It is enough to visit ONE of the locations listed. """ - stopLocationIds: [String!] + stopLocationIds: [String!]! } "Input format for specifying a location through either a place reference (id), coordinates or both. If both place and coordinates are provided the place ref will be used if found, coordinates will only be used if place is not known. The location also contain information about the minimum and maximum time the user is willing to stay at the via location." diff --git a/application/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripViaLocationMapperTest.java b/application/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripViaLocationMapperTest.java index 49304ee1e05..4e6cf067fb8 100644 --- a/application/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripViaLocationMapperTest.java +++ b/application/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripViaLocationMapperTest.java @@ -21,10 +21,15 @@ class TripViaLocationMapperTest { - public static final String LABEL = "TestLabel"; - public static final Duration MIN_WAIT_TIME = Duration.ofMinutes(5); - public static final List LIST_IDS_INPUT = List.of("F:ID1", "F:ID2"); - public static final String EXPECTED_IDS_AS_STRING = "[F:ID1, F:ID2]"; + private static final String LABEL = "TestLabel"; + private static final Duration MIN_WAIT_TIME = Duration.ofMinutes(5); + private static final List LIST_IDS_INPUT = List.of("F:ID1", "F:ID2"); + private static final String EXPECTED_IDS_AS_STRING = "[F:ID1, F:ID2]"; + private static final String REASON_EMPTY_IDS_ALLOWED_PASS_THROUGH = + """ + Unfortunately the 'placeIds' is not required. Making it required would be a breaking change, + so wee just ignore it." + """; @BeforeEach void setup() { @@ -52,10 +57,7 @@ void testMapToVisitViaLocations() { @Test void testMapToVisitViaLocationsWithBareMinimum() { - Map input = Map.of( - FIELD_VISIT, - Map.of(FIELD_STOP_LOCATION_IDS, List.of("F:1")) - ); + Map input = mapOf(FIELD_VISIT, mapOf(FIELD_STOP_LOCATION_IDS, List.of("F:1"))); var result = TripViaLocationMapper.mapToViaLocations(List.of(input)); var via = result.getFirst(); @@ -66,9 +68,32 @@ void testMapToVisitViaLocationsWithBareMinimum() { assertFalse(via.isPassThroughLocation()); } + @Test + void testMapToVisitViaLocationsWithoutIds() { + Map input = mapOf(FIELD_VISIT, mapOf(FIELD_STOP_LOCATION_IDS, null)); + var ex = assertThrows( + IllegalArgumentException.class, + () -> TripViaLocationMapper.mapToViaLocations(List.of(input)) + ); + assertEquals("'stopLocationIds' is not set!", ex.getMessage()); + } + + @Test + void testMapToVisitViaLocationsWithAnEmptyListOfIds() { + Map input = mapOf(FIELD_VISIT, mapOf(FIELD_STOP_LOCATION_IDS, List.of())); + var ex = assertThrows( + IllegalArgumentException.class, + () -> TripViaLocationMapper.mapToViaLocations(List.of(input)) + ); + assertEquals( + "A via location must have at least one stop location or a coordinate.", + ex.getMessage() + ); + } + @Test void tetMapToPassThrough() { - Map input = Map.of(FIELD_PASS_THROUGH, passThroughInput(LABEL, LIST_IDS_INPUT)); + Map input = mapOf(FIELD_PASS_THROUGH, passThroughInput(LABEL, LIST_IDS_INPUT)); var result = TripViaLocationMapper.mapToViaLocations(List.of(input)); var via = result.getFirst(); @@ -83,9 +108,9 @@ void tetMapToPassThrough() { @Test void tetMapToPassThroughWithBareMinimum() { - Map input = Map.of( + Map input = mapOf( FIELD_PASS_THROUGH, - Map.of(FIELD_STOP_LOCATION_IDS, List.of("F:1")) + mapOf(FIELD_STOP_LOCATION_IDS, List.of("F:1")) ); var result = TripViaLocationMapper.mapToViaLocations(List.of(input)); var via = result.getFirst(); @@ -95,6 +120,32 @@ void tetMapToPassThroughWithBareMinimum() { assertTrue(via.isPassThroughLocation()); } + @Test + void tetMapToPassThroughWithoutIds() { + Map input = mapOf(FIELD_PASS_THROUGH, mapOf(FIELD_STOP_LOCATION_IDS, null)); + var ex = assertThrows( + IllegalArgumentException.class, + () -> TripViaLocationMapper.mapToViaLocations(List.of(input)) + ); + assertEquals("'stopLocationIds' is not set!", ex.getMessage()); + } + + @Test + void testMapToPassThroughWithAnEmptyListOfIds() { + Map input = mapOf( + FIELD_PASS_THROUGH, + mapOf(FIELD_STOP_LOCATION_IDS, List.of()) + ); + var ex = assertThrows( + IllegalArgumentException.class, + () -> TripViaLocationMapper.mapToViaLocations(List.of(input)) + ); + assertEquals( + "A pass through via location must have at least one stop location.", + ex.getMessage() + ); + } + @Test void testOneOf() { Map input = Map.ofEntries( @@ -121,6 +172,48 @@ void testOneOf() { ); } + @Test + void testToLegacyPassThroughLocations() { + Map input = Map.of("name", LABEL, "placeIds", LIST_IDS_INPUT); + var result = TripViaLocationMapper.toLegacyPassThroughLocations(List.of(input)); + var via = result.getFirst(); + + assertEquals(LABEL, via.label()); + assertEquals(EXPECTED_IDS_AS_STRING, via.stopLocationIds().toString()); + assertTrue(via.isPassThroughLocation()); + assertEquals( + "PassThroughViaLocation{label: TestLabel, stopLocationIds: [F:ID1, F:ID2]}", + via.toString() + ); + } + + @Test + void testToLegacyPassThroughLocationsWithBareMinimum() { + Map input = mapOf("placeIds", LIST_IDS_INPUT); + var result = TripViaLocationMapper.toLegacyPassThroughLocations(List.of(input)); + var via = result.getFirst(); + + assertNull(via.label()); + assertEquals(EXPECTED_IDS_AS_STRING, via.stopLocationIds().toString()); + assertTrue(via.isPassThroughLocation()); + assertEquals("PassThroughViaLocation{stopLocationIds: [F:ID1, F:ID2]}", via.toString()); + } + + @Test + void testToLegacyPassThroughLocationsWithoutIds() { + var result = TripViaLocationMapper.toLegacyPassThroughLocations( + List.of(mapOf("placeIds", null)) + ); + assertTrue(result.isEmpty(), REASON_EMPTY_IDS_ALLOWED_PASS_THROUGH); + } + + @Test + void testToLegacyPassThroughLocationsWithEmptyList() { + Map input = Map.ofEntries(entry("name", LABEL), entry("placeIds", List.of())); + var result = TripViaLocationMapper.toLegacyPassThroughLocations(List.of(input)); + assertTrue(result.isEmpty(), REASON_EMPTY_IDS_ALLOWED_PASS_THROUGH); + } + private Map visitInput(String label, Duration minWaitTime, List ids) { var map = new HashMap(); if (label != null) { @@ -138,4 +231,14 @@ private Map visitInput(String label, Duration minWaitTime, List< private Map passThroughInput(String label, List ids) { return visitInput(label, null, ids); } + + /** + * Create a new HashMap with the {@code key} and {@code value}, the value may be {@code null}. + * The {@link Map#of(Object, Object)} does not support {@code null} values. + */ + private static Map mapOf(String key, Object value) { + var map = new HashMap(); + map.put(key, value); + return map; + } } From bee2a9787a0ba59de99e80ab1fea34dd386900ff Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Wed, 16 Oct 2024 15:17:03 +0200 Subject: [PATCH 042/213] Rename StopModel to SiteRepository --- .../fares/impl/AtlantaFareServiceTest.java | 8 ++-- .../ext/fares/impl/FareModelForTest.java | 6 +-- .../ext/fares/impl/OrcaFareServiceTest.java | 8 ++-- .../flex/AreaStopsToVerticesMapperTest.java | 6 +-- .../ext/flex/FlexIntegrationTest.java | 2 +- .../ext/flex/FlexIntegrationTestData.java | 6 +-- .../ext/flex/trip/FlexTripsMapperTest.java | 4 +- .../ext/geocoder/LuceneIndexTest.java | 8 ++-- .../ext/geocoder/StopClusterMapperTest.java | 6 +-- .../TestStopConsolidationModel.java | 6 +-- .../areastops/AreaStopPropertyMapperTest.java | 4 +- .../areastops/AreaStopsLayerBuilderTest.java | 10 ++-- .../DigitransitStationPropertyMapperTest.java | 4 +- .../layers/stops/RealtimeStopsLayerTest.java | 8 ++-- .../layers/stops/StopsLayerTest.java | 8 ++-- .../ext/flex/AreaStopsToVerticesMapper.java | 10 ++-- .../parkAndRideApi/ParkAndRideResource.java | 2 +- .../DefaultStopConsolidationService.java | 6 +-- .../DirectTransferAnalyzer.java | 2 +- .../graph_builder/GraphBuilder.java | 2 +- .../module/AddTransitEntitiesToGraph.java | 6 +-- .../module/OsmBoardingLocationsModule.java | 2 +- .../RouteToCentroidStationIdsValidator.java | 2 +- .../module/StreetLinkerModule.java | 2 +- .../CalculateWorldEnvelopeModule.java | 2 +- .../module/islandpruning/PruneIslands.java | 4 +- .../gtfs/graphbuilder/GtfsModule.java | 2 +- .../GTFSToOtpTransitServiceMapper.java | 17 +++---- .../gtfs/mapping/LocationGroupMapper.java | 10 ++-- .../gtfs/mapping/LocationMapper.java | 13 +++-- .../gtfs/mapping/StopMapper.java | 10 ++-- .../model/OtpTransitService.java | 4 +- .../model/impl/OtpTransitServiceBuilder.java | 26 +++++----- .../model/impl/OtpTransitServiceImpl.java | 10 ++-- .../netex/configure/NetexConfigure.java | 2 +- .../netex/mapping/FlexStopsMapper.java | 12 ++--- .../netex/mapping/NetexMapper.java | 26 +++++----- .../netex/mapping/QuayMapper.java | 12 ++--- .../netex/mapping/StationMapper.java | 13 +++-- .../netex/mapping/StopAndStationMapper.java | 8 ++-- .../raptoradapter/transit/TransitLayer.java | 14 +++--- .../transit/mappers/TransfersMapper.java | 11 +++-- .../transit/mappers/TransitLayerMapper.java | 14 +++--- .../opentripplanner/routing/graph/Graph.java | 22 ++++----- .../routing/graph/SerializedGraphObject.java | 4 +- .../routing/graph/index/StreetIndex.java | 14 +++--- .../routing/impl/TransitAlertServiceImpl.java | 2 +- .../routing/linking/FlexLocationAdder.java | 10 ++-- .../routing/linking/VertexLinker.java | 14 ++++-- .../opentripplanner/standalone/OTPMain.java | 2 +- .../service/DefaultTransitService.java | 30 ++++++------ .../{StopModel.java => SiteRepository.java} | 48 +++++++++---------- ...uilder.java => SiteRepositoryBuilder.java} | 32 ++++++------- .../transit/service/StopModelIndex.java | 6 +-- .../transit/service/TimetableRepository.java | 20 ++++---- .../updater/siri/AddedTripBuilder.java | 4 +- .../opentripplanner/ConstantsForTests.java | 30 +++++++----- .../java/org/opentripplanner/GtfsTest.java | 6 +-- .../org/opentripplanner/TestOtpModel.java | 2 +- .../apis/gtfs/GraphQLIntegrationTest.java | 6 +-- .../mapping/TripRequestMapperTest.java | 6 +-- .../graph_builder/module/GtfsModuleTest.java | 6 +-- .../OsmBoardingLocationsModuleTest.java | 6 +-- .../module/StreetLinkerModuleTest.java | 4 +- .../islandpruning/IslandPruningUtils.java | 6 +-- .../module/linking/LinkingTest.java | 6 +-- .../module/linking/TestGraph.java | 2 +- .../module/osm/UnconnectedAreasTest.java | 6 +-- .../GenerateTripPatternsOperationTest.java | 10 ++-- .../gtfs/GtfsContextBuilder.java | 7 ++- .../gtfs/mapping/LocationGroupMapperTest.java | 4 +- .../gtfs/mapping/LocationMapperTest.java | 6 +-- .../gtfs/mapping/PathwayMapperTest.java | 4 +- .../mapping/StopAndStationMapperTest.java | 4 +- .../gtfs/mapping/StopTimeMapperTest.java | 12 ++--- .../gtfs/mapping/TransferMapperTest.java | 6 +-- .../vector/stop/AreaStopLayerBuilderTest.java | 8 ++-- ...pTransitServiceBuilderLimitPeriodTest.java | 8 ++-- .../model/impl/OtpTransitServiceImplTest.java | 8 ++-- .../opentripplanner/model/plan/PlaceTest.java | 4 +- .../ScheduledTransitLegReferenceTest.java | 8 ++-- .../netex/NetexEpipBundleSmokeTest.java | 4 +- .../netex/NetexNordicBundleSmokeTest.java | 6 +-- .../netex/mapping/FlexStopsMapperTest.java | 14 +++--- .../netex/mapping/RouteMapperTest.java | 8 ++-- .../netex/mapping/ServiceLinkMapperTest.java | 8 +++- .../netex/mapping/StationMapperTest.java | 4 +- .../mapping/StopAndStationMapperTest.java | 30 ++++++------ .../netex/mapping/TripMapperTest.java | 8 ++-- .../routing/TestHalfEdges.java | 10 ++-- .../routing/algorithm/GraphRoutingTest.java | 18 +++---- .../RaptorPathToItineraryMapperTest.java | 6 +-- .../mappers/TransitLayerMapperTest.java | 4 +- .../core/TemporaryVerticesContainerTest.java | 5 +- .../routing/graph/GraphSerializationTest.java | 6 +-- .../graphfinder/DirectGraphFinderTest.java | 8 ++-- .../linking/LinkStopToPlatformTest.java | 8 ++-- .../VehicleParkingTestGraphData.java | 6 +-- .../integration/BarrierRoutingTest.java | 2 +- .../integration/BicycleRoutingTest.java | 2 +- .../street/integration/WalkRoutingTest.java | 2 +- .../transit/model/_data/PatternTestModel.java | 4 +- .../_data/TimetableRepositoryForTest.java | 26 +++++----- .../transit/model/site/AreaStopTest.java | 4 +- .../transit/model/site/GroupStopTest.java | 8 ++-- .../transit/model/site/RegularStopTest.java | 4 +- .../service/DefaultTransitServiceTest.java | 6 +-- ...ModelMock.java => SiteRepositoryMock.java} | 4 +- ...ModelTest.java => SiteRepositoryTest.java} | 24 +++++----- .../service/TimetableRepositoryTest.java | 8 ++-- .../transit/speed_test/SpeedTest.java | 2 +- .../updater/siri/AddedTripBuilderTest.java | 6 +-- .../updater/siri/ModifiedTripBuilderTest.java | 8 ++-- .../updater/siri/TimetableHelperTest.java | 4 +- .../updater/trip/RealtimeTestConstants.java | 6 +-- .../trip/moduletests/addition/AddedTest.java | 2 +- .../VehicleParkingUpdaterTest.java | 2 +- 117 files changed, 516 insertions(+), 482 deletions(-) rename application/src/main/java/org/opentripplanner/transit/service/{StopModel.java => SiteRepository.java} (88%) rename application/src/main/java/org/opentripplanner/transit/service/{StopModelBuilder.java => SiteRepositoryBuilder.java} (78%) rename application/src/test/java/org/opentripplanner/transit/service/{StopModelMock.java => SiteRepositoryMock.java} (76%) rename application/src/test/java/org/opentripplanner/transit/service/{StopModelTest.java => SiteRepositoryTest.java} (86%) diff --git a/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/AtlantaFareServiceTest.java b/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/AtlantaFareServiceTest.java index 3662d45affa..177a74a58db 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/AtlantaFareServiceTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/AtlantaFareServiceTest.java @@ -32,7 +32,7 @@ import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.organization.Agency; import org.opentripplanner.transit.model.site.RegularStop; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; public class AtlantaFareServiceTest implements PlanTestConstants { @@ -262,7 +262,7 @@ private static Leg createLeg(String agencyId, String shortName, long startTimeMi } private static Itinerary createItinerary(String agencyId, String shortName, long startTimeMins) { - var stopModelBuilder = StopModel.of(); + var siteRepositoryBuilder = SiteRepository.of(); Agency agency = Agency .of(new FeedScopedId(FEED_ID, agencyId)) .withName(agencyId) @@ -270,12 +270,12 @@ private static Itinerary createItinerary(String agencyId, String shortName, long .build(); // Set up stops - RegularStop firstStop = stopModelBuilder + RegularStop firstStop = siteRepositoryBuilder .regularStop(new FeedScopedId(FEED_ID, "1")) .withCoordinate(new WgsCoordinate(1, 1)) .withName(new NonLocalizedString("first stop")) .build(); - RegularStop lastStop = stopModelBuilder + RegularStop lastStop = siteRepositoryBuilder .regularStop(new FeedScopedId(FEED_ID, "2")) .withCoordinate(new WgsCoordinate(1, 2)) .withName(new NonLocalizedString("last stop")) diff --git a/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/FareModelForTest.java b/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/FareModelForTest.java index d9325d139a8..303ac9560a3 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/FareModelForTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/FareModelForTest.java @@ -13,8 +13,8 @@ import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.site.FareZone; import org.opentripplanner.transit.model.site.RegularStop; -import org.opentripplanner.transit.service.StopModel; -import org.opentripplanner.transit.service.StopModelBuilder; +import org.opentripplanner.transit.service.SiteRepository; +import org.opentripplanner.transit.service.SiteRepositoryBuilder; public class FareModelForTest { @@ -25,7 +25,7 @@ public class FareModelForTest { .of(FeedScopedId.ofNullable("F2", "other-feed-zone")) .build(); - private static final StopModelBuilder STOP_MODEL_BUILDER = StopModel.of(); + private static final SiteRepositoryBuilder STOP_MODEL_BUILDER = SiteRepository.of(); static final RegularStop AIRPORT_STOP = STOP_MODEL_BUILDER .regularStop(id("airport")) diff --git a/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/OrcaFareServiceTest.java b/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/OrcaFareServiceTest.java index 63ed44131fd..d1e3bd4837c 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/OrcaFareServiceTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/OrcaFareServiceTest.java @@ -48,7 +48,7 @@ import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.organization.Agency; import org.opentripplanner.transit.model.site.RegularStop; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; public class OrcaFareServiceTest { @@ -662,15 +662,15 @@ private static Itinerary createItinerary( .withTimezone(ZoneIds.NEW_YORK.getId()) .build(); - var stopModelBuilder = StopModel.of(); + var siteRepositoryBuilder = SiteRepository.of(); // Set up stops - RegularStop firstStop = stopModelBuilder + RegularStop firstStop = siteRepositoryBuilder .regularStop(new FeedScopedId(agencyId, "1")) .withCoordinate(new WgsCoordinate(1, 1)) .withName(new NonLocalizedString(firstStopName)) .build(); - RegularStop lastStop = stopModelBuilder + RegularStop lastStop = siteRepositoryBuilder .regularStop(new FeedScopedId(agencyId, "2")) .withCoordinate(new WgsCoordinate(1, 2)) .withName(new NonLocalizedString(lastStopName)) diff --git a/application/src/ext-test/java/org/opentripplanner/ext/flex/AreaStopsToVerticesMapperTest.java b/application/src/ext-test/java/org/opentripplanner/ext/flex/AreaStopsToVerticesMapperTest.java index 1e7ff64c5dd..a60ee79cc9b 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/flex/AreaStopsToVerticesMapperTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/flex/AreaStopsToVerticesMapperTest.java @@ -22,7 +22,7 @@ import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.site.AreaStop; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.opentripplanner.transit.service.TimetableRepository; class AreaStopsToVerticesMapperTest { @@ -33,8 +33,8 @@ class AreaStopsToVerticesMapperTest { .areaStop("berlin") .withGeometry(Polygons.BERLIN) .build(); - public static final StopModel STOP_MODEL = TEST_MODEL - .stopModelBuilder() + public static final SiteRepository STOP_MODEL = TEST_MODEL + .siteRepositoryBuilder() .withAreaStop(AreaStopsToVerticesMapperTest.BERLIN_AREA_STOP) .build(); diff --git a/application/src/ext-test/java/org/opentripplanner/ext/flex/FlexIntegrationTest.java b/application/src/ext-test/java/org/opentripplanner/ext/flex/FlexIntegrationTest.java index cac0707af92..fb19f1dff36 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/flex/FlexIntegrationTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/flex/FlexIntegrationTest.java @@ -211,7 +211,7 @@ private static void addGtfsToGraph( .buildGraph(); timetableRepository.index(); - graph.index(timetableRepository.getStopModel()); + graph.index(timetableRepository.getSiteRepository()); } private Itinerary getItinerary(GenericLocation from, GenericLocation to, int index) { diff --git a/application/src/ext-test/java/org/opentripplanner/ext/flex/FlexIntegrationTestData.java b/application/src/ext-test/java/org/opentripplanner/ext/flex/FlexIntegrationTestData.java index a1d41cdebb5..87106394708 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/flex/FlexIntegrationTestData.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/flex/FlexIntegrationTestData.java @@ -15,7 +15,7 @@ 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.SiteRepository; import org.opentripplanner.transit.service.TimetableRepository; public final class FlexIntegrationTestData { @@ -43,7 +43,7 @@ public static TestOtpModel cobbOsm() { private static TestOtpModel buildFlexGraph(File file) { var deduplicator = new Deduplicator(); var graph = new Graph(deduplicator); - var timetableRepository = new TimetableRepository(new StopModel(), deduplicator); + var timetableRepository = new TimetableRepository(new SiteRepository(), deduplicator); GtfsBundle gtfsBundle = new GtfsBundle(file); GtfsModule module = new GtfsModule( List.of(gtfsBundle), @@ -54,7 +54,7 @@ private static TestOtpModel buildFlexGraph(File file) { OTPFeature.enableFeatures(Map.of(OTPFeature.FlexRouting, true)); module.buildGraph(); timetableRepository.index(); - graph.index(timetableRepository.getStopModel()); + graph.index(timetableRepository.getSiteRepository()); OTPFeature.enableFeatures(Map.of(OTPFeature.FlexRouting, false)); assertTrue(timetableRepository.hasFlexTrips()); return new TestOtpModel(graph, timetableRepository); diff --git a/application/src/ext-test/java/org/opentripplanner/ext/flex/trip/FlexTripsMapperTest.java b/application/src/ext-test/java/org/opentripplanner/ext/flex/trip/FlexTripsMapperTest.java index 73364caccf1..664bd5ed4bc 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/flex/trip/FlexTripsMapperTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/flex/trip/FlexTripsMapperTest.java @@ -12,13 +12,13 @@ import org.opentripplanner.model.StopTime; import org.opentripplanner.model.impl.OtpTransitServiceBuilder; import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; class FlexTripsMapperTest { @Test void defaultTimePenalty() { - var builder = new OtpTransitServiceBuilder(StopModel.of().build(), NOOP); + var builder = new OtpTransitServiceBuilder(SiteRepository.of().build(), NOOP); var stopTimes = List.of(stopTime(0), stopTime(1)); builder.getStopTimesSortedByTrip().addAll(stopTimes); var trips = FlexTripsMapper.createFlexTrips(builder, NOOP); diff --git a/application/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java b/application/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java index 9d90cbb5f26..18d61a3db42 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java @@ -108,7 +108,7 @@ class LuceneIndexTest { @BeforeAll static void setup() { - var stopModel = TEST_MODEL.stopModelBuilder(); + var siteRepository = TEST_MODEL.siteRepositoryBuilder(); List .of( ALEXANDERPLATZ_BUS, @@ -122,11 +122,11 @@ static void setup() { MERIDIAN_N2, MERIDIAN_AVE ) - .forEach(stopModel::withRegularStop); + .forEach(siteRepository::withRegularStop); List .of(ALEXANDERPLATZ_STATION, BERLIN_HAUPTBAHNHOF_STATION, FIVE_POINTS_STATION) - .forEach(stopModel::withStation); - var timetableRepository = new TimetableRepository(stopModel.build(), new Deduplicator()); + .forEach(siteRepository::withStation); + var timetableRepository = new TimetableRepository(siteRepository.build(), new Deduplicator()); timetableRepository.index(); var transitService = new DefaultTransitService(timetableRepository) { private final Multimap modes = ImmutableMultimap diff --git a/application/src/ext-test/java/org/opentripplanner/ext/geocoder/StopClusterMapperTest.java b/application/src/ext-test/java/org/opentripplanner/ext/geocoder/StopClusterMapperTest.java index b98de173817..d8c7caf90a8 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/geocoder/StopClusterMapperTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/geocoder/StopClusterMapperTest.java @@ -12,7 +12,7 @@ import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.opentripplanner.transit.service.TimetableRepository; class StopClusterMapperTest { @@ -22,8 +22,8 @@ class StopClusterMapperTest { private static final RegularStop STOP_B = TEST_MODEL.stop("B").build(); private static final RegularStop STOP_C = TEST_MODEL.stop("C").build(); private static final List STOPS = List.of(STOP_A, STOP_B, STOP_C); - private static final StopModel STOP_MODEL = TEST_MODEL - .stopModelBuilder() + private static final SiteRepository STOP_MODEL = TEST_MODEL + .siteRepositoryBuilder() .withRegularStops(STOPS) .build(); private static final TimetableRepository TRANSIT_MODEL = new TimetableRepository( diff --git a/application/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/TestStopConsolidationModel.java b/application/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/TestStopConsolidationModel.java index 193eddf9690..f763b520f5b 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/TestStopConsolidationModel.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/TestStopConsolidationModel.java @@ -46,8 +46,8 @@ class TestStopConsolidationModel { .build(); static TimetableRepository buildTimetableRepository() { - var stopModelBuilder = testModel.stopModelBuilder(); - List.of(STOP_A, STOP_B, STOP_C, STOP_D).forEach(stopModelBuilder::withRegularStop); - return new TimetableRepository(stopModelBuilder.build(), new Deduplicator()); + var siteRepositoryBuilder = testModel.siteRepositoryBuilder(); + List.of(STOP_A, STOP_B, STOP_C, STOP_D).forEach(siteRepositoryBuilder::withRegularStop); + return new TimetableRepository(siteRepositoryBuilder.build(), new Deduplicator()); } } diff --git a/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/areastops/AreaStopPropertyMapperTest.java b/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/areastops/AreaStopPropertyMapperTest.java index 7d14d11785c..a33a8b55286 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/areastops/AreaStopPropertyMapperTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/areastops/AreaStopPropertyMapperTest.java @@ -9,12 +9,12 @@ import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.site.AreaStop; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; class AreaStopPropertyMapperTest { private static final TimetableRepositoryForTest MODEL = new TimetableRepositoryForTest( - StopModel.of() + SiteRepository.of() ); private static final AreaStop STOP = MODEL.areaStop("123").build(); private static final Route ROUTE_WITH_COLOR = TimetableRepositoryForTest diff --git a/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/areastops/AreaStopsLayerBuilderTest.java b/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/areastops/AreaStopsLayerBuilderTest.java index 7cfab197cf1..cf5683b49b5 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/areastops/AreaStopsLayerBuilderTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/areastops/AreaStopsLayerBuilderTest.java @@ -15,8 +15,8 @@ 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.SiteRepository; +import org.opentripplanner.transit.service.SiteRepositoryBuilder; import org.opentripplanner.transit.service.TimetableRepository; class AreaStopsLayerBuilderTest { @@ -46,16 +46,16 @@ class AreaStopsLayerBuilderTest { .layers() .getFirst(); - private final StopModelBuilder stopModelBuilder = StopModel.of(); + private final SiteRepositoryBuilder siteRepositoryBuilder = SiteRepository.of(); - private final AreaStop AREA_STOP = stopModelBuilder + private final AreaStop AREA_STOP = siteRepositoryBuilder .areaStop(ID) .withName(NAME) .withGeometry(Polygons.BERLIN) .build(); private final TimetableRepository timetableRepository = new TimetableRepository( - stopModelBuilder.withAreaStop(AREA_STOP).build(), + siteRepositoryBuilder.withAreaStop(AREA_STOP).build(), new Deduplicator() ); diff --git a/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/stations/DigitransitStationPropertyMapperTest.java b/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/stations/DigitransitStationPropertyMapperTest.java index 2f37afc76be..f3b1c9e2126 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/stations/DigitransitStationPropertyMapperTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/stations/DigitransitStationPropertyMapperTest.java @@ -12,7 +12,7 @@ import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.site.Station; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.opentripplanner.transit.service.TimetableRepository; public class DigitransitStationPropertyMapperTest { @@ -20,7 +20,7 @@ public class DigitransitStationPropertyMapperTest { @Test void map() { var deduplicator = new Deduplicator(); - var timetableRepository = new TimetableRepository(new StopModel(), deduplicator); + var timetableRepository = new TimetableRepository(new SiteRepository(), deduplicator); timetableRepository.index(); var transitService = new TestTransitService(timetableRepository); diff --git a/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/stops/RealtimeStopsLayerTest.java b/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/stops/RealtimeStopsLayerTest.java index 867903c410a..6723034f2a7 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/stops/RealtimeStopsLayerTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/stops/RealtimeStopsLayerTest.java @@ -27,7 +27,7 @@ import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.opentripplanner.transit.service.TimetableRepository; public class RealtimeStopsLayerTest { @@ -40,7 +40,7 @@ public void setUp() { var name = I18NString.of("name"); var desc = I18NString.of("desc"); stop = - StopModel + SiteRepository .of() .regularStop(new FeedScopedId("F", "name")) .withName(name) @@ -49,7 +49,7 @@ public void setUp() { .withTimeZone(ZoneIds.HELSINKI) .build(); stop2 = - StopModel + SiteRepository .of() .regularStop(new FeedScopedId("F", "name")) .withName(name) @@ -62,7 +62,7 @@ public void setUp() { @Test void realtimeStopLayer() { var deduplicator = new Deduplicator(); - var timetableRepository = new TimetableRepository(new StopModel(), deduplicator); + var timetableRepository = new TimetableRepository(new SiteRepository(), deduplicator); timetableRepository.initTimeZone(ZoneIds.HELSINKI); timetableRepository.index(); var transitService = new DefaultTransitService(timetableRepository) { diff --git a/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/stops/StopsLayerTest.java b/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/stops/StopsLayerTest.java index 046c5839db0..d5d12576a1a 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/stops/StopsLayerTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/stops/StopsLayerTest.java @@ -16,7 +16,7 @@ import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.Station; import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.opentripplanner.transit.service.TimetableRepository; public class StopsLayerTest { @@ -47,7 +47,7 @@ public class StopsLayerTest { .withCoordinate(WgsCoordinate.GREENWICH) .withName(I18NString.of("A Station")) .build(); - private static final RegularStop STOP = StopModel + private static final RegularStop STOP = SiteRepository .of() .regularStop(new FeedScopedId("F", "name")) .withName(NAME_TRANSLATIONS) @@ -59,7 +59,7 @@ public class StopsLayerTest { @Test public void digitransitStopPropertyMapperTest() { var deduplicator = new Deduplicator(); - var timetableRepository = new TimetableRepository(new StopModel(), deduplicator); + var timetableRepository = new TimetableRepository(new SiteRepository(), deduplicator); timetableRepository.index(); var transitService = new TestTransitService(timetableRepository); @@ -81,7 +81,7 @@ public void digitransitStopPropertyMapperTest() { @Test public void digitransitStopPropertyMapperTranslationTest() { var deduplicator = new Deduplicator(); - var timetableRepository = new TimetableRepository(new StopModel(), deduplicator); + var timetableRepository = new TimetableRepository(new SiteRepository(), deduplicator); timetableRepository.index(); var transitService = new DefaultTransitService(timetableRepository); diff --git a/application/src/ext/java/org/opentripplanner/ext/flex/AreaStopsToVerticesMapper.java b/application/src/ext/java/org/opentripplanner/ext/flex/AreaStopsToVerticesMapper.java index be237236700..796971a43b5 100644 --- a/application/src/ext/java/org/opentripplanner/ext/flex/AreaStopsToVerticesMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/flex/AreaStopsToVerticesMapper.java @@ -17,7 +17,7 @@ import org.slf4j.LoggerFactory; /** - * Iterates over all area stops in the stop model and adds them to vertices that are suitable for + * Iterates over all area stops in the stop and adds them to vertices that are suitable for * boarding flex trips. */ public class AreaStopsToVerticesMapper implements GraphBuilderModule { @@ -36,21 +36,21 @@ public AreaStopsToVerticesMapper(Graph graph, TimetableRepository timetableRepos @Override @SuppressWarnings("Convert2MethodRef") public void buildGraph() { - if (!timetableRepository.getStopModel().hasAreaStops()) { + if (!timetableRepository.getSiteRepository().hasAreaStops()) { return; } - StreetIndex streetIndex = graph.getStreetIndexSafe(timetableRepository.getStopModel()); + StreetIndex streetIndex = graph.getStreetIndexSafe(timetableRepository.getSiteRepository()); ProgressTracker progress = ProgressTracker.track( "Add flex locations to street vertices", 1, - timetableRepository.getStopModel().listAreaStops().size() + timetableRepository.getSiteRepository().listAreaStops().size() ); LOG.info(progress.startMessage()); var results = timetableRepository - .getStopModel() + .getSiteRepository() .listAreaStops() .parallelStream() .flatMap(areaStop -> { diff --git a/application/src/ext/java/org/opentripplanner/ext/parkAndRideApi/ParkAndRideResource.java b/application/src/ext/java/org/opentripplanner/ext/parkAndRideApi/ParkAndRideResource.java index 4a577433bfe..6529fc4234d 100644 --- a/application/src/ext/java/org/opentripplanner/ext/parkAndRideApi/ParkAndRideResource.java +++ b/application/src/ext/java/org/opentripplanner/ext/parkAndRideApi/ParkAndRideResource.java @@ -40,7 +40,7 @@ public ParkAndRideResource( // TODO OTP2 - Why are we using the DirectGraphFinder here, not just // - serverContext.graphFinder(). This needs at least a comment! - // - This can be replaced with a search done with the StopModel + // - This can be replaced with a search done with the SiteRepository // - if we have a radius search there. this.graphFinder = new DirectGraphFinder(serverContext.transitService()::findRegularStops); } diff --git a/application/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java b/application/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java index d4f148d9ec6..8e6f31fb6fe 100644 --- a/application/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java +++ b/application/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java @@ -37,7 +37,7 @@ public List replacements() { .groups() .stream() .flatMap(group -> { - var primaryStop = timetableRepository.getStopModel().getRegularStop(group.primary()); + var primaryStop = timetableRepository.getSiteRepository().getRegularStop(group.primary()); if (primaryStop == null) { LOG.error( "Could not find primary stop with id {}. Ignoring stop group {}.", @@ -98,7 +98,7 @@ private Optional findAgencySpecificStop(StopLocation stop, Agency .flatMap(g -> g.secondaries().stream()) .filter(secondary -> secondary.getFeedId().equals(agency.getId().getFeedId())) .findAny() - .map(id -> timetableRepository.getStopModel().getRegularStop(id)); + .map(id -> timetableRepository.getSiteRepository().getRegularStop(id)); } @Override @@ -110,6 +110,6 @@ public Optional primaryStop(FeedScopedId id) { .map(ConsolidatedStopGroup::primary) .findAny() .orElse(id); - return Optional.ofNullable(timetableRepository.getStopModel().getRegularStop(primaryId)); + return Optional.ofNullable(timetableRepository.getSiteRepository().getRegularStop(primaryId)); } } diff --git a/application/src/ext/java/org/opentripplanner/ext/transferanalyzer/DirectTransferAnalyzer.java b/application/src/ext/java/org/opentripplanner/ext/transferanalyzer/DirectTransferAnalyzer.java index 701ff702a32..61cd9a0789b 100644 --- a/application/src/ext/java/org/opentripplanner/ext/transferanalyzer/DirectTransferAnalyzer.java +++ b/application/src/ext/java/org/opentripplanner/ext/transferanalyzer/DirectTransferAnalyzer.java @@ -68,7 +68,7 @@ public void buildGraph() { List directTransfersNotFound = new ArrayList<>(); DirectGraphFinder nearbyStopFinderEuclidian = new DirectGraphFinder( - timetableRepository.getStopModel()::findRegularStops + timetableRepository.getSiteRepository()::findRegularStops ); StreetGraphFinder nearbyStopFinderStreets = new StreetGraphFinder(graph); diff --git a/application/src/main/java/org/opentripplanner/graph_builder/GraphBuilder.java b/application/src/main/java/org/opentripplanner/graph_builder/GraphBuilder.java index bd629da9468..f88cc6ea937 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/GraphBuilder.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/GraphBuilder.java @@ -244,7 +244,7 @@ private static void logGraphBuilderCompleteStatus( long endTime = System.currentTimeMillis(); String time = DurationUtils.durationToStr(Duration.ofMillis(endTime - startTime)); var f = new OtpNumberFormat(); - var nStops = f.formatNumber(timetableRepository.getStopModel().stopIndexSize()); + var nStops = f.formatNumber(timetableRepository.getSiteRepository().stopIndexSize()); var nPatterns = f.formatNumber(timetableRepository.getAllTripPatterns().size()); var nTransfers = f.formatNumber(timetableRepository.getTransferService().listAll().size()); var nVertices = f.formatNumber(graph.countVertices()); diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/AddTransitEntitiesToGraph.java b/application/src/main/java/org/opentripplanner/graph_builder/module/AddTransitEntitiesToGraph.java index 7aa5d65bef1..1d335d7ff4f 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/AddTransitEntitiesToGraph.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/AddTransitEntitiesToGraph.java @@ -83,7 +83,7 @@ public static void addToGraph( } private void applyToGraph(TimetableRepository timetableRepository) { - timetableRepository.mergeStopModels(otpTransitService.stopModel()); + timetableRepository.mergeSiteRepositories(otpTransitService.siteRepository()); addStopsToGraphAndGenerateStopVertexes(timetableRepository); addEntrancesToGraph(); @@ -122,7 +122,7 @@ private void addStopsToGraphAndGenerateStopVertexes(TimetableRepository timetabl // Add a vertex representing the stop. // It is now possible for these vertices to not be connected to any edges. - for (RegularStop stop : otpTransitService.stopModel().listRegularStops()) { + for (RegularStop stop : otpTransitService.siteRepository().listRegularStops()) { Set modes = stopModeMap.get(stop); TransitStopVertex stopVertex = vertexFactory.transitStop( TransitStopVertex.of().withStop(stop).withModes(modes) @@ -145,7 +145,7 @@ private void addEntrancesToGraph() { } private void addStationCentroidsToGraph() { - for (Station station : otpTransitService.stopModel().listStations()) { + for (Station station : otpTransitService.siteRepository().listStations()) { if (station.shouldRouteToCentroid()) { vertexFactory.stationCentroid(station); } diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/OsmBoardingLocationsModule.java b/application/src/main/java/org/opentripplanner/graph_builder/module/OsmBoardingLocationsModule.java index ba847b96eb9..c4acabefd6c 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/OsmBoardingLocationsModule.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/OsmBoardingLocationsModule.java @@ -71,7 +71,7 @@ public OsmBoardingLocationsModule(Graph graph, TimetableRepository timetableRepo public void buildGraph() { LOG.info("Improving boarding locations by checking OSM entities..."); - StreetIndex streetIndex = graph.getStreetIndexSafe(timetableRepository.getStopModel()); + StreetIndex streetIndex = graph.getStreetIndexSafe(timetableRepository.getSiteRepository()); this.linker = streetIndex.getVertexLinker(); int successes = 0; diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/RouteToCentroidStationIdsValidator.java b/application/src/main/java/org/opentripplanner/graph_builder/module/RouteToCentroidStationIdsValidator.java index 2b4a38da58a..f7d8664e590 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/RouteToCentroidStationIdsValidator.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/RouteToCentroidStationIdsValidator.java @@ -26,7 +26,7 @@ public RouteToCentroidStationIdsValidator( private void validate() { var stationIds = timetableRepository - .getStopModel() + .getSiteRepository() .listStations() .stream() .map(AbstractTransitEntity::getId) diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java b/application/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java index 59b6a8b48a0..32495617db9 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java @@ -67,7 +67,7 @@ public StreetLinkerModule( @Override public void buildGraph() { timetableRepository.index(); - graph.index(timetableRepository.getStopModel()); + graph.index(timetableRepository.getSiteRepository()); graph.getLinker().setAddExtraEdgesToAreas(this.addExtraEdgesToAreas); if (graph.hasStreets) { diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/geometry/CalculateWorldEnvelopeModule.java b/application/src/main/java/org/opentripplanner/graph_builder/module/geometry/CalculateWorldEnvelopeModule.java index 151470e0c11..e114eb612e3 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/geometry/CalculateWorldEnvelopeModule.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/geometry/CalculateWorldEnvelopeModule.java @@ -45,7 +45,7 @@ public CalculateWorldEnvelopeModule( @Override public void buildGraph() { var vertices = graph.getVertices(); - var stops = timetableRepository.getStopModel().listStopLocations(); + var stops = timetableRepository.getSiteRepository().listStopLocations(); WorldEnvelope envelope = build(vertices, stops); worldEnvelopeRepository.saveEnvelope(envelope); } diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/islandpruning/PruneIslands.java b/application/src/main/java/org/opentripplanner/graph_builder/module/islandpruning/PruneIslands.java index 6bb2bc83719..8bb3b3fbcd5 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/islandpruning/PruneIslands.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/islandpruning/PruneIslands.java @@ -81,8 +81,8 @@ public void buildGraph() { adaptivePruningDistance ); - this.vertexLinker = graph.getLinkerSafe(timetableRepository.getStopModel()); - this.streetIndex = graph.getStreetIndexSafe(timetableRepository.getStopModel()); + this.vertexLinker = graph.getLinkerSafe(timetableRepository.getSiteRepository()); + this.streetIndex = graph.getStreetIndexSafe(timetableRepository.getSiteRepository()); pruneIslands(TraverseMode.BICYCLE); pruneIslands(TraverseMode.WALK); diff --git a/application/src/main/java/org/opentripplanner/gtfs/graphbuilder/GtfsModule.java b/application/src/main/java/org/opentripplanner/gtfs/graphbuilder/GtfsModule.java index 59acabee819..39f88f13281 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/graphbuilder/GtfsModule.java +++ b/application/src/main/java/org/opentripplanner/gtfs/graphbuilder/GtfsModule.java @@ -132,7 +132,7 @@ public void buildGraph() { feedIdsEncountered.put(feedId, gtfsBundle); GTFSToOtpTransitServiceMapper mapper = new GTFSToOtpTransitServiceMapper( - new OtpTransitServiceBuilder(timetableRepository.getStopModel(), issueStore), + new OtpTransitServiceBuilder(timetableRepository.getSiteRepository(), issueStore), feedId, issueStore, gtfsBundle.discardMinTransferTimes(), diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/GTFSToOtpTransitServiceMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/GTFSToOtpTransitServiceMapper.java index b7aea1c2e2f..8e3718be4c6 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/GTFSToOtpTransitServiceMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/GTFSToOtpTransitServiceMapper.java @@ -105,12 +105,13 @@ public GTFSToOtpTransitServiceMapper( feedInfoMapper = new FeedInfoMapper(feedId); agencyMapper = new AgencyMapper(feedId); stationMapper = new StationMapper(translationHelper, stationTransferPreference); - stopMapper = new StopMapper(translationHelper, stationLookup, builder.stopModel()); + stopMapper = new StopMapper(translationHelper, stationLookup, builder.siteRepository()); entranceMapper = new EntranceMapper(translationHelper, stationLookup); pathwayNodeMapper = new PathwayNodeMapper(translationHelper, stationLookup); boardingAreaMapper = new BoardingAreaMapper(translationHelper, stopLookup); - locationMapper = new LocationMapper(builder.stopModel(), issueStore); - locationGroupMapper = new LocationGroupMapper(stopMapper, locationMapper, builder.stopModel()); + locationMapper = new LocationMapper(builder.siteRepository(), issueStore); + locationGroupMapper = + new LocationGroupMapper(stopMapper, locationMapper, builder.siteRepository()); pathwayMapper = new PathwayMapper(stopMapper, entranceMapper, pathwayNodeMapper, boardingAreaMapper); routeMapper = new RouteMapper(agencyMapper, issueStore, translationHelper); @@ -142,7 +143,7 @@ public FareRulesData getFareRulesService() { } public void mapStopTripAndRouteDataIntoBuilder() { - var stopModel = builder.stopModel(); + var siteRepository = builder.siteRepository(); translationHelper.importTranslations(data.getAllTranslations(), data.getAllFeedInfos()); builder.getAgenciesById().addAll(agencyMapper.map(data.getAllAgencies())); @@ -159,8 +160,8 @@ public void mapStopTripAndRouteDataIntoBuilder() { if (OTPFeature.FlexRouting.isOn()) { // Stop areas and Stop groups are only used in FLEX routes - builder.stopModel().withAreaStops(locationMapper.map(data.getAllLocations())); - builder.stopModel().withGroupStops(locationGroupMapper.map(data.getAllLocationGroups())); + builder.siteRepository().withAreaStops(locationMapper.map(data.getAllLocations())); + builder.siteRepository().withGroupStops(locationGroupMapper.map(data.getAllLocationGroups())); } builder.getPathways().addAll(pathwayMapper.map(data.getAllPathways())); @@ -184,14 +185,14 @@ private void mapGtfsStopsToOtpTypes(Collection s // Map station first, so we can link to them for (org.onebusaway.gtfs.model.Stop it : stops) { if (it.getLocationType() == LOCATION_TYPE_STATION) { - builder.stopModel().withStation(stationMapper.map(it)); + builder.siteRepository().withStation(stationMapper.map(it)); } } // Map Stop, Entrance and PathwayNode, link to station for (org.onebusaway.gtfs.model.Stop it : stops) { if (it.getLocationType() == LOCATION_TYPE_STOP) { - builder.stopModel().withRegularStop(stopMapper.map(it)); + builder.siteRepository().withRegularStop(stopMapper.map(it)); } else if (it.getLocationType() == LOCATION_TYPE_ENTRANCE_EXIT) { builder.getEntrances().add(entranceMapper.map(it)); } else if (it.getLocationType() == LOCATION_TYPE_NODE) { diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/LocationGroupMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/LocationGroupMapper.java index 591a59c492e..b4ba6d3cc27 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/LocationGroupMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/LocationGroupMapper.java @@ -13,24 +13,24 @@ import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.transit.model.site.GroupStop; import org.opentripplanner.transit.model.site.GroupStopBuilder; -import org.opentripplanner.transit.service.StopModelBuilder; +import org.opentripplanner.transit.service.SiteRepositoryBuilder; public class LocationGroupMapper { private final StopMapper stopMapper; private final LocationMapper locationMapper; - private final StopModelBuilder stopModelBuilder; + private final SiteRepositoryBuilder siteRepositoryBuilder; private final Map mappedLocationGroups = new HashMap<>(); public LocationGroupMapper( StopMapper stopMapper, LocationMapper locationMapper, - StopModelBuilder stopModelBuilder + SiteRepositoryBuilder siteRepositoryBuilder ) { this.stopMapper = stopMapper; this.locationMapper = locationMapper; - this.stopModelBuilder = stopModelBuilder; + this.siteRepositoryBuilder = siteRepositoryBuilder; } Collection map(Collection allLocationGroups) { @@ -43,7 +43,7 @@ GroupStop map(LocationGroup original) { } private GroupStop doMap(LocationGroup element) { - GroupStopBuilder groupStopBuilder = stopModelBuilder + GroupStopBuilder groupStopBuilder = siteRepositoryBuilder .groupStop(mapAgencyAndId(element.getId())) .withName(new NonLocalizedString(element.getName())); diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/LocationMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/LocationMapper.java index 79a28ac0f61..5a845b8bfe8 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/LocationMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/LocationMapper.java @@ -15,17 +15,20 @@ import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.graph_builder.issue.api.Issue; import org.opentripplanner.transit.model.site.AreaStop; -import org.opentripplanner.transit.service.StopModelBuilder; +import org.opentripplanner.transit.service.SiteRepositoryBuilder; /** Responsible for mapping GTFS Location into the OTP model. */ public class LocationMapper { private final Map mappedLocations = new HashMap<>(); - private final StopModelBuilder stopModelBuilder; + private final SiteRepositoryBuilder siteRepositoryBuilder; private final DataImportIssueStore issueStore; - public LocationMapper(StopModelBuilder stopModelBuilder, DataImportIssueStore issueStore) { - this.stopModelBuilder = stopModelBuilder; + public LocationMapper( + SiteRepositoryBuilder siteRepositoryBuilder, + DataImportIssueStore issueStore + ) { + this.siteRepositoryBuilder = siteRepositoryBuilder; this.issueStore = issueStore; } @@ -57,7 +60,7 @@ private AreaStop doMap(Location gtfsLocation) { ) ); } - return stopModelBuilder + return siteRepositoryBuilder .areaStop(id) .withName(name) .withUrl(NonLocalizedString.ofNullable(gtfsLocation.getUrl())) diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/StopMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/StopMapper.java index 2f7aef34312..4cbe252d68f 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/StopMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/StopMapper.java @@ -12,24 +12,24 @@ import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.RegularStopBuilder; import org.opentripplanner.transit.model.site.Station; -import org.opentripplanner.transit.service.StopModelBuilder; +import org.opentripplanner.transit.service.SiteRepositoryBuilder; /** Responsible for mapping GTFS Stop into the OTP model. */ class StopMapper { private final Map mappedStops = new HashMap<>(); - private final StopModelBuilder stopModelBuilder; + private final SiteRepositoryBuilder siteRepositoryBuilder; private final TranslationHelper translationHelper; private final Function stationLookUp; StopMapper( TranslationHelper translationHelper, Function stationLookUp, - StopModelBuilder stopModelBuilder + SiteRepositoryBuilder siteRepositoryBuilder ) { this.translationHelper = translationHelper; this.stationLookUp = stationLookUp; - this.stopModelBuilder = stopModelBuilder; + this.siteRepositoryBuilder = siteRepositoryBuilder; } Collection map(Collection allStops) { @@ -44,7 +44,7 @@ RegularStop map(org.onebusaway.gtfs.model.Stop original) { private RegularStop doMap(org.onebusaway.gtfs.model.Stop gtfsStop) { assertLocationTypeIsStop(gtfsStop); StopMappingWrapper base = new StopMappingWrapper(gtfsStop); - RegularStopBuilder builder = stopModelBuilder + RegularStopBuilder builder = siteRepositoryBuilder .regularStop(base.getId()) .withCode(base.getCode()) .withCoordinate(base.getCoordinate()) diff --git a/application/src/main/java/org/opentripplanner/model/OtpTransitService.java b/application/src/main/java/org/opentripplanner/model/OtpTransitService.java index 91351af383d..748c44fa788 100644 --- a/application/src/main/java/org/opentripplanner/model/OtpTransitService.java +++ b/application/src/main/java/org/opentripplanner/model/OtpTransitService.java @@ -16,7 +16,7 @@ import org.opentripplanner.transit.model.site.Pathway; import org.opentripplanner.transit.model.site.PathwayNode; import org.opentripplanner.transit.model.timetable.Trip; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; /** * Methods for accessing imported entities. @@ -35,7 +35,7 @@ public interface OtpTransitService { Collection getAllFeedInfos(); - StopModel stopModel(); + SiteRepository siteRepository(); /** * This is equivalent to a Transmodel Notice Assignments. The map key may reference entity ids of diff --git a/application/src/main/java/org/opentripplanner/model/impl/OtpTransitServiceBuilder.java b/application/src/main/java/org/opentripplanner/model/impl/OtpTransitServiceBuilder.java index d62d0331a34..3dd4a3db992 100644 --- a/application/src/main/java/org/opentripplanner/model/impl/OtpTransitServiceBuilder.java +++ b/application/src/main/java/org/opentripplanner/model/impl/OtpTransitServiceBuilder.java @@ -54,8 +54,8 @@ import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.model.timetable.TripOnServiceDate; import org.opentripplanner.transit.model.timetable.TripTimes; -import org.opentripplanner.transit.service.StopModel; -import org.opentripplanner.transit.service.StopModelBuilder; +import org.opentripplanner.transit.service.SiteRepository; +import org.opentripplanner.transit.service.SiteRepositoryBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -78,7 +78,7 @@ public class OtpTransitServiceBuilder { private final List frequencies = new ArrayList<>(); - private final StopModelBuilder stopModelBuilder; + private final SiteRepositoryBuilder siteRepositoryBuilder; private final Multimap noticeAssignments = ArrayListMultimap.create(); @@ -124,8 +124,8 @@ public class OtpTransitServiceBuilder { private final DataImportIssueStore issueStore; - public OtpTransitServiceBuilder(StopModel stopModel, DataImportIssueStore issueStore) { - this.stopModelBuilder = stopModel.withContext(); + public OtpTransitServiceBuilder(SiteRepository siteRepository, DataImportIssueStore issueStore) { + this.siteRepositoryBuilder = siteRepository.withContext(); this.issueStore = issueStore; } @@ -151,16 +151,16 @@ public List getFrequencies() { return frequencies; } - public StopModelBuilder stopModel() { - return stopModelBuilder; + public SiteRepositoryBuilder siteRepository() { + return siteRepositoryBuilder; } public ImmutableEntityById getGroupsOfStationsById() { - return stopModelBuilder.groupOfStationById(); + return siteRepositoryBuilder.groupOfStationById(); } public ImmutableEntityById getMultiModalStationsById() { - return stopModelBuilder.multiModalStationById(); + return siteRepositoryBuilder.multiModalStationById(); } /** @@ -188,11 +188,11 @@ public Multimap getShapePoints() { } public ImmutableEntityById getStations() { - return stopModelBuilder.stationById(); + return siteRepositoryBuilder.stationById(); } public ImmutableEntityById getStops() { - return stopModelBuilder.regularStopsById(); + return siteRepositoryBuilder.regularStopsById(); } public EntityById getEntrances() { @@ -208,11 +208,11 @@ public EntityById getBoardingAreas() { } public ImmutableEntityById getAreaStops() { - return stopModelBuilder.areaStopById(); + return siteRepositoryBuilder.areaStopById(); } public ImmutableEntityById getGroupStops() { - return stopModelBuilder.groupStopById(); + return siteRepositoryBuilder.groupStopById(); } public TripStopTimes getStopTimesSortedByTrip() { diff --git a/application/src/main/java/org/opentripplanner/model/impl/OtpTransitServiceImpl.java b/application/src/main/java/org/opentripplanner/model/impl/OtpTransitServiceImpl.java index 9ca549f1631..2f735f36435 100644 --- a/application/src/main/java/org/opentripplanner/model/impl/OtpTransitServiceImpl.java +++ b/application/src/main/java/org/opentripplanner/model/impl/OtpTransitServiceImpl.java @@ -26,7 +26,7 @@ import org.opentripplanner.transit.model.site.Pathway; import org.opentripplanner.transit.model.site.PathwayNode; import org.opentripplanner.transit.model.timetable.Trip; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; /** * A in-memory implementation of {@link OtpTransitService}. It's super fast for most methods, but @@ -45,7 +45,7 @@ class OtpTransitServiceImpl implements OtpTransitService { private final Collection feedInfos; - private final StopModel stopModel; + private final SiteRepository siteRepository; private final ImmutableListMultimap noticeAssignments; @@ -77,7 +77,7 @@ class OtpTransitServiceImpl implements OtpTransitService { OtpTransitServiceImpl(OtpTransitServiceBuilder builder) { this.agencies = immutableList(builder.getAgenciesById().values()); this.feedInfos = immutableList(builder.getFeedInfos()); - this.stopModel = builder.stopModel().build(); + this.siteRepository = builder.siteRepository().build(); this.noticeAssignments = ImmutableListMultimap.copyOf(builder.getNoticeAssignments()); this.operators = immutableList(builder.getOperatorsById().values()); this.pathways = immutableList(builder.getPathways()); @@ -109,8 +109,8 @@ public Collection getAllFeedInfos() { } @Override - public StopModel stopModel() { - return stopModel; + public SiteRepository siteRepository() { + return siteRepository; } /** diff --git a/application/src/main/java/org/opentripplanner/netex/configure/NetexConfigure.java b/application/src/main/java/org/opentripplanner/netex/configure/NetexConfigure.java index 5d824f833db..9ca6dc27b04 100644 --- a/application/src/main/java/org/opentripplanner/netex/configure/NetexConfigure.java +++ b/application/src/main/java/org/opentripplanner/netex/configure/NetexConfigure.java @@ -43,7 +43,7 @@ public NetexModule createNetexModule( for (ConfiguredDataSource it : netexSources) { var transitServiceBuilder = new OtpTransitServiceBuilder( - timetableRepository.getStopModel(), + timetableRepository.getSiteRepository(), issueStore ); netexBundles.add(netexBundle(transitServiceBuilder, it)); diff --git a/application/src/main/java/org/opentripplanner/netex/mapping/FlexStopsMapper.java b/application/src/main/java/org/opentripplanner/netex/mapping/FlexStopsMapper.java index 7e06db882f1..1bbe76c0e7c 100644 --- a/application/src/main/java/org/opentripplanner/netex/mapping/FlexStopsMapper.java +++ b/application/src/main/java/org/opentripplanner/netex/mapping/FlexStopsMapper.java @@ -15,7 +15,7 @@ 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.StopModelBuilder; +import org.opentripplanner.transit.service.SiteRepositoryBuilder; import org.rutebanken.netex.model.FlexibleArea; import org.rutebanken.netex.model.FlexibleStopPlace; import org.rutebanken.netex.model.KeyListStructure; @@ -34,14 +34,14 @@ class FlexStopsMapper { "UnrestrictedPublicTransportAreas"; private final FeedScopedIdFactory idFactory; private final HashGridSpatialIndex stopsSpatialIndex; - private final StopModelBuilder stopModelBuilder; + private final SiteRepositoryBuilder siteRepositoryBuilder; private final DataImportIssueStore issueStore; private final TransportModeMapper transportModeMapper = new TransportModeMapper(); FlexStopsMapper( FeedScopedIdFactory idFactory, Collection stops, - StopModelBuilder stopModelBuilder, + SiteRepositoryBuilder siteRepositoryBuilder, DataImportIssueStore issueStore ) { this.idFactory = idFactory; @@ -50,7 +50,7 @@ class FlexStopsMapper { Envelope env = new Envelope(stop.getCoordinate().asJtsCoordinate()); this.stopsSpatialIndex.insert(env, stop); } - this.stopModelBuilder = stopModelBuilder; + this.siteRepositoryBuilder = siteRepositoryBuilder; this.issueStore = issueStore; } @@ -100,7 +100,7 @@ StopLocation map(FlexibleStopPlace flexibleStopPlace) { } else { // We create a new GroupStop, even if the stop place consists of a single area, in order to // get the ids for the area and stop place correct - var builder = stopModelBuilder + var builder = siteRepositoryBuilder .groupStop(idFactory.createId(flexibleStopPlace.getId())) .withName(new NonLocalizedString(flexibleStopPlace.getName().getValue())) .withEncompassingAreaGeometries(areaGeometries); @@ -118,7 +118,7 @@ AreaStop mapFlexArea(FlexibleArea area, Geometry geometry, String backupName) { } var areaName = area.getName(); - return stopModelBuilder + return siteRepositoryBuilder .areaStop(idFactory.createId(area.getId())) .withName(new NonLocalizedString(areaName != null ? areaName.getValue() : backupName)) .withGeometry(geometry) diff --git a/application/src/main/java/org/opentripplanner/netex/mapping/NetexMapper.java b/application/src/main/java/org/opentripplanner/netex/mapping/NetexMapper.java index 909d7b1c69f..c8d4f80af63 100644 --- a/application/src/main/java/org/opentripplanner/netex/mapping/NetexMapper.java +++ b/application/src/main/java/org/opentripplanner/netex/mapping/NetexMapper.java @@ -309,7 +309,7 @@ private void mapStopPlaceAndQuays(TariffZoneMapper tariffZoneMapper) { idFactory, currentNetexIndex.getQuayById(), tariffZoneMapper, - transitBuilder.stopModel(), + transitBuilder.siteRepository(), zoneId, issueStore, noTransfersOnIsolatedStops, @@ -321,8 +321,8 @@ private void mapStopPlaceAndQuays(TariffZoneMapper tariffZoneMapper) { .lookup(stopPlaceId); stopMapper.mapParentAndChildStops(stopPlaceAllVersions); } - transitBuilder.stopModel().withRegularStops(stopMapper.resultStops); - transitBuilder.stopModel().withStations(stopMapper.resultStations); + transitBuilder.siteRepository().withRegularStops(stopMapper.resultStops); + transitBuilder.siteRepository().withStations(stopMapper.resultStations); currentMapperIndexes.addStationByMultiModalStationRfs( stopMapper.resultStationByMultiModalStationRfs ); @@ -339,7 +339,7 @@ private void mapMultiModalStopPlaces() { .get(multiModalStopPlace.getId()); var multiModalStation = mapper.map(multiModalStopPlace, stations); if (multiModalStation != null) { - transitBuilder.stopModel().withMultiModalStation(multiModalStation); + transitBuilder.siteRepository().withMultiModalStation(multiModalStation); } } } @@ -354,7 +354,9 @@ private void mapGroupsOfStopPlaces() { for (GroupOfStopPlaces groupOfStopPlaces : currentNetexIndex .getGroupOfStopPlacesById() .localValues()) { - transitBuilder.stopModel().withGroupOfStation(groupOfStationsMapper.map(groupOfStopPlaces)); + transitBuilder + .siteRepository() + .withGroupOfStation(groupOfStationsMapper.map(groupOfStopPlaces)); } } @@ -371,19 +373,19 @@ private void mapFlexibleStopPlaces() { FlexStopsMapper flexStopsMapper = new FlexStopsMapper( idFactory, transitBuilder.getStops().values(), - transitBuilder.stopModel(), + transitBuilder.siteRepository(), issueStore ); for (FlexibleStopPlace flexibleStopPlace : flexibleStopPlaces) { StopLocation stopLocation = flexStopsMapper.map(flexibleStopPlace); if (stopLocation instanceof AreaStop areaStop) { - transitBuilder.stopModel().withAreaStop(areaStop); + transitBuilder.siteRepository().withAreaStop(areaStop); } else if (stopLocation instanceof GroupStop groupStop) { - transitBuilder.stopModel().withGroupStop(groupStop); + transitBuilder.siteRepository().withGroupStop(groupStop); for (var child : groupStop.getChildLocations()) { if (child instanceof AreaStop areaStop) { - transitBuilder.stopModel().withAreaStop(areaStop); + transitBuilder.siteRepository().withAreaStop(areaStop); } } } @@ -444,9 +446,9 @@ private void mapTripPatterns(Map serviceIds) { issueStore, idFactory, transitBuilder.getOperatorsById(), - transitBuilder.stopModel().regularStopsById(), - transitBuilder.stopModel().areaStopById(), - transitBuilder.stopModel().groupStopById(), + transitBuilder.siteRepository().regularStopsById(), + transitBuilder.siteRepository().areaStopById(), + transitBuilder.siteRepository().groupStopById(), transitBuilder.getRoutes(), currentNetexIndex.getRouteById(), currentNetexIndex.getJourneyPatternsById(), diff --git a/application/src/main/java/org/opentripplanner/netex/mapping/QuayMapper.java b/application/src/main/java/org/opentripplanner/netex/mapping/QuayMapper.java index a304ca32f72..db67941e323 100644 --- a/application/src/main/java/org/opentripplanner/netex/mapping/QuayMapper.java +++ b/application/src/main/java/org/opentripplanner/netex/mapping/QuayMapper.java @@ -11,7 +11,7 @@ import org.opentripplanner.transit.model.site.FareZone; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.Station; -import org.opentripplanner.transit.service.StopModelBuilder; +import org.opentripplanner.transit.service.SiteRepositoryBuilder; import org.rutebanken.netex.model.MultilingualString; import org.rutebanken.netex.model.Quay; @@ -21,16 +21,16 @@ class QuayMapper { private final FeedScopedIdFactory idFactory; - private final StopModelBuilder stopModelBuilder; + private final SiteRepositoryBuilder siteRepositoryBuilder; QuayMapper( FeedScopedIdFactory idFactory, DataImportIssueStore issueStore, - StopModelBuilder stopModelBuilder + SiteRepositoryBuilder siteRepositoryBuilder ) { this.idFactory = idFactory; this.issueStore = issueStore; - this.stopModelBuilder = stopModelBuilder; + this.siteRepositoryBuilder = siteRepositoryBuilder; } /** @@ -45,7 +45,7 @@ RegularStop mapQuayToStop( Accessibility wheelchair ) { var id = idFactory.createId(quay.getId()); - return stopModelBuilder.computeRegularStopIfAbsent( + return siteRepositoryBuilder.computeRegularStopIfAbsent( id, it -> map(it, quay, parentStation, fareZones, transitMode, wheelchair) ); @@ -70,7 +70,7 @@ private RegularStop map( return null; } - var builder = stopModelBuilder + var builder = siteRepositoryBuilder .regularStop(id) .withParentStation(parentStation) .withName(parentStation.getName()) diff --git a/application/src/main/java/org/opentripplanner/netex/mapping/StationMapper.java b/application/src/main/java/org/opentripplanner/netex/mapping/StationMapper.java index 8840f7e4bdf..27773a9f66c 100644 --- a/application/src/main/java/org/opentripplanner/netex/mapping/StationMapper.java +++ b/application/src/main/java/org/opentripplanner/netex/mapping/StationMapper.java @@ -17,7 +17,7 @@ import org.opentripplanner.netex.support.JAXBUtils; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.site.Station; -import org.opentripplanner.transit.service.StopModelBuilder; +import org.opentripplanner.transit.service.SiteRepositoryBuilder; import org.rutebanken.netex.model.LimitedUseTypeEnumeration; import org.rutebanken.netex.model.LocaleStructure; import org.rutebanken.netex.model.MultilingualString; @@ -38,7 +38,7 @@ class StationMapper { private final Set routeToCentroidStopPlaceIds; - private final StopModelBuilder stopModelBuilder; + private final SiteRepositoryBuilder siteRepositoryBuilder; StationMapper( DataImportIssueStore issueStore, @@ -46,19 +46,22 @@ class StationMapper { ZoneId defaultTimeZone, boolean noTransfersOnIsolatedStops, Set routeToCentroidStopPlaceIds, - StopModelBuilder stopModelBuilder + SiteRepositoryBuilder siteRepositoryBuilder ) { this.issueStore = issueStore; this.idFactory = idFactory; this.defaultTimeZone = defaultTimeZone; this.noTransfersOnIsolatedStops = noTransfersOnIsolatedStops; this.routeToCentroidStopPlaceIds = routeToCentroidStopPlaceIds; - this.stopModelBuilder = stopModelBuilder; + this.siteRepositoryBuilder = siteRepositoryBuilder; } Station map(StopPlace stopPlace) { var id = idFactory.createId(stopPlace.getId()); - return stopModelBuilder.computeStationIfAbsent(id, it -> mapStopPlaceToStation(it, stopPlace)); + return siteRepositoryBuilder.computeStationIfAbsent( + id, + it -> mapStopPlaceToStation(it, stopPlace) + ); } Station mapStopPlaceToStation(FeedScopedId id, StopPlace stopPlace) { diff --git a/application/src/main/java/org/opentripplanner/netex/mapping/StopAndStationMapper.java b/application/src/main/java/org/opentripplanner/netex/mapping/StopAndStationMapper.java index c5618a03a1a..0a5ab4ba16c 100644 --- a/application/src/main/java/org/opentripplanner/netex/mapping/StopAndStationMapper.java +++ b/application/src/main/java/org/opentripplanner/netex/mapping/StopAndStationMapper.java @@ -26,7 +26,7 @@ import org.opentripplanner.transit.model.site.FareZone; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.Station; -import org.opentripplanner.transit.service.StopModelBuilder; +import org.opentripplanner.transit.service.SiteRepositoryBuilder; import org.rutebanken.netex.model.Quay; import org.rutebanken.netex.model.Quays_RelStructure; import org.rutebanken.netex.model.StopPlace; @@ -68,7 +68,7 @@ class StopAndStationMapper { FeedScopedIdFactory idFactory, ReadOnlyHierarchicalVersionMapById quayIndex, TariffZoneMapper tariffZoneMapper, - StopModelBuilder stopModelBuilder, + SiteRepositoryBuilder siteRepositoryBuilder, ZoneId defaultTimeZone, DataImportIssueStore issueStore, boolean noTransfersOnIsolatedStops, @@ -81,9 +81,9 @@ class StopAndStationMapper { defaultTimeZone, noTransfersOnIsolatedStops, routeToCentroidStopPlaceIds, - stopModelBuilder + siteRepositoryBuilder ); - this.quayMapper = new QuayMapper(idFactory, issueStore, stopModelBuilder); + this.quayMapper = new QuayMapper(idFactory, issueStore, siteRepositoryBuilder); this.tariffZoneMapper = tariffZoneMapper; this.quayIndex = quayIndex; this.issueStore = issueStore; diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TransitLayer.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TransitLayer.java index 9e07c57ede7..c7d6a7809ed 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TransitLayer.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TransitLayer.java @@ -14,7 +14,7 @@ import org.opentripplanner.routing.algorithm.raptoradapter.transit.request.RaptorRequestTransferCache; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.transit.model.site.StopLocation; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; /** * This is a replica of public transportation data already present in TimetableRepository, but rearranged @@ -48,7 +48,7 @@ public class TransitLayer { */ private final TransferService transferService; - private final StopModel stopModel; + private final SiteRepository siteRepository; private final RaptorRequestTransferCache transferCache; @@ -69,7 +69,7 @@ public TransitLayer(TransitLayer transitLayer) { transitLayer.tripPatternsRunningOnDate, transitLayer.transfersByStopIndex, transitLayer.transferService, - transitLayer.stopModel, + transitLayer.siteRepository, transitLayer.transferCache, transitLayer.constrainedTransfers, transitLayer.transferIndexGenerator, @@ -81,7 +81,7 @@ public TransitLayer( Map> tripPatternsRunningOnDate, List> transfersByStopIndex, TransferService transferService, - StopModel stopModel, + SiteRepository siteRepository, RaptorRequestTransferCache transferCache, ConstrainedTransfersForPatterns constrainedTransfers, TransferIndexGenerator transferIndexGenerator, @@ -90,7 +90,7 @@ public TransitLayer( this.tripPatternsRunningOnDate = new HashMap<>(tripPatternsRunningOnDate); this.transfersByStopIndex = transfersByStopIndex; this.transferService = transferService; - this.stopModel = stopModel; + this.siteRepository = siteRepository; this.transferCache = transferCache; this.constrainedTransfers = constrainedTransfers; this.transferIndexGenerator = transferIndexGenerator; @@ -99,7 +99,7 @@ public TransitLayer( @Nullable public StopLocation getStopByIndex(int stop) { - return stop == -1 ? null : this.stopModel.stopByIndex(stop); + return stop == -1 ? null : this.siteRepository.stopByIndex(stop); } /** @@ -112,7 +112,7 @@ public Collection getTripPatternsForRunningDate(LocalDate da } public int getStopCount() { - return stopModel.stopIndexSize(); + return siteRepository.stopIndexSize(); } /** diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransfersMapper.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransfersMapper.java index c7e9ea05320..5f4e40708ef 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransfersMapper.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransfersMapper.java @@ -5,7 +5,7 @@ import org.opentripplanner.model.PathTransfer; import org.opentripplanner.routing.algorithm.raptoradapter.transit.Transfer; import org.opentripplanner.transit.model.site.RegularStop; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.opentripplanner.transit.service.TransitService; class TransfersMapper { @@ -14,11 +14,14 @@ class TransfersMapper { * Copy pre-calculated transfers from the original graph * @return a list where each element is a list of transfers for the corresponding stop index */ - static List> mapTransfers(StopModel stopModel, TransitService transitService) { + static List> mapTransfers( + SiteRepository siteRepository, + TransitService transitService + ) { List> transferByStopIndex = new ArrayList<>(); - for (int i = 0; i < stopModel.stopIndexSize(); ++i) { - var stop = stopModel.stopByIndex(i); + for (int i = 0; i < siteRepository.stopIndexSize(); ++i) { + var stop = siteRepository.stopByIndex(i); if (stop == null) { continue; diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerMapper.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerMapper.java index a9da73200cc..b0d2b009a0f 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerMapper.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerMapper.java @@ -24,7 +24,7 @@ import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.site.StopTransferPriority; import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.transit.service.TransitService; import org.slf4j.Logger; @@ -46,11 +46,11 @@ public class TransitLayerMapper { private static final Logger LOG = LoggerFactory.getLogger(TransitLayerMapper.class); private final TransitService transitService; - private final StopModel stopModel; + private final SiteRepository siteRepository; private TransitLayerMapper(TimetableRepository timetableRepository) { this.transitService = new DefaultTransitService(timetableRepository); - this.stopModel = timetableRepository.getStopModel(); + this.siteRepository = timetableRepository.getSiteRepository(); } public static TransitLayer map( @@ -71,7 +71,7 @@ private TransitLayer map(TransitTuningParameters tuningParameters) { tripPatternsByStopByDate = mapTripPatterns(allTripPatterns); - transferByStopIndex = mapTransfers(stopModel, transitService); + transferByStopIndex = mapTransfers(siteRepository, transitService); TransferIndexGenerator transferIndexGenerator = null; if (OTPFeature.TransferConstraints.isOn()) { @@ -88,11 +88,11 @@ private TransitLayer map(TransitTuningParameters tuningParameters) { tripPatternsByStopByDate, transferByStopIndex, transitService.getTransferService(), - stopModel, + siteRepository, transferCache, constrainedTransfers, transferIndexGenerator, - createStopBoardAlightTransferCosts(stopModel, tuningParameters) + createStopBoardAlightTransferCosts(siteRepository, tuningParameters) ); } @@ -169,7 +169,7 @@ private HashMap> keyByRunningPeriodDates( */ @Nullable static int[] createStopBoardAlightTransferCosts( - StopModel stops, + SiteRepository stops, TransitTuningParameters tuningParams ) { if (!tuningParams.enableStopTransferPriority()) { diff --git a/application/src/main/java/org/opentripplanner/routing/graph/Graph.java b/application/src/main/java/org/opentripplanner/routing/graph/Graph.java index bb1944d0c4b..04266476ae5 100644 --- a/application/src/main/java/org/opentripplanner/routing/graph/Graph.java +++ b/application/src/main/java/org/opentripplanner/routing/graph/Graph.java @@ -30,7 +30,7 @@ import org.opentripplanner.street.model.vertex.VertexLabel; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.FeedScopedId; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -284,9 +284,9 @@ public int countEdges() { * - graph. This allows a module to index the streetIndex BEFORE another module add * - something that should go into the index; Hence, inconsistent data. */ - public void index(StopModel stopModel) { + public void index(SiteRepository siteRepository) { LOG.info("Index street model..."); - streetIndex = new StreetIndex(this, stopModel); + streetIndex = new StreetIndex(this, siteRepository); LOG.info("Index street model complete."); } @@ -297,7 +297,7 @@ public OpeningHoursCalendarService getOpeningHoursCalendarService() { /** * Get streetIndex, safe to use while routing, but do not use during graph build. - * @see #getStreetIndexSafe(StopModel) + * @see #getStreetIndexSafe(SiteRepository) */ public StreetIndex getStreetIndex() { return this.streetIndex; @@ -307,14 +307,14 @@ public StreetIndex getStreetIndex() { * Get streetIndex during graph build, both OSM street data and transit data must be loaded * before calling this. */ - public StreetIndex getStreetIndexSafe(StopModel stopModel) { - indexIfNotIndexed(stopModel); + public StreetIndex getStreetIndexSafe(SiteRepository siteRepository) { + indexIfNotIndexed(siteRepository); return this.streetIndex; } /** * Get VertexLinker, safe to use while routing, but do not use during graph build. - * @see #getLinkerSafe(StopModel) + * @see #getLinkerSafe(SiteRepository) */ public VertexLinker getLinker() { return streetIndex.getVertexLinker(); @@ -324,8 +324,8 @@ public VertexLinker getLinker() { * Get VertexLinker during graph build, both OSM street data and transit data must be loaded * before calling this. */ - public VertexLinker getLinkerSafe(StopModel stopModel) { - indexIfNotIndexed(stopModel); + public VertexLinker getLinkerSafe(SiteRepository siteRepository) { + indexIfNotIndexed(siteRepository); return streetIndex.getVertexLinker(); } @@ -374,9 +374,9 @@ public void setFareService(FareService fareService) { this.fareService = fareService; } - private void indexIfNotIndexed(StopModel stopModel) { + private void indexIfNotIndexed(SiteRepository siteRepository) { if (streetIndex == null) { - index(stopModel); + index(siteRepository); } } } diff --git a/application/src/main/java/org/opentripplanner/routing/graph/SerializedGraphObject.java b/application/src/main/java/org/opentripplanner/routing/graph/SerializedGraphObject.java index 327428cfccb..e7e0c3248e8 100644 --- a/application/src/main/java/org/opentripplanner/routing/graph/SerializedGraphObject.java +++ b/application/src/main/java/org/opentripplanner/routing/graph/SerializedGraphObject.java @@ -184,7 +184,7 @@ private static SerializedGraphObject load(InputStream inputStream, String source ); LOG.debug("Graph read."); serObj.reconstructEdgeLists(); - serObj.timetableRepository.getStopModel().reindexAfterDeserialization(); + serObj.timetableRepository.getSiteRepository().reindexAfterDeserialization(); serObj.timetableRepository.index(); logSerializationCompleteStatus(serObj.graph, serObj.timetableRepository); return serObj; @@ -261,7 +261,7 @@ private static void logSerializationCompleteStatus( TimetableRepository timetableRepository ) { var f = new OtpNumberFormat(); - var nStops = f.formatNumber(timetableRepository.getStopModel().stopIndexSize()); + var nStops = f.formatNumber(timetableRepository.getSiteRepository().stopIndexSize()); var nTransfers = f.formatNumber(timetableRepository.getTransferService().listAll().size()); var nPatterns = f.formatNumber(timetableRepository.getAllTripPatterns().size()); var nVertices = f.formatNumber(graph.countVertices()); diff --git a/application/src/main/java/org/opentripplanner/routing/graph/index/StreetIndex.java b/application/src/main/java/org/opentripplanner/routing/graph/index/StreetIndex.java index 362c87bff7d..90294d554cc 100644 --- a/application/src/main/java/org/opentripplanner/routing/graph/index/StreetIndex.java +++ b/application/src/main/java/org/opentripplanner/routing/graph/index/StreetIndex.java @@ -41,7 +41,7 @@ import org.opentripplanner.street.search.TraverseModeSet; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.site.RegularStop; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -57,7 +57,7 @@ public class StreetIndex { private static final Logger LOG = LoggerFactory.getLogger(StreetIndex.class); - private final StopModel stopModel; + private final SiteRepository siteRepository; private final VertexLinker vertexLinker; @@ -74,11 +74,11 @@ public class StreetIndex { /** * Should only be called by the graph. */ - public StreetIndex(Graph graph, StopModel stopModel) { - this.stopModel = stopModel; + public StreetIndex(Graph graph, SiteRepository siteRepository) { + this.siteRepository = siteRepository; this.edgeSpatialIndex = new EdgeSpatialIndex(); this.verticesTree = new HashGridSpatialIndex<>(); - this.vertexLinker = new VertexLinker(graph, stopModel, edgeSpatialIndex); + this.vertexLinker = new VertexLinker(graph, siteRepository, edgeSpatialIndex); this.transitStopVertices = toImmutableMap(graph.getVerticesOfType(TransitStopVertex.class)); this.stationCentroidVertices = createStationCentroidVertexMap(graph); postSetup(graph.getVertices()); @@ -195,7 +195,7 @@ public Set getStreetVerticesForLocation( if (nonTransitMode.isInCar()) { // Fetch coordinate from stop, if not given in request if (location.stopId != null && location.getCoordinate() == null) { - var coordinate = stopModel.getCoordinateById(location.stopId); + var coordinate = siteRepository.getCoordinateById(location.stopId); if (coordinate != null) { location = new GenericLocation( @@ -262,7 +262,7 @@ public Vertex createVertexForCoordinateForTest( * @return The associated TransitStopVertex or all underlying TransitStopVertices */ public Set getStopOrChildStopsVertices(FeedScopedId id) { - return stopModel + return siteRepository .findStopOrChildStops(id) .stream() .filter(RegularStop.class::isInstance) diff --git a/application/src/main/java/org/opentripplanner/routing/impl/TransitAlertServiceImpl.java b/application/src/main/java/org/opentripplanner/routing/impl/TransitAlertServiceImpl.java index 2662eb7d3e5..04b58d050ee 100644 --- a/application/src/main/java/org/opentripplanner/routing/impl/TransitAlertServiceImpl.java +++ b/application/src/main/java/org/opentripplanner/routing/impl/TransitAlertServiceImpl.java @@ -86,7 +86,7 @@ public Collection getStopAlerts( if (result.isEmpty()) { // Search for alerts on parent-stop if (timetableRepository != null) { - var quay = timetableRepository.getStopModel().getRegularStop(stopId); + var quay = timetableRepository.getSiteRepository().getRegularStop(stopId); if (quay != null) { // TODO - SIRI: Add alerts from parent- and multimodal-stops /* diff --git a/application/src/main/java/org/opentripplanner/routing/linking/FlexLocationAdder.java b/application/src/main/java/org/opentripplanner/routing/linking/FlexLocationAdder.java index 047e44f229a..e9d29f596c7 100644 --- a/application/src/main/java/org/opentripplanner/routing/linking/FlexLocationAdder.java +++ b/application/src/main/java/org/opentripplanner/routing/linking/FlexLocationAdder.java @@ -8,15 +8,19 @@ import org.opentripplanner.street.model.edge.StreetEdge; import org.opentripplanner.street.model.vertex.IntersectionVertex; import org.opentripplanner.transit.model.site.AreaStop; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; class FlexLocationAdder { - static void addFlexLocations(StreetEdge edge, IntersectionVertex v0, StopModel stopModel) { + static void addFlexLocations( + StreetEdge edge, + IntersectionVertex v0, + SiteRepository siteRepository + ) { if (edge.getPermission().allows(StreetTraversalPermission.PEDESTRIAN_AND_CAR)) { Point p = GeometryUtils.getGeometryFactory().createPoint(v0.getCoordinate()); Envelope env = p.getEnvelopeInternal(); - for (AreaStop areaStop : stopModel.findAreaStops(env)) { + for (AreaStop areaStop : siteRepository.findAreaStops(env)) { if (!areaStop.getGeometry().disjoint(p)) { v0.addAreaStops(Set.of(areaStop)); } diff --git a/application/src/main/java/org/opentripplanner/routing/linking/VertexLinker.java b/application/src/main/java/org/opentripplanner/routing/linking/VertexLinker.java index 9616fbab792..48f5ff997c8 100644 --- a/application/src/main/java/org/opentripplanner/routing/linking/VertexLinker.java +++ b/application/src/main/java/org/opentripplanner/routing/linking/VertexLinker.java @@ -34,7 +34,7 @@ import org.opentripplanner.street.model.vertex.VertexFactory; import org.opentripplanner.street.search.TraverseMode; import org.opentripplanner.street.search.TraverseModeSet; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; /** * This class links transit stops to streets by splitting the streets (unless the stop is extremely @@ -71,7 +71,7 @@ public class VertexLinker { private final Graph graph; - private final StopModel stopModel; + private final SiteRepository siteRepository; private final VertexFactory vertexFactory; // TODO Temporary code until we refactor WalkableAreaBuilder (#3152) @@ -81,11 +81,15 @@ public class VertexLinker { * Construct a new VertexLinker. NOTE: Only one VertexLinker should be active on a graph at any * given time. */ - public VertexLinker(Graph graph, StopModel stopModel, EdgeSpatialIndex edgeSpatialIndex) { + public VertexLinker( + Graph graph, + SiteRepository siteRepository, + EdgeSpatialIndex edgeSpatialIndex + ) { this.edgeSpatialIndex = edgeSpatialIndex; this.graph = graph; this.vertexFactory = new VertexFactory(graph); - this.stopModel = stopModel; + this.siteRepository = siteRepository; } public void linkVertexPermanently( @@ -397,7 +401,7 @@ else if ( } // TODO Consider moving this code if (OTPFeature.FlexRouting.isOn()) { - FlexLocationAdder.addFlexLocations(edge, start, stopModel); + FlexLocationAdder.addFlexLocations(edge, start, siteRepository); } return start; diff --git a/application/src/main/java/org/opentripplanner/standalone/OTPMain.java b/application/src/main/java/org/opentripplanner/standalone/OTPMain.java index 915b7091ba6..a8096d806ba 100644 --- a/application/src/main/java/org/opentripplanner/standalone/OTPMain.java +++ b/application/src/main/java/org/opentripplanner/standalone/OTPMain.java @@ -188,7 +188,7 @@ private static void detectUnusedConfigParams(CommandLineParameters cli, ConfigMo private static void startOtpWebServer(CommandLineParameters params, ConstructApplication app) { // Index graph for travel search app.timetableRepository().index(); - app.graph().index(app.timetableRepository().getStopModel()); + app.graph().index(app.timetableRepository().getSiteRepository()); // publishing the config version info make it available to the APIs setOtpConfigVersionsOnServerInfo(app); diff --git a/application/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java b/application/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java index 62d8a727615..2ce99e7809b 100644 --- a/application/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java +++ b/application/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java @@ -146,18 +146,18 @@ public Collection getNotices() { @Override public Station getStationById(FeedScopedId id) { - return this.timetableRepository.getStopModel().getStationById(id); + return this.timetableRepository.getSiteRepository().getStationById(id); } @Override public MultiModalStation getMultiModalStation(FeedScopedId id) { - return this.timetableRepository.getStopModel().getMultiModalStation(id); + return this.timetableRepository.getSiteRepository().getMultiModalStation(id); } @Override public Collection getStations() { OTPRequestTimeoutException.checkForTimeout(); - return this.timetableRepository.getStopModel().listStations(); + return this.timetableRepository.getSiteRepository().listStations(); } @Override @@ -174,7 +174,7 @@ public TIntSet getServiceCodesRunningForDate(LocalDate serviceDate) { @Override public AreaStop getAreaStop(FeedScopedId id) { - return this.timetableRepository.getStopModel().getAreaStop(id); + return this.timetableRepository.getSiteRepository().getAreaStop(id); } @Override @@ -184,7 +184,7 @@ public Agency getAgencyForId(FeedScopedId id) { @Override public RegularStop getRegularStop(FeedScopedId id) { - return this.timetableRepository.getStopModel().getRegularStop(id); + return this.timetableRepository.getSiteRepository().getRegularStop(id); } @Override @@ -240,40 +240,40 @@ public Operator getOperatorForId(FeedScopedId id) { @Override public Collection listStopLocations() { OTPRequestTimeoutException.checkForTimeout(); - return timetableRepository.getStopModel().listStopLocations(); + return timetableRepository.getSiteRepository().listStopLocations(); } @Override public Collection listRegularStops() { OTPRequestTimeoutException.checkForTimeout(); - return timetableRepository.getStopModel().listRegularStops(); + return timetableRepository.getSiteRepository().listRegularStops(); } @Override public Collection listGroupStops() { OTPRequestTimeoutException.checkForTimeout(); - return timetableRepository.getStopModel().listGroupStops(); + return timetableRepository.getSiteRepository().listGroupStops(); } @Override public StopLocation getStopLocation(FeedScopedId id) { - return timetableRepository.getStopModel().getStopLocation(id); + return timetableRepository.getSiteRepository().getStopLocation(id); } @Override public Collection getStopOrChildStops(FeedScopedId id) { - return timetableRepository.getStopModel().findStopOrChildStops(id); + return timetableRepository.getSiteRepository().findStopOrChildStops(id); } @Override public Collection listStopLocationGroups() { OTPRequestTimeoutException.checkForTimeout(); - return timetableRepository.getStopModel().listStopLocationGroups(); + return timetableRepository.getSiteRepository().listStopLocationGroups(); } @Override public StopLocationsGroup getStopLocationsGroup(FeedScopedId id) { - return timetableRepository.getStopModel().getStopLocationsGroup(id); + return timetableRepository.getSiteRepository().getStopLocationsGroup(id); } @Override @@ -359,7 +359,7 @@ public Collection getPatternsForRoute(Route route) { @Override public MultiModalStation getMultiModalStationForStation(Station station) { - return this.timetableRepository.getStopModel().getMultiModalStationForStation(station); + return this.timetableRepository.getSiteRepository().getMultiModalStationForStation(station); } /** @@ -683,13 +683,13 @@ public ZonedDateTime getTransitServiceStarts() { @Override public Collection findRegularStops(Envelope envelope) { OTPRequestTimeoutException.checkForTimeout(); - return timetableRepository.getStopModel().findRegularStops(envelope); + return timetableRepository.getSiteRepository().findRegularStops(envelope); } @Override public Collection findAreaStops(Envelope envelope) { OTPRequestTimeoutException.checkForTimeout(); - return timetableRepository.getStopModel().findAreaStops(envelope); + return timetableRepository.getSiteRepository().findAreaStops(envelope); } @Override diff --git a/application/src/main/java/org/opentripplanner/transit/service/StopModel.java b/application/src/main/java/org/opentripplanner/transit/service/SiteRepository.java similarity index 88% rename from application/src/main/java/org/opentripplanner/transit/service/StopModel.java rename to application/src/main/java/org/opentripplanner/transit/service/SiteRepository.java index 4f55ca25b5b..6c9d591933a 100644 --- a/application/src/main/java/org/opentripplanner/transit/service/StopModel.java +++ b/application/src/main/java/org/opentripplanner/transit/service/SiteRepository.java @@ -26,9 +26,9 @@ /** * Repository for Stop entities. */ -public class StopModel implements Serializable { +public class SiteRepository implements Serializable { - private static final Logger LOG = LoggerFactory.getLogger(StopModel.class); + private static final Logger LOG = LoggerFactory.getLogger(SiteRepository.class); private final AtomicInteger stopIndexCounter; private final Map regularStopById; @@ -37,10 +37,10 @@ public class StopModel implements Serializable { private final Map groupOfStationsById; private final Map areaStopById; private final Map groupStopById; - private transient StopModelIndex index; + private transient SiteRepositoryIndex index; @Inject - public StopModel() { + public SiteRepository() { this.stopIndexCounter = new AtomicInteger(0); this.regularStopById = Map.of(); this.stationById = Map.of(); @@ -51,7 +51,7 @@ public StopModel() { this.index = createIndex(); } - StopModel(StopModelBuilder builder) { + SiteRepository(SiteRepositoryBuilder builder) { this.stopIndexCounter = builder.stopIndexCounter(); this.regularStopById = builder.regularStopsById().asImmutableMap(); this.stationById = builder.stationById().asImmutableMap(); @@ -67,7 +67,7 @@ public StopModel() { * method, if not this method will fail! If a duplicate key exist, then child value is kept - * this feature is normally not allowed, but not enforced here. */ - private StopModel(StopModel main, StopModel child) { + private SiteRepository(SiteRepository main, SiteRepository child) { this.stopIndexCounter = assertSameStopIndexCounterIsUsedToCreateBothModels(main, child); this.areaStopById = MapUtils.combine(main.areaStopById, child.areaStopById); this.regularStopById = MapUtils.combine(main.regularStopById, child.regularStopById); @@ -83,28 +83,28 @@ private StopModel(StopModel main, StopModel child) { /** * Create a new builder based on an empty model. This is useful in unit-tests, but should * NOT be used in the main code. It is not possible to merge the result with another - * {@link StopModel}, because they do not share the same context(stopIndexCounter). + * {@link SiteRepository}, because they do not share the same context(stopIndexCounter). *

    * In the application code the correct way is to retrieve a model instance and then use the * {@link #withContext()} method to create a builder. */ - public static StopModelBuilder of() { - return new StopModelBuilder(new AtomicInteger(0)); + public static SiteRepositoryBuilder of() { + return new SiteRepositoryBuilder(new AtomicInteger(0)); } /** * Create a new builder attached to the existing model. The entities of the existing model are * NOT copied into the builder, but the builder has access to the model - allowing it to check * for duplicates and injecting information from the model(indexing). The changes in the - * StopModelBuilder can then be merged into the original model - this is for now left to the + * SiteRepositoryBuilder can then be merged into the original model - this is for now left to the * caller. *

    * USE THIS TO CREATE A SAFE BUILDER IN PRODUCTION CODE. You MAY use this method in unit-tests, * the alternative is the {@link #of()} method. This method should be used if the test have a - * StopModel and the {@link #of()} method should be used if a stop-model in not needed. + * SiteRepository and the {@link #of()} method should be used if a stop-model in not needed. */ - public StopModelBuilder withContext() { - return new StopModelBuilder(this.stopIndexCounter); + public SiteRepositoryBuilder withContext() { + return new SiteRepositoryBuilder(this.stopIndexCounter); } /** @@ -282,24 +282,24 @@ public Collection findStopOrChildStops(FeedScopedId id) { } /** - * Call this method after deserializing this class. This will reindex the StopModel. + * Call this method after deserializing this class. This will reindex the SiteRepository. */ public void reindexAfterDeserialization() { reindex(); } - public StopModel merge(StopModel child) { - return new StopModel(this, child); + public SiteRepository merge(SiteRepository child) { + return new SiteRepository(this, child); } private void reindex() { - LOG.info("Index stop model..."); + LOG.info("Index site repository..."); index = createIndex(); - LOG.info("Index stop model complete."); + LOG.info("Index site repository complete."); } - private StopModelIndex createIndex() { - return new StopModelIndex( + private SiteRepositoryIndex createIndex() { + return new SiteRepositoryIndex( regularStopById.values(), areaStopById.values(), groupStopById.values(), @@ -328,13 +328,13 @@ private static V getById(FeedScopedId id, Map... */ @SuppressWarnings("NumberEquality") private static AtomicInteger assertSameStopIndexCounterIsUsedToCreateBothModels( - StopModel main, - StopModel child + SiteRepository main, + SiteRepository child ) { if (main.stopIndexCounter != child.stopIndexCounter) { throw new IllegalArgumentException( - "Two Stop models can only be merged if they are created with the same stopIndexCounter. " + - "This is archived by using the 'StopModel.withContext()' method. We do this to avoid " + + "Two Stop repositories can only be merged if they are created with the same stopIndexCounter. " + + "This is archived by using the 'SiteRepository.withContext()' method. We do this to avoid " + "duplicates/gaps in the stopIndex." ); } diff --git a/application/src/main/java/org/opentripplanner/transit/service/StopModelBuilder.java b/application/src/main/java/org/opentripplanner/transit/service/SiteRepositoryBuilder.java similarity index 78% rename from application/src/main/java/org/opentripplanner/transit/service/StopModelBuilder.java rename to application/src/main/java/org/opentripplanner/transit/service/SiteRepositoryBuilder.java index 52ac778c559..a5c89c2a741 100644 --- a/application/src/main/java/org/opentripplanner/transit/service/StopModelBuilder.java +++ b/application/src/main/java/org/opentripplanner/transit/service/SiteRepositoryBuilder.java @@ -17,7 +17,7 @@ import org.opentripplanner.transit.model.site.RegularStopBuilder; import org.opentripplanner.transit.model.site.Station; -public class StopModelBuilder { +public class SiteRepositoryBuilder { private final AtomicInteger stopIndexCounter; @@ -28,7 +28,7 @@ public class StopModelBuilder { private final EntityById multiModalStationById = new DefaultEntityById<>(); private final EntityById groupOfStationById = new DefaultEntityById<>(); - StopModelBuilder(AtomicInteger stopIndexCounter) { + SiteRepositoryBuilder(AtomicInteger stopIndexCounter) { this.stopIndexCounter = stopIndexCounter; } @@ -47,12 +47,12 @@ public RegularStop computeRegularStopIfAbsent( return regularStopById.computeIfAbsent(id, factory); } - public StopModelBuilder withRegularStop(RegularStop stop) { + public SiteRepositoryBuilder withRegularStop(RegularStop stop) { regularStopById.add(stop); return this; } - public StopModelBuilder withRegularStops(Collection stops) { + public SiteRepositoryBuilder withRegularStops(Collection stops) { regularStopById.addAll(stops); return this; } @@ -61,7 +61,7 @@ public ImmutableEntityById stationById() { return stationById; } - public StopModelBuilder withStation(Station station) { + public SiteRepositoryBuilder withStation(Station station) { stationById.add(station); return this; } @@ -70,7 +70,7 @@ public Station computeStationIfAbsent(FeedScopedId id, Function stations) { + public SiteRepositoryBuilder withStations(Collection stations) { stationById.addAll(stations); return this; } @@ -79,7 +79,7 @@ public ImmutableEntityById multiModalStationById() { return multiModalStationById; } - public StopModelBuilder withMultiModalStation(MultiModalStation station) { + public SiteRepositoryBuilder withMultiModalStation(MultiModalStation station) { multiModalStationById.add(station); return this; } @@ -88,7 +88,7 @@ public ImmutableEntityById groupOfStationById() { return groupOfStationById; } - public StopModelBuilder withGroupOfStation(GroupOfStations station) { + public SiteRepositoryBuilder withGroupOfStation(GroupOfStations station) { groupOfStationById.add(station); return this; } @@ -101,12 +101,12 @@ public ImmutableEntityById areaStopById() { return areaStopById; } - public StopModelBuilder withAreaStop(AreaStop stop) { + public SiteRepositoryBuilder withAreaStop(AreaStop stop) { areaStopById.add(stop); return this; } - public StopModelBuilder withAreaStops(Collection stops) { + public SiteRepositoryBuilder withAreaStops(Collection stops) { areaStopById.addAll(stops); return this; } @@ -119,21 +119,21 @@ public ImmutableEntityById groupStopById() { return groupStopById; } - public StopModelBuilder withGroupStop(GroupStop group) { + public SiteRepositoryBuilder withGroupStop(GroupStop group) { groupStopById.add(group); return this; } - public StopModelBuilder withGroupStops(Collection groups) { + public SiteRepositoryBuilder withGroupStops(Collection groups) { groupStopById.addAll(groups); return this; } /** - * Add the content of another stop model. There are no collision check, entities in the given + * Add the content of another site repository. There are no collision check, entities in the given * {@code other} model, will replace existing entities. */ - public StopModelBuilder addAll(StopModel other) { + public SiteRepositoryBuilder addAll(SiteRepository other) { regularStopById.addAll(other.listRegularStops()); stationById.addAll(other.listStations()); multiModalStationById.addAll(other.listMultiModalStations()); @@ -143,8 +143,8 @@ public StopModelBuilder addAll(StopModel other) { return this; } - public StopModel build() { - return new StopModel(this); + public SiteRepository build() { + return new SiteRepository(this); } AtomicInteger stopIndexCounter() { diff --git a/application/src/main/java/org/opentripplanner/transit/service/StopModelIndex.java b/application/src/main/java/org/opentripplanner/transit/service/StopModelIndex.java index c12c6f715f7..48048101b3d 100644 --- a/application/src/main/java/org/opentripplanner/transit/service/StopModelIndex.java +++ b/application/src/main/java/org/opentripplanner/transit/service/StopModelIndex.java @@ -24,9 +24,9 @@ * For performance reasons these indexes are not part of the serialized state of the graph. * They are rebuilt at runtime after graph deserialization. */ -class StopModelIndex { +class SiteRepositoryIndex { - private static final Logger LOG = LoggerFactory.getLogger(StopModelIndex.class); + private static final Logger LOG = LoggerFactory.getLogger(SiteRepositoryIndex.class); private final HashGridSpatialIndex regularStopSpatialIndex = new HashGridSpatialIndex<>(); private final Map multiModalStationForStations = new HashMap<>(); @@ -36,7 +36,7 @@ class StopModelIndex { /** * @param stops All stops including regular transit and flex */ - StopModelIndex( + SiteRepositoryIndex( Collection stops, Collection flexStops, Collection groupStops, diff --git a/application/src/main/java/org/opentripplanner/transit/service/TimetableRepository.java b/application/src/main/java/org/opentripplanner/transit/service/TimetableRepository.java index dc092cc26c2..6dec0c09eb6 100644 --- a/application/src/main/java/org/opentripplanner/transit/service/TimetableRepository.java +++ b/application/src/main/java/org/opentripplanner/transit/service/TimetableRepository.java @@ -96,7 +96,7 @@ public class TimetableRepository implements Serializable { private final Multimap transfersByStop = HashMultimap.create(); - private StopModel stopModel; + private SiteRepository siteRepository; private ZonedDateTime transitServiceStarts = LocalDate.MAX.atStartOfDay(ZoneId.systemDefault()); private ZonedDateTime transitServiceEnds = LocalDate.MIN.atStartOfDay(ZoneId.systemDefault()); @@ -145,14 +145,14 @@ public class TimetableRepository implements Serializable { private transient TransitAlertService transitAlertService; @Inject - public TimetableRepository(StopModel stopModel, Deduplicator deduplicator) { - this.stopModel = Objects.requireNonNull(stopModel); + public TimetableRepository(SiteRepository siteRepository, Deduplicator deduplicator) { + this.siteRepository = Objects.requireNonNull(siteRepository); this.deduplicator = deduplicator; } /** No-argument constructor, required for deserialization. */ public TimetableRepository() { - this(new StopModel(), new Deduplicator()); + this(new SiteRepository(), new Deduplicator()); } /** @@ -163,7 +163,7 @@ public TimetableRepository() { public void index() { if (index == null) { LOG.info("Index transit model..."); - // the transit model indexing updates the stop model index (flex stops added to the stop index) + // the transit model indexing updates the site repository index (flex stops added to the stop index) this.index = new TimetableRepositoryIndex(this); LOG.info("Index transit model complete."); } @@ -430,8 +430,8 @@ public Collection getTransfersByStop(StopLocation stop) { return transfersByStop.get(stop); } - public StopModel getStopModel() { - return stopModel; + public SiteRepository getSiteRepository() { + return siteRepository; } public void addTripPattern(FeedScopedId id, TripPattern tripPattern) { @@ -499,11 +499,11 @@ public void setTransitLayerUpdater(TransitLayerUpdater transitLayerUpdater) { } /** - * Updating the stop model is only allowed during graph build + * Updating the site repository is only allowed during graph build */ - public void mergeStopModels(StopModel childStopModel) { + public void mergeSiteRepositories(SiteRepository childSiteRepository) { invalidateIndex(); - this.stopModel = this.stopModel.merge(childStopModel); + this.siteRepository = this.siteRepository.merge(childSiteRepository); } public void addFlexTrip(FeedScopedId id, FlexTrip flexTrip) { diff --git a/application/src/main/java/org/opentripplanner/updater/siri/AddedTripBuilder.java b/application/src/main/java/org/opentripplanner/updater/siri/AddedTripBuilder.java index c3bb31ed068..3be1bcbc4a2 100644 --- a/application/src/main/java/org/opentripplanner/updater/siri/AddedTripBuilder.java +++ b/application/src/main/java/org/opentripplanner/updater/siri/AddedTripBuilder.java @@ -199,7 +199,7 @@ Result build() { stopSequence == (calls.size() - 1) ); - // Drop this update if the call refers to an unknown stop (not present in the stop model). + // Drop this update if the call refers to an unknown stop (not present in the site repository). if (stopTime == null) { return UpdateError.result(tripId, NO_VALID_STOPS); } @@ -335,7 +335,7 @@ private Trip createTrip(Route route, FeedScopedId calServiceId) { } /** - * Map the call to a StopTime or return null if the stop cannot be found in the stop model. + * Map the call to a StopTime or return null if the stop cannot be found in the site repository. */ private StopTime createStopTime( Trip trip, diff --git a/application/src/test/java/org/opentripplanner/ConstantsForTests.java b/application/src/test/java/org/opentripplanner/ConstantsForTests.java index 241cc245da1..aeacc11eca4 100644 --- a/application/src/test/java/org/opentripplanner/ConstantsForTests.java +++ b/application/src/test/java/org/opentripplanner/ConstantsForTests.java @@ -43,7 +43,7 @@ import org.opentripplanner.test.support.ResourceLoader; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.FeedScopedId; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.opentripplanner.transit.service.TimetableRepository; public class ConstantsForTests { @@ -100,7 +100,10 @@ public static NetexBundle createMinimalNetexNordicBundle() { var dataSource = new ZipFileDataSource(netexZipFile, FileType.NETEX); var configuredDataSource = new ConfiguredDataSource<>(dataSource, buildConfig.netexDefaults); - var transitService = new OtpTransitServiceBuilder(new StopModel(), DataImportIssueStore.NOOP); + var transitService = new OtpTransitServiceBuilder( + new SiteRepository(), + DataImportIssueStore.NOOP + ); return new NetexConfigure(buildConfig).netexBundle(transitService, configuredDataSource); } @@ -112,7 +115,10 @@ public static NetexBundle createMinimalNetexEpipBundle() { var dataSource = new DirectoryDataSource(netexZipFile, FileType.NETEX); var configuredDataSource = new ConfiguredDataSource<>(dataSource, buildConfig.netexDefaults); - var transitService = new OtpTransitServiceBuilder(new StopModel(), DataImportIssueStore.NOOP); + var transitService = new OtpTransitServiceBuilder( + new SiteRepository(), + DataImportIssueStore.NOOP + ); return new NetexConfigure(buildConfig).netexBundle(transitService, configuredDataSource); } @@ -124,7 +130,7 @@ public static TestOtpModel buildNewPortlandGraph(boolean withElevation) { try { var deduplicator = new Deduplicator(); var graph = new Graph(deduplicator); - var timetableRepository = new TimetableRepository(new StopModel(), deduplicator); + var timetableRepository = new TimetableRepository(new SiteRepository(), deduplicator); // Add street data from OSM { OsmProvider osmProvider = new OsmProvider(PORTLAND_CENTRAL_OSM, false); @@ -162,7 +168,7 @@ public static TestOtpModel buildNewPortlandGraph(boolean withElevation) { addPortlandVehicleRentals(graph); timetableRepository.index(); - graph.index(timetableRepository.getStopModel()); + graph.index(timetableRepository.getSiteRepository()); return new TestOtpModel(graph, timetableRepository); } catch (Exception e) { @@ -173,9 +179,9 @@ public static TestOtpModel buildNewPortlandGraph(boolean withElevation) { public static TestOtpModel buildOsmGraph(File osmFile) { try { var deduplicator = new Deduplicator(); - var stopModel = new StopModel(); + var siteRepository = new SiteRepository(); var graph = new Graph(deduplicator); - var timetableRepository = new TimetableRepository(stopModel, deduplicator); + var timetableRepository = new TimetableRepository(siteRepository, deduplicator); // Add street data from OSM OsmProvider osmProvider = new OsmProvider(osmFile, true); OsmModule osmModule = OsmModule.of(osmProvider, graph).build(); @@ -209,9 +215,9 @@ public static TestOtpModel buildGtfsGraph(File gtfsPath) { public static TestOtpModel buildGtfsGraph(File gtfsFile, FareServiceFactory fareServiceFactory) { var deduplicator = new Deduplicator(); - var stopModel = new StopModel(); + var siteRepository = new SiteRepository(); var graph = new Graph(deduplicator); - var timetableRepository = new TimetableRepository(stopModel, deduplicator); + var timetableRepository = new TimetableRepository(siteRepository, deduplicator); addGtfsToGraph(graph, timetableRepository, gtfsFile, fareServiceFactory, null); return new TestOtpModel(graph, timetableRepository); } @@ -219,9 +225,9 @@ public static TestOtpModel buildGtfsGraph(File gtfsFile, FareServiceFactory fare public static TestOtpModel buildNewMinimalNetexGraph() { try { var deduplicator = new Deduplicator(); - var stopModel = new StopModel(); + var siteRepository = new SiteRepository(); var graph = new Graph(deduplicator); - var timetableRepository = new TimetableRepository(stopModel, deduplicator); + var timetableRepository = new TimetableRepository(siteRepository, deduplicator); // Add street data from OSM { OsmProvider osmProvider = new OsmProvider(OSLO_EAST_OSM, false); @@ -292,7 +298,7 @@ public static void addGtfsToGraph( module.buildGraph(); timetableRepository.index(); - graph.index(timetableRepository.getStopModel()); + graph.index(timetableRepository.getSiteRepository()); } private static void addPortlandVehicleRentals(Graph graph) { diff --git a/application/src/test/java/org/opentripplanner/GtfsTest.java b/application/src/test/java/org/opentripplanner/GtfsTest.java index 0e862c38901..8f5f7c96afa 100644 --- a/application/src/test/java/org/opentripplanner/GtfsTest.java +++ b/application/src/test/java/org/opentripplanner/GtfsTest.java @@ -39,7 +39,7 @@ import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.FeedScopedId; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.updater.TimetableSnapshotSourceParameters; import org.opentripplanner.updater.alert.AlertsUpdateHandler; @@ -194,7 +194,7 @@ protected void setUp() throws Exception { alertsUpdateHandler = new AlertsUpdateHandler(false); var deduplicator = new Deduplicator(); graph = new Graph(deduplicator); - timetableRepository = new TimetableRepository(new StopModel(), deduplicator); + timetableRepository = new TimetableRepository(new SiteRepository(), deduplicator); GtfsModule gtfsGraphBuilderImpl = new GtfsModule( gtfsBundleList, @@ -205,7 +205,7 @@ protected void setUp() throws Exception { gtfsGraphBuilderImpl.buildGraph(); timetableRepository.index(); - graph.index(timetableRepository.getStopModel()); + graph.index(timetableRepository.getSiteRepository()); serverContext = TestServerContext.createServerContext(graph, timetableRepository); timetableSnapshotSource = new TimetableSnapshotSource( diff --git a/application/src/test/java/org/opentripplanner/TestOtpModel.java b/application/src/test/java/org/opentripplanner/TestOtpModel.java index 36caf1dec43..62b5fce3416 100644 --- a/application/src/test/java/org/opentripplanner/TestOtpModel.java +++ b/application/src/test/java/org/opentripplanner/TestOtpModel.java @@ -6,7 +6,7 @@ public record TestOtpModel(Graph graph, TimetableRepository timetableRepository) { public TestOtpModel index() { timetableRepository.index(); - graph.index(timetableRepository.getStopModel()); + graph.index(timetableRepository.getSiteRepository()); return this; } } diff --git a/application/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java b/application/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java index 663ce2d5f3f..406217e6604 100644 --- a/application/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java +++ b/application/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java @@ -157,9 +157,9 @@ static void setup() { List.of() ); - var stopModel = TEST_MODEL.stopModelBuilder(); - STOP_LOCATIONS.forEach(stopModel::withRegularStop); - var model = stopModel.build(); + var siteRepository = TEST_MODEL.siteRepositoryBuilder(); + STOP_LOCATIONS.forEach(siteRepository::withRegularStop); + var model = siteRepository.build(); var timetableRepository = new TimetableRepository(model, DEDUPLICATOR); var trip = TimetableRepositoryForTest diff --git a/application/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java b/application/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java index b8eeb2d13d9..593fb622adc 100644 --- a/application/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java +++ b/application/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java @@ -89,14 +89,14 @@ public class TripRequestMapperTest implements PlanTestConstants { .bus(route2, 2, time("11:20"), time("11:40"), Place.forStop(stop3)) .build(); var patterns = itineraryPatterns(itinerary); - var stopModel = TEST_MODEL - .stopModelBuilder() + var siteRepository = TEST_MODEL + .siteRepositoryBuilder() .withRegularStop(stop1) .withRegularStop(stop2) .withRegularStop(stop3) .build(); - var timetableRepository = new TimetableRepository(stopModel, new Deduplicator()); + var timetableRepository = new TimetableRepository(siteRepository, new Deduplicator()); timetableRepository.initTimeZone(ZoneIds.STOCKHOLM); var calendarServiceData = new CalendarServiceData(); LocalDate serviceDate = itinerary.startTime().toLocalDate(); diff --git a/application/src/test/java/org/opentripplanner/graph_builder/module/GtfsModuleTest.java b/application/src/test/java/org/opentripplanner/graph_builder/module/GtfsModuleTest.java index 650282d6e7d..75f7077eb7d 100644 --- a/application/src/test/java/org/opentripplanner/graph_builder/module/GtfsModuleTest.java +++ b/application/src/test/java/org/opentripplanner/graph_builder/module/GtfsModuleTest.java @@ -18,7 +18,7 @@ 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.SiteRepository; import org.opentripplanner.transit.service.TimetableRepository; class GtfsModuleTest { @@ -70,9 +70,9 @@ void duplicateFeedId() { private static TestModels buildTestModel() { var deduplicator = new Deduplicator(); - var stopModel = new StopModel(); + var siteRepository = new SiteRepository(); var graph = new Graph(deduplicator); - var timetableRepository = new TimetableRepository(stopModel, deduplicator); + var timetableRepository = new TimetableRepository(siteRepository, deduplicator); return new TestModels(graph, timetableRepository); } diff --git a/application/src/test/java/org/opentripplanner/graph_builder/module/OsmBoardingLocationsModuleTest.java b/application/src/test/java/org/opentripplanner/graph_builder/module/OsmBoardingLocationsModuleTest.java index f411bf6757c..a2e7ebef402 100644 --- a/application/src/test/java/org/opentripplanner/graph_builder/module/OsmBoardingLocationsModuleTest.java +++ b/application/src/test/java/org/opentripplanner/graph_builder/module/OsmBoardingLocationsModuleTest.java @@ -28,7 +28,7 @@ import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.site.RegularStop; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.opentripplanner.transit.service.TimetableRepository; /** @@ -69,7 +69,7 @@ static Stream testCases() { void addAndLinkBoardingLocations(boolean areaVisibility, Set linkedVertices) { var deduplicator = new Deduplicator(); var graph = new Graph(deduplicator); - var timetableRepository = new TimetableRepository(new StopModel(), deduplicator); + var timetableRepository = new TimetableRepository(new SiteRepository(), deduplicator); var factory = new VertexFactory(graph); var provider = new OsmProvider(file, false); @@ -98,7 +98,7 @@ void addAndLinkBoardingLocations(boolean areaVisibility, Set linkedVerti ); timetableRepository.index(); - graph.index(timetableRepository.getStopModel()); + graph.index(timetableRepository.getSiteRepository()); assertEquals(0, busVertex.getIncoming().size()); assertEquals(0, busVertex.getOutgoing().size()); diff --git a/application/src/test/java/org/opentripplanner/graph_builder/module/StreetLinkerModuleTest.java b/application/src/test/java/org/opentripplanner/graph_builder/module/StreetLinkerModuleTest.java index f9957a09b95..d04d1a33058 100644 --- a/application/src/test/java/org/opentripplanner/graph_builder/module/StreetLinkerModuleTest.java +++ b/application/src/test/java/org/opentripplanner/graph_builder/module/StreetLinkerModuleTest.java @@ -24,7 +24,7 @@ import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.site.RegularStop; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.opentripplanner.transit.service.TimetableRepository; class StreetLinkerModuleTest { @@ -115,7 +115,7 @@ public TestModel() { var walkableEdge = StreetModelForTest.streetEdge(from, to, PEDESTRIAN); var drivableEdge = StreetModelForTest.streetEdge(from, to, CAR); - var builder = StopModel.of(); + var builder = SiteRepository.of(); stop = builder .regularStop(id("platform-1")) diff --git a/application/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/IslandPruningUtils.java b/application/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/IslandPruningUtils.java index bb15be82d9e..c59adad6fd5 100644 --- a/application/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/IslandPruningUtils.java +++ b/application/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/IslandPruningUtils.java @@ -6,7 +6,7 @@ import org.opentripplanner.osm.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.SiteRepository; import org.opentripplanner.transit.service.TimetableRepository; class IslandPruningUtils { @@ -21,7 +21,7 @@ static Graph buildOsmGraph( try { var deduplicator = new Deduplicator(); var graph = new Graph(deduplicator); - var timetableRepository = new TimetableRepository(new StopModel(), deduplicator); + var timetableRepository = new TimetableRepository(new SiteRepository(), deduplicator); // Add street data from OSM OsmProvider osmProvider = new OsmProvider(osmFile, true); OsmModule osmModule = OsmModule.of(osmProvider, graph).withEdgeNamer(new TestNamer()).build(); @@ -29,7 +29,7 @@ static Graph buildOsmGraph( osmModule.buildGraph(); timetableRepository.index(); - graph.index(timetableRepository.getStopModel()); + graph.index(timetableRepository.getSiteRepository()); // Prune floating islands and set noThru where necessary PruneIslands pruneIslands = new PruneIslands( diff --git a/application/src/test/java/org/opentripplanner/graph_builder/module/linking/LinkingTest.java b/application/src/test/java/org/opentripplanner/graph_builder/module/linking/LinkingTest.java index adef7774936..6bda39e5058 100644 --- a/application/src/test/java/org/opentripplanner/graph_builder/module/linking/LinkingTest.java +++ b/application/src/test/java/org/opentripplanner/graph_builder/module/linking/LinkingTest.java @@ -32,7 +32,7 @@ import org.opentripplanner.street.model.vertex.Vertex; import org.opentripplanner.test.support.ResourceLoader; import org.opentripplanner.transit.model.framework.Deduplicator; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.opentripplanner.transit.service.TimetableRepository; public class LinkingTest { @@ -150,9 +150,9 @@ public void testStopsLinkedIdentically() { /** Build a graph in Columbus, OH with no transit */ public static TestOtpModel buildGraphNoTransit() { var deduplicator = new Deduplicator(); - var stopModel = new StopModel(); + var siteRepository = new SiteRepository(); var gg = new Graph(deduplicator); - var timetableRepository = new TimetableRepository(stopModel, deduplicator); + var timetableRepository = new TimetableRepository(siteRepository, deduplicator); File file = ResourceLoader.of(LinkingTest.class).file("columbus.osm.pbf"); OsmProvider provider = new OsmProvider(file, false); diff --git a/application/src/test/java/org/opentripplanner/graph_builder/module/linking/TestGraph.java b/application/src/test/java/org/opentripplanner/graph_builder/module/linking/TestGraph.java index 4c8b6a176d3..a21b7aff55a 100644 --- a/application/src/test/java/org/opentripplanner/graph_builder/module/linking/TestGraph.java +++ b/application/src/test/java/org/opentripplanner/graph_builder/module/linking/TestGraph.java @@ -62,7 +62,7 @@ public static void addExtraStops(Graph graph) { /** link the stops in the graph */ public static void link(Graph graph, TimetableRepository timetableRepository) { timetableRepository.index(); - graph.index(timetableRepository.getStopModel()); + graph.index(timetableRepository.getSiteRepository()); VertexLinker linker = graph.getLinker(); diff --git a/application/src/test/java/org/opentripplanner/graph_builder/module/osm/UnconnectedAreasTest.java b/application/src/test/java/org/opentripplanner/graph_builder/module/osm/UnconnectedAreasTest.java index 75c56dd2fb3..492d04a0007 100644 --- a/application/src/test/java/org/opentripplanner/graph_builder/module/osm/UnconnectedAreasTest.java +++ b/application/src/test/java/org/opentripplanner/graph_builder/module/osm/UnconnectedAreasTest.java @@ -19,7 +19,7 @@ import org.opentripplanner.street.model.vertex.VertexLabel; import org.opentripplanner.test.support.ResourceLoader; import org.opentripplanner.transit.model.framework.Deduplicator; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.opentripplanner.transit.service.TimetableRepository; public class UnconnectedAreasTest { @@ -157,9 +157,9 @@ private Graph buildOsmGraph(String osmFileName) { private Graph buildOsmGraph(String osmFileName, DataImportIssueStore issueStore) { var deduplicator = new Deduplicator(); - var stopModel = new StopModel(); + var siteRepository = new SiteRepository(); var graph = new Graph(deduplicator); - var timetableRepository = new TimetableRepository(stopModel, deduplicator); + var timetableRepository = new TimetableRepository(siteRepository, deduplicator); OsmProvider provider = new OsmProvider(RESOURCE_LOADER.file(osmFileName), false); OsmModule loader = OsmModule .of(provider, graph) diff --git a/application/src/test/java/org/opentripplanner/gtfs/GenerateTripPatternsOperationTest.java b/application/src/test/java/org/opentripplanner/gtfs/GenerateTripPatternsOperationTest.java index 8b91e3c3d08..d0968adf7e9 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/GenerateTripPatternsOperationTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/GenerateTripPatternsOperationTest.java @@ -26,11 +26,11 @@ import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.timetable.Direction; import org.opentripplanner.transit.model.timetable.Trip; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; class GenerateTripPatternsOperationTest { - private static StopModel stopModel; + private static SiteRepository siteRepository; private static RegularStop stopA; private static RegularStop stopB; private static RegularStop stopC; @@ -54,9 +54,9 @@ static void setupClass() { stopA = timetableRepositoryForTest.stop("stopA").build(); stopB = timetableRepositoryForTest.stop("stopB").build(); stopC = timetableRepositoryForTest.stop("stopC").build(); - stopModel = + siteRepository = timetableRepositoryForTest - .stopModelBuilder() + .siteRepositoryBuilder() .withRegularStop(stopA) .withRegularStop(stopB) .withRegularStop(stopC) @@ -126,7 +126,7 @@ static void setupClass() { void setup() { deduplicator = new Deduplicator(); issueStore = new DefaultDataImportIssueStore(); - transitServiceBuilder = new OtpTransitServiceBuilder(stopModel, issueStore); + transitServiceBuilder = new OtpTransitServiceBuilder(siteRepository, issueStore); double maxStopToShapeSnapDistance = 100; geometryProcessor = new GeometryProcessor(transitServiceBuilder, maxStopToShapeSnapDistance, issueStore); diff --git a/application/src/test/java/org/opentripplanner/gtfs/GtfsContextBuilder.java b/application/src/test/java/org/opentripplanner/gtfs/GtfsContextBuilder.java index d74903495b3..80f66caf98e 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/GtfsContextBuilder.java +++ b/application/src/test/java/org/opentripplanner/gtfs/GtfsContextBuilder.java @@ -17,7 +17,7 @@ import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.site.StopTransferPriority; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; /** * This class helps building GtfsContext and post process the GtfsDao by repairing @@ -44,7 +44,10 @@ public static GtfsContextBuilder contextBuilder(File file) throws IOException { public static GtfsContextBuilder contextBuilder(@Nullable String defaultFeedId, File path) throws IOException { - var transitBuilder = new OtpTransitServiceBuilder(new StopModel(), DataImportIssueStore.NOOP); + var transitBuilder = new OtpTransitServiceBuilder( + new SiteRepository(), + DataImportIssueStore.NOOP + ); GtfsImport gtfsImport = gtfsImport(defaultFeedId, path); GtfsFeedId feedId = gtfsImport.getFeedId(); var mapper = new GTFSToOtpTransitServiceMapper( diff --git a/application/src/test/java/org/opentripplanner/gtfs/mapping/LocationGroupMapperTest.java b/application/src/test/java/org/opentripplanner/gtfs/mapping/LocationGroupMapperTest.java index 67b18ead0c5..99d7c4f3fce 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/mapping/LocationGroupMapperTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/mapping/LocationGroupMapperTest.java @@ -11,7 +11,7 @@ import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.site.StopLocation; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; class LocationGroupMapperTest { @@ -19,7 +19,7 @@ class LocationGroupMapperTest { @Test void map() { - var builder = StopModel.of(); + var builder = SiteRepository.of(); var mapper = new LocationGroupMapper( new StopMapper(new TranslationHelper(), id -> null, builder), new LocationMapper(builder, DataImportIssueStore.NOOP), diff --git a/application/src/test/java/org/opentripplanner/gtfs/mapping/LocationMapperTest.java b/application/src/test/java/org/opentripplanner/gtfs/mapping/LocationMapperTest.java index ab8bd66a810..fb910765f1b 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/mapping/LocationMapperTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/mapping/LocationMapperTest.java @@ -16,7 +16,7 @@ import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.graph_builder.issue.api.Issue; import org.opentripplanner.graph_builder.issue.service.DefaultDataImportIssueStore; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; class LocationMapperTest { @@ -29,7 +29,7 @@ static Stream testCases() { void testMapping(String name, boolean isBogusName) { var gtfsLocation = getLocation(name, Polygons.OSLO); - var mapper = new LocationMapper(StopModel.of(), DataImportIssueStore.NOOP); + var mapper = new LocationMapper(SiteRepository.of(), DataImportIssueStore.NOOP); var flexLocation = mapper.map(gtfsLocation); assertEquals(isBogusName, flexLocation.hasFallbackName()); @@ -43,7 +43,7 @@ void invalidPolygon() { var gtfsLocation = getLocation("invalid", selfIntersecting); var issueStore = new DefaultDataImportIssueStore(); - var mapper = new LocationMapper(StopModel.of(), issueStore); + var mapper = new LocationMapper(SiteRepository.of(), issueStore); mapper.map(gtfsLocation); diff --git a/application/src/test/java/org/opentripplanner/gtfs/mapping/PathwayMapperTest.java b/application/src/test/java/org/opentripplanner/gtfs/mapping/PathwayMapperTest.java index 1e321216305..ba913965c2d 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/mapping/PathwayMapperTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/mapping/PathwayMapperTest.java @@ -13,7 +13,7 @@ import org.onebusaway.gtfs.model.Pathway; import org.onebusaway.gtfs.model.Stop; import org.opentripplanner.transit.model.site.PathwayMode; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; public class PathwayMapperTest { @@ -30,7 +30,7 @@ public class PathwayMapperTest { private static final Stop TO_STOP = new Stop(); private final PathwayMapper subject = new PathwayMapper( - new StopMapper(TRANSLATION_HELPER, stationId -> null, new StopModel().withContext()), + new StopMapper(TRANSLATION_HELPER, stationId -> null, new SiteRepository().withContext()), new EntranceMapper(TRANSLATION_HELPER, stationId -> null), new PathwayNodeMapper(TRANSLATION_HELPER, stationId -> null), new BoardingAreaMapper(TRANSLATION_HELPER, stationId -> null) diff --git a/application/src/test/java/org/opentripplanner/gtfs/mapping/StopAndStationMapperTest.java b/application/src/test/java/org/opentripplanner/gtfs/mapping/StopAndStationMapperTest.java index d15ad9d75cf..51d4ec2605f 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/mapping/StopAndStationMapperTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/mapping/StopAndStationMapperTest.java @@ -14,7 +14,7 @@ import org.onebusaway.gtfs.model.Stop; import org.opentripplanner.transit.model.basic.Accessibility; import org.opentripplanner.transit.model.site.RegularStop; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; public class StopAndStationMapperTest { @@ -51,7 +51,7 @@ public class StopAndStationMapperTest { private final StopMapper subject = new StopMapper( new TranslationHelper(), stationId -> null, - new StopModel().withContext() + new SiteRepository().withContext() ); static { diff --git a/application/src/test/java/org/opentripplanner/gtfs/mapping/StopTimeMapperTest.java b/application/src/test/java/org/opentripplanner/gtfs/mapping/StopTimeMapperTest.java index d17c22c4abe..2bbed14334e 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/mapping/StopTimeMapperTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/mapping/StopTimeMapperTest.java @@ -27,8 +27,8 @@ import org.opentripplanner.model.PickDrop; import org.opentripplanner.transit.model.site.AreaStop; import org.opentripplanner.transit.model.site.GroupStop; -import org.opentripplanner.transit.service.StopModel; -import org.opentripplanner.transit.service.StopModelBuilder; +import org.opentripplanner.transit.service.SiteRepository; +import org.opentripplanner.transit.service.SiteRepositoryBuilder; public class StopTimeMapperTest { @@ -68,22 +68,22 @@ public class StopTimeMapperTest { .map(c -> new LngLatAlt(c.x, c.y)) .toList(); - private final StopModelBuilder stopModelBuilder = StopModel.of(); + private final SiteRepositoryBuilder siteRepositoryBuilder = SiteRepository.of(); private final StopMapper stopMapper = new StopMapper( new TranslationHelper(), stationId -> null, - stopModelBuilder + siteRepositoryBuilder ); private final BookingRuleMapper bookingRuleMapper = new BookingRuleMapper(); private final LocationMapper locationMapper = new LocationMapper( - stopModelBuilder, + siteRepositoryBuilder, DataImportIssueStore.NOOP ); private final LocationGroupMapper locationGroupMapper = new LocationGroupMapper( stopMapper, locationMapper, - stopModelBuilder + siteRepositoryBuilder ); private final TranslationHelper translationHelper = new TranslationHelper(); private final StopTimeMapper subject = new StopTimeMapper( diff --git a/application/src/test/java/org/opentripplanner/gtfs/mapping/TransferMapperTest.java b/application/src/test/java/org/opentripplanner/gtfs/mapping/TransferMapperTest.java index 3c5a1eff42a..4d1d1c65fbd 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/mapping/TransferMapperTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/mapping/TransferMapperTest.java @@ -19,8 +19,8 @@ import org.opentripplanner.model.transfer.ConstrainedTransfer; import org.opentripplanner.model.transfer.TransferPriority; import org.opentripplanner.transit.model.site.StopTransferPriority; -import org.opentripplanner.transit.service.StopModel; -import org.opentripplanner.transit.service.StopModelBuilder; +import org.opentripplanner.transit.service.SiteRepository; +import org.opentripplanner.transit.service.SiteRepositoryBuilder; public class TransferMapperTest { @@ -37,7 +37,7 @@ public class TransferMapperTest { private static StationMapper STATION_MAPPER; - private static final StopModelBuilder STOP_MODEL_BUILDER = StopModel.of(); + private static final SiteRepositoryBuilder STOP_MODEL_BUILDER = SiteRepository.of(); private static final StopMapper STOP_MAPPER = new StopMapper( TRANSLATION_HELPER, diff --git a/application/src/test/java/org/opentripplanner/inspector/vector/stop/AreaStopLayerBuilderTest.java b/application/src/test/java/org/opentripplanner/inspector/vector/stop/AreaStopLayerBuilderTest.java index a1c01ca2e99..23a9ce972d0 100644 --- a/application/src/test/java/org/opentripplanner/inspector/vector/stop/AreaStopLayerBuilderTest.java +++ b/application/src/test/java/org/opentripplanner/inspector/vector/stop/AreaStopLayerBuilderTest.java @@ -9,17 +9,17 @@ 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.StopModel; -import org.opentripplanner.transit.service.StopModelBuilder; +import org.opentripplanner.transit.service.SiteRepository; +import org.opentripplanner.transit.service.SiteRepositoryBuilder; class AreaStopLayerBuilderTest { private static final FeedScopedId ID = new FeedScopedId("FEED", "ID"); private static final I18NString NAME = I18NString.of("Test stop"); - private final StopModelBuilder stopModelBuilder = StopModel.of(); + private final SiteRepositoryBuilder siteRepositoryBuilder = SiteRepository.of(); - private final AreaStop areaStop = stopModelBuilder + private final AreaStop areaStop = siteRepositoryBuilder .areaStop(ID) .withName(NAME) .withGeometry(Polygons.BERLIN) diff --git a/application/src/test/java/org/opentripplanner/model/impl/OtpTransitServiceBuilderLimitPeriodTest.java b/application/src/test/java/org/opentripplanner/model/impl/OtpTransitServiceBuilderLimitPeriodTest.java index b37a0f55703..ae44e7239f5 100644 --- a/application/src/test/java/org/opentripplanner/model/impl/OtpTransitServiceBuilderLimitPeriodTest.java +++ b/application/src/test/java/org/opentripplanner/model/impl/OtpTransitServiceBuilderLimitPeriodTest.java @@ -28,7 +28,7 @@ import org.opentripplanner.transit.model.timetable.Direction; import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.model.timetable.TripTimesFactory; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; /** * This test will create a Transit service builder and then limit the service period. The services @@ -70,7 +70,7 @@ public class OtpTransitServiceBuilderLimitPeriodTest { @BeforeEach public void setUp() { - subject = new OtpTransitServiceBuilder(new StopModel(), DataImportIssueStore.NOOP); + subject = new OtpTransitServiceBuilder(new SiteRepository(), DataImportIssueStore.NOOP); // Add a service calendar that overlap with the period limit subject.getCalendars().add(createServiceCalendar(SERVICE_C_IN, D1, D3)); @@ -85,8 +85,8 @@ public void setUp() { subject.getCalendarDates().add(new ServiceCalendarDate(SERVICE_D_OUT, D1, 1)); // Add 2 stops - subject.stopModel().withRegularStop(STOP_1); - subject.stopModel().withRegularStop(STOP_2); + subject.siteRepository().withRegularStop(STOP_1); + subject.siteRepository().withRegularStop(STOP_2); // Add Route subject.getRoutes().add(route); diff --git a/application/src/test/java/org/opentripplanner/model/impl/OtpTransitServiceImplTest.java b/application/src/test/java/org/opentripplanner/model/impl/OtpTransitServiceImplTest.java index 48bff78273f..728208438a8 100644 --- a/application/src/test/java/org/opentripplanner/model/impl/OtpTransitServiceImplTest.java +++ b/application/src/test/java/org/opentripplanner/model/impl/OtpTransitServiceImplTest.java @@ -94,7 +94,7 @@ public void testGetAllTransfers() { @Test public void testGetAllStations() { - Collection stations = subject.stopModel().listStations(); + Collection stations = subject.siteRepository().listStations(); assertEquals(1, stations.size()); assertEquals("Station{F:station station}", first(stations).toString()); @@ -102,7 +102,7 @@ public void testGetAllStations() { @Test public void testGetAllStops() { - Collection stops = subject.stopModel().listRegularStops(); + Collection stops = subject.siteRepository().listRegularStops(); assertEquals(25, stops.size()); assertEquals("RegularStop{F:A A}", first(stops).toString()); @@ -132,14 +132,14 @@ public void testGetAllTrips() { @Test public void testGetStopForId() { - RegularStop stop = subject.stopModel().getRegularStop(TimetableRepositoryForTest.id("P")); + RegularStop stop = subject.siteRepository().getRegularStop(TimetableRepositoryForTest.id("P")); assertEquals("RegularStop{F:P P}", stop.toString()); } @Test public void testGetStopsForStation() { List stops = new ArrayList<>( - subject.stopModel().getStationById(STATION_ID).getChildStops() + subject.siteRepository().getStationById(STATION_ID).getChildStops() ); assertEquals("[RegularStop{F:A A}]", stops.toString()); } diff --git a/application/src/test/java/org/opentripplanner/model/plan/PlaceTest.java b/application/src/test/java/org/opentripplanner/model/plan/PlaceTest.java index 3062d71facd..4d7375b7c89 100644 --- a/application/src/test/java/org/opentripplanner/model/plan/PlaceTest.java +++ b/application/src/test/java/org/opentripplanner/model/plan/PlaceTest.java @@ -19,7 +19,7 @@ import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.site.RegularStop; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; public class PlaceTest { @@ -79,7 +79,7 @@ static Stream flexStopCases() { @ParameterizedTest(name = "Flex stop name of {0} should lead to a place name of {1}") @MethodSource("flexStopCases") public void flexStop(I18NString stopName, String expectedPlaceName) { - var stop = StopModel + var stop = SiteRepository .of() .areaStop(new FeedScopedId("1", "stop_id")) .withGeometry(GEOMETRY) diff --git a/application/src/test/java/org/opentripplanner/model/plan/legreference/ScheduledTransitLegReferenceTest.java b/application/src/test/java/org/opentripplanner/model/plan/legreference/ScheduledTransitLegReferenceTest.java index d663e7bed2f..556cfc1ca90 100644 --- a/application/src/test/java/org/opentripplanner/model/plan/legreference/ScheduledTransitLegReferenceTest.java +++ b/application/src/test/java/org/opentripplanner/model/plan/legreference/ScheduledTransitLegReferenceTest.java @@ -24,7 +24,7 @@ import org.opentripplanner.transit.model.timetable.TripOnServiceDate; import org.opentripplanner.transit.model.timetable.TripTimesFactory; import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.transit.service.TransitService; @@ -72,15 +72,15 @@ static void buildTransitService() { stopIdAtPosition2 = tripPattern.getStop(2).getId(); // build transit model - StopModel stopModel = TEST_MODEL - .stopModelBuilder() + SiteRepository siteRepository = TEST_MODEL + .siteRepositoryBuilder() .withRegularStop(stop1) .withRegularStop(stop2) .withRegularStop(stop3) .withRegularStop(stop4) .build(); TimetableRepository timetableRepository = new TimetableRepository( - stopModel, + siteRepository, new Deduplicator() ); timetableRepository.addTripPattern(tripPattern.getId(), tripPattern); diff --git a/application/src/test/java/org/opentripplanner/netex/NetexEpipBundleSmokeTest.java b/application/src/test/java/org/opentripplanner/netex/NetexEpipBundleSmokeTest.java index 72e750c055f..f5d3f4d21a3 100644 --- a/application/src/test/java/org/opentripplanner/netex/NetexEpipBundleSmokeTest.java +++ b/application/src/test/java/org/opentripplanner/netex/NetexEpipBundleSmokeTest.java @@ -62,8 +62,8 @@ void smokeTestOfNetexEpipLoadData() { assertAgencies(otpModel.getAllAgencies()); assertOperators(otpModel.getAllOperators()); - assertStops(otpModel.stopModel().listRegularStops()); - assertStations(otpModel.stopModel().listStations()); + assertStops(otpModel.siteRepository().listRegularStops()); + assertStations(otpModel.siteRepository().listStations()); assertTripPatterns(otpModel.getTripPatterns()); assertTrips(otpModel.getAllTrips()); assertServiceIds(otpModel.getAllTrips(), otpModel.getAllServiceIds()); diff --git a/application/src/test/java/org/opentripplanner/netex/NetexNordicBundleSmokeTest.java b/application/src/test/java/org/opentripplanner/netex/NetexNordicBundleSmokeTest.java index 6b5e9b60098..c91195c1ab5 100644 --- a/application/src/test/java/org/opentripplanner/netex/NetexNordicBundleSmokeTest.java +++ b/application/src/test/java/org/opentripplanner/netex/NetexNordicBundleSmokeTest.java @@ -67,10 +67,10 @@ public void smokeTestOfNetexNordicLoadData() { OtpTransitService otpModel = transitBuilder.build(); assertAgencies(otpModel.getAllAgencies()); - assertMultiModalStations(otpModel.stopModel().listMultiModalStations()); + assertMultiModalStations(otpModel.siteRepository().listMultiModalStations()); assertOperators(otpModel.getAllOperators()); - assertStops(otpModel.stopModel().listRegularStops()); - assertStations(otpModel.stopModel().listStations()); + assertStops(otpModel.siteRepository().listRegularStops()); + assertStations(otpModel.siteRepository().listStations()); assertTripPatterns(otpModel.getTripPatterns()); assertTrips(otpModel.getAllTrips()); assertServiceIds(otpModel.getAllTrips(), otpModel.getAllServiceIds()); diff --git a/application/src/test/java/org/opentripplanner/netex/mapping/FlexStopsMapperTest.java b/application/src/test/java/org/opentripplanner/netex/mapping/FlexStopsMapperTest.java index 4721ef03bf3..272db6b62f0 100644 --- a/application/src/test/java/org/opentripplanner/netex/mapping/FlexStopsMapperTest.java +++ b/application/src/test/java/org/opentripplanner/netex/mapping/FlexStopsMapperTest.java @@ -23,7 +23,7 @@ import org.opentripplanner.transit.model.site.GroupStop; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.StopLocation; -import org.opentripplanner.transit.service.StopModelBuilder; +import org.opentripplanner.transit.service.SiteRepositoryBuilder; import org.rutebanken.netex.model.AllVehicleModesOfTransportEnumeration; import org.rutebanken.netex.model.FlexibleArea; import org.rutebanken.netex.model.FlexibleStopPlace; @@ -127,14 +127,14 @@ class FlexStopsMapperTest { ); private final TimetableRepositoryForTest testModel = TimetableRepositoryForTest.of(); - private final StopModelBuilder stopModelBuilder = testModel.stopModelBuilder(); + private final SiteRepositoryBuilder siteRepositoryBuilder = testModel.siteRepositoryBuilder(); @Test void testMapAreaStop() { FlexStopsMapper flexStopsMapper = new FlexStopsMapper( ID_FACTORY, List.of(), - stopModelBuilder, + siteRepositoryBuilder, DataImportIssueStore.NOOP ); @@ -195,7 +195,7 @@ void testMapFlexibleStopPlaceMissingStops() { FlexStopsMapper subject = new FlexStopsMapper( ID_FACTORY, List.of(), - stopModelBuilder, + siteRepositoryBuilder, DataImportIssueStore.NOOP ); @@ -216,7 +216,7 @@ void testMapFlexibleStopPlaceWithInvalidGeometryOnUnrestrictedPublicTransportAre FlexStopsMapper subject = new FlexStopsMapper( ID_FACTORY, List.of(stop1, stop2), - stopModelBuilder, + siteRepositoryBuilder, DataImportIssueStore.NOOP ); @@ -248,7 +248,7 @@ private void assertGroupStopMapping(FlexibleStopPlace flexibleStopPlace) { FlexStopsMapper subject = new FlexStopsMapper( ID_FACTORY, List.of(stop1, stop2, stop3), - stopModelBuilder, + siteRepositoryBuilder, DataImportIssueStore.NOOP ); @@ -292,7 +292,7 @@ private AreaStop createAreaStop(Collection polygonCoordinates) { FlexStopsMapper flexStopsMapper = new FlexStopsMapper( ID_FACTORY, List.of(), - stopModelBuilder, + siteRepositoryBuilder, DataImportIssueStore.NOOP ); FlexibleStopPlace flexibleStopPlace = getFlexibleStopPlace(polygonCoordinates); diff --git a/application/src/test/java/org/opentripplanner/netex/mapping/RouteMapperTest.java b/application/src/test/java/org/opentripplanner/netex/mapping/RouteMapperTest.java index 955a3fec34a..b2187af4216 100644 --- a/application/src/test/java/org/opentripplanner/netex/mapping/RouteMapperTest.java +++ b/application/src/test/java/org/opentripplanner/netex/mapping/RouteMapperTest.java @@ -22,7 +22,7 @@ import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.organization.Agency; import org.opentripplanner.transit.model.organization.Branding; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.rutebanken.netex.model.AllVehicleModesOfTransportEnumeration; import org.rutebanken.netex.model.Authority; import org.rutebanken.netex.model.BrandingRefStructure; @@ -76,7 +76,7 @@ void mapRouteWithDefaultAgency() { void mapRouteWithAgencySpecified() { NetexEntityIndex netexIndex = new NetexEntityIndex(); OtpTransitServiceBuilder transitBuilder = new OtpTransitServiceBuilder( - new StopModel(), + new SiteRepository(), DataImportIssueStore.NOOP ); @@ -191,7 +191,7 @@ void mapRouteWithoutBranding() { void mapRouteWithBranding() { NetexEntityIndex netexIndex = new NetexEntityIndex(); OtpTransitServiceBuilder transitBuilder = new OtpTransitServiceBuilder( - new StopModel(), + new SiteRepository(), DataImportIssueStore.NOOP ); @@ -225,7 +225,7 @@ void mapRouteWithBranding() { void mapRouteWithGroupOfRoutes() { NetexEntityIndex netexIndex = new NetexEntityIndex(); OtpTransitServiceBuilder transitBuilder = new OtpTransitServiceBuilder( - new StopModel(), + new SiteRepository(), DataImportIssueStore.NOOP ); diff --git a/application/src/test/java/org/opentripplanner/netex/mapping/ServiceLinkMapperTest.java b/application/src/test/java/org/opentripplanner/netex/mapping/ServiceLinkMapperTest.java index aa19a436112..52c1564f025 100644 --- a/application/src/test/java/org/opentripplanner/netex/mapping/ServiceLinkMapperTest.java +++ b/application/src/test/java/org/opentripplanner/netex/mapping/ServiceLinkMapperTest.java @@ -25,7 +25,7 @@ import org.opentripplanner.transit.model.network.StopPattern; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.Station; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.rutebanken.netex.model.JourneyPattern; import org.rutebanken.netex.model.LinkSequenceProjection; import org.rutebanken.netex.model.LinkSequenceProjection_VersionStructure; @@ -107,7 +107,11 @@ void setUpTestData() { EntityById stopsById = new DefaultEntityById<>(); issueStore = new DefaultDataImportIssueStore(); - QuayMapper quayMapper = new QuayMapper(ID_FACTORY, issueStore, new StopModel().withContext()); + QuayMapper quayMapper = new QuayMapper( + ID_FACTORY, + issueStore, + new SiteRepository().withContext() + ); stopPatternBuilder = StopPattern.create(3); Station parentStation = Station diff --git a/application/src/test/java/org/opentripplanner/netex/mapping/StationMapperTest.java b/application/src/test/java/org/opentripplanner/netex/mapping/StationMapperTest.java index 8b09fe41b2a..6f0524d92d7 100644 --- a/application/src/test/java/org/opentripplanner/netex/mapping/StationMapperTest.java +++ b/application/src/test/java/org/opentripplanner/netex/mapping/StationMapperTest.java @@ -12,7 +12,7 @@ import org.opentripplanner.netex.NetexTestDataSupport; import org.opentripplanner.netex.mapping.support.FeedScopedIdFactory; import org.opentripplanner.transit.model.site.Station; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.rutebanken.netex.model.Quay; import org.rutebanken.netex.model.StopPlace; @@ -29,7 +29,7 @@ void setUp() { ZoneId.of("UTC"), false, Set.of(), - StopModel.of() + SiteRepository.of() ); } diff --git a/application/src/test/java/org/opentripplanner/netex/mapping/StopAndStationMapperTest.java b/application/src/test/java/org/opentripplanner/netex/mapping/StopAndStationMapperTest.java index f61bef86a19..2d710224661 100644 --- a/application/src/test/java/org/opentripplanner/netex/mapping/StopAndStationMapperTest.java +++ b/application/src/test/java/org/opentripplanner/netex/mapping/StopAndStationMapperTest.java @@ -23,8 +23,8 @@ import org.opentripplanner.transit.model.basic.Accessibility; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.Station; -import org.opentripplanner.transit.service.StopModel; -import org.opentripplanner.transit.service.StopModelBuilder; +import org.opentripplanner.transit.service.SiteRepository; +import org.opentripplanner.transit.service.SiteRepositoryBuilder; import org.rutebanken.netex.model.AccessibilityAssessment; import org.rutebanken.netex.model.AccessibilityLimitation; import org.rutebanken.netex.model.AccessibilityLimitations_RelStructure; @@ -78,7 +78,7 @@ void testWheelChairBoarding() { var stopPlaceById = new HierarchicalVersionMapById(); stopPlaceById.add(stopPlace); - StopAndStationMapper stopAndStationMapper = createStopAndStationMapper(StopModel.of()); + StopAndStationMapper stopAndStationMapper = createStopAndStationMapper(SiteRepository.of()); stopAndStationMapper.mapParentAndChildStops(List.of(stopPlace)); @@ -159,7 +159,7 @@ void mapStopPlaceAndQuays() { MappingSupport.ID_FACTORY, quaysById, null, - StopModel.of(), + SiteRepository.of(), DEFAULT_TIME_ZONE, DataImportIssueStore.NOOP, false, @@ -230,7 +230,7 @@ void testMapIsolatedStopPlace(boolean isolated) { MappingSupport.ID_FACTORY, new HierarchicalVersionMapById<>(), null, - StopModel.of(), + SiteRepository.of(), DEFAULT_TIME_ZONE, DataImportIssueStore.NOOP, isolated, @@ -264,20 +264,20 @@ void testDuplicateStopIndices() { stopPlace.setQuays(new Quays_RelStructure().withQuayRefOrQuay(objectFactory.createQuay(quay1))); - StopModelBuilder stopModelBuilder = StopModel.of(); + SiteRepositoryBuilder siteRepositoryBuilder = SiteRepository.of(); - StopAndStationMapper stopAndStationMapper = createStopAndStationMapper(stopModelBuilder); + StopAndStationMapper stopAndStationMapper = createStopAndStationMapper(siteRepositoryBuilder); stopAndStationMapper.mapParentAndChildStops(List.of(stopPlace)); - stopModelBuilder.withRegularStops(stopAndStationMapper.resultStops); + siteRepositoryBuilder.withRegularStops(stopAndStationMapper.resultStops); - StopAndStationMapper stopAndStationMapper2 = createStopAndStationMapper(stopModelBuilder); + StopAndStationMapper stopAndStationMapper2 = createStopAndStationMapper(siteRepositoryBuilder); stopAndStationMapper2.mapParentAndChildStops(List.of(stopPlace)); - stopModelBuilder.withRegularStops(stopAndStationMapper2.resultStops); + siteRepositoryBuilder.withRegularStops(stopAndStationMapper2.resultStops); - assertEquals(1, stopModelBuilder.regularStopsById().size()); + assertEquals(1, siteRepositoryBuilder.regularStopsById().size()); assertEquals( 0, - stopModelBuilder + siteRepositoryBuilder .regularStopsById() .get(MappingSupport.ID_FACTORY.createId("ST:Quay:1")) .getIndex() @@ -291,7 +291,7 @@ void testRouteToCentroid() { MappingSupport.ID_FACTORY, new HierarchicalVersionMapById<>(), null, - StopModel.of(), + SiteRepository.of(), DEFAULT_TIME_ZONE, DataImportIssueStore.NOOP, false, @@ -312,13 +312,13 @@ void testRouteToCentroid() { } private static StopAndStationMapper createStopAndStationMapper( - StopModelBuilder stopModelBuilder + SiteRepositoryBuilder siteRepositoryBuilder ) { return new StopAndStationMapper( MappingSupport.ID_FACTORY, new HierarchicalVersionMapById<>(), null, - stopModelBuilder, + siteRepositoryBuilder, DEFAULT_TIME_ZONE, DataImportIssueStore.NOOP, false, diff --git a/application/src/test/java/org/opentripplanner/netex/mapping/TripMapperTest.java b/application/src/test/java/org/opentripplanner/netex/mapping/TripMapperTest.java index a4684fdba8f..6c4973329d3 100644 --- a/application/src/test/java/org/opentripplanner/netex/mapping/TripMapperTest.java +++ b/application/src/test/java/org/opentripplanner/netex/mapping/TripMapperTest.java @@ -16,7 +16,7 @@ import org.opentripplanner.transit.model.basic.Accessibility; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.timetable.Trip; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.rutebanken.netex.model.AccessibilityAssessment; import org.rutebanken.netex.model.AccessibilityLimitation; import org.rutebanken.netex.model.AccessibilityLimitations_RelStructure; @@ -49,7 +49,7 @@ public void mapTripWithWheelchairAccess() { var limitations = new AccessibilityLimitations_RelStructure(); var access = new AccessibilityAssessment(); - var transitBuilder = new OtpTransitServiceBuilder(new StopModel(), issueStore); + var transitBuilder = new OtpTransitServiceBuilder(new SiteRepository(), issueStore); transitBuilder.getRoutes().add(TimetableRepositoryForTest.route(ROUTE_ID).build()); TripMapper tripMapper = new TripMapper( @@ -79,7 +79,7 @@ public void mapTripWithWheelchairAccess() { @Test public void mapTrip() { OtpTransitServiceBuilder transitBuilder = new OtpTransitServiceBuilder( - new StopModel(), + new SiteRepository(), issueStore ); transitBuilder.getRoutes().add(TimetableRepositoryForTest.route(ROUTE_ID).build()); @@ -106,7 +106,7 @@ public void mapTrip() { @Test public void mapTripWithRouteRefViaJourneyPattern() { OtpTransitServiceBuilder transitBuilder = new OtpTransitServiceBuilder( - new StopModel(), + new SiteRepository(), issueStore ); transitBuilder.getRoutes().add(TimetableRepositoryForTest.route(ROUTE_ID).build()); diff --git a/application/src/test/java/org/opentripplanner/routing/TestHalfEdges.java b/application/src/test/java/org/opentripplanner/routing/TestHalfEdges.java index 2411444db49..dc473276c7b 100644 --- a/application/src/test/java/org/opentripplanner/routing/TestHalfEdges.java +++ b/application/src/test/java/org/opentripplanner/routing/TestHalfEdges.java @@ -68,7 +68,7 @@ public class TestHalfEdges { public void setUp() { var deduplicator = new Deduplicator(); graph = new Graph(deduplicator); - var stopModelBuilder = testModel.stopModelBuilder(); + var siteRepositoryBuilder = testModel.siteRepositoryBuilder(); var factory = new VertexFactory(graph); // a 0.1 degree x 0.1 degree square tl = factory.intersection("tl", -74.01, 40.01); @@ -161,8 +161,8 @@ public void setUp() { var s1 = testModel.stop("fleem station", 40.0099999, -74.005).build(); var s2 = testModel.stop("morx station", 40.0099999, -74.002).build(); - stopModelBuilder.withRegularStop(s1).withRegularStop(s2); - timetableRepository = new TimetableRepository(stopModelBuilder.build(), deduplicator); + siteRepositoryBuilder.withRegularStop(s1).withRegularStop(s2); + timetableRepository = new TimetableRepository(siteRepositoryBuilder.build(), deduplicator); station1 = factory.transitStop(TransitStopVertex.of().withStop(s1)); station2 = factory.transitStop(TransitStopVertex.of().withStop(s2)); @@ -173,7 +173,7 @@ public void setUp() { graph.hasStreets = true; timetableRepository.index(); - graph.index(timetableRepository.getStopModel()); + graph.index(timetableRepository.getSiteRepository()); } @Test @@ -596,7 +596,7 @@ public void testStreetSplittingAlerts() { public void testStreetLocationFinder() { StreetIndex finder = graph.getStreetIndex(); GraphFinder graphFinder = new DirectGraphFinder( - timetableRepository.getStopModel()::findRegularStops + timetableRepository.getSiteRepository()::findRegularStops ); Set tempEdges = new HashSet<>(); // test that the local stop finder finds stops diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/GraphRoutingTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/GraphRoutingTest.java index 8108274c318..b9f9d7acb56 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/GraphRoutingTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/GraphRoutingTest.java @@ -61,7 +61,7 @@ import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.Station; import org.opentripplanner.transit.model.site.StationBuilder; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.opentripplanner.transit.service.TimetableRepository; public abstract class GraphRoutingTest { @@ -85,7 +85,7 @@ public abstract static class Builder { protected Builder() { var deduplicator = new Deduplicator(); graph = new Graph(deduplicator); - timetableRepository = new TimetableRepository(new StopModel(), deduplicator); + timetableRepository = new TimetableRepository(new SiteRepository(), deduplicator); vertexFactory = new VertexFactory(graph); vehicleParkingHelper = new VehicleParkingHelper(graph); } @@ -242,8 +242,8 @@ RegularStop stopEntity( double longitude, @Nullable Station parentStation ) { - var stopModelBuilder = timetableRepository.getStopModel().withContext(); - var testModel = new TimetableRepositoryForTest(stopModelBuilder); + var siteRepositoryBuilder = timetableRepository.getSiteRepository().withContext(); + var testModel = new TimetableRepositoryForTest(siteRepositoryBuilder); var stopBuilder = testModel.stop(id).withCoordinate(latitude, longitude); if (parentStation != null) { @@ -251,19 +251,21 @@ RegularStop stopEntity( } var stop = stopBuilder.build(); - timetableRepository.mergeStopModels(stopModelBuilder.withRegularStop(stop).build()); + timetableRepository.mergeSiteRepositories( + siteRepositoryBuilder.withRegularStop(stop).build() + ); return stop; } public Station stationEntity(String id, Consumer stationBuilder) { - var stopModelBuilder = timetableRepository.getStopModel().withContext(); - var testModel = new TimetableRepositoryForTest(stopModelBuilder); + var siteRepositoryBuilder = timetableRepository.getSiteRepository().withContext(); + var testModel = new TimetableRepositoryForTest(siteRepositoryBuilder); var builder = testModel.station(id); stationBuilder.accept(builder); var station = builder.build(); - timetableRepository.mergeStopModels(stopModelBuilder.withStation(station).build()); + timetableRepository.mergeSiteRepositories(siteRepositoryBuilder.withStation(station).build()); return station; } diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapperTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapperTest.java index d1940119655..4887b1e6f03 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapperTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapperTest.java @@ -262,11 +262,11 @@ void isSearchWindowAware() { } private TripPattern getOriginalPattern(TestTripPattern pattern) { - var stopModelBuilder = TEST_MODEL.stopModelBuilder(); + var siteRepositoryBuilder = TEST_MODEL.siteRepositoryBuilder(); ArrayList stopTimes = new ArrayList<>(); for (int i = 0; i < pattern.numberOfStopsInPattern(); i++) { - var stop = stopModelBuilder + var stop = siteRepositoryBuilder .regularStop(new FeedScopedId("TestFeed", i + "")) .withCoordinate(0.0, 0.0) .build(); @@ -311,7 +311,7 @@ private static TransitLayer getTransitLayer() { null, null, TEST_MODEL - .stopModelBuilder() + .siteRepositoryBuilder() .withRegularStop(S1) .withRegularStop(S2) .withRegularStop(S3) diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerMapperTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerMapperTest.java index 1301eea3844..b7e441e4bf2 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerMapperTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerMapperTest.java @@ -11,7 +11,7 @@ import org.opentripplanner.transit.model.site.Station; import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.model.site.StopTransferPriority; -import org.opentripplanner.transit.service.StopModelMock; +import org.opentripplanner.transit.service.SiteRepositoryMock; class TransitLayerMapperTest { @@ -44,7 +44,7 @@ class TransitLayerMapperTest { @Test public void createStopBoardAlightTransferCosts() { int[] result = TransitLayerMapper.createStopBoardAlightTransferCosts( - new StopModelMock(STOPS), + new SiteRepositoryMock(STOPS), TransitTuningParameters.FOR_TEST ); diff --git a/application/src/test/java/org/opentripplanner/routing/core/TemporaryVerticesContainerTest.java b/application/src/test/java/org/opentripplanner/routing/core/TemporaryVerticesContainerTest.java index 1af45763b60..03359143f54 100644 --- a/application/src/test/java/org/opentripplanner/routing/core/TemporaryVerticesContainerTest.java +++ b/application/src/test/java/org/opentripplanner/routing/core/TemporaryVerticesContainerTest.java @@ -16,7 +16,6 @@ import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.framework.geometry.SphericalDistanceLibrary; import org.opentripplanner.model.GenericLocation; -import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.street.model.StreetTraversalPermission; @@ -29,7 +28,7 @@ import org.opentripplanner.street.model.vertex.Vertex; import org.opentripplanner.street.search.TemporaryVerticesContainer; import org.opentripplanner.transit.model.framework.Deduplicator; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; public class TemporaryVerticesContainerTest { @@ -55,7 +54,7 @@ public void setup() { createStreetEdge(a, b, "a -> b"); createStreetEdge(b, a, "b -> a"); createStreetEdge(a, c, "a -> c"); - g.index(new StopModel()); + g.index(new SiteRepository()); } @Test diff --git a/application/src/test/java/org/opentripplanner/routing/graph/GraphSerializationTest.java b/application/src/test/java/org/opentripplanner/routing/graph/GraphSerializationTest.java index 03bd2d2b5cc..47568fa1252 100644 --- a/application/src/test/java/org/opentripplanner/routing/graph/GraphSerializationTest.java +++ b/application/src/test/java/org/opentripplanner/routing/graph/GraphSerializationTest.java @@ -207,10 +207,10 @@ private void testRoundTrip( // might be indexed by other tests. originalTimetableRepository.index(); - originalGraph.index(originalTimetableRepository.getStopModel()); + originalGraph.index(originalTimetableRepository.getSiteRepository()); copiedTimetableRepository1.index(); - copiedGraph1.index(copiedTimetableRepository1.getStopModel()); + copiedGraph1.index(copiedTimetableRepository1.getSiteRepository()); assertNoDifferences(originalGraph, copiedGraph1); @@ -218,7 +218,7 @@ private void testRoundTrip( Graph copiedGraph2 = deserializedGraph2.graph; TimetableRepository copiedTimetableRepository2 = deserializedGraph2.timetableRepository; copiedTimetableRepository2.index(); - copiedGraph2.index(copiedTimetableRepository2.getStopModel()); + copiedGraph2.index(copiedTimetableRepository2.getSiteRepository()); assertNoDifferences(copiedGraph1, copiedGraph2); } } diff --git a/application/src/test/java/org/opentripplanner/routing/graphfinder/DirectGraphFinderTest.java b/application/src/test/java/org/opentripplanner/routing/graphfinder/DirectGraphFinderTest.java index c407fa08098..215bd317335 100644 --- a/application/src/test/java/org/opentripplanner/routing/graphfinder/DirectGraphFinderTest.java +++ b/application/src/test/java/org/opentripplanner/routing/graphfinder/DirectGraphFinderTest.java @@ -9,11 +9,11 @@ import org.opentripplanner.TestOtpModel; import org.opentripplanner.routing.algorithm.GraphRoutingTest; import org.opentripplanner.street.model.vertex.TransitStopVertex; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; class DirectGraphFinderTest extends GraphRoutingTest { - private StopModel stopModel; + private SiteRepository siteRepository; private TransitStopVertex S1, S2, S3; @@ -29,7 +29,7 @@ public void build() { } } ); - stopModel = model.timetableRepository().getStopModel(); + siteRepository = model.timetableRepository().getSiteRepository(); } @Test @@ -37,7 +37,7 @@ void findClosestStops() { var ns1 = new NearbyStop(S1.getStop(), 0, null, null); var ns2 = new NearbyStop(S2.getStop(), 1112, null, null); - var subject = new DirectGraphFinder(stopModel::findRegularStops); + var subject = new DirectGraphFinder(siteRepository::findRegularStops); var coordinate = new Coordinate(19.000, 47.500); assertEquals(List.of(ns1), subject.findClosestStops(coordinate, 100)); diff --git a/application/src/test/java/org/opentripplanner/routing/linking/LinkStopToPlatformTest.java b/application/src/test/java/org/opentripplanner/routing/linking/LinkStopToPlatformTest.java index f0ddc08087e..e37ced70721 100644 --- a/application/src/test/java/org/opentripplanner/routing/linking/LinkStopToPlatformTest.java +++ b/application/src/test/java/org/opentripplanner/routing/linking/LinkStopToPlatformTest.java @@ -32,7 +32,7 @@ import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.site.RegularStop; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.opentripplanner.transit.service.TimetableRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,9 +45,9 @@ public class LinkStopToPlatformTest { private Graph prepareTest(Coordinate[] platform, int[] visible, Coordinate[] stops) { var deduplicator = new Deduplicator(); - var stopModel = new StopModel(); + var siteRepository = new SiteRepository(); Graph graph = new Graph(deduplicator); - var timetableRepository = new TimetableRepository(stopModel, deduplicator); + var timetableRepository = new TimetableRepository(siteRepository, deduplicator); ArrayList vertices = new ArrayList<>(); Coordinate[] closedGeom = new Coordinate[platform.length + 1]; @@ -107,7 +107,7 @@ private Graph prepareTest(Coordinate[] platform, int[] visible, Coordinate[] sto } timetableRepository.index(); - graph.index(timetableRepository.getStopModel()); + graph.index(timetableRepository.getSiteRepository()); for (RegularStop s : transitStops) { var v = TransitStopVertex.of().withStop(s).build(); diff --git a/application/src/test/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingTestGraphData.java b/application/src/test/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingTestGraphData.java index 7dee554efdd..03c4981f181 100644 --- a/application/src/test/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingTestGraphData.java +++ b/application/src/test/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingTestGraphData.java @@ -6,7 +6,7 @@ import org.opentripplanner.street.model.vertex.IntersectionVertex; import org.opentripplanner.street.model.vertex.VertexFactory; import org.opentripplanner.transit.model.framework.Deduplicator; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.opentripplanner.transit.service.TimetableRepository; public class VehicleParkingTestGraphData { @@ -19,9 +19,9 @@ public class VehicleParkingTestGraphData { public void initGraph() { var deduplicator = new Deduplicator(); - var stopModel = new StopModel(); + var siteRepository = new SiteRepository(); graph = new Graph(deduplicator); - timetableRepository = new TimetableRepository(stopModel, deduplicator); + timetableRepository = new TimetableRepository(siteRepository, deduplicator); graph.hasStreets = true; var factory = new VertexFactory(graph); diff --git a/application/src/test/java/org/opentripplanner/street/integration/BarrierRoutingTest.java b/application/src/test/java/org/opentripplanner/street/integration/BarrierRoutingTest.java index 60daef889b0..8092ab62bc3 100644 --- a/application/src/test/java/org/opentripplanner/street/integration/BarrierRoutingTest.java +++ b/application/src/test/java/org/opentripplanner/street/integration/BarrierRoutingTest.java @@ -45,7 +45,7 @@ public static void createGraph() { ResourceLoader.of(BarrierRoutingTest.class).file("herrenberg-barrier-gates.osm.pbf") ); graph = model.graph(); - graph.index(model.timetableRepository().getStopModel()); + graph.index(model.timetableRepository().getSiteRepository()); } /** diff --git a/application/src/test/java/org/opentripplanner/street/integration/BicycleRoutingTest.java b/application/src/test/java/org/opentripplanner/street/integration/BicycleRoutingTest.java index d5d6f7452db..60dc43aa3f9 100644 --- a/application/src/test/java/org/opentripplanner/street/integration/BicycleRoutingTest.java +++ b/application/src/test/java/org/opentripplanner/street/integration/BicycleRoutingTest.java @@ -35,7 +35,7 @@ public class BicycleRoutingTest { herrenbergGraph = model.graph(); model.timetableRepository().index(); - herrenbergGraph.index(model.timetableRepository().getStopModel()); + herrenbergGraph.index(model.timetableRepository().getSiteRepository()); } /** diff --git a/application/src/test/java/org/opentripplanner/street/integration/WalkRoutingTest.java b/application/src/test/java/org/opentripplanner/street/integration/WalkRoutingTest.java index 50ab7d5ea55..6f3f47ba6e6 100644 --- a/application/src/test/java/org/opentripplanner/street/integration/WalkRoutingTest.java +++ b/application/src/test/java/org/opentripplanner/street/integration/WalkRoutingTest.java @@ -30,7 +30,7 @@ class WalkRoutingTest { roundabout = model.graph(); model.timetableRepository().index(); - roundabout.index(model.timetableRepository().getStopModel()); + roundabout.index(model.timetableRepository().getSiteRepository()); } /** diff --git a/application/src/test/java/org/opentripplanner/transit/model/_data/PatternTestModel.java b/application/src/test/java/org/opentripplanner/transit/model/_data/PatternTestModel.java index 5b3883005de..e046ea42247 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/_data/PatternTestModel.java +++ b/application/src/test/java/org/opentripplanner/transit/model/_data/PatternTestModel.java @@ -9,7 +9,7 @@ import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.timetable.ScheduledTripTimes; import org.opentripplanner.transit.model.timetable.Trip; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; public class PatternTestModel { @@ -22,7 +22,7 @@ public class PatternTestModel { .withServiceId(SERVICE_ID) .build(); private static final TimetableRepositoryForTest MODEL = new TimetableRepositoryForTest( - StopModel.of() + SiteRepository.of() ); private static final RegularStop STOP_1 = MODEL.stop("1").build(); private static final StopPattern STOP_PATTERN = TimetableRepositoryForTest.stopPattern( diff --git a/application/src/test/java/org/opentripplanner/transit/model/_data/TimetableRepositoryForTest.java b/application/src/test/java/org/opentripplanner/transit/model/_data/TimetableRepositoryForTest.java index 1da4b5b06e0..7d7652b52e6 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/_data/TimetableRepositoryForTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/_data/TimetableRepositoryForTest.java @@ -38,17 +38,17 @@ import org.opentripplanner.transit.model.site.StopTransferPriority; import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.model.timetable.TripBuilder; -import org.opentripplanner.transit.service.StopModel; -import org.opentripplanner.transit.service.StopModelBuilder; +import org.opentripplanner.transit.service.SiteRepository; +import org.opentripplanner.transit.service.SiteRepositoryBuilder; /** * Test utility class to help construct valid transit model objects. *

    * TODO: This need cleanup - it has static factory methods. This is not safe, since * all objects created will be created in the same context. All stops are created - * withing the context of a StopModel, mixing more than one model in a test is sharing + * withing the context of a SiteRepository, mixing more than one model in a test is sharing * state between tests. For now, it is just the stop index - but we want to - * use this to encapsulate the StopModel completely. + * use this to encapsulate the SiteRepository completely. */ public class TimetableRepositoryForTest { @@ -89,14 +89,14 @@ public class TimetableRepositoryForTest { .withUrl("https:/www.otherfeedagency.com") .build(); - private final StopModelBuilder stopModelBuilder; + private final SiteRepositoryBuilder siteRepositoryBuilder; - public TimetableRepositoryForTest(StopModelBuilder stopModelBuilder) { - this.stopModelBuilder = stopModelBuilder; + public TimetableRepositoryForTest(SiteRepositoryBuilder siteRepositoryBuilder) { + this.siteRepositoryBuilder = siteRepositoryBuilder; } public static TimetableRepositoryForTest of() { - return new TimetableRepositoryForTest(StopModel.of()); + return new TimetableRepositoryForTest(SiteRepository.of()); } public static FeedScopedId id(String id) { @@ -137,15 +137,15 @@ public static TripBuilder trip(String feedId, String tripId) { return Trip.of(FeedScopedId.ofNullable(feedId, tripId)).withRoute(route("R" + tripId).build()); } - public StopModelBuilder stopModelBuilder() { - return stopModelBuilder; + public SiteRepositoryBuilder siteRepositoryBuilder() { + return siteRepositoryBuilder; } /** * Create a stop with all required fields set. */ public RegularStopBuilder stop(String idAndName) { - return stopModelBuilder + return siteRepositoryBuilder .regularStop(id(idAndName)) .withName(new NonLocalizedString(idAndName)) .withCode(idAndName) @@ -167,7 +167,7 @@ public StationBuilder station(String idAndName) { } public GroupStop groupStop(String idAndName, RegularStop... stops) { - var builder = stopModelBuilder + var builder = siteRepositoryBuilder .groupStop(id(idAndName)) .withName(new NonLocalizedString(idAndName)); @@ -177,7 +177,7 @@ public GroupStop groupStop(String idAndName, RegularStop... stops) { } public AreaStopBuilder areaStop(String idAndName) { - return stopModelBuilder + return siteRepositoryBuilder .areaStop(id(idAndName)) .withName(new NonLocalizedString(idAndName)) .withGeometry(ANY_POLYGON); diff --git a/application/src/test/java/org/opentripplanner/transit/model/site/AreaStopTest.java b/application/src/test/java/org/opentripplanner/transit/model/site/AreaStopTest.java index 542dcaadc36..cf68a51ae5a 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/site/AreaStopTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/site/AreaStopTest.java @@ -14,7 +14,7 @@ import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; class AreaStopTest { @@ -33,7 +33,7 @@ class AreaStopTest { private static final AreaStop subject = areaStopBuilder().withGeometry(GEOMETRY).build(); private static AreaStopBuilder areaStopBuilder() { - return StopModel + return SiteRepository .of() .areaStop(TimetableRepositoryForTest.id(ID)) .withName(NAME) diff --git a/application/src/test/java/org/opentripplanner/transit/model/site/GroupStopTest.java b/application/src/test/java/org/opentripplanner/transit/model/site/GroupStopTest.java index 654ec304792..06c7a7dff1c 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/site/GroupStopTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/site/GroupStopTest.java @@ -15,7 +15,7 @@ import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; class GroupStopTest { @@ -27,7 +27,7 @@ class GroupStopTest { private static final StopLocation STOP_LOCATION = TEST_MODEL .stop("1:stop", Coordinates.BERLIN.getX(), Coordinates.BERLIN.getY()) .build(); - private static final GroupStop subject = StopModel + private static final GroupStop subject = SiteRepository .of() .groupStop(TimetableRepositoryForTest.id(ID)) .withName(NAME) @@ -43,7 +43,7 @@ void testGroupStopGeometry() { .stop("2:stop", Coordinates.HAMBURG.getX(), Coordinates.HAMBURG.getY()) .build(); - GroupStop groupStop = StopModel + GroupStop groupStop = SiteRepository .of() .groupStop(TimetableRepositoryForTest.id(ID)) .withName(NAME) @@ -64,7 +64,7 @@ void testGroupStopEncompassingAreaGeometry() { .stop("1:stop", Coordinates.BERLIN.getX(), Coordinates.BERLIN.getY()) .build(); - GroupStop groupStop = StopModel + GroupStop groupStop = SiteRepository .of() .groupStop(TimetableRepositoryForTest.id(ID)) .withName(NAME) diff --git a/application/src/test/java/org/opentripplanner/transit/model/site/RegularStopTest.java b/application/src/test/java/org/opentripplanner/transit/model/site/RegularStopTest.java index 028a8b0b218..c2c50b24c9e 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/site/RegularStopTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/site/RegularStopTest.java @@ -15,7 +15,7 @@ import org.opentripplanner.transit.model.basic.Accessibility; import org.opentripplanner.transit.model.basic.SubMode; import org.opentripplanner.transit.model.basic.TransitMode; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; class RegularStopTest { @@ -35,7 +35,7 @@ class RegularStopTest { public static final ZoneId TIME_ZONE = ZoneId.of(TimetableRepositoryForTest.TIME_ZONE_ID); private static final String PLATFORM_CODE = "platformCode"; - private static final RegularStop subject = StopModel + private static final RegularStop subject = SiteRepository .of() .regularStop(TimetableRepositoryForTest.id(ID)) .withName(NAME) diff --git a/application/src/test/java/org/opentripplanner/transit/service/DefaultTransitServiceTest.java b/application/src/test/java/org/opentripplanner/transit/service/DefaultTransitServiceTest.java index ec95c91a3f7..1c0d2a03a0f 100644 --- a/application/src/test/java/org/opentripplanner/transit/service/DefaultTransitServiceTest.java +++ b/application/src/test/java/org/opentripplanner/transit/service/DefaultTransitServiceTest.java @@ -52,14 +52,14 @@ class DefaultTransitServiceTest { @BeforeAll static void setup() { - var stopModel = TEST_MODEL - .stopModelBuilder() + var siteRepository = TEST_MODEL + .siteRepositoryBuilder() .withRegularStop(STOP_A) .withRegularStop(STOP_B) .withStation(STATION) .build(); - var timetableRepository = new TimetableRepository(stopModel, new Deduplicator()); + var timetableRepository = new TimetableRepository(siteRepository, new Deduplicator()); timetableRepository.addTripPattern(RAIL_PATTERN.getId(), RAIL_PATTERN); timetableRepository.index(); diff --git a/application/src/test/java/org/opentripplanner/transit/service/StopModelMock.java b/application/src/test/java/org/opentripplanner/transit/service/SiteRepositoryMock.java similarity index 76% rename from application/src/test/java/org/opentripplanner/transit/service/StopModelMock.java rename to application/src/test/java/org/opentripplanner/transit/service/SiteRepositoryMock.java index 8677f7b9dec..34884664b6d 100644 --- a/application/src/test/java/org/opentripplanner/transit/service/StopModelMock.java +++ b/application/src/test/java/org/opentripplanner/transit/service/SiteRepositoryMock.java @@ -3,11 +3,11 @@ import java.util.List; import org.opentripplanner.transit.model.site.StopLocation; -public class StopModelMock extends StopModel { +public class SiteRepositoryMock extends SiteRepository { private final List stops; - public StopModelMock(List stops) { + public SiteRepositoryMock(List stops) { this.stops = stops; } diff --git a/application/src/test/java/org/opentripplanner/transit/service/StopModelTest.java b/application/src/test/java/org/opentripplanner/transit/service/SiteRepositoryTest.java similarity index 86% rename from application/src/test/java/org/opentripplanner/transit/service/StopModelTest.java rename to application/src/test/java/org/opentripplanner/transit/service/SiteRepositoryTest.java index aa98a85b0a7..8e7b4e6f78f 100644 --- a/application/src/test/java/org/opentripplanner/transit/service/StopModelTest.java +++ b/application/src/test/java/org/opentripplanner/transit/service/SiteRepositoryTest.java @@ -20,7 +20,7 @@ import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.Station; -class StopModelTest { +class SiteRepositoryTest { private static final WgsCoordinate COOR_A = new WgsCoordinate(60.0, 11.0); private static final WgsCoordinate COOR_B = new WgsCoordinate(62.0, 12.0); @@ -36,20 +36,20 @@ class StopModelTest { .build(); private static final String EXP_STATIONS = List.of(STATION).toString(); - private final StopModelBuilder stopModelBuilder = StopModel.of(); - private final RegularStop stop = stopModelBuilder + private final SiteRepositoryBuilder siteRepositoryBuilder = SiteRepository.of(); + private final RegularStop stop = siteRepositoryBuilder .regularStop(ID) .withCoordinate(COOR_A) .withName(NAME) .withParentStation(STATION) .build(); private final String expStops = List.of(stop).toString(); - private final AreaStop STOP_AREA = stopModelBuilder + private final AreaStop STOP_AREA = siteRepositoryBuilder .areaStop(ID) .withName(NAME) .withGeometry(GEOMETRY) .build(); - private final GroupStop stopGroup = stopModelBuilder.groupStop(ID).addLocation(stop).build(); + private final GroupStop stopGroup = siteRepositoryBuilder.groupStop(ID).addLocation(stop).build(); private final MultiModalStation mmStation = MultiModalStation .of(ID) .withName(NAME) @@ -67,7 +67,7 @@ class StopModelTest { @Test void testStop() { - var m = stopModelBuilder.withRegularStop(stop).build(); + var m = siteRepositoryBuilder.withRegularStop(stop).build(); assertEquals(stop, m.getRegularStop(ID)); assertEquals(stop, m.getStopLocation(ID)); assertEquals(expStops, m.listRegularStops().toString()); @@ -79,7 +79,7 @@ void testStop() { @Test void testAreaStop() { - var m = stopModelBuilder.withAreaStop(STOP_AREA).build(); + var m = siteRepositoryBuilder.withAreaStop(STOP_AREA).build(); assertEquals(STOP_AREA, m.getAreaStop(ID)); assertEquals(STOP_AREA, m.getStopLocation(ID)); assertEquals("[AreaStop{F:A Name}]", m.listAreaStops().toString()); @@ -91,7 +91,7 @@ void testAreaStop() { @Test void testStopGroup() { - var m = stopModelBuilder.withGroupStop(stopGroup).build(); + var m = siteRepositoryBuilder.withGroupStop(stopGroup).build(); assertEquals("[GroupStop{F:A}]", m.listGroupStops().toString()); assertEquals("[GroupStop{F:A}]", m.listStopLocations().toString()); assertEquals(stopGroup, m.stopByIndex(stopGroup.getIndex())); @@ -101,7 +101,7 @@ void testStopGroup() { @Test void testStations() { - var m = stopModelBuilder.withStation(STATION).build(); + var m = siteRepositoryBuilder.withStation(STATION).build(); assertEquals(STATION, m.getStationById(ID)); assertEquals(EXP_STATIONS, m.listStations().toString()); assertEquals(STATION, m.getStopLocationsGroup(ID)); @@ -113,7 +113,7 @@ void testStations() { @Test void testMultiModalStation() { - var m = stopModelBuilder.withMultiModalStation(mmStation).build(); + var m = siteRepositoryBuilder.withMultiModalStation(mmStation).build(); assertEquals(mmStation, m.getMultiModalStation(ID)); assertEquals(mmStation, m.getMultiModalStationForStation(STATION)); assertEquals(expMmStations, m.listMultiModalStations().toString()); @@ -126,7 +126,7 @@ void testMultiModalStation() { @Test void testGroupOfStations() { - var m = stopModelBuilder.withGroupOfStation(groupOfStations).build(); + var m = siteRepositoryBuilder.withGroupOfStation(groupOfStations).build(); assertEquals(expGroupOfStation, m.listGroupOfStations().toString()); assertEquals(groupOfStations, m.getStopLocationsGroup(ID)); assertEquals(expStops, m.findStopOrChildStops(ID).toString()); @@ -137,7 +137,7 @@ void testGroupOfStations() { @Test void testNullStopLocationId() { - var m = StopModel.of().build(); + var m = SiteRepository.of().build(); assertNull(m.getStopLocation(null)); } } diff --git a/application/src/test/java/org/opentripplanner/transit/service/TimetableRepositoryTest.java b/application/src/test/java/org/opentripplanner/transit/service/TimetableRepositoryTest.java index 04740f655e3..94af8e20a95 100644 --- a/application/src/test/java/org/opentripplanner/transit/service/TimetableRepositoryTest.java +++ b/application/src/test/java/org/opentripplanner/transit/service/TimetableRepositoryTest.java @@ -28,9 +28,9 @@ class TimetableRepositoryTest { void validateTimeZones() { // First GTFS bundle should be added successfully var deduplicator = new Deduplicator(); - var stopModel = new StopModel(); + var siteRepository = new SiteRepository(); var graph = new Graph(deduplicator); - var timetableRepository = new TimetableRepository(stopModel, deduplicator); + var timetableRepository = new TimetableRepository(siteRepository, deduplicator); ConstantsForTests.addGtfsToGraph( graph, timetableRepository, @@ -70,9 +70,9 @@ void validateTimeZones() { @Test void validateTimeZonesWithExplicitTimeZone() { var deduplicator = new Deduplicator(); - var stopModel = new StopModel(); + var siteRepository = new SiteRepository(); var graph = new Graph(deduplicator); - var timetableRepository = new TimetableRepository(stopModel, deduplicator); + var timetableRepository = new TimetableRepository(siteRepository, deduplicator); // Whit explicit time zone timetableRepository.initTimeZone(ZoneIds.CHICAGO); diff --git a/application/src/test/java/org/opentripplanner/transit/speed_test/SpeedTest.java b/application/src/test/java/org/opentripplanner/transit/speed_test/SpeedTest.java index 38fb11712b8..9e66b5b2ebc 100644 --- a/application/src/test/java/org/opentripplanner/transit/speed_test/SpeedTest.java +++ b/application/src/test/java/org/opentripplanner/transit/speed_test/SpeedTest.java @@ -274,7 +274,7 @@ private static LoadModel loadGraph(File baseDir, URI path) { TimetableRepository timetableRepository = serializedGraphObject.timetableRepository; timetableRepository.index(); - graph.index(timetableRepository.getStopModel()); + graph.index(timetableRepository.getSiteRepository()); return new LoadModel(graph, timetableRepository, serializedGraphObject.buildConfig); } diff --git a/application/src/test/java/org/opentripplanner/updater/siri/AddedTripBuilderTest.java b/application/src/test/java/org/opentripplanner/updater/siri/AddedTripBuilderTest.java index d5d8c9e8a74..5ce5b3a5784 100644 --- a/application/src/test/java/org/opentripplanner/updater/siri/AddedTripBuilderTest.java +++ b/application/src/test/java/org/opentripplanner/updater/siri/AddedTripBuilderTest.java @@ -33,7 +33,7 @@ import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.model.timetable.TripOnServiceDate; import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.transit.service.TransitEditorService; import org.opentripplanner.updater.siri.mapper.SiriTransportModeMapper; @@ -68,8 +68,8 @@ class AddedTripBuilderTest { private static final RegularStop STOP_B = MODEL_TEST.stop("B").build(); private static final RegularStop STOP_C = MODEL_TEST.stop("C").build(); private static final RegularStop STOP_D = MODEL_TEST.stop("D").build(); - private final StopModel STOP_MODEL = MODEL_TEST - .stopModelBuilder() + private final SiteRepository STOP_MODEL = MODEL_TEST + .siteRepositoryBuilder() .withRegularStop(STOP_A) .withRegularStop(STOP_B) .withRegularStop(STOP_C) diff --git a/application/src/test/java/org/opentripplanner/updater/siri/ModifiedTripBuilderTest.java b/application/src/test/java/org/opentripplanner/updater/siri/ModifiedTripBuilderTest.java index 17fee84cc56..ad3ed749fb9 100644 --- a/application/src/test/java/org/opentripplanner/updater/siri/ModifiedTripBuilderTest.java +++ b/application/src/test/java/org/opentripplanner/updater/siri/ModifiedTripBuilderTest.java @@ -31,7 +31,7 @@ import org.opentripplanner.transit.model.timetable.TripTimes; import org.opentripplanner.transit.model.timetable.TripTimesFactory; import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.updater.spi.UpdateError; import uk.org.siri.siri20.DepartureBoardingActivityEnumeration; @@ -119,8 +119,8 @@ class ModifiedTripBuilderTest { ); private static final LocalDate SERVICE_DATE = LocalDate.of(2023, 2, 17); - private final StopModel stopModel = TEST_MODEL - .stopModelBuilder() + private final SiteRepository siteRepository = TEST_MODEL + .siteRepositoryBuilder() .withRegularStop(STOP_A_1) .withRegularStop(STOP_A_2) .withRegularStop(STOP_B_1) @@ -128,7 +128,7 @@ class ModifiedTripBuilderTest { .withRegularStop(STOP_D) .build(); private final TimetableRepository timetableRepository = new TimetableRepository( - stopModel, + siteRepository, DEDUPLICATOR ); private EntityResolver entityResolver; diff --git a/application/src/test/java/org/opentripplanner/updater/siri/TimetableHelperTest.java b/application/src/test/java/org/opentripplanner/updater/siri/TimetableHelperTest.java index c89ef594fdc..daa8b2382bb 100644 --- a/application/src/test/java/org/opentripplanner/updater/siri/TimetableHelperTest.java +++ b/application/src/test/java/org/opentripplanner/updater/siri/TimetableHelperTest.java @@ -22,7 +22,7 @@ import org.opentripplanner.transit.model.timetable.RealTimeTripTimes; import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.model.timetable.TripTimesFactory; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; import uk.org.siri.siri20.OccupancyEnumeration; public class TimetableHelperTest { @@ -57,7 +57,7 @@ public void setUp() { .build(); var stopTime = new StopTime(); - RegularStop stop = StopModel + RegularStop stop = SiteRepository .of() .regularStop(SCOPED_STOP_ID) .withCoordinate(0.0, 0.0) diff --git a/application/src/test/java/org/opentripplanner/updater/trip/RealtimeTestConstants.java b/application/src/test/java/org/opentripplanner/updater/trip/RealtimeTestConstants.java index 489dfef8956..57603ad6893 100644 --- a/application/src/test/java/org/opentripplanner/updater/trip/RealtimeTestConstants.java +++ b/application/src/test/java/org/opentripplanner/updater/trip/RealtimeTestConstants.java @@ -10,7 +10,7 @@ import org.opentripplanner.transit.model.organization.Operator; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.Station; -import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.SiteRepository; public interface RealtimeTestConstants { LocalDate SERVICE_DATE = LocalDate.of(2024, 5, 8); @@ -35,8 +35,8 @@ public interface RealtimeTestConstants { RegularStop STOP_B2 = TEST_MODEL.stop("B2").withParentStation(STATION_B).build(); RegularStop STOP_C1 = TEST_MODEL.stop(STOP_C1_ID).withParentStation(STATION_C).build(); RegularStop STOP_D1 = TEST_MODEL.stop("D1").withParentStation(STATION_D).build(); - StopModel STOP_MODEL = TEST_MODEL - .stopModelBuilder() + SiteRepository STOP_MODEL = TEST_MODEL + .siteRepositoryBuilder() .withRegularStop(STOP_A1) .withRegularStop(STOP_B1) .withRegularStop(STOP_B2) diff --git a/application/src/test/java/org/opentripplanner/updater/trip/moduletests/addition/AddedTest.java b/application/src/test/java/org/opentripplanner/updater/trip/moduletests/addition/AddedTest.java index 77b54c0e962..3a3d7d5e130 100644 --- a/application/src/test/java/org/opentripplanner/updater/trip/moduletests/addition/AddedTest.java +++ b/application/src/test/java/org/opentripplanner/updater/trip/moduletests/addition/AddedTest.java @@ -132,7 +132,7 @@ private TripPattern assertAddedTrip(String tripId, RealtimeTestEnvironment env) assertNotNull(trip); assertNotNull(transitService.getPatternForTrip(trip)); - var stopA = env.timetableRepository.getStopModel().getRegularStop(STOP_A1.getId()); + var stopA = env.timetableRepository.getSiteRepository().getRegularStop(STOP_A1.getId()); // Get the trip pattern of the added trip which goes through stopA var patternsAtA = env.getTimetableSnapshot().getPatternsForStop(stopA); diff --git a/application/src/test/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingUpdaterTest.java b/application/src/test/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingUpdaterTest.java index f83680f8aff..44a37943d8b 100644 --- a/application/src/test/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingUpdaterTest.java +++ b/application/src/test/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingUpdaterTest.java @@ -49,7 +49,7 @@ public void setup() { when(dataSource.update()).thenReturn(true); timetableRepository.index(); - graph.index(timetableRepository.getStopModel()); + graph.index(timetableRepository.getSiteRepository()); var parameters = new VehicleParkingUpdaterParameters() { @Override From eb0c0eea44afa1fadf6026ef0f2ae8ea179ccf22 Mon Sep 17 00:00:00 2001 From: Henrik Abrahamsson Date: Wed, 16 Oct 2024 16:20:19 +0200 Subject: [PATCH 043/213] Address review comment --- application/src/test/java/org/opentripplanner/GtfsTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/src/test/java/org/opentripplanner/GtfsTest.java b/application/src/test/java/org/opentripplanner/GtfsTest.java index cdc75674947..4fd5a0c6d0b 100644 --- a/application/src/test/java/org/opentripplanner/GtfsTest.java +++ b/application/src/test/java/org/opentripplanner/GtfsTest.java @@ -1,5 +1,6 @@ package org.opentripplanner; +import static com.google.common.truth.Truth.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; @@ -7,7 +8,6 @@ import static org.opentripplanner.routing.api.request.StreetMode.WALK; import static org.opentripplanner.updater.trip.BackwardsDelayPropagationType.REQUIRED_NO_DATA; -import com.google.common.truth.Truth; import com.google.transit.realtime.GtfsRealtime.FeedEntity; import com.google.transit.realtime.GtfsRealtime.FeedMessage; import com.google.transit.realtime.GtfsRealtime.TripUpdate; @@ -179,7 +179,7 @@ public void validateLeg( assertEquals(1, leg.getStreetNotes().size()); assertEquals(alert, leg.getStreetNotes().iterator().next().note.toString()); } else { - Truth.assertThat(leg.getStreetNotes()).isEmpty(); + assertThat(leg.getStreetNotes()).isEmpty(); } } From 9235a79b625716a1d3842d44b90c3eb011b64d2d Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Wed, 16 Oct 2024 16:53:03 +0200 Subject: [PATCH 044/213] Fix merge conflict --- .../org/opentripplanner/model/TimetableSnapshotTest.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/application/src/test/java/org/opentripplanner/model/TimetableSnapshotTest.java b/application/src/test/java/org/opentripplanner/model/TimetableSnapshotTest.java index 252ca689cb7..4f3e12c1368 100644 --- a/application/src/test/java/org/opentripplanner/model/TimetableSnapshotTest.java +++ b/application/src/test/java/org/opentripplanner/model/TimetableSnapshotTest.java @@ -27,22 +27,16 @@ import org.opentripplanner.ConstantsForTests; import org.opentripplanner.TestOtpModel; import org.opentripplanner._support.time.ZoneIds; -import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.routing.algorithm.raptoradapter.transit.mappers.TransitLayerUpdater; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.framework.Result; -import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.model.timetable.TripIdAndServiceDate; import org.opentripplanner.transit.model.timetable.TripOnServiceDate; -import org.opentripplanner.transit.model.timetable.Trip; -import org.opentripplanner.transit.model.timetable.TripOnServiceDate; import org.opentripplanner.transit.model.timetable.TripTimes; import org.opentripplanner.transit.model.timetable.TripTimesFactory; -import org.opentripplanner.transit.service.TransitModel; -import org.opentripplanner.transit.model.timetable.TripTimesFactory; import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.updater.spi.UpdateError; import org.opentripplanner.updater.trip.BackwardsDelayPropagationType; From fef39516ce76575896caa0147d413bde86786e70 Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Wed, 16 Oct 2024 16:53:34 +0200 Subject: [PATCH 045/213] Apply review suggestions --- .../java/org/opentripplanner/model/TimetableSnapshot.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/model/TimetableSnapshot.java b/application/src/main/java/org/opentripplanner/model/TimetableSnapshot.java index 7895a99fae6..fa8bb2e55e0 100644 --- a/application/src/main/java/org/opentripplanner/model/TimetableSnapshot.java +++ b/application/src/main/java/org/opentripplanner/model/TimetableSnapshot.java @@ -406,7 +406,7 @@ public void clear(String feedId) { boolean newTripPatternsForModifiedTripsWereCleared = clearNewTripPatternsForModifiedTrips( feedId ); - boolean addedTripPatternsWereCleared = clearRealtimeAddedTripPatterns(feedId); + boolean addedTripPatternsWereCleared = clearEntriesForRealtimeAddedTrips(feedId); // If this snapshot was modified, it will be dirty after the clear actions. if ( timetablesWereCleared || @@ -572,7 +572,9 @@ private boolean clearNewTripPatternsForModifiedTrips(String feedId) { * Clear all realtime added routes, trip patterns and trips matching the provided feed id. * * */ - private boolean clearRealtimeAddedTripPatterns(String feedId) { + private boolean clearEntriesForRealtimeAddedTrips(String feedId) { + // it is sufficient to test for the removal of added trips, since other indexed entities are + // added only if a new trip is added. boolean removedEntry = realTimeAddedTrips .keySet() .removeIf(id -> feedId.equals(id.getFeedId())); From 2e9a65dd5a966339232194b26b013fa76ad6105a Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 16 Oct 2024 17:27:48 +0200 Subject: [PATCH 046/213] Add button to swap from/to in debug UI --- client/src/components/SearchBar/SearchBar.tsx | 2 ++ .../SearchBar/SwapLocationsButton.tsx | 22 +++++++++++++++++++ client/src/static/img/swap.svg | 5 +++++ client/src/style.css | 5 +++++ 4 files changed, 34 insertions(+) create mode 100644 client/src/components/SearchBar/SwapLocationsButton.tsx create mode 100644 client/src/static/img/swap.svg diff --git a/client/src/components/SearchBar/SearchBar.tsx b/client/src/components/SearchBar/SearchBar.tsx index 7b1ee58b902..73df12fe103 100644 --- a/client/src/components/SearchBar/SearchBar.tsx +++ b/client/src/components/SearchBar/SearchBar.tsx @@ -16,6 +16,7 @@ import { useRef, useState } from 'react'; import logo from '../../static/img/otp-logo.svg'; import GraphiQLRouteButton from './GraphiQLRouteButton.tsx'; import WheelchairAccessibleCheckBox from './WheelchairAccessibleCheckBox.tsx'; +import { SwapLocationsButton } from './SwapLocationsButton.tsx'; type SearchBarProps = { onRoute: () => void; @@ -38,6 +39,7 @@ export function SearchBar({ onRoute, tripQueryVariables, setTripQueryVariables, + diff --git a/client/src/components/SearchBar/SwapLocationsButton.tsx b/client/src/components/SearchBar/SwapLocationsButton.tsx new file mode 100644 index 00000000000..2c99314477d --- /dev/null +++ b/client/src/components/SearchBar/SwapLocationsButton.tsx @@ -0,0 +1,22 @@ +import { TripQueryVariables } from '../../gql/graphql.ts'; +import swapImg from '../../static/img/swap.svg'; + +const HINT = 'Swap from/to'; + +export function SwapLocationsButton({ + tripQueryVariables, + setTripQueryVariables, +}: { + tripQueryVariables: TripQueryVariables; + setTripQueryVariables: (tripQueryVariables: TripQueryVariables) => void; +}) { + const onChange = () => { + setTripQueryVariables({ + ...tripQueryVariables, + from: tripQueryVariables.to, + to: tripQueryVariables.from, + }); + }; + + return {HINT}; +} diff --git a/client/src/static/img/swap.svg b/client/src/static/img/swap.svg new file mode 100644 index 00000000000..858e5e99831 --- /dev/null +++ b/client/src/static/img/swap.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/client/src/style.css b/client/src/style.css index 86310fd857d..d8d0313c288 100644 --- a/client/src/style.css +++ b/client/src/style.css @@ -67,6 +67,11 @@ margin-top: -2px; } +.search-bar .swap-from-to { + width: 15px; + margin: 37px 0 auto 0; +} + .itinerary-list-container { width: 36rem; overflow-y: auto; From aa6713072c8a0a12ad9cfb8b2881f6fe55981bda Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 16 Oct 2024 17:43:15 +0200 Subject: [PATCH 047/213] Wrap in button to satisy linter --- client/src/components/SearchBar/SwapLocationsButton.tsx | 8 ++++++-- client/src/style.css | 7 ++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/client/src/components/SearchBar/SwapLocationsButton.tsx b/client/src/components/SearchBar/SwapLocationsButton.tsx index 2c99314477d..65385a162c2 100644 --- a/client/src/components/SearchBar/SwapLocationsButton.tsx +++ b/client/src/components/SearchBar/SwapLocationsButton.tsx @@ -10,7 +10,7 @@ export function SwapLocationsButton({ tripQueryVariables: TripQueryVariables; setTripQueryVariables: (tripQueryVariables: TripQueryVariables) => void; }) { - const onChange = () => { + const swapFromTo = () => { setTripQueryVariables({ ...tripQueryVariables, from: tripQueryVariables.to, @@ -18,5 +18,9 @@ export function SwapLocationsButton({ }); }; - return {HINT}; + return ( + + ); } diff --git a/client/src/style.css b/client/src/style.css index d8d0313c288..e5815d24c12 100644 --- a/client/src/style.css +++ b/client/src/style.css @@ -68,8 +68,13 @@ } .search-bar .swap-from-to { + border: none; + background: none; + margin: 30px 0 auto 0; +} + +.search-bar .swap-from-to img { width: 15px; - margin: 37px 0 auto 0; } .itinerary-list-container { From 70b97da678456b2b83a868a00449ad1eaaa76a84 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 17 Oct 2024 07:05:08 +0200 Subject: [PATCH 048/213] Apply review feedback --- client/src/components/SearchBar/SwapLocationsButton.tsx | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/client/src/components/SearchBar/SwapLocationsButton.tsx b/client/src/components/SearchBar/SwapLocationsButton.tsx index 65385a162c2..28d25f2fac7 100644 --- a/client/src/components/SearchBar/SwapLocationsButton.tsx +++ b/client/src/components/SearchBar/SwapLocationsButton.tsx @@ -1,7 +1,5 @@ import { TripQueryVariables } from '../../gql/graphql.ts'; -import swapImg from '../../static/img/swap.svg'; - -const HINT = 'Swap from/to'; +import icon from '../../static/img/swap.svg'; export function SwapLocationsButton({ tripQueryVariables, @@ -19,8 +17,8 @@ export function SwapLocationsButton({ }; return ( - ); } From b7f99c45a22fb869053b3b827ebef1368c9ef4ff Mon Sep 17 00:00:00 2001 From: OTP Bot Date: Thu, 17 Oct 2024 07:46:30 +0000 Subject: [PATCH 049/213] Upgrade debug client to version 2024/10/2024-10-17T07:45 --- application/src/client/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/src/client/index.html b/application/src/client/index.html index eb1eb394683..e463c510830 100644 --- a/application/src/client/index.html +++ b/application/src/client/index.html @@ -5,8 +5,8 @@ OTP Debug Client - - + +

    From a855a975ef15b34e2d7e93c637fd6064180485be Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 17 Oct 2024 08:39:01 +0000 Subject: [PATCH 050/213] Update Debug UI dependencies (non-major) --- client/package-lock.json | 1243 ++++++++++++++++---------------------- client/package.json | 26 +- 2 files changed, 532 insertions(+), 737 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index 4245121a10e..c66bb81c6fd 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -13,36 +13,36 @@ "bootstrap": "5.3.3", "graphql": "16.9.0", "graphql-request": "7.1.0", - "maplibre-gl": "4.7.0", + "maplibre-gl": "4.7.1", "react": "18.3.1", - "react-bootstrap": "2.10.4", + "react-bootstrap": "2.10.5", "react-dom": "18.3.1", "react-map-gl": "7.1.7" }, "devDependencies": { - "@graphql-codegen/cli": "5.0.2", + "@graphql-codegen/cli": "5.0.3", "@graphql-codegen/client-preset": "4.3.3", "@graphql-codegen/introspection": "4.0.3", "@parcel/watcher": "2.4.1", "@testing-library/react": "16.0.1", - "@types/react": "18.3.7", - "@types/react-dom": "18.3.0", + "@types/react": "18.3.11", + "@types/react-dom": "18.3.1", "@typescript-eslint/eslint-plugin": "7.18.0", "@typescript-eslint/parser": "7.18.0", - "@vitejs/plugin-react": "4.3.1", - "@vitest/coverage-v8": "2.1.1", + "@vitejs/plugin-react": "4.3.2", + "@vitest/coverage-v8": "2.1.3", "eslint": "8.57.1", "eslint-config-prettier": "9.1.0", - "eslint-plugin-import": "2.30.0", + "eslint-plugin-import": "2.31.0", "eslint-plugin-jsx-a11y": "6.10.0", - "eslint-plugin-react": "7.36.1", + "eslint-plugin-react": "7.37.1", "eslint-plugin-react-hooks": "5.0.0", "eslint-plugin-react-refresh": "0.4.12", - "jsdom": "25.0.0", + "jsdom": "25.0.1", "prettier": "3.3.3", - "typescript": "5.6.2", - "vite": "5.4.6", - "vitest": "2.1.1" + "typescript": "5.6.3", + "vite": "5.4.9", + "vitest": "2.1.3" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -215,13 +215,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.6.tgz", - "integrity": "sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", + "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.6", + "@babel/highlight": "^7.25.7", "picocolors": "^1.0.0" }, "engines": { @@ -229,9 +229,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.6.tgz", - "integrity": "sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.8.tgz", + "integrity": "sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==", "dev": true, "license": "MIT", "engines": { @@ -239,22 +239,22 @@ } }, "node_modules/@babel/core": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.6.tgz", - "integrity": "sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.8.tgz", + "integrity": "sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.6", - "@babel/generator": "^7.24.6", - "@babel/helper-compilation-targets": "^7.24.6", - "@babel/helper-module-transforms": "^7.24.6", - "@babel/helpers": "^7.24.6", - "@babel/parser": "^7.24.6", - "@babel/template": "^7.24.6", - "@babel/traverse": "^7.24.6", - "@babel/types": "^7.24.6", + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helpers": "^7.25.7", + "@babel/parser": "^7.25.8", + "@babel/template": "^7.25.7", + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.8", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -270,16 +270,16 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.6.tgz", - "integrity": "sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz", + "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.24.6", + "@babel/types": "^7.25.7", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" @@ -298,15 +298,15 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.6.tgz", - "integrity": "sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz", + "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.24.6", - "@babel/helper-validator-option": "^7.24.6", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -361,19 +361,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.6.tgz", - "integrity": "sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", @@ -387,30 +374,30 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.6.tgz", - "integrity": "sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz", + "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.24.6" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.6.tgz", - "integrity": "sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz", + "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-module-imports": "^7.24.6", - "@babel/helper-simple-access": "^7.24.6", - "@babel/helper-split-export-declaration": "^7.24.6", - "@babel/helper-validator-identifier": "^7.24.6" + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -432,9 +419,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.6.tgz", - "integrity": "sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz", + "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==", "dev": true, "license": "MIT", "engines": { @@ -459,13 +446,14 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.6.tgz", - "integrity": "sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz", + "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.24.6" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -497,9 +485,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.6.tgz", - "integrity": "sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz", + "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==", "dev": true, "license": "MIT", "engines": { @@ -507,9 +495,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz", - "integrity": "sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", + "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", "dev": true, "license": "MIT", "engines": { @@ -517,9 +505,9 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.6.tgz", - "integrity": "sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz", + "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==", "dev": true, "license": "MIT", "engines": { @@ -527,27 +515,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.6.tgz", - "integrity": "sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz", + "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.24.6", - "@babel/types": "^7.24.6" + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.6.tgz", - "integrity": "sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz", + "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.6", + "@babel/helper-validator-identifier": "^7.25.7", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -635,11 +623,14 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz", - "integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz", + "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.8" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -1028,13 +1019,13 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.6.tgz", - "integrity": "sha512-FfZfHXtQ5jYPQsCRyLpOv2GeLIIJhs8aydpNh39vRDjhD411XcfWDni5i7OjP/Rs8GAtTn7sWFFELJSHqkIxYg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.7.tgz", + "integrity": "sha512-JD9MUnLbPL0WdVK8AWC7F7tTG2OS6u/AKKnsK+NdRhUiVdnzyR1S3kKQCaRLOiaULvUiqK6Z4JQE635VgtCFeg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1044,12 +1035,13 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz", - "integrity": "sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.7.tgz", + "integrity": "sha512-S/JXG/KrbIY06iyJPKfxr0qRxnhNOdkNXYBl/rmwgDd72cQLH9tEGkDm/yJPGvcSIUoikzfjMios9i+xT/uv9w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1117,35 +1109,32 @@ } }, "node_modules/@babel/template": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.6.tgz", - "integrity": "sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", + "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.6", - "@babel/parser": "^7.24.6", - "@babel/types": "^7.24.6" + "@babel/code-frame": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.6.tgz", - "integrity": "sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", + "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.6", - "@babel/generator": "^7.24.6", - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-function-name": "^7.24.6", - "@babel/helper-hoist-variables": "^7.24.6", - "@babel/helper-split-export-declaration": "^7.24.6", - "@babel/parser": "^7.24.6", - "@babel/types": "^7.24.6", + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1154,14 +1143,14 @@ } }, "node_modules/@babel/types": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz", - "integrity": "sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz", + "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.6", - "@babel/helper-validator-identifier": "^7.24.6", + "@babel/helper-string-parser": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1805,15 +1794,16 @@ } }, "node_modules/@graphql-codegen/cli": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-5.0.2.tgz", - "integrity": "sha512-MBIaFqDiLKuO4ojN6xxG9/xL9wmfD3ZjZ7RsPjwQnSHBCUXnEkdKvX+JVpx87Pq29Ycn8wTJUguXnTZ7Di0Mlw==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-5.0.3.tgz", + "integrity": "sha512-ULpF6Sbu2d7vNEOgBtE9avQp2oMgcPY/QBYcCqk0Xru5fz+ISjcovQX29V7CS7y5wWBRzNLoXwJQGeEyWbl05g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/generator": "^7.18.13", "@babel/template": "^7.18.10", "@babel/types": "^7.18.13", - "@graphql-codegen/client-preset": "^4.2.2", + "@graphql-codegen/client-preset": "^4.4.0", "@graphql-codegen/core": "^4.0.2", "@graphql-codegen/plugin-helpers": "^5.0.3", "@graphql-tools/apollo-engine-loader": "^8.0.0", @@ -1826,12 +1816,12 @@ "@graphql-tools/prisma-loader": "^8.0.0", "@graphql-tools/url-loader": "^8.0.0", "@graphql-tools/utils": "^10.0.0", - "@whatwg-node/fetch": "^0.8.0", + "@whatwg-node/fetch": "^0.9.20", "chalk": "^4.1.0", "cosmiconfig": "^8.1.3", "debounce": "^1.2.0", "detect-indent": "^6.0.0", - "graphql-config": "^5.0.2", + "graphql-config": "^5.1.1", "inquirer": "^8.0.0", "is-glob": "^4.0.1", "jiti": "^1.17.1", @@ -1852,6 +1842,9 @@ "graphql-codegen": "cjs/bin.js", "graphql-codegen-esm": "esm/bin.js" }, + "engines": { + "node": ">=16" + }, "peerDependencies": { "@parcel/watcher": "^2.1.0", "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" @@ -1862,6 +1855,79 @@ } } }, + "node_modules/@graphql-codegen/cli/node_modules/@graphql-codegen/client-preset": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/client-preset/-/client-preset-4.4.0.tgz", + "integrity": "sha512-Q0NHFK7KXLhEaRC/k82ge0dHDfeHJEvvDeV0vV3+oSurHNa/lpxQtbK2BqknZe+JDfZ1YOOvYT93XsAkYD+SQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/template": "^7.20.7", + "@graphql-codegen/add": "^5.0.3", + "@graphql-codegen/gql-tag-operations": "4.0.10", + "@graphql-codegen/plugin-helpers": "^5.0.4", + "@graphql-codegen/typed-document-node": "^5.0.10", + "@graphql-codegen/typescript": "^4.1.0", + "@graphql-codegen/typescript-operations": "^4.3.0", + "@graphql-codegen/visitor-plugin-common": "^5.4.0", + "@graphql-tools/documents": "^1.0.0", + "@graphql-tools/utils": "^10.0.0", + "@graphql-typed-document-node/core": "3.2.0", + "tslib": "~2.6.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/cli/node_modules/@graphql-codegen/gql-tag-operations": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-4.0.10.tgz", + "integrity": "sha512-WsBEVL3XQdBboFJJL5WxrUjkuo3B7Sa51R9NbT7PKBe0HCNstoouGZIvQJRUubttFCqTTyoFtNsoRSKB+rsRug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-codegen/plugin-helpers": "^5.0.4", + "@graphql-codegen/visitor-plugin-common": "5.4.0", + "@graphql-tools/utils": "^10.0.0", + "auto-bind": "~4.0.0", + "tslib": "~2.6.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/cli/node_modules/@graphql-codegen/visitor-plugin-common": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.4.0.tgz", + "integrity": "sha512-tL7hOrO+4MiNfDiHewhRQCiH9GTAh0M9Y/BZxYGGEdnrfGgqK5pCxtjq7EY/L19VGIyU7hhzYTQ0r1HzEbB4Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-codegen/plugin-helpers": "^5.0.4", + "@graphql-tools/optimize": "^2.0.0", + "@graphql-tools/relay-operation-optimizer": "^7.0.0", + "@graphql-tools/utils": "^10.0.0", + "auto-bind": "~4.0.0", + "change-case-all": "1.0.15", + "dependency-graph": "^0.11.0", + "graphql-tag": "^2.11.0", + "parse-filepath": "^1.0.2", + "tslib": "~2.6.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, "node_modules/@graphql-codegen/client-preset": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/@graphql-codegen/client-preset/-/client-preset-4.3.3.tgz", @@ -1966,52 +2032,136 @@ } }, "node_modules/@graphql-codegen/typed-document-node": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typed-document-node/-/typed-document-node-5.0.9.tgz", - "integrity": "sha512-Wx6fyA4vpfIbfNTMiWUECGnjqzKkJdEbZHxVMIegiCBPzBYPAJV4mZZcildLAfm2FtZcgW4YKtFoTbnbXqPB3w==", + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typed-document-node/-/typed-document-node-5.0.10.tgz", + "integrity": "sha512-YPDUNs6x0muoVWlbY2yEs0lGxFHMTszlGDh6klT/5rqiTDTZg3zz8Wd1ZTihkcH8+V6T0AT9qDWwcx9fcS2tvQ==", "dev": true, "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.0.4", - "@graphql-codegen/visitor-plugin-common": "5.3.1", + "@graphql-codegen/visitor-plugin-common": "5.4.0", + "auto-bind": "~4.0.0", + "change-case-all": "1.0.15", + "tslib": "~2.6.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/typed-document-node/node_modules/@graphql-codegen/visitor-plugin-common": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.4.0.tgz", + "integrity": "sha512-tL7hOrO+4MiNfDiHewhRQCiH9GTAh0M9Y/BZxYGGEdnrfGgqK5pCxtjq7EY/L19VGIyU7hhzYTQ0r1HzEbB4Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-codegen/plugin-helpers": "^5.0.4", + "@graphql-tools/optimize": "^2.0.0", + "@graphql-tools/relay-operation-optimizer": "^7.0.0", + "@graphql-tools/utils": "^10.0.0", "auto-bind": "~4.0.0", "change-case-all": "1.0.15", + "dependency-graph": "^0.11.0", + "graphql-tag": "^2.11.0", + "parse-filepath": "^1.0.2", "tslib": "~2.6.0" }, + "engines": { + "node": ">=16" + }, "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, "node_modules/@graphql-codegen/typescript": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-4.0.9.tgz", - "integrity": "sha512-0O35DMR4d/ctuHL1Zo6mRUUzp0BoszKfeWsa6sCm/g70+S98+hEfTwZNDkQHylLxapiyjssF9uw/F+sXqejqLw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-4.1.0.tgz", + "integrity": "sha512-/fS53Nh6U6c58GTOxqfyKTLQfQv36P8II/vPw/fg0cdcWbALhRPls69P8vXUWjrElmLKzCrdusBWPp/r+AKUBQ==", "dev": true, "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.0.4", "@graphql-codegen/schema-ast": "^4.0.2", - "@graphql-codegen/visitor-plugin-common": "5.3.1", + "@graphql-codegen/visitor-plugin-common": "5.4.0", "auto-bind": "~4.0.0", "tslib": "~2.6.0" }, + "engines": { + "node": ">=16" + }, "peerDependencies": { "graphql": "^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, "node_modules/@graphql-codegen/typescript-operations": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-4.2.3.tgz", - "integrity": "sha512-6z7avSSOr03l5SyKbeDs7MzRyGwnQFSCqQm8Om5wIuoIgXVu2gXRmcJAY/I7SLdAy9xbF4Sho7XNqieFM2CAFQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-4.3.0.tgz", + "integrity": "sha512-ZORwMy8OgsiYd9EZUhTMd4/g5LvTFpx6Fh6dNN0cxFkqSc6KhjX0vhzWsyK8N9+ILaHSutT8UTrLMdJi35HzDQ==", "dev": true, "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.0.4", - "@graphql-codegen/typescript": "^4.0.9", - "@graphql-codegen/visitor-plugin-common": "5.3.1", + "@graphql-codegen/typescript": "^4.1.0", + "@graphql-codegen/visitor-plugin-common": "5.4.0", + "auto-bind": "~4.0.0", + "tslib": "~2.6.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/typescript-operations/node_modules/@graphql-codegen/visitor-plugin-common": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.4.0.tgz", + "integrity": "sha512-tL7hOrO+4MiNfDiHewhRQCiH9GTAh0M9Y/BZxYGGEdnrfGgqK5pCxtjq7EY/L19VGIyU7hhzYTQ0r1HzEbB4Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-codegen/plugin-helpers": "^5.0.4", + "@graphql-tools/optimize": "^2.0.0", + "@graphql-tools/relay-operation-optimizer": "^7.0.0", + "@graphql-tools/utils": "^10.0.0", "auto-bind": "~4.0.0", + "change-case-all": "1.0.15", + "dependency-graph": "^0.11.0", + "graphql-tag": "^2.11.0", + "parse-filepath": "^1.0.2", "tslib": "~2.6.0" }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/typescript/node_modules/@graphql-codegen/visitor-plugin-common": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.4.0.tgz", + "integrity": "sha512-tL7hOrO+4MiNfDiHewhRQCiH9GTAh0M9Y/BZxYGGEdnrfGgqK5pCxtjq7EY/L19VGIyU7hhzYTQ0r1HzEbB4Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-codegen/plugin-helpers": "^5.0.4", + "@graphql-tools/optimize": "^2.0.0", + "@graphql-tools/relay-operation-optimizer": "^7.0.0", + "@graphql-tools/utils": "^10.0.0", + "auto-bind": "~4.0.0", + "change-case-all": "1.0.15", + "dependency-graph": "^0.11.0", + "graphql-tag": "^2.11.0", + "parse-filepath": "^1.0.2", + "tslib": "~2.6.0" + }, + "engines": { + "node": ">=16" + }, "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } @@ -2056,50 +2206,6 @@ "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/apollo-engine-loader/node_modules/@whatwg-node/events": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.1.tgz", - "integrity": "sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==", - "dev": true, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@graphql-tools/apollo-engine-loader/node_modules/@whatwg-node/fetch": { - "version": "0.9.17", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.17.tgz", - "integrity": "sha512-TDYP3CpCrxwxpiNY0UMNf096H5Ihf67BK1iKGegQl5u9SlpEDYrvnV71gWBGJm+Xm31qOy8ATgma9rm8Pe7/5Q==", - "dev": true, - "dependencies": { - "@whatwg-node/node-fetch": "^0.5.7", - "urlpattern-polyfill": "^10.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@graphql-tools/apollo-engine-loader/node_modules/@whatwg-node/node-fetch": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.10.tgz", - "integrity": "sha512-KIAHepie/T1PRkUfze4t+bPlyvpxlWiXTPtcGlbIZ0vWkBJMdRmCg4ZrJ2y4XaO1eTPo1HlWYUuj1WvoIpumqg==", - "dev": true, - "dependencies": { - "@kamilkisiela/fast-url-parser": "^1.1.4", - "@whatwg-node/events": "^0.1.0", - "busboy": "^1.6.0", - "fast-querystring": "^1.1.1", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@graphql-tools/apollo-engine-loader/node_modules/urlpattern-polyfill": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", - "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", - "dev": true - }, "node_modules/@graphql-tools/batch-execute": { "version": "9.0.4", "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-9.0.4.tgz", @@ -2233,50 +2339,6 @@ "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/executor-http/node_modules/@whatwg-node/events": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.1.tgz", - "integrity": "sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==", - "dev": true, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@graphql-tools/executor-http/node_modules/@whatwg-node/fetch": { - "version": "0.9.17", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.17.tgz", - "integrity": "sha512-TDYP3CpCrxwxpiNY0UMNf096H5Ihf67BK1iKGegQl5u9SlpEDYrvnV71gWBGJm+Xm31qOy8ATgma9rm8Pe7/5Q==", - "dev": true, - "dependencies": { - "@whatwg-node/node-fetch": "^0.5.7", - "urlpattern-polyfill": "^10.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@graphql-tools/executor-http/node_modules/@whatwg-node/node-fetch": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.10.tgz", - "integrity": "sha512-KIAHepie/T1PRkUfze4t+bPlyvpxlWiXTPtcGlbIZ0vWkBJMdRmCg4ZrJ2y4XaO1eTPo1HlWYUuj1WvoIpumqg==", - "dev": true, - "dependencies": { - "@kamilkisiela/fast-url-parser": "^1.1.4", - "@whatwg-node/events": "^0.1.0", - "busboy": "^1.6.0", - "fast-querystring": "^1.1.1", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@graphql-tools/executor-http/node_modules/urlpattern-polyfill": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", - "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", - "dev": true - }, "node_modules/@graphql-tools/executor-legacy-ws": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-1.0.6.tgz", @@ -2337,50 +2399,6 @@ "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/github-loader/node_modules/@whatwg-node/events": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.1.tgz", - "integrity": "sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==", - "dev": true, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@graphql-tools/github-loader/node_modules/@whatwg-node/fetch": { - "version": "0.9.17", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.17.tgz", - "integrity": "sha512-TDYP3CpCrxwxpiNY0UMNf096H5Ihf67BK1iKGegQl5u9SlpEDYrvnV71gWBGJm+Xm31qOy8ATgma9rm8Pe7/5Q==", - "dev": true, - "dependencies": { - "@whatwg-node/node-fetch": "^0.5.7", - "urlpattern-polyfill": "^10.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@graphql-tools/github-loader/node_modules/@whatwg-node/node-fetch": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.10.tgz", - "integrity": "sha512-KIAHepie/T1PRkUfze4t+bPlyvpxlWiXTPtcGlbIZ0vWkBJMdRmCg4ZrJ2y4XaO1eTPo1HlWYUuj1WvoIpumqg==", - "dev": true, - "dependencies": { - "@kamilkisiela/fast-url-parser": "^1.1.4", - "@whatwg-node/events": "^0.1.0", - "busboy": "^1.6.0", - "fast-querystring": "^1.1.1", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@graphql-tools/github-loader/node_modules/urlpattern-polyfill": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", - "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", - "dev": true - }, "node_modules/@graphql-tools/graphql-file-loader": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-8.0.1.tgz", @@ -2519,60 +2537,22 @@ "chalk": "^4.1.0", "debug": "^4.3.1", "dotenv": "^16.0.0", - "graphql-request": "^6.0.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "jose": "^5.0.0", - "js-yaml": "^4.0.0", - "json-stable-stringify": "^1.0.1", - "lodash": "^4.17.20", - "scuid": "^1.1.0", - "tslib": "^2.4.0", - "yaml-ast-parser": "^0.0.43" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/prisma-loader/node_modules/@whatwg-node/events": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.1.tgz", - "integrity": "sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==", - "dev": true, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@graphql-tools/prisma-loader/node_modules/@whatwg-node/fetch": { - "version": "0.9.17", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.17.tgz", - "integrity": "sha512-TDYP3CpCrxwxpiNY0UMNf096H5Ihf67BK1iKGegQl5u9SlpEDYrvnV71gWBGJm+Xm31qOy8ATgma9rm8Pe7/5Q==", - "dev": true, - "dependencies": { - "@whatwg-node/node-fetch": "^0.5.7", - "urlpattern-polyfill": "^10.0.0" + "graphql-request": "^6.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "jose": "^5.0.0", + "js-yaml": "^4.0.0", + "json-stable-stringify": "^1.0.1", + "lodash": "^4.17.20", + "scuid": "^1.1.0", + "tslib": "^2.4.0", + "yaml-ast-parser": "^0.0.43" }, "engines": { "node": ">=16.0.0" - } - }, - "node_modules/@graphql-tools/prisma-loader/node_modules/@whatwg-node/node-fetch": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.10.tgz", - "integrity": "sha512-KIAHepie/T1PRkUfze4t+bPlyvpxlWiXTPtcGlbIZ0vWkBJMdRmCg4ZrJ2y4XaO1eTPo1HlWYUuj1WvoIpumqg==", - "dev": true, - "dependencies": { - "@kamilkisiela/fast-url-parser": "^1.1.4", - "@whatwg-node/events": "^0.1.0", - "busboy": "^1.6.0", - "fast-querystring": "^1.1.1", - "tslib": "^2.3.1" }, - "engines": { - "node": ">=16.0.0" + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@graphql-tools/prisma-loader/node_modules/graphql-request": { @@ -2589,12 +2569,6 @@ "graphql": "14 - 16" } }, - "node_modules/@graphql-tools/prisma-loader/node_modules/urlpattern-polyfill": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", - "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", - "dev": true - }, "node_modules/@graphql-tools/relay-operation-optimizer": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-7.0.1.tgz", @@ -2657,50 +2631,6 @@ "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/url-loader/node_modules/@whatwg-node/events": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.1.tgz", - "integrity": "sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==", - "dev": true, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@graphql-tools/url-loader/node_modules/@whatwg-node/fetch": { - "version": "0.9.17", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.17.tgz", - "integrity": "sha512-TDYP3CpCrxwxpiNY0UMNf096H5Ihf67BK1iKGegQl5u9SlpEDYrvnV71gWBGJm+Xm31qOy8ATgma9rm8Pe7/5Q==", - "dev": true, - "dependencies": { - "@whatwg-node/node-fetch": "^0.5.7", - "urlpattern-polyfill": "^10.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@graphql-tools/url-loader/node_modules/@whatwg-node/node-fetch": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.10.tgz", - "integrity": "sha512-KIAHepie/T1PRkUfze4t+bPlyvpxlWiXTPtcGlbIZ0vWkBJMdRmCg4ZrJ2y4XaO1eTPo1HlWYUuj1WvoIpumqg==", - "dev": true, - "dependencies": { - "@kamilkisiela/fast-url-parser": "^1.1.4", - "@whatwg-node/events": "^0.1.0", - "busboy": "^1.6.0", - "fast-querystring": "^1.1.1", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@graphql-tools/url-loader/node_modules/urlpattern-polyfill": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", - "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", - "dev": true - }, "node_modules/@graphql-tools/utils": { "version": "10.1.2", "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.1.2.tgz", @@ -2975,7 +2905,8 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/@kamilkisiela/fast-url-parser/-/fast-url-parser-1.1.4.tgz", "integrity": "sha512-gbkePEBupNydxCelHCESvFSFM8XPh1Zs/OAVRW/rKpEqPAl5PbOM90Si8mv9bvnR53uPD2s/FiRxdvSejpRJew==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@mapbox/geojson-rewind": { "version": "0.5.2", @@ -3436,45 +3367,6 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/@peculiar/asn1-schema": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.8.tgz", - "integrity": "sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA==", - "dev": true, - "dependencies": { - "asn1js": "^3.0.5", - "pvtsutils": "^1.3.5", - "tslib": "^2.6.2" - } - }, - "node_modules/@peculiar/json-schema": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", - "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", - "dev": true, - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@peculiar/webcrypto": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.4.5.tgz", - "integrity": "sha512-oDk93QCDGdxFRM8382Zdminzs44dg3M2+E5Np+JWkpqLDyJC9DviMh8F8mEJkYuUcUOGA5jHO5AJJ10MFWdbZw==", - "dev": true, - "dependencies": { - "@peculiar/asn1-schema": "^2.3.8", - "@peculiar/json-schema": "^1.1.12", - "pvtsutils": "^1.3.5", - "tslib": "^2.6.2", - "webcrypto-core": "^1.7.8" - }, - "engines": { - "node": ">=10.12.0" - } - }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -3970,9 +3862,9 @@ "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" }, "node_modules/@types/react": { - "version": "18.3.7", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.7.tgz", - "integrity": "sha512-KUnDCJF5+AiZd8owLIeVHqmW9yM4sqmDVf2JRJiBMFkGvkoZ4/WyV2lL4zVsoinmRS/W3FeEdZLEWFRofnT2FQ==", + "version": "18.3.11", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.11.tgz", + "integrity": "sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==", "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -3980,10 +3872,11 @@ } }, "node_modules/@types/react-dom": { - "version": "18.3.0", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", - "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/react": "*" } @@ -4231,15 +4124,15 @@ "dev": true }, "node_modules/@vitejs/plugin-react": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz", - "integrity": "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.2.tgz", + "integrity": "sha512-hieu+o05v4glEBucTcKMK3dlES0OeJlD9YVOAPraVMOInBCwzumaIFiUjr4bHK7NPgnAHgiskUoceKercrN8vg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.24.5", - "@babel/plugin-transform-react-jsx-self": "^7.24.5", - "@babel/plugin-transform-react-jsx-source": "^7.24.1", + "@babel/core": "^7.25.2", + "@babel/plugin-transform-react-jsx-self": "^7.24.7", + "@babel/plugin-transform-react-jsx-source": "^7.24.7", "@types/babel__core": "^7.20.5", "react-refresh": "^0.14.2" }, @@ -4251,9 +4144,9 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.1.tgz", - "integrity": "sha512-md/A7A3c42oTT8JUHSqjP5uKTWJejzUW4jalpvs+rZ27gsURsMU8DEb+8Jf8C6Kj2gwfSHJqobDNBuoqlm0cFw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.3.tgz", + "integrity": "sha512-2OJ3c7UPoFSmBZwqD2VEkUw6A/tzPF0LmW0ZZhhB8PFxuc+9IBG/FaSM+RLEenc7ljzFvGN+G0nGQoZnh7sy2A==", "dev": true, "license": "MIT", "dependencies": { @@ -4274,8 +4167,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "2.1.1", - "vitest": "2.1.1" + "@vitest/browser": "2.1.3", + "vitest": "2.1.3" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -4284,14 +4177,14 @@ } }, "node_modules/@vitest/expect": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.1.tgz", - "integrity": "sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.3.tgz", + "integrity": "sha512-SNBoPubeCJhZ48agjXruCI57DvxcsivVDdWz+SSsmjTT4QN/DfHk3zB/xKsJqMs26bLZ/pNRLnCf0j679i0uWQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.1.1", - "@vitest/utils": "2.1.1", + "@vitest/spy": "2.1.3", + "@vitest/utils": "2.1.3", "chai": "^5.1.1", "tinyrainbow": "^1.2.0" }, @@ -4300,13 +4193,13 @@ } }, "node_modules/@vitest/mocker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.1.tgz", - "integrity": "sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.3.tgz", + "integrity": "sha512-eSpdY/eJDuOvuTA3ASzCjdithHa+GIF1L4PqtEELl6Qa3XafdMLBpBlZCIUCX2J+Q6sNmjmxtosAG62fK4BlqQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "^2.1.0-beta.1", + "@vitest/spy": "2.1.3", "estree-walker": "^3.0.3", "magic-string": "^0.30.11" }, @@ -4314,7 +4207,7 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/spy": "2.1.1", + "@vitest/spy": "2.1.3", "msw": "^2.3.5", "vite": "^5.0.0" }, @@ -4328,9 +4221,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.1.tgz", - "integrity": "sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.3.tgz", + "integrity": "sha512-XH1XdtoLZCpqV59KRbPrIhFCOO0hErxrQCMcvnQete3Vibb9UeIOX02uFPfVn3Z9ZXsq78etlfyhnkmIZSzIwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4341,13 +4234,13 @@ } }, "node_modules/@vitest/runner": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.1.tgz", - "integrity": "sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.3.tgz", + "integrity": "sha512-JGzpWqmFJ4fq5ZKHtVO3Xuy1iF2rHGV4d/pdzgkYHm1+gOzNZtqjvyiaDGJytRyMU54qkxpNzCx+PErzJ1/JqQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "2.1.1", + "@vitest/utils": "2.1.3", "pathe": "^1.1.2" }, "funding": { @@ -4355,13 +4248,13 @@ } }, "node_modules/@vitest/snapshot": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.1.tgz", - "integrity": "sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.3.tgz", + "integrity": "sha512-qWC2mWc7VAXmjAkEKxrScWHWFyCQx/cmiZtuGqMi+WwqQJ2iURsVY4ZfAK6dVo6K2smKRU6l3BPwqEBvhnpQGg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.1", + "@vitest/pretty-format": "2.1.3", "magic-string": "^0.30.11", "pathe": "^1.1.2" }, @@ -4370,9 +4263,9 @@ } }, "node_modules/@vitest/spy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.1.tgz", - "integrity": "sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.3.tgz", + "integrity": "sha512-Nb2UzbcUswzeSP7JksMDaqsI43Sj5+Kry6ry6jQJT4b5gAK+NS9NED6mDb8FlMRCX8m5guaHCDZmqYMMWRy5nQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4383,13 +4276,13 @@ } }, "node_modules/@vitest/utils": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.1.tgz", - "integrity": "sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.3.tgz", + "integrity": "sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.1", + "@vitest/pretty-format": "2.1.3", "loupe": "^3.1.1", "tinyrainbow": "^1.2.0" }, @@ -4397,38 +4290,43 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/@whatwg-node/events": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.0.3.tgz", - "integrity": "sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA==", - "dev": true - }, "node_modules/@whatwg-node/fetch": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.8.8.tgz", - "integrity": "sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg==", + "version": "0.9.21", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.21.tgz", + "integrity": "sha512-Wt0jPb+04JjobK0pAAN7mEHxVHcGA9HoP3OyCsZtyAecNQeADXCZ1MihFwVwjsgaRYuGVmNlsCmLxlG6mor8Gw==", "dev": true, + "license": "MIT", "dependencies": { - "@peculiar/webcrypto": "^1.4.0", - "@whatwg-node/node-fetch": "^0.3.6", - "busboy": "^1.6.0", - "urlpattern-polyfill": "^8.0.0", - "web-streams-polyfill": "^3.2.1" + "@whatwg-node/node-fetch": "^0.5.23", + "urlpattern-polyfill": "^10.0.0" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@whatwg-node/node-fetch": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.3.6.tgz", - "integrity": "sha512-w9wKgDO4C95qnXZRwZTfCmLWqyRnooGjcIwG0wADWjw9/HN0p7dtvtgSvItZtUyNteEvgTrd8QojNEqV6DAGTA==", + "version": "0.5.26", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.26.tgz", + "integrity": "sha512-4jXDeZ4IH4bylZ6wu14VEx0aDXXhrN4TC279v9rPmn08g4EYekcYf8wdcOOnS9STjDkb6x77/6xBUTqxGgjr8g==", "dev": true, + "license": "MIT", "dependencies": { - "@whatwg-node/events": "^0.0.3", + "@kamilkisiela/fast-url-parser": "^1.1.4", "busboy": "^1.6.0", "fast-querystring": "^1.1.1", - "fast-url-parser": "^1.1.3", - "tslib": "^2.3.1" + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" } }, + "node_modules/@whatwg-node/node-fetch/node_modules/tslib": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", + "dev": true, + "license": "0BSD" + }, "node_modules/acorn": { "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", @@ -4732,20 +4630,6 @@ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "dev": true }, - "node_modules/asn1js": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz", - "integrity": "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==", - "dev": true, - "dependencies": { - "pvtsutils": "^1.3.2", - "pvutils": "^1.1.3", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/assertion-error": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", @@ -4954,9 +4838,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", "dev": true, "funding": [ { @@ -4972,11 +4856,12 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" }, "bin": { "browserslist": "cli.js" @@ -5104,9 +4989,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001600", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz", - "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==", + "version": "1.0.30001669", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001669.tgz", + "integrity": "sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==", "dev": true, "funding": [ { @@ -5121,7 +5006,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/capital-case": { "version": "1.0.4", @@ -5454,12 +5340,13 @@ } }, "node_modules/cssstyle": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", - "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz", + "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==", "dev": true, + "license": "MIT", "dependencies": { - "rrweb-cssom": "^0.6.0" + "rrweb-cssom": "^0.7.1" }, "engines": { "node": ">=18" @@ -5833,10 +5720,11 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.4.717", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.717.tgz", - "integrity": "sha512-6Fmg8QkkumNOwuZ/5mIbMU9WI3H2fmn5ajcVya64I5Yr5CcNmO7vcLt0Y7c96DCiMO5/9G+4sI2r6eEvdg1F7A==", - "dev": true + "version": "1.5.40", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.40.tgz", + "integrity": "sha512-LYm78o6if4zTasnYclgQzxEcgMoIcybWOhkATWepN95uwVVWV0/IW10v+2sIeHE+bIYWipLneTftVyQm45UY7g==", + "dev": true, + "license": "ISC" }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -6086,10 +5974,11 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -6195,9 +6084,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.9.0.tgz", - "integrity": "sha512-McVbYmwA3NEKwRQY5g4aWMdcZE5xZxV8i8l7CqJSrameuGSQJtSWaL/LxTEzSKKaCcOhlpDR8XEfYXWPrdo/ZQ==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "license": "MIT", "dependencies": { @@ -6222,9 +6111,9 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz", - "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "license": "MIT", "dependencies": { @@ -6236,7 +6125,7 @@ "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.9.0", + "eslint-module-utils": "^2.12.0", "hasown": "^2.0.2", "is-core-module": "^2.15.1", "is-glob": "^4.0.3", @@ -6245,13 +6134,14 @@ "object.groupby": "^1.0.3", "object.values": "^1.2.0", "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "node_modules/eslint-plugin-import/node_modules/brace-expansion": { @@ -6367,9 +6257,9 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.36.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.36.1.tgz", - "integrity": "sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==", + "version": "7.37.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.1.tgz", + "integrity": "sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg==", "dev": true, "license": "MIT", "dependencies": { @@ -6668,7 +6558,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "3.1.3", @@ -6721,19 +6612,11 @@ "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", "dev": true, + "license": "MIT", "dependencies": { "fast-decode-uri-component": "^1.0.1" } }, - "node_modules/fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", - "dev": true, - "dependencies": { - "punycode": "^1.3.2" - } - }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -7224,10 +7107,11 @@ } }, "node_modules/graphql-config": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-5.0.3.tgz", - "integrity": "sha512-BNGZaoxIBkv9yy6Y7omvsaBUHOzfFcII3UN++tpH8MGOKFPFkCPZuwx09ggANMt8FgyWP1Od8SWPmrUEZca4NQ==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-5.1.3.tgz", + "integrity": "sha512-RBhejsPjrNSuwtckRlilWzLVt2j8itl74W9Gke1KejDTz7oaA5kVd6wRn9zK9TS5mcmIYGxf7zN7a1ORMdxp1Q==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-tools/graphql-file-loader": "^8.0.0", "@graphql-tools/json-file-loader": "^8.0.0", @@ -7236,8 +7120,8 @@ "@graphql-tools/url-loader": "^8.0.0", "@graphql-tools/utils": "^10.0.0", "cosmiconfig": "^8.1.0", - "jiti": "^1.18.2", - "minimatch": "^4.2.3", + "jiti": "^2.0.0", + "minimatch": "^9.0.5", "string-env-interpolation": "^1.0.1", "tslib": "^2.4.0" }, @@ -7254,26 +7138,14 @@ } } }, - "node_modules/graphql-config/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/graphql-config/node_modules/minimatch": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.3.tgz", - "integrity": "sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng==", + "node_modules/graphql-config/node_modules/jiti": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.3.3.tgz", + "integrity": "sha512-EX4oNDwcXSivPrw2qKH2LB5PoFxEvgtv2JgwW0bU858HoLQ+kutSvjLMUqBd0PeJYEinLWhoI9Ol0eYMqj/wNQ==", "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": ">=10" + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" } }, "node_modules/graphql-request": { @@ -8289,13 +8161,13 @@ "integrity": "sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==" }, "node_modules/jsdom": { - "version": "25.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.0.tgz", - "integrity": "sha512-OhoFVT59T7aEq75TVw9xxEfkXgacpqAhQaYgP9y/fDqWQCMB/b1H66RfmPm/MaeaAIU9nDwMOVTlPN51+ao6CQ==", + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz", + "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==", "dev": true, "license": "MIT", "dependencies": { - "cssstyle": "^4.0.1", + "cssstyle": "^4.1.0", "data-urls": "^5.0.0", "decimal.js": "^10.4.3", "form-data": "^4.0.0", @@ -8308,7 +8180,7 @@ "rrweb-cssom": "^0.7.1", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.4", + "tough-cookie": "^5.0.0", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", "whatwg-encoding": "^3.1.1", @@ -8329,23 +8201,17 @@ } } }, - "node_modules/jsdom/node_modules/rrweb-cssom": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", - "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", - "dev": true, - "license": "MIT" - }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-buffer": { @@ -8787,9 +8653,9 @@ } }, "node_modules/maplibre-gl": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.7.0.tgz", - "integrity": "sha512-hkt7je7NxiMQE8EpCxLWP8t6tkK6SkrMe0hIBjYd4Ar/Q7BOCILxthGmGnU993Mwmkvs2mGiXnVUSOK12DeCzg==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.7.1.tgz", + "integrity": "sha512-lgL7XpIwsgICiL82ITplfS7IGwrB1OJIw/pCvprDp2dhmSSEBgmPzYRvwYYYvJGJD7fxUv1Tvpih4nZ6VrLuaA==", "license": "BSD-3-Clause", "dependencies": { "@mapbox/geojson-rewind": "^0.5.2", @@ -9046,10 +8912,11 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" }, "node_modules/normalize-path": { "version": "2.1.1", @@ -9697,42 +9564,6 @@ "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, - "node_modules/pvtsutils": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.5.tgz", - "integrity": "sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==", - "dev": true, - "dependencies": { - "tslib": "^2.6.1" - } - }, - "node_modules/pvutils": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", - "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -9770,9 +9601,9 @@ } }, "node_modules/react-bootstrap": { - "version": "2.10.4", - "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.4.tgz", - "integrity": "sha512-W3398nBM2CBfmGP2evneEO3ZZwEMPtHs72q++eNw60uDGDAdiGn0f9yNys91eo7/y8CTF5Ke1C0QO8JFVPU40Q==", + "version": "2.10.5", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.5.tgz", + "integrity": "sha512-XueAOEn64RRkZ0s6yzUTdpFtdUXs5L5491QU//8ZcODKJNDLt/r01tNyriZccjgRImH1REynUc9pqjiRMpDLWQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.24.7", @@ -10014,12 +9845,6 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -10135,10 +9960,11 @@ } }, "node_modules/rrweb-cssom": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", - "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", - "dev": true + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", + "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", + "dev": true, + "license": "MIT" }, "node_modules/run-async": { "version": "2.4.1", @@ -10967,6 +10793,26 @@ "tslib": "^2.0.3" } }, + "node_modules/tldts": { + "version": "6.1.52", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.52.tgz", + "integrity": "sha512-fgrDJXDjbAverY6XnIt0lNfv8A0cf7maTEaZxNykLGsLG7XP+5xhjBTrt/ieAsFjAlZ+G5nmXomLcZDkxXnDzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.52" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.52", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.52.tgz", + "integrity": "sha512-j4OxQI5rc1Ve/4m/9o2WhWSC4jGc4uVbCINdOEJRAraCi0YqTqgMcxUx7DbmuP0G3PCixoof/RZB0Q5Kh9tagw==", + "dev": true, + "license": "MIT" + }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -11001,28 +10847,16 @@ } }, "node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", + "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "tldts": "^6.1.32" }, "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" + "node": ">=16" } }, "node_modules/tr46": { @@ -11197,9 +11031,9 @@ } }, "node_modules/typescript": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", - "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -11304,15 +11138,6 @@ "node": ">=0.10.0" } }, - "node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/unixify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", @@ -11326,9 +11151,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "dev": true, "funding": [ { @@ -11344,9 +11169,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, "bin": { "update-browserslist-db": "cli.js" @@ -11391,21 +11217,12 @@ "node": ">=6" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/urlpattern-polyfill": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz", - "integrity": "sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==", - "dev": true + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", + "dev": true, + "license": "MIT" }, "node_modules/util-deprecate": { "version": "1.0.2", @@ -11423,9 +11240,9 @@ } }, "node_modules/vite": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.6.tgz", - "integrity": "sha512-IeL5f8OO5nylsgzd9tq4qD2QqI0k2CQLGrWD0rCN0EQJZpBK5vJAx0I+GDkMOXxQX/OfFHMuLIx6ddAxGX/k+Q==", + "version": "5.4.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.9.tgz", + "integrity": "sha512-20OVpJHh0PAM0oSOELa5GaZNWeDjcAvQjGXy2Uyr+Tp+/D2/Hdz6NLgpJLsarPTA2QJ6v8mX2P1ZfbsSKvdMkg==", "dev": true, "license": "MIT", "dependencies": { @@ -11483,9 +11300,9 @@ } }, "node_modules/vite-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.1.tgz", - "integrity": "sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.3.tgz", + "integrity": "sha512-I1JadzO+xYX887S39Do+paRePCKoiDrWRRjp9kkG5he0t7RXNvPAJPCQSJqbGN4uCrFFeS3Kj3sLqY8NMYBEdA==", "dev": true, "license": "MIT", "dependencies": { @@ -11505,19 +11322,19 @@ } }, "node_modules/vitest": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.1.tgz", - "integrity": "sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.3.tgz", + "integrity": "sha512-Zrxbg/WiIvUP2uEzelDNTXmEMJXuzJ1kCpbDvaKByFA9MNeO95V+7r/3ti0qzJzrxdyuUw5VduN7k+D3VmVOSA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "2.1.1", - "@vitest/mocker": "2.1.1", - "@vitest/pretty-format": "^2.1.1", - "@vitest/runner": "2.1.1", - "@vitest/snapshot": "2.1.1", - "@vitest/spy": "2.1.1", - "@vitest/utils": "2.1.1", + "@vitest/expect": "2.1.3", + "@vitest/mocker": "2.1.3", + "@vitest/pretty-format": "^2.1.3", + "@vitest/runner": "2.1.3", + "@vitest/snapshot": "2.1.3", + "@vitest/spy": "2.1.3", + "@vitest/utils": "2.1.3", "chai": "^5.1.1", "debug": "^4.3.6", "magic-string": "^0.30.11", @@ -11528,7 +11345,7 @@ "tinypool": "^1.0.0", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "2.1.1", + "vite-node": "2.1.3", "why-is-node-running": "^2.3.0" }, "bin": { @@ -11543,8 +11360,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.1.1", - "@vitest/ui": "2.1.1", + "@vitest/browser": "2.1.3", + "@vitest/ui": "2.1.3", "happy-dom": "*", "jsdom": "*" }, @@ -11608,28 +11425,6 @@ "defaults": "^1.0.3" } }, - "node_modules/web-streams-polyfill": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/webcrypto-core": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.7.8.tgz", - "integrity": "sha512-eBR98r9nQXTqXt/yDRtInszPMjTaSAMJAFDg2AHsgrnczawT1asx9YNBX6k5p+MekbPF4+s/UJJrr88zsTqkSg==", - "dev": true, - "dependencies": { - "@peculiar/asn1-schema": "^2.3.8", - "@peculiar/json-schema": "^1.1.12", - "asn1js": "^3.0.1", - "pvtsutils": "^1.3.5", - "tslib": "^2.6.2" - } - }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", diff --git a/client/package.json b/client/package.json index ff555a85f9b..8f133b3d4b0 100644 --- a/client/package.json +++ b/client/package.json @@ -22,35 +22,35 @@ "bootstrap": "5.3.3", "graphql": "16.9.0", "graphql-request": "7.1.0", - "maplibre-gl": "4.7.0", + "maplibre-gl": "4.7.1", "react": "18.3.1", - "react-bootstrap": "2.10.4", + "react-bootstrap": "2.10.5", "react-dom": "18.3.1", "react-map-gl": "7.1.7" }, "devDependencies": { - "@graphql-codegen/cli": "5.0.2", + "@graphql-codegen/cli": "5.0.3", "@graphql-codegen/client-preset": "4.3.3", "@graphql-codegen/introspection": "4.0.3", "@parcel/watcher": "2.4.1", "@testing-library/react": "16.0.1", - "@types/react": "18.3.7", - "@types/react-dom": "18.3.0", + "@types/react": "18.3.11", + "@types/react-dom": "18.3.1", "@typescript-eslint/eslint-plugin": "7.18.0", "@typescript-eslint/parser": "7.18.0", - "@vitejs/plugin-react": "4.3.1", - "@vitest/coverage-v8": "2.1.1", + "@vitejs/plugin-react": "4.3.2", + "@vitest/coverage-v8": "2.1.3", "eslint": "8.57.1", "eslint-config-prettier": "9.1.0", - "eslint-plugin-import": "2.30.0", + "eslint-plugin-import": "2.31.0", "eslint-plugin-jsx-a11y": "6.10.0", - "eslint-plugin-react": "7.36.1", + "eslint-plugin-react": "7.37.1", "eslint-plugin-react-hooks": "5.0.0", "eslint-plugin-react-refresh": "0.4.12", - "jsdom": "25.0.0", + "jsdom": "25.0.1", "prettier": "3.3.3", - "typescript": "5.6.2", - "vite": "5.4.6", - "vitest": "2.1.1" + "typescript": "5.6.3", + "vite": "5.4.9", + "vitest": "2.1.3" } } From 9958ffc98ca2a7877610d81611fdfe3471d6f3c9 Mon Sep 17 00:00:00 2001 From: Ville Pihlava Date: Thu, 17 Oct 2024 12:18:23 +0300 Subject: [PATCH 051/213] Rename transitModel to timetableRepository. --- .../graph_builder/module/StreetLinkerModule.java | 10 ++++++---- .../graph_builder/module/StreetLinkerModuleTest.java | 10 +++++----- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java b/application/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java index a0f37c392ce..dce445d381a 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java @@ -89,10 +89,10 @@ public void linkTransitStops(Graph graph, TimetableRepository timetableRepositor Set stopLocationsUsedForFlexTrips = Set.of(); if (OTPFeature.FlexRouting.isOn()) { - stopLocationsUsedForFlexTrips = getStopLocationsUsedForFlexTrips(transitModel); + stopLocationsUsedForFlexTrips = getStopLocationsUsedForFlexTrips(timetableRepository); } - Set stopLocationsUsedForCarsAllowedTrips = transitModel.getStopLocationsUsedForCarsAllowedTrips(); + Set stopLocationsUsedForCarsAllowedTrips = timetableRepository.getStopLocationsUsedForCarsAllowedTrips(); for (TransitStopVertex tStop : vertices) { // Stops with pathways do not need to be connected to the street network, since there are explicit entrances defined for that @@ -357,8 +357,10 @@ private VehicleParking removeVehicleParkingEntranceVertexFromGraph( } } - private Set getStopLocationsUsedForFlexTrips(TransitModel transitModel) { - Set stopLocations = transitModel + private Set getStopLocationsUsedForFlexTrips( + TimetableRepository timetableRepository + ) { + Set stopLocations = timetableRepository .getAllFlexTrips() .stream() .flatMap(t -> t.getStops().stream()) diff --git a/application/src/test/java/org/opentripplanner/graph_builder/module/StreetLinkerModuleTest.java b/application/src/test/java/org/opentripplanner/graph_builder/module/StreetLinkerModuleTest.java index 359ed3e938f..3973a7e506a 100644 --- a/application/src/test/java/org/opentripplanner/graph_builder/module/StreetLinkerModuleTest.java +++ b/application/src/test/java/org/opentripplanner/graph_builder/module/StreetLinkerModuleTest.java @@ -105,7 +105,7 @@ void linkFlexStop() { @Test void linkCarsAllowedStop() { var model = new TestModel(); - var carsAllowedTrip = TransitModelForTest + var carsAllowedTrip = TimetableRepositoryForTest .of() .trip("carsAllowedTrip") .withCarsAllowed(CarAccess.ALLOWED) @@ -198,7 +198,7 @@ public void withFlexTrip(UnscheduledTrip flexTrip) { } public void withCarsAllowedTrip(Trip trip, StopLocation... stops) { - Route route = TransitModelForTest.route("carsAllowedRoute").build(); + Route route = TimetableRepositoryForTest.route("carsAllowedRoute").build(); var stopTimes = Arrays .stream(stops) .map(s -> { @@ -214,15 +214,15 @@ public void withCarsAllowedTrip(Trip trip, StopLocation... stops) { RealTimeTripTimes tripTimes = TripTimesFactory.tripTimes( trip, stopTimes, - transitModel.getDeduplicator() + timetableRepository.getDeduplicator() ); - TripPattern tripPattern = TransitModelForTest + TripPattern tripPattern = TimetableRepositoryForTest .tripPattern("carsAllowedTripPattern", route) .withStopPattern(stopPattern) .withScheduledTimeTableBuilder(builder -> builder.addTripTimes(tripTimes)) .build(); - transitModel.addTripPattern(tripPattern.getId(), tripPattern); + timetableRepository.addTripPattern(tripPattern.getId(), tripPattern); } } } From bd9a4bcc0907d470ad8ac647eb6b489b8a5c9166 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Mon, 30 Sep 2024 13:59:19 +0100 Subject: [PATCH 052/213] add missing transit modes in InputModeWeight --- .../org/opentripplanner/apis/gtfs/schema.graphqls | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/application/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/application/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index 839fd3c6d61..00eb1eac565 100644 --- a/application/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/application/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -3838,18 +3838,28 @@ input InputModeWeight { BUS: Float "The weight of CABLE_CAR traverse mode. Values over 1 add cost to cable car travel and values under 1 decrease cost" CABLE_CAR: Float + "The weight of CARPOOL traverse mode. Values over 1 add cost to carpool travel and values under 1 decrease cost" + CARPOOL: Float + "The weight of COACH traverse mode. Values over 1 add cost to coach travel and values under 1 decrease cost" + COACH: Float "The weight of FERRY traverse mode. Values over 1 add cost to ferry travel and values under 1 decrease cost" FERRY: Float "The weight of FUNICULAR traverse mode. Values over 1 add cost to funicular travel and values under 1 decrease cost" FUNICULAR: Float "The weight of GONDOLA traverse mode. Values over 1 add cost to gondola travel and values under 1 decrease cost" GONDOLA: Float + "The weight of MONORAIL traverse mode. Values over 1 add cost to monorail travel and values under 1 decrease cost" + MONORAIL: Float "The weight of RAIL traverse mode. Values over 1 add cost to rail travel and values under 1 decrease cost" RAIL: Float "The weight of SUBWAY traverse mode. Values over 1 add cost to subway travel and values under 1 decrease cost" SUBWAY: Float + "The weight of TAXI traverse mode. Values over 1 add cost to taxi travel and values under 1 decrease cost" + TAXI: Float "The weight of TRAM traverse mode. Values over 1 add cost to tram travel and values under 1 decrease cost" TRAM: Float + "The weight of TROLLEYBUS traverse mode. Values over 1 add cost to trolleybus travel and values under 1 decrease cost" + TROLLEYBUS: Float } input InputPreferred { From 535bd748abc6b6a96567192ad7560950531a5c22 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Tue, 1 Oct 2024 20:00:58 +0100 Subject: [PATCH 053/213] update generated code --- .../gtfs/generated/GraphQLDataFetchers.java | 9 ++++ .../apis/gtfs/generated/GraphQLTypes.java | 51 +++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java b/application/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java index 7532faf28bd..9d147138c80 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java @@ -1,9 +1,11 @@ //THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. package org.opentripplanner.apis.gtfs.generated; +import graphql.relay.Connection; import graphql.relay.Connection; import graphql.relay.DefaultEdge; import graphql.relay.Edge; +import graphql.relay.Edge; import graphql.schema.DataFetcher; import graphql.schema.TypeResolver; import java.util.Currency; @@ -25,8 +27,12 @@ import org.opentripplanner.apis.gtfs.model.FeedPublisher; import org.opentripplanner.apis.gtfs.model.PlanPageInfo; import org.opentripplanner.apis.gtfs.model.RideHailingProvider; +import org.opentripplanner.apis.gtfs.model.RouteTypeModel; +import org.opentripplanner.apis.gtfs.model.StopOnRouteModel; +import org.opentripplanner.apis.gtfs.model.StopOnTripModel; import org.opentripplanner.apis.gtfs.model.StopPosition; import org.opentripplanner.apis.gtfs.model.TripOccupancy; +import org.opentripplanner.apis.gtfs.model.UnknownModel; import org.opentripplanner.ext.fares.model.FareRuleSet; import org.opentripplanner.ext.ridehailing.model.RideEstimate; import org.opentripplanner.model.StopTimesInPattern; @@ -49,6 +55,8 @@ import org.opentripplanner.routing.graphfinder.PatternAtStop; import org.opentripplanner.routing.graphfinder.PlaceAtDistance; import org.opentripplanner.routing.vehicle_parking.VehicleParking; +import org.opentripplanner.routing.vehicle_parking.VehicleParking; +import org.opentripplanner.routing.vehicle_parking.VehicleParking; import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; import org.opentripplanner.routing.vehicle_parking.VehicleParkingState; import org.opentripplanner.service.realtimevehicles.model.RealtimeVehicle; @@ -59,6 +67,7 @@ import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStationUris; +import org.opentripplanner.service.vehiclerental.model.VehicleRentalStationUris; import org.opentripplanner.service.vehiclerental.model.VehicleRentalSystem; import org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle; import org.opentripplanner.transit.model.basic.Money; diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java b/application/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java index 3cd98b15652..79046b21e97 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java @@ -1,6 +1,7 @@ // THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. package org.opentripplanner.apis.gtfs.generated; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -972,24 +973,34 @@ public static class GraphQLInputModeWeightInput { private Double AIRPLANE; private Double BUS; private Double CABLE_CAR; + private Double CARPOOL; + private Double COACH; private Double FERRY; private Double FUNICULAR; private Double GONDOLA; + private Double MONORAIL; private Double RAIL; private Double SUBWAY; + private Double TAXI; private Double TRAM; + private Double TROLLEYBUS; public GraphQLInputModeWeightInput(Map args) { if (args != null) { this.AIRPLANE = (Double) args.get("AIRPLANE"); this.BUS = (Double) args.get("BUS"); this.CABLE_CAR = (Double) args.get("CABLE_CAR"); + this.CARPOOL = (Double) args.get("CARPOOL"); + this.COACH = (Double) args.get("COACH"); this.FERRY = (Double) args.get("FERRY"); this.FUNICULAR = (Double) args.get("FUNICULAR"); this.GONDOLA = (Double) args.get("GONDOLA"); + this.MONORAIL = (Double) args.get("MONORAIL"); this.RAIL = (Double) args.get("RAIL"); this.SUBWAY = (Double) args.get("SUBWAY"); + this.TAXI = (Double) args.get("TAXI"); this.TRAM = (Double) args.get("TRAM"); + this.TROLLEYBUS = (Double) args.get("TROLLEYBUS"); } } @@ -1005,6 +1016,14 @@ public Double getGraphQLCable_Car() { return this.CABLE_CAR; } + public Double getGraphQLCarpool() { + return this.CARPOOL; + } + + public Double getGraphQLCoach() { + return this.COACH; + } + public Double getGraphQLFerry() { return this.FERRY; } @@ -1017,6 +1036,10 @@ public Double getGraphQLGondola() { return this.GONDOLA; } + public Double getGraphQLMonorail() { + return this.MONORAIL; + } + public Double getGraphQLRail() { return this.RAIL; } @@ -1025,10 +1048,18 @@ public Double getGraphQLSubway() { return this.SUBWAY; } + public Double getGraphQLTaxi() { + return this.TAXI; + } + public Double getGraphQLTram() { return this.TRAM; } + public Double getGraphQLTrolleybus() { + return this.TROLLEYBUS; + } + public void setGraphQLAirplane(Double AIRPLANE) { this.AIRPLANE = AIRPLANE; } @@ -1041,6 +1072,14 @@ public void setGraphQLCable_Car(Double CABLE_CAR) { this.CABLE_CAR = CABLE_CAR; } + public void setGraphQLCarpool(Double CARPOOL) { + this.CARPOOL = CARPOOL; + } + + public void setGraphQLCoach(Double COACH) { + this.COACH = COACH; + } + public void setGraphQLFerry(Double FERRY) { this.FERRY = FERRY; } @@ -1053,6 +1092,10 @@ public void setGraphQLGondola(Double GONDOLA) { this.GONDOLA = GONDOLA; } + public void setGraphQLMonorail(Double MONORAIL) { + this.MONORAIL = MONORAIL; + } + public void setGraphQLRail(Double RAIL) { this.RAIL = RAIL; } @@ -1061,9 +1104,17 @@ public void setGraphQLSubway(Double SUBWAY) { this.SUBWAY = SUBWAY; } + public void setGraphQLTaxi(Double TAXI) { + this.TAXI = TAXI; + } + public void setGraphQLTram(Double TRAM) { this.TRAM = TRAM; } + + public void setGraphQLTrolleybus(Double TROLLEYBUS) { + this.TROLLEYBUS = TROLLEYBUS; + } } public static class GraphQLInputPreferredInput { From 0660e757e4df5a23d78b8dc4f096382c44d29cbe Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Fri, 11 Oct 2024 15:21:12 +0100 Subject: [PATCH 054/213] remove duplicate imports from generated files --- .../apis/gtfs/generated/GraphQLDataFetchers.java | 9 --------- .../apis/gtfs/generated/GraphQLTypes.java | 1 - 2 files changed, 10 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java b/application/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java index 9d147138c80..7532faf28bd 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java @@ -1,11 +1,9 @@ //THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. package org.opentripplanner.apis.gtfs.generated; -import graphql.relay.Connection; import graphql.relay.Connection; import graphql.relay.DefaultEdge; import graphql.relay.Edge; -import graphql.relay.Edge; import graphql.schema.DataFetcher; import graphql.schema.TypeResolver; import java.util.Currency; @@ -27,12 +25,8 @@ import org.opentripplanner.apis.gtfs.model.FeedPublisher; import org.opentripplanner.apis.gtfs.model.PlanPageInfo; import org.opentripplanner.apis.gtfs.model.RideHailingProvider; -import org.opentripplanner.apis.gtfs.model.RouteTypeModel; -import org.opentripplanner.apis.gtfs.model.StopOnRouteModel; -import org.opentripplanner.apis.gtfs.model.StopOnTripModel; import org.opentripplanner.apis.gtfs.model.StopPosition; import org.opentripplanner.apis.gtfs.model.TripOccupancy; -import org.opentripplanner.apis.gtfs.model.UnknownModel; import org.opentripplanner.ext.fares.model.FareRuleSet; import org.opentripplanner.ext.ridehailing.model.RideEstimate; import org.opentripplanner.model.StopTimesInPattern; @@ -55,8 +49,6 @@ import org.opentripplanner.routing.graphfinder.PatternAtStop; import org.opentripplanner.routing.graphfinder.PlaceAtDistance; import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; import org.opentripplanner.routing.vehicle_parking.VehicleParkingState; import org.opentripplanner.service.realtimevehicles.model.RealtimeVehicle; @@ -67,7 +59,6 @@ import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStationUris; -import org.opentripplanner.service.vehiclerental.model.VehicleRentalStationUris; import org.opentripplanner.service.vehiclerental.model.VehicleRentalSystem; import org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle; import org.opentripplanner.transit.model.basic.Money; diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java b/application/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java index 79046b21e97..e4ecd2be02a 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java @@ -1,7 +1,6 @@ // THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. package org.opentripplanner.apis.gtfs.generated; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; From 0e8937d21d8adc2b61b595f229ec7aec508d8bdd Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Mon, 23 Sep 2024 14:59:44 +0100 Subject: [PATCH 055/213] fix GTFS trolleybus service --- .../opentripplanner/gtfs/mapping/TransitModeMapper.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/TransitModeMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/TransitModeMapper.java index 608ff6ba2d3..b893f2d63a7 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/TransitModeMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/TransitModeMapper.java @@ -30,11 +30,10 @@ public static TransitMode mapMode(int routeType) { return TransitMode.RAIL; } else if (routeType >= 500 && routeType < 700) { //Metro Service and Underground Service return TransitMode.SUBWAY; - } else if (routeType >= 700 && routeType < 900) { //Bus Service and Trolleybus service - if (routeType == 800) { - return TransitMode.TROLLEYBUS; - } + } else if (routeType >= 700 && routeType < 800) { //Bus Service return TransitMode.BUS; + } else if (routeType >= 800 && routeType < 900) { //Trolleybus Service + return TransitMode.TROLLEYBUS; } else if (routeType >= 900 && routeType < 1000) { //Tram service return TransitMode.TRAM; } else if (routeType >= 1000 && routeType < 1100) { //Water Transport Service From 8c537f326e9ad731e12fb5c53565504fbddb87b7 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Wed, 25 Sep 2024 12:05:34 +0100 Subject: [PATCH 056/213] Add tests for existing GTFS to OTP modes --- .../gtfs/mapping/TransitModeMapperTest.java | 46 ++++++++++++++++++- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/application/src/test/java/org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java b/application/src/test/java/org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java index b2e5b1a8a4d..86c98b02be4 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java @@ -1,8 +1,7 @@ package org.opentripplanner.gtfs.mapping; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.transit.model.basic.TransitMode.CARPOOL; -import static org.opentripplanner.transit.model.basic.TransitMode.TAXI; +import static org.opentripplanner.transit.model.basic.TransitMode.*; import java.util.stream.Stream; import org.junit.jupiter.params.ParameterizedTest; @@ -14,6 +13,49 @@ class TransitModeMapperTest { static Stream testCases() { return Stream.of( + // base GTFS route types + // https://gtfs.org/documentation/schedule/reference/#routestxt + Arguments.of(0, TRAM), + Arguments.of(1, SUBWAY), + Arguments.of(2, RAIL), + Arguments.of(3, BUS), + Arguments.of(4, FERRY), + Arguments.of(5, CABLE_CAR), + Arguments.of(6, GONDOLA), + Arguments.of(7, FUNICULAR), + Arguments.of(11, TROLLEYBUS), + Arguments.of(12, MONORAIL), + // extended route types + // https://developers.google.com/transit/gtfs/reference/extended-route-types + // https://groups.google.com/g/gtfs-changes/c/keT5rTPS7Y0/m/71uMz2l6ke0J?pli=1 + Arguments.of(100, RAIL), + Arguments.of(199, RAIL), + Arguments.of(400, RAIL), + Arguments.of(401, SUBWAY), + Arguments.of(402, SUBWAY), + Arguments.of(403, RAIL), + Arguments.of(404, RAIL), + Arguments.of(405, MONORAIL), + Arguments.of(500, SUBWAY), + Arguments.of(599, SUBWAY), + Arguments.of(600, SUBWAY), + Arguments.of(699, SUBWAY), + Arguments.of(700, BUS), + Arguments.of(799, BUS), + Arguments.of(800, TROLLEYBUS), + Arguments.of(899, TROLLEYBUS), + Arguments.of(900, TRAM), + Arguments.of(999, TRAM), + Arguments.of(1000, FERRY), + Arguments.of(1099, FERRY), + Arguments.of(1100, AIRPLANE), + Arguments.of(1199, AIRPLANE), + Arguments.of(1200, FERRY), + Arguments.of(1299, FERRY), + Arguments.of(1300, GONDOLA), + Arguments.of(1399, GONDOLA), + Arguments.of(1400, FUNICULAR), + Arguments.of(1499, FUNICULAR), Arguments.of(1500, TAXI), Arguments.of(1510, TAXI), Arguments.of(1551, CARPOOL), From e6a9b035465572efedfa75a3d7449866c6c685ed Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Wed, 25 Sep 2024 12:47:16 +0100 Subject: [PATCH 057/213] move line comments to separate lines --- .../gtfs/mapping/TransitModeMapper.java | 38 ++++++++++++------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/TransitModeMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/TransitModeMapper.java index b893f2d63a7..0640011bb3b 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/TransitModeMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/TransitModeMapper.java @@ -16,7 +16,8 @@ public static TransitMode mapMode(int routeType) { } /* TPEG Extension https://groups.google.com/d/msg/gtfs-changes/keT5rTPS7Y0/71uMz2l6ke0J */ - if (routeType >= 100 && routeType < 200) { // Railway Service + if (routeType >= 100 && routeType < 200) { + // Railway Service return TransitMode.RAIL; } else if (routeType >= 200 && routeType < 300) { //Coach Service return TransitMode.BUS; @@ -28,23 +29,32 @@ public static TransitMode mapMode(int routeType) { return TransitMode.MONORAIL; } return TransitMode.RAIL; - } else if (routeType >= 500 && routeType < 700) { //Metro Service and Underground Service + } else if (routeType >= 500 && routeType < 700) { + // Metro Service and Underground Service return TransitMode.SUBWAY; - } else if (routeType >= 700 && routeType < 800) { //Bus Service + } else if (routeType >= 700 && routeType < 800) { + // Bus Service return TransitMode.BUS; - } else if (routeType >= 800 && routeType < 900) { //Trolleybus Service + } else if (routeType >= 800 && routeType < 900) { + // Trolleybus Service return TransitMode.TROLLEYBUS; - } else if (routeType >= 900 && routeType < 1000) { //Tram service + } else if (routeType >= 900 && routeType < 1000) { + // Tram service return TransitMode.TRAM; - } else if (routeType >= 1000 && routeType < 1100) { //Water Transport Service + } else if (routeType >= 1000 && routeType < 1100) { + // Water Transport Service return TransitMode.FERRY; - } else if (routeType >= 1100 && routeType < 1200) { //Air Service + } else if (routeType >= 1100 && routeType < 1200) { + // Air Service return TransitMode.AIRPLANE; - } else if (routeType >= 1200 && routeType < 1300) { //Ferry Service + } else if (routeType >= 1200 && routeType < 1300) { + // Ferry Service return TransitMode.FERRY; - } else if (routeType >= 1300 && routeType < 1400) { //Telecabin Service + } else if (routeType >= 1300 && routeType < 1400) { + // Telecabin Service return TransitMode.GONDOLA; - } else if (routeType >= 1400 && routeType < 1500) { //Funicular Service + } else if (routeType >= 1400 && routeType < 1500) { + // Funicular Service return TransitMode.FUNICULAR; } else if (routeType >= 1551 && routeType < 1561) { // Carpooling, not defined anywhere, so we've chosen this number space @@ -52,11 +62,13 @@ public static TransitMode mapMode(int routeType) { // standardise return TransitMode.CARPOOL; } else if (routeType >= 1500 && routeType < 1599) { - //Taxi Service + // Taxi Service return TransitMode.TAXI; - } else if (routeType >= 1600 && routeType < 1700) { //Self drive + } else if (routeType >= 1600 && routeType < 1700) { + // Self drive return TransitMode.BUS; - } else if (routeType >= 1700 && routeType < 1800) { //Miscellaneous Service + } else if (routeType >= 1700 && routeType < 1800) { + // Miscellaneous Service return null; } /* Original GTFS route types. Should these be checked before TPEG types? */ From 95f1d445f074dd867bd275c4a9e6d8311f678829 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Thu, 17 Oct 2024 14:42:04 +0300 Subject: [PATCH 058/213] Move package-info-template to new src location --- .gitignore | 2 +- .../src}/build/templates/package-info-template.java | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename {src => application/src}/build/templates/package-info-template.java (100%) diff --git a/.gitignore b/.gitignore index 3227500244d..d67b620f7b1 100644 --- a/.gitignore +++ b/.gitignore @@ -29,7 +29,7 @@ o_o_standalone_config_IncludeFileDirectiveTest_part.json .venv/ _site/ build/ -!/src/build/ +!/application/src/build/ dist/ doc/user/_build/ gen-java/ diff --git a/src/build/templates/package-info-template.java b/application/src/build/templates/package-info-template.java similarity index 100% rename from src/build/templates/package-info-template.java rename to application/src/build/templates/package-info-template.java From c7e16bc0f6f5ae27f2ed896b589a31cedb81e901 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Thu, 17 Oct 2024 14:42:46 +0300 Subject: [PATCH 059/213] Move package info plugin to application pom --- application/pom.xml | 23 +++++++++++++++++++++++ pom.xml | 24 ------------------------ 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/application/pom.xml b/application/pom.xml index 49c738a251e..80446348801 100644 --- a/application/pom.xml +++ b/application/pom.xml @@ -513,6 +513,29 @@ + + com.github.bohnman + package-info-maven-plugin + 1.1.0 + + + ${project.basedir}/src/main/java + ${project.basedir}/target/generated-sources + + + ** + + + + + + + + generate + + + + diff --git a/pom.xml b/pom.xml index bfe9c600cc5..0b4dd2ea10c 100644 --- a/pom.xml +++ b/pom.xml @@ -378,30 +378,6 @@ com.google.protobuf:protoc:3.22.0:exe:${os.detected.classifier} - - - com.github.bohnman - package-info-maven-plugin - 1.1.0 - - - ${project.basedir}/src/main/java - ${project.basedir}/target/generated-sources - - - ** - - - - - - - - generate - - - - From 338b1efeb00ee7d826fefc5ec3712dd07a15f9b5 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Mon, 23 Sep 2024 14:59:44 +0100 Subject: [PATCH 060/213] fix GTFS coach service --- .../opentripplanner/gtfs/mapping/TransitModeMapper.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/TransitModeMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/TransitModeMapper.java index 608ff6ba2d3..203dd5693e3 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/TransitModeMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/TransitModeMapper.java @@ -19,7 +19,7 @@ public static TransitMode mapMode(int routeType) { if (routeType >= 100 && routeType < 200) { // Railway Service return TransitMode.RAIL; } else if (routeType >= 200 && routeType < 300) { //Coach Service - return TransitMode.BUS; + return TransitMode.COACH; } else if (routeType >= 300 && routeType < 500) { //Suburban Railway Service and Urban Railway service if (routeType >= 401 && routeType <= 402) { return TransitMode.SUBWAY; @@ -30,11 +30,10 @@ public static TransitMode mapMode(int routeType) { return TransitMode.RAIL; } else if (routeType >= 500 && routeType < 700) { //Metro Service and Underground Service return TransitMode.SUBWAY; - } else if (routeType >= 700 && routeType < 900) { //Bus Service and Trolleybus service - if (routeType == 800) { - return TransitMode.TROLLEYBUS; - } + } else if (routeType >= 700 && routeType < 800) { //Bus Service return TransitMode.BUS; + } else if (routeType >= 800 && routeType < 900) { //Trolleybus Service + return TransitMode.TROLLEYBUS; } else if (routeType >= 900 && routeType < 1000) { //Tram service return TransitMode.TRAM; } else if (routeType >= 1000 && routeType < 1100) { //Water Transport Service From d1b26d080e165042c763024700c07fc247dccf89 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 17 Oct 2024 12:29:37 +0200 Subject: [PATCH 061/213] Activate washington-state on branch --- .github/workflows/performance-test.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/performance-test.yml b/.github/workflows/performance-test.yml index d1ab0bff4ea..4c9b5ccb2fd 100644 --- a/.github/workflows/performance-test.yml +++ b/.github/workflows/performance-test.yml @@ -4,6 +4,7 @@ on: push: branches: - dev-2.x + - flex-transit-speed-test jobs: perf-test: @@ -25,17 +26,17 @@ jobs: - location: germany # all of Germany (500k stops, 200k patterns) but no OSM iterations: 1 jfr-delay: "50s" - profile: core + profile: extended - location: norway iterations: 4 jfr-delay: "35s" - profile: core + profile: extended - location: skanetrafiken iterations: 1 jfr-delay: "50s" - profile: core + profile: extended # extended locations that are run only after merging to dev-2.x @@ -57,7 +58,7 @@ jobs: - location: washington-state iterations: 1 jfr-delay: "20s" - profile: extended + profile: core steps: - uses: actions/checkout@v4 From 96ffa58920702800e49a279a5e7a4cebf39047c1 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 17 Oct 2024 13:43:01 +0200 Subject: [PATCH 062/213] Rework Washington state flex speed test --- .../washington-state/build-config.json | 102 ++---- .../washington-state/generate_test_cases.py | 8 +- .../washington-state/speed-test-config.json | 2 +- .../washington-state/travelSearch.csv | 342 +++++++++--------- 4 files changed, 211 insertions(+), 243 deletions(-) diff --git a/test/performance/washington-state/build-config.json b/test/performance/washington-state/build-config.json index 76cd2da6247..edc0d74e98e 100644 --- a/test/performance/washington-state/build-config.json +++ b/test/performance/washington-state/build-config.json @@ -1,127 +1,77 @@ { - "transitServiceStart": "2022-01-01", - "transitServiceEnd": "2022-12-31", + "transitServiceStart": "2024-09-01", + "transitServiceEnd": "2024-12-31", "transitModelTimeZone": "America/Los_Angeles", "transitFeeds": [ { "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state/Community_Transit-20221020T085912Z.gtfs.zip", + "source": "https://otp-performance.leonard.io/data/washington-state-new/catholiccommunity-wa-us-king--flex-v2.zip", + "feedId": "ccsww-kc" + }, + { + "type": "gtfs", + "source": "https://otp-performance.leonard.io/data/washington-state-new/community-transit.gtfs.zip", "feedId": "commtrans" }, { "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state/Everett_Transit-20221022T085914Z.gtfs.zip", - "feedId": "everett" + "source": "https://otp-performance.leonard.io/data/washington-state-new/communitytransit-wa-us--flex-v2.zip", + "feedId": "commtrans-flex" }, { "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state/Homage_Senior_Services-20221013T085917Z.gtfs.zip", + "source": "https://otp-performance.leonard.io/data/washington-state-new/homage-wa-us-darrington--flex-v2.zip", "feedId": "homage" }, { "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state/Island_Transit-20221013T085915Z.gtfs.zip", - "feedId": "island-transit" + "source": "https://otp-performance.leonard.io/data/washington-state-new/hopelink-wa-us--flex-v2.zip", + "feedId": "hopelink" }, { "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state/King_County_Metro-20221022T085912Z.gtfs.zip", + "source": "https://otp-performance.leonard.io/data/washington-state-new/kcm.gtfs.zip", "feedId": "kcm" }, { "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state/Kitsap_Transit-20221021T090015Z.gtfs.zip", + "source": "https://otp-performance.leonard.io/data/washington-state-new/kitsap.gtfs.zip", "feedId": "kitsap" }, { "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state/Muckleshoot_Indian_Tribe-20221012T214902Z.gtfs.zip", - "feedId": "muckleshoot" - }, - { - "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state/Pierce_County_Ferries-20221012T215215Z.gtfs.zip", - "feedId": "pierce-ferries" + "source": "https://otp-performance.leonard.io/data/washington-state-new/monorail.gtfs.zip", + "feedId": "monorail" }, { "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state/Pierce_County_Human_Services-20221021T085916Z.gtfs.zip", - "feedId": "pierce-human-services" + "source": "https://otp-performance.leonard.io/data/washington-state-new/pierce-transit.gtfs.zip", + "feedId": "pierce" }, { "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state/Pierce_County_Human_Services_Flex-20221012T215555Z.gtfs.zip", + "source": "https://otp-performance.leonard.io/data/washington-state-new/piercetransit-wa-us--flex-v2.zip", "feedId": "pierce-flex" }, { "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state/Pierce_Transit-20221022T085914Z.gtfs.zip", - "feedId": "pierce-transit" - }, - { - "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state/Puget_Sound_Educational_Service_District-20221012T215720Z.gtfs.zip", - "feedId": "pudget-sound-educational" - }, - { - "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state/Seattle_Childrens_Hospital-20221019T085918Z.gtfs.zip", - "feedId": "childrens-hospital" - }, - { - "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state/Seattle_Monorail-20221019T085918Z.gtfs.zip", - "feedId": "monorail" - }, - { - "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state/Skagit_Transit-20221012T212605Z.gtfs.zip", - "feedId": "skagit" - }, - { - "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state/Snoqualmie_Valley_Transportation-20221012T221032Z.gtfs.zip", + "source": "https://otp-performance.leonard.io/data/washington-state-new/snoqualmie-wa-us--flex-v2.zip", "feedId": "snoqualmie" }, { "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state/Snoqualmie_Valley_Transportation_Flex-20221012T221125Z.gtfs.zip", - "feedId": "snoqualmie-flex" - }, - { - "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state/Solid_Ground-20221012T221409Z.gtfs.zip", - "feedId": "solid-ground" - }, - { - "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state/Sound_Generations-20221012T221622Z.gtfs.zip", - "feedId": "sound-generations" - }, - { - "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state/Sound_Transit-20221022T085914Z.gtfs.zip", - "feedId": "sound-transit" - }, - { - "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state/WA_State_Ferry-20221024T085913Z.gtfs.zip", - "feedId": "state-ferry" - }, - { - "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state/WSDOT_Public_Transportation-20221012T213935Z.gtfs.zip", - "feedId": "wsdot" + "source": "https://otp-performance.leonard.io/data/washington-state-new/soundgenerations-wa-us-hyde--flex-v2.zip", + "feedId": "hyde" }, { "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state/Whatcom_Transportation_Authority-20221012T213144Z.gtfs.zip", - "feedId": "whatcom" + "source": "https://otp-performance.leonard.io/data/washington-state-new/soundgenerations-wa-us-volunteer--flex-v2.zip", + "feedId": "volunteer" } ], "osm": [ { - "source": "https://otp-performance.leonard.io/data/washington-state/nw-washington-state-2022-12-01.osm.pbf" + "source": "https://otp-performance.leonard.io/data/washington-state-new/north-east-washington-2024-17-10.osm.pbf" } ] } \ No newline at end of file diff --git a/test/performance/washington-state/generate_test_cases.py b/test/performance/washington-state/generate_test_cases.py index 49c09db6e65..f73ececb3a2 100755 --- a/test/performance/washington-state/generate_test_cases.py +++ b/test/performance/washington-state/generate_test_cases.py @@ -47,19 +47,19 @@ }, ] -failing_cases = [16, 64, 70, 82, 88, 120, 128, 130, 132, 134, 136, 138, 146, 152, 154, 158, 164, 172] +failing_cases = [] rows = [] modes = [ { - "mode": "TRANSIT|WALK", - "category": "transit", + "mode": "FLEX_DIRECT|WALK", + "category": "flex-direct", "window": "" }, { "mode": "FLEX_ACCESS|FLEX_EGRESS|TRANSIT", - "category": "flex", + "category": "flex-and-transit", "window": "6h" } ] diff --git a/test/performance/washington-state/speed-test-config.json b/test/performance/washington-state/speed-test-config.json index 1b48a48e370..ad40304cc66 100644 --- a/test/performance/washington-state/speed-test-config.json +++ b/test/performance/washington-state/speed-test-config.json @@ -1,6 +1,6 @@ { // Run all test-cases on the given date - "testDate": "2022-11-01", + "testDate": "2024-10-17", "feedId": "1", // Default: "graph.obj" "graph": "graph.obj", diff --git a/test/performance/washington-state/travelSearch.csv b/test/performance/washington-state/travelSearch.csv index 66fa3dac2d5..d1eb07beddc 100644 --- a/test/performance/washington-state/travelSearch.csv +++ b/test/performance/washington-state/travelSearch.csv @@ -1,163 +1,181 @@ testCaseId,description,departure,fromLat,fromLon,toLat,toLon,origin,destination,modes,category -1,Hilshire Terrace to Normandy Park (transit),10:00,47.40648236,-122.18101501,47.44306609375831,-122.34237670,Hilshire Terrace,Normandy Park,TRANSIT|WALK,transit -2,Hilshire Terrace to Normandy Park (flex),10:00,47.40648236,-122.18101501,47.44306609375831,-122.34237670,Hilshire Terrace,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -3,Hilshire Terrace to Des Moines (transit),10:00,47.40648236,-122.18101501,47.3978844,-122.30898,Hilshire Terrace,Des Moines,TRANSIT|WALK,transit -4,Hilshire Terrace to Des Moines (flex),10:00,47.40648236,-122.18101501,47.3978844,-122.30898,Hilshire Terrace,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -5,Hilshire Terrace to North Auburn (transit),10:00,47.40648236,-122.18101501,47.340218616,-122.2246170043,Hilshire Terrace,North Auburn,TRANSIT|WALK,transit -6,Hilshire Terrace to North Auburn (flex),10:00,47.40648236,-122.18101501,47.340218616,-122.2246170043,Hilshire Terrace,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -7,Hilshire Terrace to Federal Way (transit),10:00,47.40648236,-122.18101501,47.31322426310727,-122.336540222167,Hilshire Terrace,Federal Way,TRANSIT|WALK,transit -8,Hilshire Terrace to Federal Way (flex),10:00,47.40648236,-122.18101501,47.31322426310727,-122.336540222167,Hilshire Terrace,Federal Way,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -9,Hilshire Terrace to West Seattle (transit),10:00,47.40648236,-122.18101501,47.571024,-122.3877811,Hilshire Terrace,West Seattle,TRANSIT|WALK,transit -10,Hilshire Terrace to West Seattle (flex),10:00,47.40648236,-122.18101501,47.571024,-122.3877811,Hilshire Terrace,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -11,Hilshire Terrace to Puyallup (transit),10:00,47.40648236,-122.18101501,47.18399599096,-122.28950500488,Hilshire Terrace,Puyallup,TRANSIT|WALK,transit -12,Hilshire Terrace to Puyallup (flex),10:00,47.40648236,-122.18101501,47.18399599096,-122.28950500488,Hilshire Terrace,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -13,Hilshire Terrace to Snoqualmie (transit),10:00,47.40648236,-122.18101501,47.52827129,-121.827821731,Hilshire Terrace,Snoqualmie,TRANSIT|WALK,transit -14,Hilshire Terrace to Snoqualmie (flex),10:00,47.40648236,-122.18101501,47.52827129,-121.827821731,Hilshire Terrace,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -15,Hilshire Terrace to Queen Anne (transit),10:00,47.40648236,-122.18101501,47.6394849792,-122.3636627197,Hilshire Terrace,Queen Anne,TRANSIT|WALK,transit -17,Hilshire Terrace to Beacon Hill (transit),10:00,47.40648236,-122.18101501,47.578668036563016,-122.31139183,Hilshire Terrace,Beacon Hill,TRANSIT|WALK,transit -18,Hilshire Terrace to Beacon Hill (flex),10:00,47.40648236,-122.18101501,47.578668036563016,-122.31139183,Hilshire Terrace,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -19,Normandy Park to Hilshire Terrace (transit),10:00,47.44306609375831,-122.34237670,47.40648236,-122.18101501,Normandy Park,Hilshire Terrace,TRANSIT|WALK,transit -20,Normandy Park to Hilshire Terrace (flex),10:00,47.44306609375831,-122.34237670,47.40648236,-122.18101501,Normandy Park,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -21,Normandy Park to Des Moines (transit),10:00,47.44306609375831,-122.34237670,47.3978844,-122.30898,Normandy Park,Des Moines,TRANSIT|WALK,transit -22,Normandy Park to Des Moines (flex),10:00,47.44306609375831,-122.34237670,47.3978844,-122.30898,Normandy Park,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -23,Normandy Park to North Auburn (transit),10:00,47.44306609375831,-122.34237670,47.340218616,-122.2246170043,Normandy Park,North Auburn,TRANSIT|WALK,transit -24,Normandy Park to North Auburn (flex),10:00,47.44306609375831,-122.34237670,47.340218616,-122.2246170043,Normandy Park,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -25,Normandy Park to Federal Way (transit),10:00,47.44306609375831,-122.34237670,47.31322426310727,-122.336540222167,Normandy Park,Federal Way,TRANSIT|WALK,transit -26,Normandy Park to Federal Way (flex),10:00,47.44306609375831,-122.34237670,47.31322426310727,-122.336540222167,Normandy Park,Federal Way,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -27,Normandy Park to West Seattle (transit),10:00,47.44306609375831,-122.34237670,47.571024,-122.3877811,Normandy Park,West Seattle,TRANSIT|WALK,transit -28,Normandy Park to West Seattle (flex),10:00,47.44306609375831,-122.34237670,47.571024,-122.3877811,Normandy Park,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -29,Normandy Park to Puyallup (transit),10:00,47.44306609375831,-122.34237670,47.18399599096,-122.28950500488,Normandy Park,Puyallup,TRANSIT|WALK,transit -30,Normandy Park to Puyallup (flex),10:00,47.44306609375831,-122.34237670,47.18399599096,-122.28950500488,Normandy Park,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -31,Normandy Park to Snoqualmie (transit),10:00,47.44306609375831,-122.34237670,47.52827129,-121.827821731,Normandy Park,Snoqualmie,TRANSIT|WALK,transit -32,Normandy Park to Snoqualmie (flex),10:00,47.44306609375831,-122.34237670,47.52827129,-121.827821731,Normandy Park,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -33,Normandy Park to Queen Anne (transit),10:00,47.44306609375831,-122.34237670,47.6394849792,-122.3636627197,Normandy Park,Queen Anne,TRANSIT|WALK,transit -34,Normandy Park to Queen Anne (flex),10:00,47.44306609375831,-122.34237670,47.6394849792,-122.3636627197,Normandy Park,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -35,Normandy Park to Beacon Hill (transit),10:00,47.44306609375831,-122.34237670,47.578668036563016,-122.31139183,Normandy Park,Beacon Hill,TRANSIT|WALK,transit -36,Normandy Park to Beacon Hill (flex),10:00,47.44306609375831,-122.34237670,47.578668036563016,-122.31139183,Normandy Park,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -37,Des Moines to Hilshire Terrace (transit),10:00,47.3978844,-122.30898,47.40648236,-122.18101501,Des Moines,Hilshire Terrace,TRANSIT|WALK,transit -38,Des Moines to Hilshire Terrace (flex),10:00,47.3978844,-122.30898,47.40648236,-122.18101501,Des Moines,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -39,Des Moines to Normandy Park (transit),10:00,47.3978844,-122.30898,47.44306609375831,-122.34237670,Des Moines,Normandy Park,TRANSIT|WALK,transit -40,Des Moines to Normandy Park (flex),10:00,47.3978844,-122.30898,47.44306609375831,-122.34237670,Des Moines,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -41,Des Moines to North Auburn (transit),10:00,47.3978844,-122.30898,47.340218616,-122.2246170043,Des Moines,North Auburn,TRANSIT|WALK,transit -42,Des Moines to North Auburn (flex),10:00,47.3978844,-122.30898,47.340218616,-122.2246170043,Des Moines,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -43,Des Moines to Federal Way (transit),10:00,47.3978844,-122.30898,47.31322426310727,-122.336540222167,Des Moines,Federal Way,TRANSIT|WALK,transit -44,Des Moines to Federal Way (flex),10:00,47.3978844,-122.30898,47.31322426310727,-122.336540222167,Des Moines,Federal Way,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -45,Des Moines to West Seattle (transit),10:00,47.3978844,-122.30898,47.571024,-122.3877811,Des Moines,West Seattle,TRANSIT|WALK,transit -46,Des Moines to West Seattle (flex),10:00,47.3978844,-122.30898,47.571024,-122.3877811,Des Moines,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -47,Des Moines to Puyallup (transit),10:00,47.3978844,-122.30898,47.18399599096,-122.28950500488,Des Moines,Puyallup,TRANSIT|WALK,transit -48,Des Moines to Puyallup (flex),10:00,47.3978844,-122.30898,47.18399599096,-122.28950500488,Des Moines,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -49,Des Moines to Snoqualmie (transit),10:00,47.3978844,-122.30898,47.52827129,-121.827821731,Des Moines,Snoqualmie,TRANSIT|WALK,transit -50,Des Moines to Snoqualmie (flex),10:00,47.3978844,-122.30898,47.52827129,-121.827821731,Des Moines,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -51,Des Moines to Queen Anne (transit),10:00,47.3978844,-122.30898,47.6394849792,-122.3636627197,Des Moines,Queen Anne,TRANSIT|WALK,transit -52,Des Moines to Queen Anne (flex),10:00,47.3978844,-122.30898,47.6394849792,-122.3636627197,Des Moines,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -53,Des Moines to Beacon Hill (transit),10:00,47.3978844,-122.30898,47.578668036563016,-122.31139183,Des Moines,Beacon Hill,TRANSIT|WALK,transit -54,Des Moines to Beacon Hill (flex),10:00,47.3978844,-122.30898,47.578668036563016,-122.31139183,Des Moines,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -55,North Auburn to Hilshire Terrace (transit),10:00,47.340218616,-122.2246170043,47.40648236,-122.18101501,North Auburn,Hilshire Terrace,TRANSIT|WALK,transit -56,North Auburn to Hilshire Terrace (flex),10:00,47.340218616,-122.2246170043,47.40648236,-122.18101501,North Auburn,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -57,North Auburn to Normandy Park (transit),10:00,47.340218616,-122.2246170043,47.44306609375831,-122.34237670,North Auburn,Normandy Park,TRANSIT|WALK,transit -58,North Auburn to Normandy Park (flex),10:00,47.340218616,-122.2246170043,47.44306609375831,-122.34237670,North Auburn,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -59,North Auburn to Des Moines (transit),10:00,47.340218616,-122.2246170043,47.3978844,-122.30898,North Auburn,Des Moines,TRANSIT|WALK,transit -60,North Auburn to Des Moines (flex),10:00,47.340218616,-122.2246170043,47.3978844,-122.30898,North Auburn,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -61,North Auburn to Federal Way (transit),10:00,47.340218616,-122.2246170043,47.31322426310727,-122.336540222167,North Auburn,Federal Way,TRANSIT|WALK,transit -62,North Auburn to Federal Way (flex),10:00,47.340218616,-122.2246170043,47.31322426310727,-122.336540222167,North Auburn,Federal Way,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -63,North Auburn to West Seattle (transit),10:00,47.340218616,-122.2246170043,47.571024,-122.3877811,North Auburn,West Seattle,TRANSIT|WALK,transit -65,North Auburn to Puyallup (transit),10:00,47.340218616,-122.2246170043,47.18399599096,-122.28950500488,North Auburn,Puyallup,TRANSIT|WALK,transit -66,North Auburn to Puyallup (flex),10:00,47.340218616,-122.2246170043,47.18399599096,-122.28950500488,North Auburn,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -67,North Auburn to Snoqualmie (transit),10:00,47.340218616,-122.2246170043,47.52827129,-121.827821731,North Auburn,Snoqualmie,TRANSIT|WALK,transit -68,North Auburn to Snoqualmie (flex),10:00,47.340218616,-122.2246170043,47.52827129,-121.827821731,North Auburn,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -69,North Auburn to Queen Anne (transit),10:00,47.340218616,-122.2246170043,47.6394849792,-122.3636627197,North Auburn,Queen Anne,TRANSIT|WALK,transit -71,North Auburn to Beacon Hill (transit),10:00,47.340218616,-122.2246170043,47.578668036563016,-122.31139183,North Auburn,Beacon Hill,TRANSIT|WALK,transit -72,North Auburn to Beacon Hill (flex),10:00,47.340218616,-122.2246170043,47.578668036563016,-122.31139183,North Auburn,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -73,Federal Way to Hilshire Terrace (transit),10:00,47.31322426310727,-122.336540222167,47.40648236,-122.18101501,Federal Way,Hilshire Terrace,TRANSIT|WALK,transit -74,Federal Way to Hilshire Terrace (flex),10:00,47.31322426310727,-122.336540222167,47.40648236,-122.18101501,Federal Way,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -75,Federal Way to Normandy Park (transit),10:00,47.31322426310727,-122.336540222167,47.44306609375831,-122.34237670,Federal Way,Normandy Park,TRANSIT|WALK,transit -76,Federal Way to Normandy Park (flex),10:00,47.31322426310727,-122.336540222167,47.44306609375831,-122.34237670,Federal Way,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -77,Federal Way to Des Moines (transit),10:00,47.31322426310727,-122.336540222167,47.3978844,-122.30898,Federal Way,Des Moines,TRANSIT|WALK,transit -78,Federal Way to Des Moines (flex),10:00,47.31322426310727,-122.336540222167,47.3978844,-122.30898,Federal Way,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -79,Federal Way to North Auburn (transit),10:00,47.31322426310727,-122.336540222167,47.340218616,-122.2246170043,Federal Way,North Auburn,TRANSIT|WALK,transit -80,Federal Way to North Auburn (flex),10:00,47.31322426310727,-122.336540222167,47.340218616,-122.2246170043,Federal Way,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -81,Federal Way to West Seattle (transit),10:00,47.31322426310727,-122.336540222167,47.571024,-122.3877811,Federal Way,West Seattle,TRANSIT|WALK,transit -83,Federal Way to Puyallup (transit),10:00,47.31322426310727,-122.336540222167,47.18399599096,-122.28950500488,Federal Way,Puyallup,TRANSIT|WALK,transit -84,Federal Way to Puyallup (flex),10:00,47.31322426310727,-122.336540222167,47.18399599096,-122.28950500488,Federal Way,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -85,Federal Way to Snoqualmie (transit),10:00,47.31322426310727,-122.336540222167,47.52827129,-121.827821731,Federal Way,Snoqualmie,TRANSIT|WALK,transit -86,Federal Way to Snoqualmie (flex),10:00,47.31322426310727,-122.336540222167,47.52827129,-121.827821731,Federal Way,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -87,Federal Way to Queen Anne (transit),10:00,47.31322426310727,-122.336540222167,47.6394849792,-122.3636627197,Federal Way,Queen Anne,TRANSIT|WALK,transit -89,Federal Way to Beacon Hill (transit),10:00,47.31322426310727,-122.336540222167,47.578668036563016,-122.31139183,Federal Way,Beacon Hill,TRANSIT|WALK,transit -90,Federal Way to Beacon Hill (flex),10:00,47.31322426310727,-122.336540222167,47.578668036563016,-122.31139183,Federal Way,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -91,West Seattle to Hilshire Terrace (transit),10:00,47.571024,-122.3877811,47.40648236,-122.18101501,West Seattle,Hilshire Terrace,TRANSIT|WALK,transit -92,West Seattle to Hilshire Terrace (flex),10:00,47.571024,-122.3877811,47.40648236,-122.18101501,West Seattle,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -93,West Seattle to Normandy Park (transit),10:00,47.571024,-122.3877811,47.44306609375831,-122.34237670,West Seattle,Normandy Park,TRANSIT|WALK,transit -94,West Seattle to Normandy Park (flex),10:00,47.571024,-122.3877811,47.44306609375831,-122.34237670,West Seattle,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -95,West Seattle to Des Moines (transit),10:00,47.571024,-122.3877811,47.3978844,-122.30898,West Seattle,Des Moines,TRANSIT|WALK,transit -96,West Seattle to Des Moines (flex),10:00,47.571024,-122.3877811,47.3978844,-122.30898,West Seattle,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -97,West Seattle to North Auburn (transit),10:00,47.571024,-122.3877811,47.340218616,-122.2246170043,West Seattle,North Auburn,TRANSIT|WALK,transit -98,West Seattle to North Auburn (flex),10:00,47.571024,-122.3877811,47.340218616,-122.2246170043,West Seattle,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -99,West Seattle to Federal Way (transit),10:00,47.571024,-122.3877811,47.31322426310727,-122.336540222167,West Seattle,Federal Way,TRANSIT|WALK,transit -100,West Seattle to Federal Way (flex),10:00,47.571024,-122.3877811,47.31322426310727,-122.336540222167,West Seattle,Federal Way,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -101,West Seattle to Puyallup (transit),10:00,47.571024,-122.3877811,47.18399599096,-122.28950500488,West Seattle,Puyallup,TRANSIT|WALK,transit -102,West Seattle to Puyallup (flex),10:00,47.571024,-122.3877811,47.18399599096,-122.28950500488,West Seattle,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -103,West Seattle to Snoqualmie (transit),10:00,47.571024,-122.3877811,47.52827129,-121.827821731,West Seattle,Snoqualmie,TRANSIT|WALK,transit -104,West Seattle to Snoqualmie (flex),10:00,47.571024,-122.3877811,47.52827129,-121.827821731,West Seattle,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -105,West Seattle to Queen Anne (transit),10:00,47.571024,-122.3877811,47.6394849792,-122.3636627197,West Seattle,Queen Anne,TRANSIT|WALK,transit -106,West Seattle to Queen Anne (flex),10:00,47.571024,-122.3877811,47.6394849792,-122.3636627197,West Seattle,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -107,West Seattle to Beacon Hill (transit),10:00,47.571024,-122.3877811,47.578668036563016,-122.31139183,West Seattle,Beacon Hill,TRANSIT|WALK,transit -108,West Seattle to Beacon Hill (flex),10:00,47.571024,-122.3877811,47.578668036563016,-122.31139183,West Seattle,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -109,Puyallup to Hilshire Terrace (transit),10:00,47.18399599096,-122.28950500488,47.40648236,-122.18101501,Puyallup,Hilshire Terrace,TRANSIT|WALK,transit -110,Puyallup to Hilshire Terrace (flex),10:00,47.18399599096,-122.28950500488,47.40648236,-122.18101501,Puyallup,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -111,Puyallup to Normandy Park (transit),10:00,47.18399599096,-122.28950500488,47.44306609375831,-122.34237670,Puyallup,Normandy Park,TRANSIT|WALK,transit -112,Puyallup to Normandy Park (flex),10:00,47.18399599096,-122.28950500488,47.44306609375831,-122.34237670,Puyallup,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -113,Puyallup to Des Moines (transit),10:00,47.18399599096,-122.28950500488,47.3978844,-122.30898,Puyallup,Des Moines,TRANSIT|WALK,transit -114,Puyallup to Des Moines (flex),10:00,47.18399599096,-122.28950500488,47.3978844,-122.30898,Puyallup,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -115,Puyallup to North Auburn (transit),10:00,47.18399599096,-122.28950500488,47.340218616,-122.2246170043,Puyallup,North Auburn,TRANSIT|WALK,transit -116,Puyallup to North Auburn (flex),10:00,47.18399599096,-122.28950500488,47.340218616,-122.2246170043,Puyallup,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -117,Puyallup to Federal Way (transit),10:00,47.18399599096,-122.28950500488,47.31322426310727,-122.336540222167,Puyallup,Federal Way,TRANSIT|WALK,transit -118,Puyallup to Federal Way (flex),10:00,47.18399599096,-122.28950500488,47.31322426310727,-122.336540222167,Puyallup,Federal Way,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -119,Puyallup to West Seattle (transit),10:00,47.18399599096,-122.28950500488,47.571024,-122.3877811,Puyallup,West Seattle,TRANSIT|WALK,transit -121,Puyallup to Snoqualmie (transit),10:00,47.18399599096,-122.28950500488,47.52827129,-121.827821731,Puyallup,Snoqualmie,TRANSIT|WALK,transit -122,Puyallup to Snoqualmie (flex),10:00,47.18399599096,-122.28950500488,47.52827129,-121.827821731,Puyallup,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -123,Puyallup to Queen Anne (transit),10:00,47.18399599096,-122.28950500488,47.6394849792,-122.3636627197,Puyallup,Queen Anne,TRANSIT|WALK,transit -124,Puyallup to Queen Anne (flex),10:00,47.18399599096,-122.28950500488,47.6394849792,-122.3636627197,Puyallup,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -125,Puyallup to Beacon Hill (transit),10:00,47.18399599096,-122.28950500488,47.578668036563016,-122.31139183,Puyallup,Beacon Hill,TRANSIT|WALK,transit -126,Puyallup to Beacon Hill (flex),10:00,47.18399599096,-122.28950500488,47.578668036563016,-122.31139183,Puyallup,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -127,Snoqualmie to Hilshire Terrace (transit),10:00,47.52827129,-121.827821731,47.40648236,-122.18101501,Snoqualmie,Hilshire Terrace,TRANSIT|WALK,transit -129,Snoqualmie to Normandy Park (transit),10:00,47.52827129,-121.827821731,47.44306609375831,-122.34237670,Snoqualmie,Normandy Park,TRANSIT|WALK,transit -131,Snoqualmie to Des Moines (transit),10:00,47.52827129,-121.827821731,47.3978844,-122.30898,Snoqualmie,Des Moines,TRANSIT|WALK,transit -133,Snoqualmie to North Auburn (transit),10:00,47.52827129,-121.827821731,47.340218616,-122.2246170043,Snoqualmie,North Auburn,TRANSIT|WALK,transit -135,Snoqualmie to Federal Way (transit),10:00,47.52827129,-121.827821731,47.31322426310727,-122.336540222167,Snoqualmie,Federal Way,TRANSIT|WALK,transit -137,Snoqualmie to West Seattle (transit),10:00,47.52827129,-121.827821731,47.571024,-122.3877811,Snoqualmie,West Seattle,TRANSIT|WALK,transit -139,Snoqualmie to Puyallup (transit),10:00,47.52827129,-121.827821731,47.18399599096,-122.28950500488,Snoqualmie,Puyallup,TRANSIT|WALK,transit -140,Snoqualmie to Puyallup (flex),10:00,47.52827129,-121.827821731,47.18399599096,-122.28950500488,Snoqualmie,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -141,Snoqualmie to Queen Anne (transit),10:00,47.52827129,-121.827821731,47.6394849792,-122.3636627197,Snoqualmie,Queen Anne,TRANSIT|WALK,transit -142,Snoqualmie to Queen Anne (flex),10:00,47.52827129,-121.827821731,47.6394849792,-122.3636627197,Snoqualmie,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -143,Snoqualmie to Beacon Hill (transit),10:00,47.52827129,-121.827821731,47.578668036563016,-122.31139183,Snoqualmie,Beacon Hill,TRANSIT|WALK,transit -144,Snoqualmie to Beacon Hill (flex),10:00,47.52827129,-121.827821731,47.578668036563016,-122.31139183,Snoqualmie,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -145,Queen Anne to Hilshire Terrace (transit),10:00,47.6394849792,-122.3636627197,47.40648236,-122.18101501,Queen Anne,Hilshire Terrace,TRANSIT|WALK,transit -147,Queen Anne to Normandy Park (transit),10:00,47.6394849792,-122.3636627197,47.44306609375831,-122.34237670,Queen Anne,Normandy Park,TRANSIT|WALK,transit -148,Queen Anne to Normandy Park (flex),10:00,47.6394849792,-122.3636627197,47.44306609375831,-122.34237670,Queen Anne,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -149,Queen Anne to Des Moines (transit),10:00,47.6394849792,-122.3636627197,47.3978844,-122.30898,Queen Anne,Des Moines,TRANSIT|WALK,transit -150,Queen Anne to Des Moines (flex),10:00,47.6394849792,-122.3636627197,47.3978844,-122.30898,Queen Anne,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -151,Queen Anne to North Auburn (transit),10:00,47.6394849792,-122.3636627197,47.340218616,-122.2246170043,Queen Anne,North Auburn,TRANSIT|WALK,transit -153,Queen Anne to Federal Way (transit),10:00,47.6394849792,-122.3636627197,47.31322426310727,-122.336540222167,Queen Anne,Federal Way,TRANSIT|WALK,transit -155,Queen Anne to West Seattle (transit),10:00,47.6394849792,-122.3636627197,47.571024,-122.3877811,Queen Anne,West Seattle,TRANSIT|WALK,transit -156,Queen Anne to West Seattle (flex),10:00,47.6394849792,-122.3636627197,47.571024,-122.3877811,Queen Anne,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -157,Queen Anne to Puyallup (transit),10:00,47.6394849792,-122.3636627197,47.18399599096,-122.28950500488,Queen Anne,Puyallup,TRANSIT|WALK,transit -159,Queen Anne to Snoqualmie (transit),10:00,47.6394849792,-122.3636627197,47.52827129,-121.827821731,Queen Anne,Snoqualmie,TRANSIT|WALK,transit -160,Queen Anne to Snoqualmie (flex),10:00,47.6394849792,-122.3636627197,47.52827129,-121.827821731,Queen Anne,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -161,Queen Anne to Beacon Hill (transit),10:00,47.6394849792,-122.3636627197,47.578668036563016,-122.31139183,Queen Anne,Beacon Hill,TRANSIT|WALK,transit -162,Queen Anne to Beacon Hill (flex),10:00,47.6394849792,-122.3636627197,47.578668036563016,-122.31139183,Queen Anne,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -163,Beacon Hill to Hilshire Terrace (transit),10:00,47.578668036563016,-122.31139183,47.40648236,-122.18101501,Beacon Hill,Hilshire Terrace,TRANSIT|WALK,transit -165,Beacon Hill to Normandy Park (transit),10:00,47.578668036563016,-122.31139183,47.44306609375831,-122.34237670,Beacon Hill,Normandy Park,TRANSIT|WALK,transit -166,Beacon Hill to Normandy Park (flex),10:00,47.578668036563016,-122.31139183,47.44306609375831,-122.34237670,Beacon Hill,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -167,Beacon Hill to Des Moines (transit),10:00,47.578668036563016,-122.31139183,47.3978844,-122.30898,Beacon Hill,Des Moines,TRANSIT|WALK,transit -168,Beacon Hill to Des Moines (flex),10:00,47.578668036563016,-122.31139183,47.3978844,-122.30898,Beacon Hill,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -169,Beacon Hill to North Auburn (transit),10:00,47.578668036563016,-122.31139183,47.340218616,-122.2246170043,Beacon Hill,North Auburn,TRANSIT|WALK,transit -170,Beacon Hill to North Auburn (flex),10:00,47.578668036563016,-122.31139183,47.340218616,-122.2246170043,Beacon Hill,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -171,Beacon Hill to Federal Way (transit),10:00,47.578668036563016,-122.31139183,47.31322426310727,-122.336540222167,Beacon Hill,Federal Way,TRANSIT|WALK,transit -173,Beacon Hill to West Seattle (transit),10:00,47.578668036563016,-122.31139183,47.571024,-122.3877811,Beacon Hill,West Seattle,TRANSIT|WALK,transit -174,Beacon Hill to West Seattle (flex),10:00,47.578668036563016,-122.31139183,47.571024,-122.3877811,Beacon Hill,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -175,Beacon Hill to Puyallup (transit),10:00,47.578668036563016,-122.31139183,47.18399599096,-122.28950500488,Beacon Hill,Puyallup,TRANSIT|WALK,transit -176,Beacon Hill to Puyallup (flex),10:00,47.578668036563016,-122.31139183,47.18399599096,-122.28950500488,Beacon Hill,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -177,Beacon Hill to Snoqualmie (transit),10:00,47.578668036563016,-122.31139183,47.52827129,-121.827821731,Beacon Hill,Snoqualmie,TRANSIT|WALK,transit -178,Beacon Hill to Snoqualmie (flex),10:00,47.578668036563016,-122.31139183,47.52827129,-121.827821731,Beacon Hill,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex -179,Beacon Hill to Queen Anne (transit),10:00,47.578668036563016,-122.31139183,47.6394849792,-122.3636627197,Beacon Hill,Queen Anne,TRANSIT|WALK,transit -180,Beacon Hill to Queen Anne (flex),10:00,47.578668036563016,-122.31139183,47.6394849792,-122.3636627197,Beacon Hill,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex +1,Hilshire Terrace to Normandy Park (flex-direct),10:00,47.40648236,-122.18101501,47.44306609375831,-122.34237670,Hilshire Terrace,Normandy Park,FLEX_DIRECT|WALK,flex-direct +2,Hilshire Terrace to Normandy Park (flex-and-transit),10:00,47.40648236,-122.18101501,47.44306609375831,-122.34237670,Hilshire Terrace,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +3,Hilshire Terrace to Des Moines (flex-direct),10:00,47.40648236,-122.18101501,47.3978844,-122.30898,Hilshire Terrace,Des Moines,FLEX_DIRECT|WALK,flex-direct +4,Hilshire Terrace to Des Moines (flex-and-transit),10:00,47.40648236,-122.18101501,47.3978844,-122.30898,Hilshire Terrace,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +5,Hilshire Terrace to North Auburn (flex-direct),10:00,47.40648236,-122.18101501,47.340218616,-122.2246170043,Hilshire Terrace,North Auburn,FLEX_DIRECT|WALK,flex-direct +6,Hilshire Terrace to North Auburn (flex-and-transit),10:00,47.40648236,-122.18101501,47.340218616,-122.2246170043,Hilshire Terrace,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +7,Hilshire Terrace to Federal Way (flex-direct),10:00,47.40648236,-122.18101501,47.31322426310727,-122.336540222167,Hilshire Terrace,Federal Way,FLEX_DIRECT|WALK,flex-direct +8,Hilshire Terrace to Federal Way (flex-and-transit),10:00,47.40648236,-122.18101501,47.31322426310727,-122.336540222167,Hilshire Terrace,Federal Way,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +9,Hilshire Terrace to West Seattle (flex-direct),10:00,47.40648236,-122.18101501,47.571024,-122.3877811,Hilshire Terrace,West Seattle,FLEX_DIRECT|WALK,flex-direct +10,Hilshire Terrace to West Seattle (flex-and-transit),10:00,47.40648236,-122.18101501,47.571024,-122.3877811,Hilshire Terrace,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +11,Hilshire Terrace to Puyallup (flex-direct),10:00,47.40648236,-122.18101501,47.18399599096,-122.28950500488,Hilshire Terrace,Puyallup,FLEX_DIRECT|WALK,flex-direct +12,Hilshire Terrace to Puyallup (flex-and-transit),10:00,47.40648236,-122.18101501,47.18399599096,-122.28950500488,Hilshire Terrace,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +13,Hilshire Terrace to Snoqualmie (flex-direct),10:00,47.40648236,-122.18101501,47.52827129,-121.827821731,Hilshire Terrace,Snoqualmie,FLEX_DIRECT|WALK,flex-direct +14,Hilshire Terrace to Snoqualmie (flex-and-transit),10:00,47.40648236,-122.18101501,47.52827129,-121.827821731,Hilshire Terrace,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +15,Hilshire Terrace to Queen Anne (flex-direct),10:00,47.40648236,-122.18101501,47.6394849792,-122.3636627197,Hilshire Terrace,Queen Anne,FLEX_DIRECT|WALK,flex-direct +16,Hilshire Terrace to Queen Anne (flex-and-transit),10:00,47.40648236,-122.18101501,47.6394849792,-122.3636627197,Hilshire Terrace,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +17,Hilshire Terrace to Beacon Hill (flex-direct),10:00,47.40648236,-122.18101501,47.578668036563016,-122.31139183,Hilshire Terrace,Beacon Hill,FLEX_DIRECT|WALK,flex-direct +18,Hilshire Terrace to Beacon Hill (flex-and-transit),10:00,47.40648236,-122.18101501,47.578668036563016,-122.31139183,Hilshire Terrace,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +19,Normandy Park to Hilshire Terrace (flex-direct),10:00,47.44306609375831,-122.34237670,47.40648236,-122.18101501,Normandy Park,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct +20,Normandy Park to Hilshire Terrace (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.40648236,-122.18101501,Normandy Park,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +21,Normandy Park to Des Moines (flex-direct),10:00,47.44306609375831,-122.34237670,47.3978844,-122.30898,Normandy Park,Des Moines,FLEX_DIRECT|WALK,flex-direct +22,Normandy Park to Des Moines (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.3978844,-122.30898,Normandy Park,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +23,Normandy Park to North Auburn (flex-direct),10:00,47.44306609375831,-122.34237670,47.340218616,-122.2246170043,Normandy Park,North Auburn,FLEX_DIRECT|WALK,flex-direct +24,Normandy Park to North Auburn (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.340218616,-122.2246170043,Normandy Park,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +25,Normandy Park to Federal Way (flex-direct),10:00,47.44306609375831,-122.34237670,47.31322426310727,-122.336540222167,Normandy Park,Federal Way,FLEX_DIRECT|WALK,flex-direct +26,Normandy Park to Federal Way (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.31322426310727,-122.336540222167,Normandy Park,Federal Way,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +27,Normandy Park to West Seattle (flex-direct),10:00,47.44306609375831,-122.34237670,47.571024,-122.3877811,Normandy Park,West Seattle,FLEX_DIRECT|WALK,flex-direct +28,Normandy Park to West Seattle (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.571024,-122.3877811,Normandy Park,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +29,Normandy Park to Puyallup (flex-direct),10:00,47.44306609375831,-122.34237670,47.18399599096,-122.28950500488,Normandy Park,Puyallup,FLEX_DIRECT|WALK,flex-direct +30,Normandy Park to Puyallup (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.18399599096,-122.28950500488,Normandy Park,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +31,Normandy Park to Snoqualmie (flex-direct),10:00,47.44306609375831,-122.34237670,47.52827129,-121.827821731,Normandy Park,Snoqualmie,FLEX_DIRECT|WALK,flex-direct +32,Normandy Park to Snoqualmie (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.52827129,-121.827821731,Normandy Park,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +33,Normandy Park to Queen Anne (flex-direct),10:00,47.44306609375831,-122.34237670,47.6394849792,-122.3636627197,Normandy Park,Queen Anne,FLEX_DIRECT|WALK,flex-direct +34,Normandy Park to Queen Anne (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.6394849792,-122.3636627197,Normandy Park,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +35,Normandy Park to Beacon Hill (flex-direct),10:00,47.44306609375831,-122.34237670,47.578668036563016,-122.31139183,Normandy Park,Beacon Hill,FLEX_DIRECT|WALK,flex-direct +36,Normandy Park to Beacon Hill (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.578668036563016,-122.31139183,Normandy Park,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +37,Des Moines to Hilshire Terrace (flex-direct),10:00,47.3978844,-122.30898,47.40648236,-122.18101501,Des Moines,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct +38,Des Moines to Hilshire Terrace (flex-and-transit),10:00,47.3978844,-122.30898,47.40648236,-122.18101501,Des Moines,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +39,Des Moines to Normandy Park (flex-direct),10:00,47.3978844,-122.30898,47.44306609375831,-122.34237670,Des Moines,Normandy Park,FLEX_DIRECT|WALK,flex-direct +40,Des Moines to Normandy Park (flex-and-transit),10:00,47.3978844,-122.30898,47.44306609375831,-122.34237670,Des Moines,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +41,Des Moines to North Auburn (flex-direct),10:00,47.3978844,-122.30898,47.340218616,-122.2246170043,Des Moines,North Auburn,FLEX_DIRECT|WALK,flex-direct +42,Des Moines to North Auburn (flex-and-transit),10:00,47.3978844,-122.30898,47.340218616,-122.2246170043,Des Moines,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +43,Des Moines to Federal Way (flex-direct),10:00,47.3978844,-122.30898,47.31322426310727,-122.336540222167,Des Moines,Federal Way,FLEX_DIRECT|WALK,flex-direct +44,Des Moines to Federal Way (flex-and-transit),10:00,47.3978844,-122.30898,47.31322426310727,-122.336540222167,Des Moines,Federal Way,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +45,Des Moines to West Seattle (flex-direct),10:00,47.3978844,-122.30898,47.571024,-122.3877811,Des Moines,West Seattle,FLEX_DIRECT|WALK,flex-direct +46,Des Moines to West Seattle (flex-and-transit),10:00,47.3978844,-122.30898,47.571024,-122.3877811,Des Moines,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +47,Des Moines to Puyallup (flex-direct),10:00,47.3978844,-122.30898,47.18399599096,-122.28950500488,Des Moines,Puyallup,FLEX_DIRECT|WALK,flex-direct +48,Des Moines to Puyallup (flex-and-transit),10:00,47.3978844,-122.30898,47.18399599096,-122.28950500488,Des Moines,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +49,Des Moines to Snoqualmie (flex-direct),10:00,47.3978844,-122.30898,47.52827129,-121.827821731,Des Moines,Snoqualmie,FLEX_DIRECT|WALK,flex-direct +50,Des Moines to Snoqualmie (flex-and-transit),10:00,47.3978844,-122.30898,47.52827129,-121.827821731,Des Moines,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +51,Des Moines to Queen Anne (flex-direct),10:00,47.3978844,-122.30898,47.6394849792,-122.3636627197,Des Moines,Queen Anne,FLEX_DIRECT|WALK,flex-direct +52,Des Moines to Queen Anne (flex-and-transit),10:00,47.3978844,-122.30898,47.6394849792,-122.3636627197,Des Moines,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +53,Des Moines to Beacon Hill (flex-direct),10:00,47.3978844,-122.30898,47.578668036563016,-122.31139183,Des Moines,Beacon Hill,FLEX_DIRECT|WALK,flex-direct +54,Des Moines to Beacon Hill (flex-and-transit),10:00,47.3978844,-122.30898,47.578668036563016,-122.31139183,Des Moines,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +55,North Auburn to Hilshire Terrace (flex-direct),10:00,47.340218616,-122.2246170043,47.40648236,-122.18101501,North Auburn,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct +56,North Auburn to Hilshire Terrace (flex-and-transit),10:00,47.340218616,-122.2246170043,47.40648236,-122.18101501,North Auburn,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +57,North Auburn to Normandy Park (flex-direct),10:00,47.340218616,-122.2246170043,47.44306609375831,-122.34237670,North Auburn,Normandy Park,FLEX_DIRECT|WALK,flex-direct +58,North Auburn to Normandy Park (flex-and-transit),10:00,47.340218616,-122.2246170043,47.44306609375831,-122.34237670,North Auburn,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +59,North Auburn to Des Moines (flex-direct),10:00,47.340218616,-122.2246170043,47.3978844,-122.30898,North Auburn,Des Moines,FLEX_DIRECT|WALK,flex-direct +60,North Auburn to Des Moines (flex-and-transit),10:00,47.340218616,-122.2246170043,47.3978844,-122.30898,North Auburn,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +61,North Auburn to Federal Way (flex-direct),10:00,47.340218616,-122.2246170043,47.31322426310727,-122.336540222167,North Auburn,Federal Way,FLEX_DIRECT|WALK,flex-direct +62,North Auburn to Federal Way (flex-and-transit),10:00,47.340218616,-122.2246170043,47.31322426310727,-122.336540222167,North Auburn,Federal Way,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +63,North Auburn to West Seattle (flex-direct),10:00,47.340218616,-122.2246170043,47.571024,-122.3877811,North Auburn,West Seattle,FLEX_DIRECT|WALK,flex-direct +64,North Auburn to West Seattle (flex-and-transit),10:00,47.340218616,-122.2246170043,47.571024,-122.3877811,North Auburn,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +65,North Auburn to Puyallup (flex-direct),10:00,47.340218616,-122.2246170043,47.18399599096,-122.28950500488,North Auburn,Puyallup,FLEX_DIRECT|WALK,flex-direct +66,North Auburn to Puyallup (flex-and-transit),10:00,47.340218616,-122.2246170043,47.18399599096,-122.28950500488,North Auburn,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +67,North Auburn to Snoqualmie (flex-direct),10:00,47.340218616,-122.2246170043,47.52827129,-121.827821731,North Auburn,Snoqualmie,FLEX_DIRECT|WALK,flex-direct +68,North Auburn to Snoqualmie (flex-and-transit),10:00,47.340218616,-122.2246170043,47.52827129,-121.827821731,North Auburn,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +69,North Auburn to Queen Anne (flex-direct),10:00,47.340218616,-122.2246170043,47.6394849792,-122.3636627197,North Auburn,Queen Anne,FLEX_DIRECT|WALK,flex-direct +70,North Auburn to Queen Anne (flex-and-transit),10:00,47.340218616,-122.2246170043,47.6394849792,-122.3636627197,North Auburn,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +71,North Auburn to Beacon Hill (flex-direct),10:00,47.340218616,-122.2246170043,47.578668036563016,-122.31139183,North Auburn,Beacon Hill,FLEX_DIRECT|WALK,flex-direct +72,North Auburn to Beacon Hill (flex-and-transit),10:00,47.340218616,-122.2246170043,47.578668036563016,-122.31139183,North Auburn,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +73,Federal Way to Hilshire Terrace (flex-direct),10:00,47.31322426310727,-122.336540222167,47.40648236,-122.18101501,Federal Way,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct +74,Federal Way to Hilshire Terrace (flex-and-transit),10:00,47.31322426310727,-122.336540222167,47.40648236,-122.18101501,Federal Way,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +75,Federal Way to Normandy Park (flex-direct),10:00,47.31322426310727,-122.336540222167,47.44306609375831,-122.34237670,Federal Way,Normandy Park,FLEX_DIRECT|WALK,flex-direct +76,Federal Way to Normandy Park (flex-and-transit),10:00,47.31322426310727,-122.336540222167,47.44306609375831,-122.34237670,Federal Way,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +77,Federal Way to Des Moines (flex-direct),10:00,47.31322426310727,-122.336540222167,47.3978844,-122.30898,Federal Way,Des Moines,FLEX_DIRECT|WALK,flex-direct +78,Federal Way to Des Moines (flex-and-transit),10:00,47.31322426310727,-122.336540222167,47.3978844,-122.30898,Federal Way,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +79,Federal Way to North Auburn (flex-direct),10:00,47.31322426310727,-122.336540222167,47.340218616,-122.2246170043,Federal Way,North Auburn,FLEX_DIRECT|WALK,flex-direct +80,Federal Way to North Auburn (flex-and-transit),10:00,47.31322426310727,-122.336540222167,47.340218616,-122.2246170043,Federal Way,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +81,Federal Way to West Seattle (flex-direct),10:00,47.31322426310727,-122.336540222167,47.571024,-122.3877811,Federal Way,West Seattle,FLEX_DIRECT|WALK,flex-direct +82,Federal Way to West Seattle (flex-and-transit),10:00,47.31322426310727,-122.336540222167,47.571024,-122.3877811,Federal Way,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +83,Federal Way to Puyallup (flex-direct),10:00,47.31322426310727,-122.336540222167,47.18399599096,-122.28950500488,Federal Way,Puyallup,FLEX_DIRECT|WALK,flex-direct +84,Federal Way to Puyallup (flex-and-transit),10:00,47.31322426310727,-122.336540222167,47.18399599096,-122.28950500488,Federal Way,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +85,Federal Way to Snoqualmie (flex-direct),10:00,47.31322426310727,-122.336540222167,47.52827129,-121.827821731,Federal Way,Snoqualmie,FLEX_DIRECT|WALK,flex-direct +86,Federal Way to Snoqualmie (flex-and-transit),10:00,47.31322426310727,-122.336540222167,47.52827129,-121.827821731,Federal Way,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +87,Federal Way to Queen Anne (flex-direct),10:00,47.31322426310727,-122.336540222167,47.6394849792,-122.3636627197,Federal Way,Queen Anne,FLEX_DIRECT|WALK,flex-direct +88,Federal Way to Queen Anne (flex-and-transit),10:00,47.31322426310727,-122.336540222167,47.6394849792,-122.3636627197,Federal Way,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +89,Federal Way to Beacon Hill (flex-direct),10:00,47.31322426310727,-122.336540222167,47.578668036563016,-122.31139183,Federal Way,Beacon Hill,FLEX_DIRECT|WALK,flex-direct +90,Federal Way to Beacon Hill (flex-and-transit),10:00,47.31322426310727,-122.336540222167,47.578668036563016,-122.31139183,Federal Way,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +91,West Seattle to Hilshire Terrace (flex-direct),10:00,47.571024,-122.3877811,47.40648236,-122.18101501,West Seattle,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct +92,West Seattle to Hilshire Terrace (flex-and-transit),10:00,47.571024,-122.3877811,47.40648236,-122.18101501,West Seattle,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +93,West Seattle to Normandy Park (flex-direct),10:00,47.571024,-122.3877811,47.44306609375831,-122.34237670,West Seattle,Normandy Park,FLEX_DIRECT|WALK,flex-direct +94,West Seattle to Normandy Park (flex-and-transit),10:00,47.571024,-122.3877811,47.44306609375831,-122.34237670,West Seattle,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +95,West Seattle to Des Moines (flex-direct),10:00,47.571024,-122.3877811,47.3978844,-122.30898,West Seattle,Des Moines,FLEX_DIRECT|WALK,flex-direct +96,West Seattle to Des Moines (flex-and-transit),10:00,47.571024,-122.3877811,47.3978844,-122.30898,West Seattle,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +97,West Seattle to North Auburn (flex-direct),10:00,47.571024,-122.3877811,47.340218616,-122.2246170043,West Seattle,North Auburn,FLEX_DIRECT|WALK,flex-direct +98,West Seattle to North Auburn (flex-and-transit),10:00,47.571024,-122.3877811,47.340218616,-122.2246170043,West Seattle,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +99,West Seattle to Federal Way (flex-direct),10:00,47.571024,-122.3877811,47.31322426310727,-122.336540222167,West Seattle,Federal Way,FLEX_DIRECT|WALK,flex-direct +100,West Seattle to Federal Way (flex-and-transit),10:00,47.571024,-122.3877811,47.31322426310727,-122.336540222167,West Seattle,Federal Way,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +101,West Seattle to Puyallup (flex-direct),10:00,47.571024,-122.3877811,47.18399599096,-122.28950500488,West Seattle,Puyallup,FLEX_DIRECT|WALK,flex-direct +102,West Seattle to Puyallup (flex-and-transit),10:00,47.571024,-122.3877811,47.18399599096,-122.28950500488,West Seattle,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +103,West Seattle to Snoqualmie (flex-direct),10:00,47.571024,-122.3877811,47.52827129,-121.827821731,West Seattle,Snoqualmie,FLEX_DIRECT|WALK,flex-direct +104,West Seattle to Snoqualmie (flex-and-transit),10:00,47.571024,-122.3877811,47.52827129,-121.827821731,West Seattle,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +105,West Seattle to Queen Anne (flex-direct),10:00,47.571024,-122.3877811,47.6394849792,-122.3636627197,West Seattle,Queen Anne,FLEX_DIRECT|WALK,flex-direct +106,West Seattle to Queen Anne (flex-and-transit),10:00,47.571024,-122.3877811,47.6394849792,-122.3636627197,West Seattle,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +107,West Seattle to Beacon Hill (flex-direct),10:00,47.571024,-122.3877811,47.578668036563016,-122.31139183,West Seattle,Beacon Hill,FLEX_DIRECT|WALK,flex-direct +108,West Seattle to Beacon Hill (flex-and-transit),10:00,47.571024,-122.3877811,47.578668036563016,-122.31139183,West Seattle,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +109,Puyallup to Hilshire Terrace (flex-direct),10:00,47.18399599096,-122.28950500488,47.40648236,-122.18101501,Puyallup,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct +110,Puyallup to Hilshire Terrace (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.40648236,-122.18101501,Puyallup,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +111,Puyallup to Normandy Park (flex-direct),10:00,47.18399599096,-122.28950500488,47.44306609375831,-122.34237670,Puyallup,Normandy Park,FLEX_DIRECT|WALK,flex-direct +112,Puyallup to Normandy Park (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.44306609375831,-122.34237670,Puyallup,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +113,Puyallup to Des Moines (flex-direct),10:00,47.18399599096,-122.28950500488,47.3978844,-122.30898,Puyallup,Des Moines,FLEX_DIRECT|WALK,flex-direct +114,Puyallup to Des Moines (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.3978844,-122.30898,Puyallup,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +115,Puyallup to North Auburn (flex-direct),10:00,47.18399599096,-122.28950500488,47.340218616,-122.2246170043,Puyallup,North Auburn,FLEX_DIRECT|WALK,flex-direct +116,Puyallup to North Auburn (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.340218616,-122.2246170043,Puyallup,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +117,Puyallup to Federal Way (flex-direct),10:00,47.18399599096,-122.28950500488,47.31322426310727,-122.336540222167,Puyallup,Federal Way,FLEX_DIRECT|WALK,flex-direct +118,Puyallup to Federal Way (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.31322426310727,-122.336540222167,Puyallup,Federal Way,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +119,Puyallup to West Seattle (flex-direct),10:00,47.18399599096,-122.28950500488,47.571024,-122.3877811,Puyallup,West Seattle,FLEX_DIRECT|WALK,flex-direct +120,Puyallup to West Seattle (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.571024,-122.3877811,Puyallup,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +121,Puyallup to Snoqualmie (flex-direct),10:00,47.18399599096,-122.28950500488,47.52827129,-121.827821731,Puyallup,Snoqualmie,FLEX_DIRECT|WALK,flex-direct +122,Puyallup to Snoqualmie (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.52827129,-121.827821731,Puyallup,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +123,Puyallup to Queen Anne (flex-direct),10:00,47.18399599096,-122.28950500488,47.6394849792,-122.3636627197,Puyallup,Queen Anne,FLEX_DIRECT|WALK,flex-direct +124,Puyallup to Queen Anne (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.6394849792,-122.3636627197,Puyallup,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +125,Puyallup to Beacon Hill (flex-direct),10:00,47.18399599096,-122.28950500488,47.578668036563016,-122.31139183,Puyallup,Beacon Hill,FLEX_DIRECT|WALK,flex-direct +126,Puyallup to Beacon Hill (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.578668036563016,-122.31139183,Puyallup,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +127,Snoqualmie to Hilshire Terrace (flex-direct),10:00,47.52827129,-121.827821731,47.40648236,-122.18101501,Snoqualmie,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct +128,Snoqualmie to Hilshire Terrace (flex-and-transit),10:00,47.52827129,-121.827821731,47.40648236,-122.18101501,Snoqualmie,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +129,Snoqualmie to Normandy Park (flex-direct),10:00,47.52827129,-121.827821731,47.44306609375831,-122.34237670,Snoqualmie,Normandy Park,FLEX_DIRECT|WALK,flex-direct +130,Snoqualmie to Normandy Park (flex-and-transit),10:00,47.52827129,-121.827821731,47.44306609375831,-122.34237670,Snoqualmie,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +131,Snoqualmie to Des Moines (flex-direct),10:00,47.52827129,-121.827821731,47.3978844,-122.30898,Snoqualmie,Des Moines,FLEX_DIRECT|WALK,flex-direct +132,Snoqualmie to Des Moines (flex-and-transit),10:00,47.52827129,-121.827821731,47.3978844,-122.30898,Snoqualmie,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +133,Snoqualmie to North Auburn (flex-direct),10:00,47.52827129,-121.827821731,47.340218616,-122.2246170043,Snoqualmie,North Auburn,FLEX_DIRECT|WALK,flex-direct +134,Snoqualmie to North Auburn (flex-and-transit),10:00,47.52827129,-121.827821731,47.340218616,-122.2246170043,Snoqualmie,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +135,Snoqualmie to Federal Way (flex-direct),10:00,47.52827129,-121.827821731,47.31322426310727,-122.336540222167,Snoqualmie,Federal Way,FLEX_DIRECT|WALK,flex-direct +136,Snoqualmie to Federal Way (flex-and-transit),10:00,47.52827129,-121.827821731,47.31322426310727,-122.336540222167,Snoqualmie,Federal Way,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +137,Snoqualmie to West Seattle (flex-direct),10:00,47.52827129,-121.827821731,47.571024,-122.3877811,Snoqualmie,West Seattle,FLEX_DIRECT|WALK,flex-direct +138,Snoqualmie to West Seattle (flex-and-transit),10:00,47.52827129,-121.827821731,47.571024,-122.3877811,Snoqualmie,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +139,Snoqualmie to Puyallup (flex-direct),10:00,47.52827129,-121.827821731,47.18399599096,-122.28950500488,Snoqualmie,Puyallup,FLEX_DIRECT|WALK,flex-direct +140,Snoqualmie to Puyallup (flex-and-transit),10:00,47.52827129,-121.827821731,47.18399599096,-122.28950500488,Snoqualmie,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +141,Snoqualmie to Queen Anne (flex-direct),10:00,47.52827129,-121.827821731,47.6394849792,-122.3636627197,Snoqualmie,Queen Anne,FLEX_DIRECT|WALK,flex-direct +142,Snoqualmie to Queen Anne (flex-and-transit),10:00,47.52827129,-121.827821731,47.6394849792,-122.3636627197,Snoqualmie,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +143,Snoqualmie to Beacon Hill (flex-direct),10:00,47.52827129,-121.827821731,47.578668036563016,-122.31139183,Snoqualmie,Beacon Hill,FLEX_DIRECT|WALK,flex-direct +144,Snoqualmie to Beacon Hill (flex-and-transit),10:00,47.52827129,-121.827821731,47.578668036563016,-122.31139183,Snoqualmie,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +145,Queen Anne to Hilshire Terrace (flex-direct),10:00,47.6394849792,-122.3636627197,47.40648236,-122.18101501,Queen Anne,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct +146,Queen Anne to Hilshire Terrace (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.40648236,-122.18101501,Queen Anne,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +147,Queen Anne to Normandy Park (flex-direct),10:00,47.6394849792,-122.3636627197,47.44306609375831,-122.34237670,Queen Anne,Normandy Park,FLEX_DIRECT|WALK,flex-direct +148,Queen Anne to Normandy Park (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.44306609375831,-122.34237670,Queen Anne,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +149,Queen Anne to Des Moines (flex-direct),10:00,47.6394849792,-122.3636627197,47.3978844,-122.30898,Queen Anne,Des Moines,FLEX_DIRECT|WALK,flex-direct +150,Queen Anne to Des Moines (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.3978844,-122.30898,Queen Anne,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +151,Queen Anne to North Auburn (flex-direct),10:00,47.6394849792,-122.3636627197,47.340218616,-122.2246170043,Queen Anne,North Auburn,FLEX_DIRECT|WALK,flex-direct +152,Queen Anne to North Auburn (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.340218616,-122.2246170043,Queen Anne,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +153,Queen Anne to Federal Way (flex-direct),10:00,47.6394849792,-122.3636627197,47.31322426310727,-122.336540222167,Queen Anne,Federal Way,FLEX_DIRECT|WALK,flex-direct +154,Queen Anne to Federal Way (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.31322426310727,-122.336540222167,Queen Anne,Federal Way,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +155,Queen Anne to West Seattle (flex-direct),10:00,47.6394849792,-122.3636627197,47.571024,-122.3877811,Queen Anne,West Seattle,FLEX_DIRECT|WALK,flex-direct +156,Queen Anne to West Seattle (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.571024,-122.3877811,Queen Anne,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +157,Queen Anne to Puyallup (flex-direct),10:00,47.6394849792,-122.3636627197,47.18399599096,-122.28950500488,Queen Anne,Puyallup,FLEX_DIRECT|WALK,flex-direct +158,Queen Anne to Puyallup (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.18399599096,-122.28950500488,Queen Anne,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +159,Queen Anne to Snoqualmie (flex-direct),10:00,47.6394849792,-122.3636627197,47.52827129,-121.827821731,Queen Anne,Snoqualmie,FLEX_DIRECT|WALK,flex-direct +160,Queen Anne to Snoqualmie (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.52827129,-121.827821731,Queen Anne,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +161,Queen Anne to Beacon Hill (flex-direct),10:00,47.6394849792,-122.3636627197,47.578668036563016,-122.31139183,Queen Anne,Beacon Hill,FLEX_DIRECT|WALK,flex-direct +162,Queen Anne to Beacon Hill (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.578668036563016,-122.31139183,Queen Anne,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +163,Beacon Hill to Hilshire Terrace (flex-direct),10:00,47.578668036563016,-122.31139183,47.40648236,-122.18101501,Beacon Hill,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct +164,Beacon Hill to Hilshire Terrace (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.40648236,-122.18101501,Beacon Hill,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +165,Beacon Hill to Normandy Park (flex-direct),10:00,47.578668036563016,-122.31139183,47.44306609375831,-122.34237670,Beacon Hill,Normandy Park,FLEX_DIRECT|WALK,flex-direct +166,Beacon Hill to Normandy Park (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.44306609375831,-122.34237670,Beacon Hill,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +167,Beacon Hill to Des Moines (flex-direct),10:00,47.578668036563016,-122.31139183,47.3978844,-122.30898,Beacon Hill,Des Moines,FLEX_DIRECT|WALK,flex-direct +168,Beacon Hill to Des Moines (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.3978844,-122.30898,Beacon Hill,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +169,Beacon Hill to North Auburn (flex-direct),10:00,47.578668036563016,-122.31139183,47.340218616,-122.2246170043,Beacon Hill,North Auburn,FLEX_DIRECT|WALK,flex-direct +170,Beacon Hill to North Auburn (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.340218616,-122.2246170043,Beacon Hill,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +171,Beacon Hill to Federal Way (flex-direct),10:00,47.578668036563016,-122.31139183,47.31322426310727,-122.336540222167,Beacon Hill,Federal Way,FLEX_DIRECT|WALK,flex-direct +172,Beacon Hill to Federal Way (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.31322426310727,-122.336540222167,Beacon Hill,Federal Way,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +173,Beacon Hill to West Seattle (flex-direct),10:00,47.578668036563016,-122.31139183,47.571024,-122.3877811,Beacon Hill,West Seattle,FLEX_DIRECT|WALK,flex-direct +174,Beacon Hill to West Seattle (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.571024,-122.3877811,Beacon Hill,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +175,Beacon Hill to Puyallup (flex-direct),10:00,47.578668036563016,-122.31139183,47.18399599096,-122.28950500488,Beacon Hill,Puyallup,FLEX_DIRECT|WALK,flex-direct +176,Beacon Hill to Puyallup (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.18399599096,-122.28950500488,Beacon Hill,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +177,Beacon Hill to Snoqualmie (flex-direct),10:00,47.578668036563016,-122.31139183,47.52827129,-121.827821731,Beacon Hill,Snoqualmie,FLEX_DIRECT|WALK,flex-direct +178,Beacon Hill to Snoqualmie (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.52827129,-121.827821731,Beacon Hill,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +179,Beacon Hill to Queen Anne (flex-direct),10:00,47.578668036563016,-122.31139183,47.6394849792,-122.3636627197,Beacon Hill,Queen Anne,FLEX_DIRECT|WALK,flex-direct +180,Beacon Hill to Queen Anne (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.6394849792,-122.3636627197,Beacon Hill,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit From 659c6fa4e11c790205558fcc78f7865be909016a Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 17 Oct 2024 13:48:13 +0200 Subject: [PATCH 063/213] Check where travel search results are --- .github/workflows/performance-test.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/performance-test.yml b/.github/workflows/performance-test.yml index 4c9b5ccb2fd..9ba3ecbe2da 100644 --- a/.github/workflows/performance-test.yml +++ b/.github/workflows/performance-test.yml @@ -102,6 +102,8 @@ jobs: run: | mvn exec:java -Dexec.mainClass="org.opentripplanner.transit.speed_test.SpeedTest" -Dexec.classpathScope=test -Dexec.args="--dir=../test/performance/${{ matrix.location }} -p md -n ${{ matrix.iterations }} -i 3 -0" -P prettierSkip + - run: find . -name *travelSearch* + - name: Archive travel results file if: matrix.profile == 'core' || github.ref == 'refs/heads/dev-2.x' uses: actions/upload-artifact@v4 From b709dccc1dc3b9425630fad4267938fe3a42b34e Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 17 Oct 2024 13:48:46 +0200 Subject: [PATCH 064/213] Remove pierce flex --- test/performance/washington-state/build-config.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/test/performance/washington-state/build-config.json b/test/performance/washington-state/build-config.json index edc0d74e98e..5b0801ac1ef 100644 --- a/test/performance/washington-state/build-config.json +++ b/test/performance/washington-state/build-config.json @@ -48,11 +48,6 @@ "source": "https://otp-performance.leonard.io/data/washington-state-new/pierce-transit.gtfs.zip", "feedId": "pierce" }, - { - "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state-new/piercetransit-wa-us--flex-v2.zip", - "feedId": "pierce-flex" - }, { "type": "gtfs", "source": "https://otp-performance.leonard.io/data/washington-state-new/snoqualmie-wa-us--flex-v2.zip", From f4244a5d17327de8b125ca835375f89edcff1070 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Thu, 17 Oct 2024 12:26:14 +0100 Subject: [PATCH 065/213] add a switch to configure bus / coach for 200 - 299 route types --- .../framework/application/OTPFeature.java | 8 ++++++++ .../gtfs/mapping/TransitModeMapper.java | 10 ++++++---- .../gtfs/mapping/TransitModeMapperTest.java | 16 ++++++++++++++++ doc/user/Configuration.md | 1 + 4 files changed, 31 insertions(+), 4 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/framework/application/OTPFeature.java b/application/src/main/java/org/opentripplanner/framework/application/OTPFeature.java index 324f5397673..c8816981974 100644 --- a/application/src/main/java/org/opentripplanner/framework/application/OTPFeature.java +++ b/application/src/main/java/org/opentripplanner/framework/application/OTPFeature.java @@ -38,6 +38,14 @@ public enum OTPFeature { "Should there be a transfer leg when transferring on the very same stop. Note that for in-seat/interlined transfers no transfer leg will be generated." ), FloatingBike(true, false, "Enable floating bike routing."), + GtfsCoach( + false, + false, + """ + When parsing GTFS data, treat GTFS route type 200 to 299 as coach routes instead of bus routes. + When using the GTFS GraphQL API, do not return coach routes when only BUS is specified as a mode. + """ + ), GtfsGraphQlApi(true, false, "Enable the [GTFS GraphQL API](apis/GTFS-GraphQL-API.md)."), GtfsGraphQlApiRentalStationFuzzyMatching( false, diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/TransitModeMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/TransitModeMapper.java index 203dd5693e3..a96c42a5c12 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/TransitModeMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/TransitModeMapper.java @@ -1,5 +1,6 @@ package org.opentripplanner.gtfs.mapping; +import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.transit.model.basic.TransitMode; public class TransitModeMapper { @@ -19,7 +20,7 @@ public static TransitMode mapMode(int routeType) { if (routeType >= 100 && routeType < 200) { // Railway Service return TransitMode.RAIL; } else if (routeType >= 200 && routeType < 300) { //Coach Service - return TransitMode.COACH; + return OTPFeature.GtfsCoach.isOn() ? TransitMode.COACH : TransitMode.BUS; } else if (routeType >= 300 && routeType < 500) { //Suburban Railway Service and Urban Railway service if (routeType >= 401 && routeType <= 402) { return TransitMode.SUBWAY; @@ -30,10 +31,11 @@ public static TransitMode mapMode(int routeType) { return TransitMode.RAIL; } else if (routeType >= 500 && routeType < 700) { //Metro Service and Underground Service return TransitMode.SUBWAY; - } else if (routeType >= 700 && routeType < 800) { //Bus Service + } else if (routeType >= 700 && routeType < 900) { //Bus Service and Trolleybus service + if (routeType == 800) { + return TransitMode.TROLLEYBUS; + } return TransitMode.BUS; - } else if (routeType >= 800 && routeType < 900) { //Trolleybus Service - return TransitMode.TROLLEYBUS; } else if (routeType >= 900 && routeType < 1000) { //Tram service return TransitMode.TRAM; } else if (routeType >= 1000 && routeType < 1100) { //Water Transport Service diff --git a/application/src/test/java/org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java b/application/src/test/java/org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java index b2e5b1a8a4d..f99dd8cd773 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java @@ -1,13 +1,17 @@ package org.opentripplanner.gtfs.mapping; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.opentripplanner.transit.model.basic.TransitMode.BUS; import static org.opentripplanner.transit.model.basic.TransitMode.CARPOOL; +import static org.opentripplanner.transit.model.basic.TransitMode.COACH; import static org.opentripplanner.transit.model.basic.TransitMode.TAXI; import java.util.stream.Stream; +import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; +import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.transit.model.basic.TransitMode; class TransitModeMapperTest { @@ -29,4 +33,16 @@ static Stream testCases() { void map(int mode, TransitMode expectedMode) { assertEquals(expectedMode, TransitModeMapper.mapMode(mode)); } + + @Test + void testCoachFeatureFlag() { + OTPFeature.GtfsCoach.testOff(() -> { + assertEquals(BUS, TransitModeMapper.mapMode(200)); + assertEquals(BUS, TransitModeMapper.mapMode(299)); + }); + OTPFeature.GtfsCoach.testOn(() -> { + assertEquals(COACH, TransitModeMapper.mapMode(200)); + assertEquals(COACH, TransitModeMapper.mapMode(299)); + }); + } } diff --git a/doc/user/Configuration.md b/doc/user/Configuration.md index bca974f8617..1ae152d331c 100644 --- a/doc/user/Configuration.md +++ b/doc/user/Configuration.md @@ -228,6 +228,7 @@ Here is a list of all features which can be toggled on/off and their default val | `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. | ✓️ | | | `ExtraTransferLegOnSameStop` | Should there be a transfer leg when transferring on the very same stop. Note that for in-seat/interlined transfers no transfer leg will be generated. | | | | `FloatingBike` | Enable floating bike routing. | ✓️ | | +| `GtfsCoach` | When parsing GTFS data, treat GTFS route type 200 to 299 as coach routes instead of bus routes. When using the GTFS GraphQL API, do not return coach routes when only BUS is specified as a mode. | | | | `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. | | | From 5cee1405fe49b3bf2cf80c71d7039896452e84a7 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Thu, 17 Oct 2024 13:04:39 +0100 Subject: [PATCH 066/213] separate bus and coach API --- .../api/parameter/ApiRequestMode.java | 8 +++++- .../LegacyRouteRequestMapperTest.java | 28 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/application/src/main/java/org/opentripplanner/api/parameter/ApiRequestMode.java b/application/src/main/java/org/opentripplanner/api/parameter/ApiRequestMode.java index 6e19b106033..c78e5dfb66f 100644 --- a/application/src/main/java/org/opentripplanner/api/parameter/ApiRequestMode.java +++ b/application/src/main/java/org/opentripplanner/api/parameter/ApiRequestMode.java @@ -2,6 +2,7 @@ import java.util.Collection; import java.util.List; +import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.transit.model.basic.TransitMode; public enum ApiRequestMode { @@ -12,7 +13,8 @@ public enum ApiRequestMode { TRAM(TransitMode.TRAM), SUBWAY(TransitMode.SUBWAY), RAIL(TransitMode.RAIL), - BUS(TransitMode.BUS, TransitMode.COACH), + BUS(TransitMode.BUS), + COACH(TransitMode.COACH), FERRY(TransitMode.FERRY), CABLE_CAR(TransitMode.CABLE_CAR), GONDOLA(TransitMode.GONDOLA), @@ -40,6 +42,10 @@ public enum ApiRequestMode { } public Collection getTransitModes() { + if (this == BUS && OTPFeature.GtfsCoach.isOff()) { + return List.of(TransitMode.BUS, TransitMode.COACH); + } + return transitModes; } } diff --git a/application/src/test/java/org/opentripplanner/apis/gtfs/mapping/routerequest/LegacyRouteRequestMapperTest.java b/application/src/test/java/org/opentripplanner/apis/gtfs/mapping/routerequest/LegacyRouteRequestMapperTest.java index 3ca29f7c531..b42ea828462 100644 --- a/application/src/test/java/org/opentripplanner/apis/gtfs/mapping/routerequest/LegacyRouteRequestMapperTest.java +++ b/application/src/test/java/org/opentripplanner/apis/gtfs/mapping/routerequest/LegacyRouteRequestMapperTest.java @@ -27,6 +27,7 @@ import org.opentripplanner.apis.gtfs.TestRoutingService; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes; import org.opentripplanner.ext.fares.impl.DefaultFareService; +import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.model.plan.PlanTestConstants; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.preference.TimeSlopeSafetyTriangle; @@ -144,9 +145,36 @@ static Stream transportModesCases() { ); } + static Stream transportModesCasesWithCoach() { + return Stream.of( + of( + List.of(mode("BUS")), + "[TransitFilterRequest{select: [SelectRequest{transportModes: [BUS]}]}]" + ), + of( + List.of(mode("BUS"), mode("COACH")), + "[TransitFilterRequest{select: [SelectRequest{transportModes: [BUS, COACH]}]}]" + ), + of( + List.of(mode("BUS"), mode("MONORAIL")), + "[TransitFilterRequest{select: [SelectRequest{transportModes: [BUS, MONORAIL]}]}]" + ) + ); + } + @ParameterizedTest @MethodSource("transportModesCases") void modes(List> modes, String expectedFilters) { + OTPFeature.GtfsCoach.testOff(() -> testModes(modes, expectedFilters)); + } + + @ParameterizedTest + @MethodSource("transportModesCasesWithCoach") + void modesWithCoach(List> modes, String expectedFilters) { + OTPFeature.GtfsCoach.testOn(() -> testModes(modes, expectedFilters)); + } + + private void testModes(List> modes, String expectedFilters) { Map arguments = Map.of("transportModes", modes); var routeRequest = LegacyRouteRequestMapper.toRouteRequest( From 417419b9c1f110d58762fcd0041e81da397f0f97 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 17 Oct 2024 14:11:56 +0200 Subject: [PATCH 067/213] Remove some searches and Snoqualmie feed --- .../washington-state/build-config.json | 5 - .../washington-state/generate_test_cases.py | 8 - .../washington-state/travelSearch.csv | 284 +++++++----------- 3 files changed, 108 insertions(+), 189 deletions(-) diff --git a/test/performance/washington-state/build-config.json b/test/performance/washington-state/build-config.json index 5b0801ac1ef..a8d0d5a43bb 100644 --- a/test/performance/washington-state/build-config.json +++ b/test/performance/washington-state/build-config.json @@ -48,11 +48,6 @@ "source": "https://otp-performance.leonard.io/data/washington-state-new/pierce-transit.gtfs.zip", "feedId": "pierce" }, - { - "type": "gtfs", - "source": "https://otp-performance.leonard.io/data/washington-state-new/snoqualmie-wa-us--flex-v2.zip", - "feedId": "snoqualmie" - }, { "type": "gtfs", "source": "https://otp-performance.leonard.io/data/washington-state-new/soundgenerations-wa-us-hyde--flex-v2.zip", diff --git a/test/performance/washington-state/generate_test_cases.py b/test/performance/washington-state/generate_test_cases.py index f73ececb3a2..c3ac9d2c672 100755 --- a/test/performance/washington-state/generate_test_cases.py +++ b/test/performance/washington-state/generate_test_cases.py @@ -17,14 +17,6 @@ "coordinates": "47.3978844,-122.30898", "name": "Des Moines" }, - { - "coordinates": "47.340218616,-122.2246170043", - "name": "North Auburn" - }, - { - "coordinates": "47.31322426310727,-122.336540222167", - "name": "Federal Way" - }, { "coordinates": "47.571024,-122.3877811", "name": "West Seattle" diff --git a/test/performance/washington-state/travelSearch.csv b/test/performance/washington-state/travelSearch.csv index d1eb07beddc..28daf760405 100644 --- a/test/performance/washington-state/travelSearch.csv +++ b/test/performance/washington-state/travelSearch.csv @@ -3,179 +3,111 @@ testCaseId,description,departure,fromLat,fromLon,toLat,toLon,origin,destination, 2,Hilshire Terrace to Normandy Park (flex-and-transit),10:00,47.40648236,-122.18101501,47.44306609375831,-122.34237670,Hilshire Terrace,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit 3,Hilshire Terrace to Des Moines (flex-direct),10:00,47.40648236,-122.18101501,47.3978844,-122.30898,Hilshire Terrace,Des Moines,FLEX_DIRECT|WALK,flex-direct 4,Hilshire Terrace to Des Moines (flex-and-transit),10:00,47.40648236,-122.18101501,47.3978844,-122.30898,Hilshire Terrace,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -5,Hilshire Terrace to North Auburn (flex-direct),10:00,47.40648236,-122.18101501,47.340218616,-122.2246170043,Hilshire Terrace,North Auburn,FLEX_DIRECT|WALK,flex-direct -6,Hilshire Terrace to North Auburn (flex-and-transit),10:00,47.40648236,-122.18101501,47.340218616,-122.2246170043,Hilshire Terrace,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -7,Hilshire Terrace to Federal Way (flex-direct),10:00,47.40648236,-122.18101501,47.31322426310727,-122.336540222167,Hilshire Terrace,Federal Way,FLEX_DIRECT|WALK,flex-direct -8,Hilshire Terrace to Federal Way (flex-and-transit),10:00,47.40648236,-122.18101501,47.31322426310727,-122.336540222167,Hilshire Terrace,Federal Way,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -9,Hilshire Terrace to West Seattle (flex-direct),10:00,47.40648236,-122.18101501,47.571024,-122.3877811,Hilshire Terrace,West Seattle,FLEX_DIRECT|WALK,flex-direct -10,Hilshire Terrace to West Seattle (flex-and-transit),10:00,47.40648236,-122.18101501,47.571024,-122.3877811,Hilshire Terrace,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -11,Hilshire Terrace to Puyallup (flex-direct),10:00,47.40648236,-122.18101501,47.18399599096,-122.28950500488,Hilshire Terrace,Puyallup,FLEX_DIRECT|WALK,flex-direct -12,Hilshire Terrace to Puyallup (flex-and-transit),10:00,47.40648236,-122.18101501,47.18399599096,-122.28950500488,Hilshire Terrace,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -13,Hilshire Terrace to Snoqualmie (flex-direct),10:00,47.40648236,-122.18101501,47.52827129,-121.827821731,Hilshire Terrace,Snoqualmie,FLEX_DIRECT|WALK,flex-direct -14,Hilshire Terrace to Snoqualmie (flex-and-transit),10:00,47.40648236,-122.18101501,47.52827129,-121.827821731,Hilshire Terrace,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -15,Hilshire Terrace to Queen Anne (flex-direct),10:00,47.40648236,-122.18101501,47.6394849792,-122.3636627197,Hilshire Terrace,Queen Anne,FLEX_DIRECT|WALK,flex-direct -16,Hilshire Terrace to Queen Anne (flex-and-transit),10:00,47.40648236,-122.18101501,47.6394849792,-122.3636627197,Hilshire Terrace,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -17,Hilshire Terrace to Beacon Hill (flex-direct),10:00,47.40648236,-122.18101501,47.578668036563016,-122.31139183,Hilshire Terrace,Beacon Hill,FLEX_DIRECT|WALK,flex-direct -18,Hilshire Terrace to Beacon Hill (flex-and-transit),10:00,47.40648236,-122.18101501,47.578668036563016,-122.31139183,Hilshire Terrace,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -19,Normandy Park to Hilshire Terrace (flex-direct),10:00,47.44306609375831,-122.34237670,47.40648236,-122.18101501,Normandy Park,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct -20,Normandy Park to Hilshire Terrace (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.40648236,-122.18101501,Normandy Park,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -21,Normandy Park to Des Moines (flex-direct),10:00,47.44306609375831,-122.34237670,47.3978844,-122.30898,Normandy Park,Des Moines,FLEX_DIRECT|WALK,flex-direct -22,Normandy Park to Des Moines (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.3978844,-122.30898,Normandy Park,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -23,Normandy Park to North Auburn (flex-direct),10:00,47.44306609375831,-122.34237670,47.340218616,-122.2246170043,Normandy Park,North Auburn,FLEX_DIRECT|WALK,flex-direct -24,Normandy Park to North Auburn (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.340218616,-122.2246170043,Normandy Park,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -25,Normandy Park to Federal Way (flex-direct),10:00,47.44306609375831,-122.34237670,47.31322426310727,-122.336540222167,Normandy Park,Federal Way,FLEX_DIRECT|WALK,flex-direct -26,Normandy Park to Federal Way (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.31322426310727,-122.336540222167,Normandy Park,Federal Way,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -27,Normandy Park to West Seattle (flex-direct),10:00,47.44306609375831,-122.34237670,47.571024,-122.3877811,Normandy Park,West Seattle,FLEX_DIRECT|WALK,flex-direct -28,Normandy Park to West Seattle (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.571024,-122.3877811,Normandy Park,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -29,Normandy Park to Puyallup (flex-direct),10:00,47.44306609375831,-122.34237670,47.18399599096,-122.28950500488,Normandy Park,Puyallup,FLEX_DIRECT|WALK,flex-direct -30,Normandy Park to Puyallup (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.18399599096,-122.28950500488,Normandy Park,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -31,Normandy Park to Snoqualmie (flex-direct),10:00,47.44306609375831,-122.34237670,47.52827129,-121.827821731,Normandy Park,Snoqualmie,FLEX_DIRECT|WALK,flex-direct -32,Normandy Park to Snoqualmie (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.52827129,-121.827821731,Normandy Park,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -33,Normandy Park to Queen Anne (flex-direct),10:00,47.44306609375831,-122.34237670,47.6394849792,-122.3636627197,Normandy Park,Queen Anne,FLEX_DIRECT|WALK,flex-direct -34,Normandy Park to Queen Anne (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.6394849792,-122.3636627197,Normandy Park,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -35,Normandy Park to Beacon Hill (flex-direct),10:00,47.44306609375831,-122.34237670,47.578668036563016,-122.31139183,Normandy Park,Beacon Hill,FLEX_DIRECT|WALK,flex-direct -36,Normandy Park to Beacon Hill (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.578668036563016,-122.31139183,Normandy Park,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -37,Des Moines to Hilshire Terrace (flex-direct),10:00,47.3978844,-122.30898,47.40648236,-122.18101501,Des Moines,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct -38,Des Moines to Hilshire Terrace (flex-and-transit),10:00,47.3978844,-122.30898,47.40648236,-122.18101501,Des Moines,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -39,Des Moines to Normandy Park (flex-direct),10:00,47.3978844,-122.30898,47.44306609375831,-122.34237670,Des Moines,Normandy Park,FLEX_DIRECT|WALK,flex-direct -40,Des Moines to Normandy Park (flex-and-transit),10:00,47.3978844,-122.30898,47.44306609375831,-122.34237670,Des Moines,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -41,Des Moines to North Auburn (flex-direct),10:00,47.3978844,-122.30898,47.340218616,-122.2246170043,Des Moines,North Auburn,FLEX_DIRECT|WALK,flex-direct -42,Des Moines to North Auburn (flex-and-transit),10:00,47.3978844,-122.30898,47.340218616,-122.2246170043,Des Moines,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -43,Des Moines to Federal Way (flex-direct),10:00,47.3978844,-122.30898,47.31322426310727,-122.336540222167,Des Moines,Federal Way,FLEX_DIRECT|WALK,flex-direct -44,Des Moines to Federal Way (flex-and-transit),10:00,47.3978844,-122.30898,47.31322426310727,-122.336540222167,Des Moines,Federal Way,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -45,Des Moines to West Seattle (flex-direct),10:00,47.3978844,-122.30898,47.571024,-122.3877811,Des Moines,West Seattle,FLEX_DIRECT|WALK,flex-direct -46,Des Moines to West Seattle (flex-and-transit),10:00,47.3978844,-122.30898,47.571024,-122.3877811,Des Moines,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -47,Des Moines to Puyallup (flex-direct),10:00,47.3978844,-122.30898,47.18399599096,-122.28950500488,Des Moines,Puyallup,FLEX_DIRECT|WALK,flex-direct -48,Des Moines to Puyallup (flex-and-transit),10:00,47.3978844,-122.30898,47.18399599096,-122.28950500488,Des Moines,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -49,Des Moines to Snoqualmie (flex-direct),10:00,47.3978844,-122.30898,47.52827129,-121.827821731,Des Moines,Snoqualmie,FLEX_DIRECT|WALK,flex-direct -50,Des Moines to Snoqualmie (flex-and-transit),10:00,47.3978844,-122.30898,47.52827129,-121.827821731,Des Moines,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -51,Des Moines to Queen Anne (flex-direct),10:00,47.3978844,-122.30898,47.6394849792,-122.3636627197,Des Moines,Queen Anne,FLEX_DIRECT|WALK,flex-direct -52,Des Moines to Queen Anne (flex-and-transit),10:00,47.3978844,-122.30898,47.6394849792,-122.3636627197,Des Moines,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -53,Des Moines to Beacon Hill (flex-direct),10:00,47.3978844,-122.30898,47.578668036563016,-122.31139183,Des Moines,Beacon Hill,FLEX_DIRECT|WALK,flex-direct -54,Des Moines to Beacon Hill (flex-and-transit),10:00,47.3978844,-122.30898,47.578668036563016,-122.31139183,Des Moines,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -55,North Auburn to Hilshire Terrace (flex-direct),10:00,47.340218616,-122.2246170043,47.40648236,-122.18101501,North Auburn,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct -56,North Auburn to Hilshire Terrace (flex-and-transit),10:00,47.340218616,-122.2246170043,47.40648236,-122.18101501,North Auburn,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -57,North Auburn to Normandy Park (flex-direct),10:00,47.340218616,-122.2246170043,47.44306609375831,-122.34237670,North Auburn,Normandy Park,FLEX_DIRECT|WALK,flex-direct -58,North Auburn to Normandy Park (flex-and-transit),10:00,47.340218616,-122.2246170043,47.44306609375831,-122.34237670,North Auburn,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -59,North Auburn to Des Moines (flex-direct),10:00,47.340218616,-122.2246170043,47.3978844,-122.30898,North Auburn,Des Moines,FLEX_DIRECT|WALK,flex-direct -60,North Auburn to Des Moines (flex-and-transit),10:00,47.340218616,-122.2246170043,47.3978844,-122.30898,North Auburn,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -61,North Auburn to Federal Way (flex-direct),10:00,47.340218616,-122.2246170043,47.31322426310727,-122.336540222167,North Auburn,Federal Way,FLEX_DIRECT|WALK,flex-direct -62,North Auburn to Federal Way (flex-and-transit),10:00,47.340218616,-122.2246170043,47.31322426310727,-122.336540222167,North Auburn,Federal Way,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -63,North Auburn to West Seattle (flex-direct),10:00,47.340218616,-122.2246170043,47.571024,-122.3877811,North Auburn,West Seattle,FLEX_DIRECT|WALK,flex-direct -64,North Auburn to West Seattle (flex-and-transit),10:00,47.340218616,-122.2246170043,47.571024,-122.3877811,North Auburn,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -65,North Auburn to Puyallup (flex-direct),10:00,47.340218616,-122.2246170043,47.18399599096,-122.28950500488,North Auburn,Puyallup,FLEX_DIRECT|WALK,flex-direct -66,North Auburn to Puyallup (flex-and-transit),10:00,47.340218616,-122.2246170043,47.18399599096,-122.28950500488,North Auburn,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -67,North Auburn to Snoqualmie (flex-direct),10:00,47.340218616,-122.2246170043,47.52827129,-121.827821731,North Auburn,Snoqualmie,FLEX_DIRECT|WALK,flex-direct -68,North Auburn to Snoqualmie (flex-and-transit),10:00,47.340218616,-122.2246170043,47.52827129,-121.827821731,North Auburn,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -69,North Auburn to Queen Anne (flex-direct),10:00,47.340218616,-122.2246170043,47.6394849792,-122.3636627197,North Auburn,Queen Anne,FLEX_DIRECT|WALK,flex-direct -70,North Auburn to Queen Anne (flex-and-transit),10:00,47.340218616,-122.2246170043,47.6394849792,-122.3636627197,North Auburn,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -71,North Auburn to Beacon Hill (flex-direct),10:00,47.340218616,-122.2246170043,47.578668036563016,-122.31139183,North Auburn,Beacon Hill,FLEX_DIRECT|WALK,flex-direct -72,North Auburn to Beacon Hill (flex-and-transit),10:00,47.340218616,-122.2246170043,47.578668036563016,-122.31139183,North Auburn,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -73,Federal Way to Hilshire Terrace (flex-direct),10:00,47.31322426310727,-122.336540222167,47.40648236,-122.18101501,Federal Way,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct -74,Federal Way to Hilshire Terrace (flex-and-transit),10:00,47.31322426310727,-122.336540222167,47.40648236,-122.18101501,Federal Way,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -75,Federal Way to Normandy Park (flex-direct),10:00,47.31322426310727,-122.336540222167,47.44306609375831,-122.34237670,Federal Way,Normandy Park,FLEX_DIRECT|WALK,flex-direct -76,Federal Way to Normandy Park (flex-and-transit),10:00,47.31322426310727,-122.336540222167,47.44306609375831,-122.34237670,Federal Way,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -77,Federal Way to Des Moines (flex-direct),10:00,47.31322426310727,-122.336540222167,47.3978844,-122.30898,Federal Way,Des Moines,FLEX_DIRECT|WALK,flex-direct -78,Federal Way to Des Moines (flex-and-transit),10:00,47.31322426310727,-122.336540222167,47.3978844,-122.30898,Federal Way,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -79,Federal Way to North Auburn (flex-direct),10:00,47.31322426310727,-122.336540222167,47.340218616,-122.2246170043,Federal Way,North Auburn,FLEX_DIRECT|WALK,flex-direct -80,Federal Way to North Auburn (flex-and-transit),10:00,47.31322426310727,-122.336540222167,47.340218616,-122.2246170043,Federal Way,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -81,Federal Way to West Seattle (flex-direct),10:00,47.31322426310727,-122.336540222167,47.571024,-122.3877811,Federal Way,West Seattle,FLEX_DIRECT|WALK,flex-direct -82,Federal Way to West Seattle (flex-and-transit),10:00,47.31322426310727,-122.336540222167,47.571024,-122.3877811,Federal Way,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -83,Federal Way to Puyallup (flex-direct),10:00,47.31322426310727,-122.336540222167,47.18399599096,-122.28950500488,Federal Way,Puyallup,FLEX_DIRECT|WALK,flex-direct -84,Federal Way to Puyallup (flex-and-transit),10:00,47.31322426310727,-122.336540222167,47.18399599096,-122.28950500488,Federal Way,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -85,Federal Way to Snoqualmie (flex-direct),10:00,47.31322426310727,-122.336540222167,47.52827129,-121.827821731,Federal Way,Snoqualmie,FLEX_DIRECT|WALK,flex-direct -86,Federal Way to Snoqualmie (flex-and-transit),10:00,47.31322426310727,-122.336540222167,47.52827129,-121.827821731,Federal Way,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -87,Federal Way to Queen Anne (flex-direct),10:00,47.31322426310727,-122.336540222167,47.6394849792,-122.3636627197,Federal Way,Queen Anne,FLEX_DIRECT|WALK,flex-direct -88,Federal Way to Queen Anne (flex-and-transit),10:00,47.31322426310727,-122.336540222167,47.6394849792,-122.3636627197,Federal Way,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -89,Federal Way to Beacon Hill (flex-direct),10:00,47.31322426310727,-122.336540222167,47.578668036563016,-122.31139183,Federal Way,Beacon Hill,FLEX_DIRECT|WALK,flex-direct -90,Federal Way to Beacon Hill (flex-and-transit),10:00,47.31322426310727,-122.336540222167,47.578668036563016,-122.31139183,Federal Way,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -91,West Seattle to Hilshire Terrace (flex-direct),10:00,47.571024,-122.3877811,47.40648236,-122.18101501,West Seattle,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct -92,West Seattle to Hilshire Terrace (flex-and-transit),10:00,47.571024,-122.3877811,47.40648236,-122.18101501,West Seattle,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -93,West Seattle to Normandy Park (flex-direct),10:00,47.571024,-122.3877811,47.44306609375831,-122.34237670,West Seattle,Normandy Park,FLEX_DIRECT|WALK,flex-direct -94,West Seattle to Normandy Park (flex-and-transit),10:00,47.571024,-122.3877811,47.44306609375831,-122.34237670,West Seattle,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -95,West Seattle to Des Moines (flex-direct),10:00,47.571024,-122.3877811,47.3978844,-122.30898,West Seattle,Des Moines,FLEX_DIRECT|WALK,flex-direct -96,West Seattle to Des Moines (flex-and-transit),10:00,47.571024,-122.3877811,47.3978844,-122.30898,West Seattle,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -97,West Seattle to North Auburn (flex-direct),10:00,47.571024,-122.3877811,47.340218616,-122.2246170043,West Seattle,North Auburn,FLEX_DIRECT|WALK,flex-direct -98,West Seattle to North Auburn (flex-and-transit),10:00,47.571024,-122.3877811,47.340218616,-122.2246170043,West Seattle,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -99,West Seattle to Federal Way (flex-direct),10:00,47.571024,-122.3877811,47.31322426310727,-122.336540222167,West Seattle,Federal Way,FLEX_DIRECT|WALK,flex-direct -100,West Seattle to Federal Way (flex-and-transit),10:00,47.571024,-122.3877811,47.31322426310727,-122.336540222167,West Seattle,Federal Way,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -101,West Seattle to Puyallup (flex-direct),10:00,47.571024,-122.3877811,47.18399599096,-122.28950500488,West Seattle,Puyallup,FLEX_DIRECT|WALK,flex-direct -102,West Seattle to Puyallup (flex-and-transit),10:00,47.571024,-122.3877811,47.18399599096,-122.28950500488,West Seattle,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -103,West Seattle to Snoqualmie (flex-direct),10:00,47.571024,-122.3877811,47.52827129,-121.827821731,West Seattle,Snoqualmie,FLEX_DIRECT|WALK,flex-direct -104,West Seattle to Snoqualmie (flex-and-transit),10:00,47.571024,-122.3877811,47.52827129,-121.827821731,West Seattle,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -105,West Seattle to Queen Anne (flex-direct),10:00,47.571024,-122.3877811,47.6394849792,-122.3636627197,West Seattle,Queen Anne,FLEX_DIRECT|WALK,flex-direct -106,West Seattle to Queen Anne (flex-and-transit),10:00,47.571024,-122.3877811,47.6394849792,-122.3636627197,West Seattle,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -107,West Seattle to Beacon Hill (flex-direct),10:00,47.571024,-122.3877811,47.578668036563016,-122.31139183,West Seattle,Beacon Hill,FLEX_DIRECT|WALK,flex-direct -108,West Seattle to Beacon Hill (flex-and-transit),10:00,47.571024,-122.3877811,47.578668036563016,-122.31139183,West Seattle,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -109,Puyallup to Hilshire Terrace (flex-direct),10:00,47.18399599096,-122.28950500488,47.40648236,-122.18101501,Puyallup,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct -110,Puyallup to Hilshire Terrace (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.40648236,-122.18101501,Puyallup,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -111,Puyallup to Normandy Park (flex-direct),10:00,47.18399599096,-122.28950500488,47.44306609375831,-122.34237670,Puyallup,Normandy Park,FLEX_DIRECT|WALK,flex-direct -112,Puyallup to Normandy Park (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.44306609375831,-122.34237670,Puyallup,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -113,Puyallup to Des Moines (flex-direct),10:00,47.18399599096,-122.28950500488,47.3978844,-122.30898,Puyallup,Des Moines,FLEX_DIRECT|WALK,flex-direct -114,Puyallup to Des Moines (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.3978844,-122.30898,Puyallup,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -115,Puyallup to North Auburn (flex-direct),10:00,47.18399599096,-122.28950500488,47.340218616,-122.2246170043,Puyallup,North Auburn,FLEX_DIRECT|WALK,flex-direct -116,Puyallup to North Auburn (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.340218616,-122.2246170043,Puyallup,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -117,Puyallup to Federal Way (flex-direct),10:00,47.18399599096,-122.28950500488,47.31322426310727,-122.336540222167,Puyallup,Federal Way,FLEX_DIRECT|WALK,flex-direct -118,Puyallup to Federal Way (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.31322426310727,-122.336540222167,Puyallup,Federal Way,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -119,Puyallup to West Seattle (flex-direct),10:00,47.18399599096,-122.28950500488,47.571024,-122.3877811,Puyallup,West Seattle,FLEX_DIRECT|WALK,flex-direct -120,Puyallup to West Seattle (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.571024,-122.3877811,Puyallup,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -121,Puyallup to Snoqualmie (flex-direct),10:00,47.18399599096,-122.28950500488,47.52827129,-121.827821731,Puyallup,Snoqualmie,FLEX_DIRECT|WALK,flex-direct -122,Puyallup to Snoqualmie (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.52827129,-121.827821731,Puyallup,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -123,Puyallup to Queen Anne (flex-direct),10:00,47.18399599096,-122.28950500488,47.6394849792,-122.3636627197,Puyallup,Queen Anne,FLEX_DIRECT|WALK,flex-direct -124,Puyallup to Queen Anne (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.6394849792,-122.3636627197,Puyallup,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -125,Puyallup to Beacon Hill (flex-direct),10:00,47.18399599096,-122.28950500488,47.578668036563016,-122.31139183,Puyallup,Beacon Hill,FLEX_DIRECT|WALK,flex-direct -126,Puyallup to Beacon Hill (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.578668036563016,-122.31139183,Puyallup,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -127,Snoqualmie to Hilshire Terrace (flex-direct),10:00,47.52827129,-121.827821731,47.40648236,-122.18101501,Snoqualmie,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct -128,Snoqualmie to Hilshire Terrace (flex-and-transit),10:00,47.52827129,-121.827821731,47.40648236,-122.18101501,Snoqualmie,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -129,Snoqualmie to Normandy Park (flex-direct),10:00,47.52827129,-121.827821731,47.44306609375831,-122.34237670,Snoqualmie,Normandy Park,FLEX_DIRECT|WALK,flex-direct -130,Snoqualmie to Normandy Park (flex-and-transit),10:00,47.52827129,-121.827821731,47.44306609375831,-122.34237670,Snoqualmie,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -131,Snoqualmie to Des Moines (flex-direct),10:00,47.52827129,-121.827821731,47.3978844,-122.30898,Snoqualmie,Des Moines,FLEX_DIRECT|WALK,flex-direct -132,Snoqualmie to Des Moines (flex-and-transit),10:00,47.52827129,-121.827821731,47.3978844,-122.30898,Snoqualmie,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -133,Snoqualmie to North Auburn (flex-direct),10:00,47.52827129,-121.827821731,47.340218616,-122.2246170043,Snoqualmie,North Auburn,FLEX_DIRECT|WALK,flex-direct -134,Snoqualmie to North Auburn (flex-and-transit),10:00,47.52827129,-121.827821731,47.340218616,-122.2246170043,Snoqualmie,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -135,Snoqualmie to Federal Way (flex-direct),10:00,47.52827129,-121.827821731,47.31322426310727,-122.336540222167,Snoqualmie,Federal Way,FLEX_DIRECT|WALK,flex-direct -136,Snoqualmie to Federal Way (flex-and-transit),10:00,47.52827129,-121.827821731,47.31322426310727,-122.336540222167,Snoqualmie,Federal Way,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -137,Snoqualmie to West Seattle (flex-direct),10:00,47.52827129,-121.827821731,47.571024,-122.3877811,Snoqualmie,West Seattle,FLEX_DIRECT|WALK,flex-direct -138,Snoqualmie to West Seattle (flex-and-transit),10:00,47.52827129,-121.827821731,47.571024,-122.3877811,Snoqualmie,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -139,Snoqualmie to Puyallup (flex-direct),10:00,47.52827129,-121.827821731,47.18399599096,-122.28950500488,Snoqualmie,Puyallup,FLEX_DIRECT|WALK,flex-direct -140,Snoqualmie to Puyallup (flex-and-transit),10:00,47.52827129,-121.827821731,47.18399599096,-122.28950500488,Snoqualmie,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -141,Snoqualmie to Queen Anne (flex-direct),10:00,47.52827129,-121.827821731,47.6394849792,-122.3636627197,Snoqualmie,Queen Anne,FLEX_DIRECT|WALK,flex-direct -142,Snoqualmie to Queen Anne (flex-and-transit),10:00,47.52827129,-121.827821731,47.6394849792,-122.3636627197,Snoqualmie,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -143,Snoqualmie to Beacon Hill (flex-direct),10:00,47.52827129,-121.827821731,47.578668036563016,-122.31139183,Snoqualmie,Beacon Hill,FLEX_DIRECT|WALK,flex-direct -144,Snoqualmie to Beacon Hill (flex-and-transit),10:00,47.52827129,-121.827821731,47.578668036563016,-122.31139183,Snoqualmie,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -145,Queen Anne to Hilshire Terrace (flex-direct),10:00,47.6394849792,-122.3636627197,47.40648236,-122.18101501,Queen Anne,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct -146,Queen Anne to Hilshire Terrace (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.40648236,-122.18101501,Queen Anne,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -147,Queen Anne to Normandy Park (flex-direct),10:00,47.6394849792,-122.3636627197,47.44306609375831,-122.34237670,Queen Anne,Normandy Park,FLEX_DIRECT|WALK,flex-direct -148,Queen Anne to Normandy Park (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.44306609375831,-122.34237670,Queen Anne,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -149,Queen Anne to Des Moines (flex-direct),10:00,47.6394849792,-122.3636627197,47.3978844,-122.30898,Queen Anne,Des Moines,FLEX_DIRECT|WALK,flex-direct -150,Queen Anne to Des Moines (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.3978844,-122.30898,Queen Anne,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -151,Queen Anne to North Auburn (flex-direct),10:00,47.6394849792,-122.3636627197,47.340218616,-122.2246170043,Queen Anne,North Auburn,FLEX_DIRECT|WALK,flex-direct -152,Queen Anne to North Auburn (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.340218616,-122.2246170043,Queen Anne,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -153,Queen Anne to Federal Way (flex-direct),10:00,47.6394849792,-122.3636627197,47.31322426310727,-122.336540222167,Queen Anne,Federal Way,FLEX_DIRECT|WALK,flex-direct -154,Queen Anne to Federal Way (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.31322426310727,-122.336540222167,Queen Anne,Federal Way,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -155,Queen Anne to West Seattle (flex-direct),10:00,47.6394849792,-122.3636627197,47.571024,-122.3877811,Queen Anne,West Seattle,FLEX_DIRECT|WALK,flex-direct -156,Queen Anne to West Seattle (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.571024,-122.3877811,Queen Anne,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -157,Queen Anne to Puyallup (flex-direct),10:00,47.6394849792,-122.3636627197,47.18399599096,-122.28950500488,Queen Anne,Puyallup,FLEX_DIRECT|WALK,flex-direct -158,Queen Anne to Puyallup (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.18399599096,-122.28950500488,Queen Anne,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -159,Queen Anne to Snoqualmie (flex-direct),10:00,47.6394849792,-122.3636627197,47.52827129,-121.827821731,Queen Anne,Snoqualmie,FLEX_DIRECT|WALK,flex-direct -160,Queen Anne to Snoqualmie (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.52827129,-121.827821731,Queen Anne,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -161,Queen Anne to Beacon Hill (flex-direct),10:00,47.6394849792,-122.3636627197,47.578668036563016,-122.31139183,Queen Anne,Beacon Hill,FLEX_DIRECT|WALK,flex-direct -162,Queen Anne to Beacon Hill (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.578668036563016,-122.31139183,Queen Anne,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -163,Beacon Hill to Hilshire Terrace (flex-direct),10:00,47.578668036563016,-122.31139183,47.40648236,-122.18101501,Beacon Hill,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct -164,Beacon Hill to Hilshire Terrace (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.40648236,-122.18101501,Beacon Hill,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -165,Beacon Hill to Normandy Park (flex-direct),10:00,47.578668036563016,-122.31139183,47.44306609375831,-122.34237670,Beacon Hill,Normandy Park,FLEX_DIRECT|WALK,flex-direct -166,Beacon Hill to Normandy Park (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.44306609375831,-122.34237670,Beacon Hill,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -167,Beacon Hill to Des Moines (flex-direct),10:00,47.578668036563016,-122.31139183,47.3978844,-122.30898,Beacon Hill,Des Moines,FLEX_DIRECT|WALK,flex-direct -168,Beacon Hill to Des Moines (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.3978844,-122.30898,Beacon Hill,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -169,Beacon Hill to North Auburn (flex-direct),10:00,47.578668036563016,-122.31139183,47.340218616,-122.2246170043,Beacon Hill,North Auburn,FLEX_DIRECT|WALK,flex-direct -170,Beacon Hill to North Auburn (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.340218616,-122.2246170043,Beacon Hill,North Auburn,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -171,Beacon Hill to Federal Way (flex-direct),10:00,47.578668036563016,-122.31139183,47.31322426310727,-122.336540222167,Beacon Hill,Federal Way,FLEX_DIRECT|WALK,flex-direct -172,Beacon Hill to Federal Way (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.31322426310727,-122.336540222167,Beacon Hill,Federal Way,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -173,Beacon Hill to West Seattle (flex-direct),10:00,47.578668036563016,-122.31139183,47.571024,-122.3877811,Beacon Hill,West Seattle,FLEX_DIRECT|WALK,flex-direct -174,Beacon Hill to West Seattle (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.571024,-122.3877811,Beacon Hill,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -175,Beacon Hill to Puyallup (flex-direct),10:00,47.578668036563016,-122.31139183,47.18399599096,-122.28950500488,Beacon Hill,Puyallup,FLEX_DIRECT|WALK,flex-direct -176,Beacon Hill to Puyallup (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.18399599096,-122.28950500488,Beacon Hill,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -177,Beacon Hill to Snoqualmie (flex-direct),10:00,47.578668036563016,-122.31139183,47.52827129,-121.827821731,Beacon Hill,Snoqualmie,FLEX_DIRECT|WALK,flex-direct -178,Beacon Hill to Snoqualmie (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.52827129,-121.827821731,Beacon Hill,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit -179,Beacon Hill to Queen Anne (flex-direct),10:00,47.578668036563016,-122.31139183,47.6394849792,-122.3636627197,Beacon Hill,Queen Anne,FLEX_DIRECT|WALK,flex-direct -180,Beacon Hill to Queen Anne (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.6394849792,-122.3636627197,Beacon Hill,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +5,Hilshire Terrace to West Seattle (flex-direct),10:00,47.40648236,-122.18101501,47.571024,-122.3877811,Hilshire Terrace,West Seattle,FLEX_DIRECT|WALK,flex-direct +6,Hilshire Terrace to West Seattle (flex-and-transit),10:00,47.40648236,-122.18101501,47.571024,-122.3877811,Hilshire Terrace,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +7,Hilshire Terrace to Puyallup (flex-direct),10:00,47.40648236,-122.18101501,47.18399599096,-122.28950500488,Hilshire Terrace,Puyallup,FLEX_DIRECT|WALK,flex-direct +8,Hilshire Terrace to Puyallup (flex-and-transit),10:00,47.40648236,-122.18101501,47.18399599096,-122.28950500488,Hilshire Terrace,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +9,Hilshire Terrace to Snoqualmie (flex-direct),10:00,47.40648236,-122.18101501,47.52827129,-121.827821731,Hilshire Terrace,Snoqualmie,FLEX_DIRECT|WALK,flex-direct +10,Hilshire Terrace to Snoqualmie (flex-and-transit),10:00,47.40648236,-122.18101501,47.52827129,-121.827821731,Hilshire Terrace,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +11,Hilshire Terrace to Queen Anne (flex-direct),10:00,47.40648236,-122.18101501,47.6394849792,-122.3636627197,Hilshire Terrace,Queen Anne,FLEX_DIRECT|WALK,flex-direct +12,Hilshire Terrace to Queen Anne (flex-and-transit),10:00,47.40648236,-122.18101501,47.6394849792,-122.3636627197,Hilshire Terrace,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +13,Hilshire Terrace to Beacon Hill (flex-direct),10:00,47.40648236,-122.18101501,47.578668036563016,-122.31139183,Hilshire Terrace,Beacon Hill,FLEX_DIRECT|WALK,flex-direct +14,Hilshire Terrace to Beacon Hill (flex-and-transit),10:00,47.40648236,-122.18101501,47.578668036563016,-122.31139183,Hilshire Terrace,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +15,Normandy Park to Hilshire Terrace (flex-direct),10:00,47.44306609375831,-122.34237670,47.40648236,-122.18101501,Normandy Park,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct +16,Normandy Park to Hilshire Terrace (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.40648236,-122.18101501,Normandy Park,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +17,Normandy Park to Des Moines (flex-direct),10:00,47.44306609375831,-122.34237670,47.3978844,-122.30898,Normandy Park,Des Moines,FLEX_DIRECT|WALK,flex-direct +18,Normandy Park to Des Moines (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.3978844,-122.30898,Normandy Park,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +19,Normandy Park to West Seattle (flex-direct),10:00,47.44306609375831,-122.34237670,47.571024,-122.3877811,Normandy Park,West Seattle,FLEX_DIRECT|WALK,flex-direct +20,Normandy Park to West Seattle (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.571024,-122.3877811,Normandy Park,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +21,Normandy Park to Puyallup (flex-direct),10:00,47.44306609375831,-122.34237670,47.18399599096,-122.28950500488,Normandy Park,Puyallup,FLEX_DIRECT|WALK,flex-direct +22,Normandy Park to Puyallup (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.18399599096,-122.28950500488,Normandy Park,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +23,Normandy Park to Snoqualmie (flex-direct),10:00,47.44306609375831,-122.34237670,47.52827129,-121.827821731,Normandy Park,Snoqualmie,FLEX_DIRECT|WALK,flex-direct +24,Normandy Park to Snoqualmie (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.52827129,-121.827821731,Normandy Park,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +25,Normandy Park to Queen Anne (flex-direct),10:00,47.44306609375831,-122.34237670,47.6394849792,-122.3636627197,Normandy Park,Queen Anne,FLEX_DIRECT|WALK,flex-direct +26,Normandy Park to Queen Anne (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.6394849792,-122.3636627197,Normandy Park,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +27,Normandy Park to Beacon Hill (flex-direct),10:00,47.44306609375831,-122.34237670,47.578668036563016,-122.31139183,Normandy Park,Beacon Hill,FLEX_DIRECT|WALK,flex-direct +28,Normandy Park to Beacon Hill (flex-and-transit),10:00,47.44306609375831,-122.34237670,47.578668036563016,-122.31139183,Normandy Park,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +29,Des Moines to Hilshire Terrace (flex-direct),10:00,47.3978844,-122.30898,47.40648236,-122.18101501,Des Moines,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct +30,Des Moines to Hilshire Terrace (flex-and-transit),10:00,47.3978844,-122.30898,47.40648236,-122.18101501,Des Moines,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +31,Des Moines to Normandy Park (flex-direct),10:00,47.3978844,-122.30898,47.44306609375831,-122.34237670,Des Moines,Normandy Park,FLEX_DIRECT|WALK,flex-direct +32,Des Moines to Normandy Park (flex-and-transit),10:00,47.3978844,-122.30898,47.44306609375831,-122.34237670,Des Moines,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +33,Des Moines to West Seattle (flex-direct),10:00,47.3978844,-122.30898,47.571024,-122.3877811,Des Moines,West Seattle,FLEX_DIRECT|WALK,flex-direct +34,Des Moines to West Seattle (flex-and-transit),10:00,47.3978844,-122.30898,47.571024,-122.3877811,Des Moines,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +35,Des Moines to Puyallup (flex-direct),10:00,47.3978844,-122.30898,47.18399599096,-122.28950500488,Des Moines,Puyallup,FLEX_DIRECT|WALK,flex-direct +36,Des Moines to Puyallup (flex-and-transit),10:00,47.3978844,-122.30898,47.18399599096,-122.28950500488,Des Moines,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +37,Des Moines to Snoqualmie (flex-direct),10:00,47.3978844,-122.30898,47.52827129,-121.827821731,Des Moines,Snoqualmie,FLEX_DIRECT|WALK,flex-direct +38,Des Moines to Snoqualmie (flex-and-transit),10:00,47.3978844,-122.30898,47.52827129,-121.827821731,Des Moines,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +39,Des Moines to Queen Anne (flex-direct),10:00,47.3978844,-122.30898,47.6394849792,-122.3636627197,Des Moines,Queen Anne,FLEX_DIRECT|WALK,flex-direct +40,Des Moines to Queen Anne (flex-and-transit),10:00,47.3978844,-122.30898,47.6394849792,-122.3636627197,Des Moines,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +41,Des Moines to Beacon Hill (flex-direct),10:00,47.3978844,-122.30898,47.578668036563016,-122.31139183,Des Moines,Beacon Hill,FLEX_DIRECT|WALK,flex-direct +42,Des Moines to Beacon Hill (flex-and-transit),10:00,47.3978844,-122.30898,47.578668036563016,-122.31139183,Des Moines,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +43,West Seattle to Hilshire Terrace (flex-direct),10:00,47.571024,-122.3877811,47.40648236,-122.18101501,West Seattle,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct +44,West Seattle to Hilshire Terrace (flex-and-transit),10:00,47.571024,-122.3877811,47.40648236,-122.18101501,West Seattle,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +45,West Seattle to Normandy Park (flex-direct),10:00,47.571024,-122.3877811,47.44306609375831,-122.34237670,West Seattle,Normandy Park,FLEX_DIRECT|WALK,flex-direct +46,West Seattle to Normandy Park (flex-and-transit),10:00,47.571024,-122.3877811,47.44306609375831,-122.34237670,West Seattle,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +47,West Seattle to Des Moines (flex-direct),10:00,47.571024,-122.3877811,47.3978844,-122.30898,West Seattle,Des Moines,FLEX_DIRECT|WALK,flex-direct +48,West Seattle to Des Moines (flex-and-transit),10:00,47.571024,-122.3877811,47.3978844,-122.30898,West Seattle,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +49,West Seattle to Puyallup (flex-direct),10:00,47.571024,-122.3877811,47.18399599096,-122.28950500488,West Seattle,Puyallup,FLEX_DIRECT|WALK,flex-direct +50,West Seattle to Puyallup (flex-and-transit),10:00,47.571024,-122.3877811,47.18399599096,-122.28950500488,West Seattle,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +51,West Seattle to Snoqualmie (flex-direct),10:00,47.571024,-122.3877811,47.52827129,-121.827821731,West Seattle,Snoqualmie,FLEX_DIRECT|WALK,flex-direct +52,West Seattle to Snoqualmie (flex-and-transit),10:00,47.571024,-122.3877811,47.52827129,-121.827821731,West Seattle,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +53,West Seattle to Queen Anne (flex-direct),10:00,47.571024,-122.3877811,47.6394849792,-122.3636627197,West Seattle,Queen Anne,FLEX_DIRECT|WALK,flex-direct +54,West Seattle to Queen Anne (flex-and-transit),10:00,47.571024,-122.3877811,47.6394849792,-122.3636627197,West Seattle,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +55,West Seattle to Beacon Hill (flex-direct),10:00,47.571024,-122.3877811,47.578668036563016,-122.31139183,West Seattle,Beacon Hill,FLEX_DIRECT|WALK,flex-direct +56,West Seattle to Beacon Hill (flex-and-transit),10:00,47.571024,-122.3877811,47.578668036563016,-122.31139183,West Seattle,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +57,Puyallup to Hilshire Terrace (flex-direct),10:00,47.18399599096,-122.28950500488,47.40648236,-122.18101501,Puyallup,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct +58,Puyallup to Hilshire Terrace (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.40648236,-122.18101501,Puyallup,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +59,Puyallup to Normandy Park (flex-direct),10:00,47.18399599096,-122.28950500488,47.44306609375831,-122.34237670,Puyallup,Normandy Park,FLEX_DIRECT|WALK,flex-direct +60,Puyallup to Normandy Park (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.44306609375831,-122.34237670,Puyallup,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +61,Puyallup to Des Moines (flex-direct),10:00,47.18399599096,-122.28950500488,47.3978844,-122.30898,Puyallup,Des Moines,FLEX_DIRECT|WALK,flex-direct +62,Puyallup to Des Moines (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.3978844,-122.30898,Puyallup,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +63,Puyallup to West Seattle (flex-direct),10:00,47.18399599096,-122.28950500488,47.571024,-122.3877811,Puyallup,West Seattle,FLEX_DIRECT|WALK,flex-direct +64,Puyallup to West Seattle (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.571024,-122.3877811,Puyallup,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +65,Puyallup to Snoqualmie (flex-direct),10:00,47.18399599096,-122.28950500488,47.52827129,-121.827821731,Puyallup,Snoqualmie,FLEX_DIRECT|WALK,flex-direct +66,Puyallup to Snoqualmie (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.52827129,-121.827821731,Puyallup,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +67,Puyallup to Queen Anne (flex-direct),10:00,47.18399599096,-122.28950500488,47.6394849792,-122.3636627197,Puyallup,Queen Anne,FLEX_DIRECT|WALK,flex-direct +68,Puyallup to Queen Anne (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.6394849792,-122.3636627197,Puyallup,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +69,Puyallup to Beacon Hill (flex-direct),10:00,47.18399599096,-122.28950500488,47.578668036563016,-122.31139183,Puyallup,Beacon Hill,FLEX_DIRECT|WALK,flex-direct +70,Puyallup to Beacon Hill (flex-and-transit),10:00,47.18399599096,-122.28950500488,47.578668036563016,-122.31139183,Puyallup,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +71,Snoqualmie to Hilshire Terrace (flex-direct),10:00,47.52827129,-121.827821731,47.40648236,-122.18101501,Snoqualmie,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct +72,Snoqualmie to Hilshire Terrace (flex-and-transit),10:00,47.52827129,-121.827821731,47.40648236,-122.18101501,Snoqualmie,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +73,Snoqualmie to Normandy Park (flex-direct),10:00,47.52827129,-121.827821731,47.44306609375831,-122.34237670,Snoqualmie,Normandy Park,FLEX_DIRECT|WALK,flex-direct +74,Snoqualmie to Normandy Park (flex-and-transit),10:00,47.52827129,-121.827821731,47.44306609375831,-122.34237670,Snoqualmie,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +75,Snoqualmie to Des Moines (flex-direct),10:00,47.52827129,-121.827821731,47.3978844,-122.30898,Snoqualmie,Des Moines,FLEX_DIRECT|WALK,flex-direct +76,Snoqualmie to Des Moines (flex-and-transit),10:00,47.52827129,-121.827821731,47.3978844,-122.30898,Snoqualmie,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +77,Snoqualmie to West Seattle (flex-direct),10:00,47.52827129,-121.827821731,47.571024,-122.3877811,Snoqualmie,West Seattle,FLEX_DIRECT|WALK,flex-direct +78,Snoqualmie to West Seattle (flex-and-transit),10:00,47.52827129,-121.827821731,47.571024,-122.3877811,Snoqualmie,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +79,Snoqualmie to Puyallup (flex-direct),10:00,47.52827129,-121.827821731,47.18399599096,-122.28950500488,Snoqualmie,Puyallup,FLEX_DIRECT|WALK,flex-direct +80,Snoqualmie to Puyallup (flex-and-transit),10:00,47.52827129,-121.827821731,47.18399599096,-122.28950500488,Snoqualmie,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +81,Snoqualmie to Queen Anne (flex-direct),10:00,47.52827129,-121.827821731,47.6394849792,-122.3636627197,Snoqualmie,Queen Anne,FLEX_DIRECT|WALK,flex-direct +82,Snoqualmie to Queen Anne (flex-and-transit),10:00,47.52827129,-121.827821731,47.6394849792,-122.3636627197,Snoqualmie,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +83,Snoqualmie to Beacon Hill (flex-direct),10:00,47.52827129,-121.827821731,47.578668036563016,-122.31139183,Snoqualmie,Beacon Hill,FLEX_DIRECT|WALK,flex-direct +84,Snoqualmie to Beacon Hill (flex-and-transit),10:00,47.52827129,-121.827821731,47.578668036563016,-122.31139183,Snoqualmie,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +85,Queen Anne to Hilshire Terrace (flex-direct),10:00,47.6394849792,-122.3636627197,47.40648236,-122.18101501,Queen Anne,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct +86,Queen Anne to Hilshire Terrace (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.40648236,-122.18101501,Queen Anne,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +87,Queen Anne to Normandy Park (flex-direct),10:00,47.6394849792,-122.3636627197,47.44306609375831,-122.34237670,Queen Anne,Normandy Park,FLEX_DIRECT|WALK,flex-direct +88,Queen Anne to Normandy Park (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.44306609375831,-122.34237670,Queen Anne,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +89,Queen Anne to Des Moines (flex-direct),10:00,47.6394849792,-122.3636627197,47.3978844,-122.30898,Queen Anne,Des Moines,FLEX_DIRECT|WALK,flex-direct +90,Queen Anne to Des Moines (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.3978844,-122.30898,Queen Anne,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +91,Queen Anne to West Seattle (flex-direct),10:00,47.6394849792,-122.3636627197,47.571024,-122.3877811,Queen Anne,West Seattle,FLEX_DIRECT|WALK,flex-direct +92,Queen Anne to West Seattle (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.571024,-122.3877811,Queen Anne,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +93,Queen Anne to Puyallup (flex-direct),10:00,47.6394849792,-122.3636627197,47.18399599096,-122.28950500488,Queen Anne,Puyallup,FLEX_DIRECT|WALK,flex-direct +94,Queen Anne to Puyallup (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.18399599096,-122.28950500488,Queen Anne,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +95,Queen Anne to Snoqualmie (flex-direct),10:00,47.6394849792,-122.3636627197,47.52827129,-121.827821731,Queen Anne,Snoqualmie,FLEX_DIRECT|WALK,flex-direct +96,Queen Anne to Snoqualmie (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.52827129,-121.827821731,Queen Anne,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +97,Queen Anne to Beacon Hill (flex-direct),10:00,47.6394849792,-122.3636627197,47.578668036563016,-122.31139183,Queen Anne,Beacon Hill,FLEX_DIRECT|WALK,flex-direct +98,Queen Anne to Beacon Hill (flex-and-transit),10:00,47.6394849792,-122.3636627197,47.578668036563016,-122.31139183,Queen Anne,Beacon Hill,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +99,Beacon Hill to Hilshire Terrace (flex-direct),10:00,47.578668036563016,-122.31139183,47.40648236,-122.18101501,Beacon Hill,Hilshire Terrace,FLEX_DIRECT|WALK,flex-direct +100,Beacon Hill to Hilshire Terrace (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.40648236,-122.18101501,Beacon Hill,Hilshire Terrace,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +101,Beacon Hill to Normandy Park (flex-direct),10:00,47.578668036563016,-122.31139183,47.44306609375831,-122.34237670,Beacon Hill,Normandy Park,FLEX_DIRECT|WALK,flex-direct +102,Beacon Hill to Normandy Park (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.44306609375831,-122.34237670,Beacon Hill,Normandy Park,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +103,Beacon Hill to Des Moines (flex-direct),10:00,47.578668036563016,-122.31139183,47.3978844,-122.30898,Beacon Hill,Des Moines,FLEX_DIRECT|WALK,flex-direct +104,Beacon Hill to Des Moines (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.3978844,-122.30898,Beacon Hill,Des Moines,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +105,Beacon Hill to West Seattle (flex-direct),10:00,47.578668036563016,-122.31139183,47.571024,-122.3877811,Beacon Hill,West Seattle,FLEX_DIRECT|WALK,flex-direct +106,Beacon Hill to West Seattle (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.571024,-122.3877811,Beacon Hill,West Seattle,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +107,Beacon Hill to Puyallup (flex-direct),10:00,47.578668036563016,-122.31139183,47.18399599096,-122.28950500488,Beacon Hill,Puyallup,FLEX_DIRECT|WALK,flex-direct +108,Beacon Hill to Puyallup (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.18399599096,-122.28950500488,Beacon Hill,Puyallup,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +109,Beacon Hill to Snoqualmie (flex-direct),10:00,47.578668036563016,-122.31139183,47.52827129,-121.827821731,Beacon Hill,Snoqualmie,FLEX_DIRECT|WALK,flex-direct +110,Beacon Hill to Snoqualmie (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.52827129,-121.827821731,Beacon Hill,Snoqualmie,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit +111,Beacon Hill to Queen Anne (flex-direct),10:00,47.578668036563016,-122.31139183,47.6394849792,-122.3636627197,Beacon Hill,Queen Anne,FLEX_DIRECT|WALK,flex-direct +112,Beacon Hill to Queen Anne (flex-and-transit),10:00,47.578668036563016,-122.31139183,47.6394849792,-122.3636627197,Beacon Hill,Queen Anne,FLEX_ACCESS|FLEX_EGRESS|TRANSIT,flex-and-transit From f107fe75517ba2e7bcdcdf5675e83c6e8849a997 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 17 Oct 2024 14:17:13 +0200 Subject: [PATCH 068/213] Update paths --- .github/workflows/performance-test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/performance-test.yml b/.github/workflows/performance-test.yml index 9ba3ecbe2da..b25d346aece 100644 --- a/.github/workflows/performance-test.yml +++ b/.github/workflows/performance-test.yml @@ -102,14 +102,14 @@ jobs: run: | mvn exec:java -Dexec.mainClass="org.opentripplanner.transit.speed_test.SpeedTest" -Dexec.classpathScope=test -Dexec.args="--dir=../test/performance/${{ matrix.location }} -p md -n ${{ matrix.iterations }} -i 3 -0" -P prettierSkip - - run: find . -name *travelSearch* + - run: find . -name *.jfr - name: Archive travel results file if: matrix.profile == 'core' || github.ref == 'refs/heads/dev-2.x' uses: actions/upload-artifact@v4 with: name: ${{ matrix.location }}-travelSearch-results.csv - path: test/performance/${{ matrix.location }}/travelSearch-results.csv + path: test/performance/${{ matrix.location }}/travelSearch-results-md.csv - name: Archive Flight Recorder instrumentation file if: matrix.profile == 'core' || github.ref == 'refs/heads/dev-2.x' From 4c10b030e28bc35f576456d3097aaff2c32b4594 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Wed, 25 Sep 2024 12:25:45 +0100 Subject: [PATCH 069/213] update the description of "CABLE_CAR" mode to cable tram. --- application/src/client/classic-debug/i18n/ca_ES.po | 2 +- application/src/client/classic-debug/i18n/de.po | 2 +- application/src/client/classic-debug/i18n/en.po | 4 ++-- application/src/client/classic-debug/i18n/es.po | 2 +- application/src/client/classic-debug/i18n/fr.po | 2 +- application/src/client/classic-debug/i18n/hu.po | 2 +- application/src/client/classic-debug/i18n/it.po | 2 +- application/src/client/classic-debug/i18n/messages.pot | 2 +- application/src/client/classic-debug/i18n/no.po | 2 +- application/src/client/classic-debug/i18n/pl.po | 2 +- application/src/client/classic-debug/i18n/pt.po | 2 +- application/src/client/classic-debug/i18n/sl.po | 2 +- .../src/client/classic-debug/js/otp/locale/ca_ES.json | 2 +- application/src/client/classic-debug/js/otp/locale/de.json | 2 +- application/src/client/classic-debug/js/otp/locale/en.json | 2 +- application/src/client/classic-debug/js/otp/locale/es.json | 2 +- application/src/client/classic-debug/js/otp/locale/fr.json | 2 +- application/src/client/classic-debug/js/otp/locale/hu.json | 2 +- application/src/client/classic-debug/js/otp/locale/it.json | 2 +- application/src/client/classic-debug/js/otp/locale/no.json | 2 +- application/src/client/classic-debug/js/otp/locale/pl.json | 2 +- application/src/client/classic-debug/js/otp/locale/pt.json | 2 +- application/src/client/classic-debug/js/otp/locale/sl.json | 2 +- application/src/client/classic-debug/js/otp/util/Itin.js | 5 ++--- .../java/org/opentripplanner/ext/restapi/model/ApiLeg.java | 2 +- .../src/main/java/org/opentripplanner/model/plan/Leg.java | 2 +- .../org/opentripplanner/transit/model/basic/TransitMode.java | 2 +- doc/user/RoutingModes.md | 2 +- 28 files changed, 30 insertions(+), 31 deletions(-) diff --git a/application/src/client/classic-debug/i18n/ca_ES.po b/application/src/client/classic-debug/i18n/ca_ES.po index 8dd8b1db1eb..8c31603fba4 100644 --- a/application/src/client/classic-debug/i18n/ca_ES.po +++ b/application/src/client/classic-debug/i18n/ca_ES.po @@ -931,7 +931,7 @@ msgstr "" #. beneath the car. #: src/client/js/otp/util/Itin.js:226 #, fuzzy -msgid "Cable Car" +msgid "Cable Tram" msgstr "PONT PENJANT" #. Any rail system designed for steep inclines. diff --git a/application/src/client/classic-debug/i18n/de.po b/application/src/client/classic-debug/i18n/de.po index 0585855e247..49ac31f1777 100644 --- a/application/src/client/classic-debug/i18n/de.po +++ b/application/src/client/classic-debug/i18n/de.po @@ -919,7 +919,7 @@ msgstr "" #. Used for street-level cable cars where the cable runs #. beneath the car. #: src/client/js/otp/util/Itin.js:226 -msgid "Cable Car" +msgid "Cable Tram" msgstr "Standseilbahn" #. Any rail system designed for steep inclines. diff --git a/application/src/client/classic-debug/i18n/en.po b/application/src/client/classic-debug/i18n/en.po index 4727ffef677..94ae67f6431 100644 --- a/application/src/client/classic-debug/i18n/en.po +++ b/application/src/client/classic-debug/i18n/en.po @@ -930,8 +930,8 @@ msgstr "Light Rail" #. Used for street-level cable cars where the cable runs #. beneath the car. #: src/client/js/otp/util/Itin.js:226 -msgid "Cable Car" -msgstr "Cable Car" +msgid "Cable Tram" +msgstr "Cable Tram" #. Any rail system designed for steep inclines. #: src/client/js/otp/util/Itin.js:228 diff --git a/application/src/client/classic-debug/i18n/es.po b/application/src/client/classic-debug/i18n/es.po index b54e2510417..0799258ab92 100644 --- a/application/src/client/classic-debug/i18n/es.po +++ b/application/src/client/classic-debug/i18n/es.po @@ -924,7 +924,7 @@ msgstr "Tranvía" #. Used for street-level cable cars where the cable runs #. beneath the car. #: src/client/js/otp/util/Itin.js:226 -msgid "Cable Car" +msgid "Cable Tram" msgstr "Bus Tranvía" #. Any rail system designed for steep inclines. diff --git a/application/src/client/classic-debug/i18n/fr.po b/application/src/client/classic-debug/i18n/fr.po index 705b313786c..1c5e0f69b18 100644 --- a/application/src/client/classic-debug/i18n/fr.po +++ b/application/src/client/classic-debug/i18n/fr.po @@ -932,7 +932,7 @@ msgstr "Tram ou Trolley" #. Used for street-level cable cars where the cable runs #. beneath the car. #: src/client/js/otp/util/Itin.js:226 -msgid "Cable Car" +msgid "Cable Tram" msgstr "Tramway funiculaire" #. Any rail system designed for steep inclines. diff --git a/application/src/client/classic-debug/i18n/hu.po b/application/src/client/classic-debug/i18n/hu.po index 25411b79e58..02242925841 100644 --- a/application/src/client/classic-debug/i18n/hu.po +++ b/application/src/client/classic-debug/i18n/hu.po @@ -937,7 +937,7 @@ msgstr "Villamos, könnyűvasút" #. Used for street-level cable cars where the cable runs #. beneath the car. #: src/client/js/otp/util/Itin.js:226 -msgid "Cable Car" +msgid "Cable Tram" msgstr "" #. Any rail system designed for steep inclines. diff --git a/application/src/client/classic-debug/i18n/it.po b/application/src/client/classic-debug/i18n/it.po index 4d0abe553f3..eeb4442ef7c 100644 --- a/application/src/client/classic-debug/i18n/it.po +++ b/application/src/client/classic-debug/i18n/it.po @@ -976,7 +976,7 @@ msgstr "tram" #. beneath the car. #: src/client/js/otp/util/Itin.js:226 #, fuzzy -msgid "Cable Car" +msgid "Cable Tram" msgstr "tram" #. Any rail system designed for steep inclines. diff --git a/application/src/client/classic-debug/i18n/messages.pot b/application/src/client/classic-debug/i18n/messages.pot index ca5d59b1cc3..425b5c9bb43 100644 --- a/application/src/client/classic-debug/i18n/messages.pot +++ b/application/src/client/classic-debug/i18n/messages.pot @@ -896,7 +896,7 @@ msgstr "" #. Used for street-level cable cars where the cable runs #. beneath the car. #: src/client/js/otp/util/Itin.js:226 -msgid "Cable Car" +msgid "Cable Tram" msgstr "" #. Any rail system designed for steep inclines. diff --git a/application/src/client/classic-debug/i18n/no.po b/application/src/client/classic-debug/i18n/no.po index 9a1d5c9103d..8963f038601 100644 --- a/application/src/client/classic-debug/i18n/no.po +++ b/application/src/client/classic-debug/i18n/no.po @@ -926,7 +926,7 @@ msgstr "Trikk" #. Used for street-level cable cars where the cable runs #. beneath the car. #: src/client/js/otp/util/Itin.js:226 -msgid "Cable Car" +msgid "Cable Tram" msgstr "Cable Car" #. Any rail system designed for steep inclines. diff --git a/application/src/client/classic-debug/i18n/pl.po b/application/src/client/classic-debug/i18n/pl.po index b8a728e9495..8f08e8de7de 100644 --- a/application/src/client/classic-debug/i18n/pl.po +++ b/application/src/client/classic-debug/i18n/pl.po @@ -947,7 +947,7 @@ msgstr "Light Rail" #. Used for street-level cable cars where the cable runs #. beneath the car. #: src/client/js/otp/util/Itin.js:226 -msgid "Cable Car" +msgid "Cable Tram" msgstr "Kolejka linowa" #. Any rail system designed for steep inclines. diff --git a/application/src/client/classic-debug/i18n/pt.po b/application/src/client/classic-debug/i18n/pt.po index 83ed08f3df1..42fa0d978aa 100644 --- a/application/src/client/classic-debug/i18n/pt.po +++ b/application/src/client/classic-debug/i18n/pt.po @@ -925,7 +925,7 @@ msgstr "Ferroviário leve" #. Used for street-level cable cars where the cable runs #. beneath the car. #: src/client/js/otp/util/Itin.js:226 -msgid "Cable Car" +msgid "Cable Tram" msgstr "Eléctrico" #. Any rail system designed for steep inclines. diff --git a/application/src/client/classic-debug/i18n/sl.po b/application/src/client/classic-debug/i18n/sl.po index 93839344f76..23066db159c 100644 --- a/application/src/client/classic-debug/i18n/sl.po +++ b/application/src/client/classic-debug/i18n/sl.po @@ -931,7 +931,7 @@ msgstr "Tramvaj" #. Used for street-level cable cars where the cable runs #. beneath the car. #: src/client/js/otp/util/Itin.js:226 -msgid "Cable Car" +msgid "Cable Tram" msgstr "" #. Any rail system designed for steep inclines. diff --git a/application/src/client/classic-debug/js/otp/locale/ca_ES.json b/application/src/client/classic-debug/js/otp/locale/ca_ES.json index e0bc0c5e3ba..4ba89dde02d 100644 --- a/application/src/client/classic-debug/js/otp/locale/ca_ES.json +++ b/application/src/client/classic-debug/js/otp/locale/ca_ES.json @@ -155,7 +155,7 @@ "Train": "Tren", "Ferry": "BOT", "Light Rail": "", - "Cable Car": "PONT PENJANT", + "Cable Tram": "PONT PENJANT", "Funicular": "FUNICULAR", "Aerial Tram": "", "Airplane": "", diff --git a/application/src/client/classic-debug/js/otp/locale/de.json b/application/src/client/classic-debug/js/otp/locale/de.json index 5a0aa5316f4..79514b84b1a 100644 --- a/application/src/client/classic-debug/js/otp/locale/de.json +++ b/application/src/client/classic-debug/js/otp/locale/de.json @@ -155,7 +155,7 @@ "Train": "Bahn", "Ferry": "Fähre", "Light Rail": "", - "Cable Car": "Standseilbahn", + "Cable Tram": "Standseilbahn", "Funicular": "Seilbahn", "Aerial Tram": "", "Airplane": "", diff --git a/application/src/client/classic-debug/js/otp/locale/en.json b/application/src/client/classic-debug/js/otp/locale/en.json index 51e5565997c..f7ae611e458 100644 --- a/application/src/client/classic-debug/js/otp/locale/en.json +++ b/application/src/client/classic-debug/js/otp/locale/en.json @@ -155,7 +155,7 @@ "Train": "Train", "Ferry": "Ferry", "Light Rail": "Light Rail", - "Cable Car": "Cable Car", + "Cable Tram": "Cable Tram", "Funicular": "Funicular", "Aerial Tram": "Aerial Tram", "Airplane": "", diff --git a/application/src/client/classic-debug/js/otp/locale/es.json b/application/src/client/classic-debug/js/otp/locale/es.json index fca9c112411..67db91d87b9 100644 --- a/application/src/client/classic-debug/js/otp/locale/es.json +++ b/application/src/client/classic-debug/js/otp/locale/es.json @@ -155,7 +155,7 @@ "Train": "Tren", "Ferry": "Barco", "Light Rail": "Tranvía", - "Cable Car": "Bus Tranvía", + "Cable Tram": "Bus Tranvía", "Funicular": "Funicular", "Aerial Tram": "Funicular", "Airplane": "", diff --git a/application/src/client/classic-debug/js/otp/locale/fr.json b/application/src/client/classic-debug/js/otp/locale/fr.json index 53b4d78be17..76306ba7fe1 100644 --- a/application/src/client/classic-debug/js/otp/locale/fr.json +++ b/application/src/client/classic-debug/js/otp/locale/fr.json @@ -155,7 +155,7 @@ "Train": "Train", "Ferry": "Ferry", "Light Rail": "Tram ou Trolley", - "Cable Car": "Tramway funiculaire", + "Cable Tram": "Tramway funiculaire", "Funicular": "Funiculaire", "Aerial Tram": "Téléphérique", "Airplane": "", diff --git a/application/src/client/classic-debug/js/otp/locale/hu.json b/application/src/client/classic-debug/js/otp/locale/hu.json index 1e1e666e19e..022666bc938 100644 --- a/application/src/client/classic-debug/js/otp/locale/hu.json +++ b/application/src/client/classic-debug/js/otp/locale/hu.json @@ -155,7 +155,7 @@ "Train": "Vonat", "Ferry": "Komp", "Light Rail": "Villamos, könnyűvasút", - "Cable Car": "", + "Cable Tram": "", "Funicular": "Sikló", "Aerial Tram": "Libegő", "Airplane": "Repülőgép", diff --git a/application/src/client/classic-debug/js/otp/locale/it.json b/application/src/client/classic-debug/js/otp/locale/it.json index 0876aba1ef8..f1de09c1985 100644 --- a/application/src/client/classic-debug/js/otp/locale/it.json +++ b/application/src/client/classic-debug/js/otp/locale/it.json @@ -155,7 +155,7 @@ "Train": "treno", "Ferry": "Ferry", "Light Rail": "tram", - "Cable Car": "tram", + "Cable Tram": "tram", "Funicular": "funivia", "Aerial Tram": "tram", "Airplane": "", diff --git a/application/src/client/classic-debug/js/otp/locale/no.json b/application/src/client/classic-debug/js/otp/locale/no.json index 5a64e60d2a6..91013646c2c 100644 --- a/application/src/client/classic-debug/js/otp/locale/no.json +++ b/application/src/client/classic-debug/js/otp/locale/no.json @@ -155,7 +155,7 @@ "Train": "Tog", "Ferry": "Ferje", "Light Rail": "Trikk", - "Cable Car": "Cable Car", + "Cable Tram": "Cable Car", "Funicular": "Kabelbane", "Aerial Tram": "Tau bane", "Airplane": "Fly", diff --git a/application/src/client/classic-debug/js/otp/locale/pl.json b/application/src/client/classic-debug/js/otp/locale/pl.json index 5cf5a9c71b5..a8bbd03a0b9 100644 --- a/application/src/client/classic-debug/js/otp/locale/pl.json +++ b/application/src/client/classic-debug/js/otp/locale/pl.json @@ -161,7 +161,7 @@ "Train": "Pociąg", "Ferry": "Prom", "Light Rail": "Light Rail", - "Cable Car": "Kolejka linowa", + "Cable Tram": "Kolejka linowa", "Funicular": "Kolej linowo-terenowa", "Aerial Tram": "Kolej linowa", "Airplane": "", diff --git a/application/src/client/classic-debug/js/otp/locale/pt.json b/application/src/client/classic-debug/js/otp/locale/pt.json index 9d15e4afe1a..a4a5e9f6599 100644 --- a/application/src/client/classic-debug/js/otp/locale/pt.json +++ b/application/src/client/classic-debug/js/otp/locale/pt.json @@ -155,7 +155,7 @@ "Train": "Comboio", "Ferry": "Ferry", "Light Rail": "Ferroviário leve", - "Cable Car": "Eléctrico", + "Cable Tram": "Eléctrico", "Funicular": "Teleférico", "Aerial Tram": "Teleférico", "Airplane": "", diff --git a/application/src/client/classic-debug/js/otp/locale/sl.json b/application/src/client/classic-debug/js/otp/locale/sl.json index c99ad81f704..6019f19e228 100644 --- a/application/src/client/classic-debug/js/otp/locale/sl.json +++ b/application/src/client/classic-debug/js/otp/locale/sl.json @@ -167,7 +167,7 @@ "Train": "Vlak", "Ferry": "", "Light Rail": "Tramvaj", - "Cable Car": "", + "Cable Tram": "", "Funicular": "", "Aerial Tram": "Gondola", "Airplane": "", diff --git a/application/src/client/classic-debug/js/otp/util/Itin.js b/application/src/client/classic-debug/js/otp/util/Itin.js index 03555b1b3df..af8ce3a162b 100644 --- a/application/src/client/classic-debug/js/otp/util/Itin.js +++ b/application/src/client/classic-debug/js/otp/util/Itin.js @@ -221,9 +221,8 @@ otp.util.Itin = { //TRANSLATORS: Tram, Streetcar, Light rail. Any light rail or street //level system within a metropolitan area. 'TRAM' : _tr('Light Rail'), - //TRANSLATORS: Used for street-level cable cars where the cable runs - //beneath the car. - 'CABLE_CAR': _tr('Cable Car'), + //TRANSLATORS: Used for street-level rail cars where the cable runs beneath the vehicle. + 'CABLE_CAR': _tr('Cable Tram'), //TRANSLATORS: Any rail system designed for steep inclines. 'FUNICULAR': _tr('Funicular'), //TRANSLATORS: Gondola, Suspended cable car. Typically used for aerial diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiLeg.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiLeg.java index 7bbd83f7c2d..075038d441e 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiLeg.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiLeg.java @@ -98,7 +98,7 @@ public class ApiLeg { /** * For transit legs, the type of the route. Non transit -1 When 0-7: 0 Tram, 1 Subway, 2 Train, 3 - * Bus, 4 Ferry, 5 Cable Car, 6 Gondola, 7 Funicular When equal or highter than 100, it is coded + * Bus, 4 Ferry, 5 Cable Tram, 6 Gondola, 7 Funicular When equal or highter than 100, it is coded * using the Hierarchical Vehicle Type (HVT) codes from the European TPEG standard Also see * http://groups.google.com/group/gtfs-changes/msg/ed917a69cf8c5bef */ diff --git a/application/src/main/java/org/opentripplanner/model/plan/Leg.java b/application/src/main/java/org/opentripplanner/model/plan/Leg.java index d9e3a4589d8..81a9a6af10c 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/Leg.java +++ b/application/src/main/java/org/opentripplanner/model/plan/Leg.java @@ -289,7 +289,7 @@ default int getAgencyTimeZoneOffset() { /** * For transit legs, the type of the route. Non transit -1 When 0-7: 0 Tram, 1 Subway, 2 Train, 3 - * Bus, 4 Ferry, 5 Cable Car, 6 Gondola, 7 Funicular When equal or highter than 100, it is coded + * Bus, 4 Ferry, 5 Cable Tram, 6 Gondola, 7 Funicular When equal or highter than 100, it is coded * using the Hierarchical Vehicle Type (HVT) codes from the European TPEG standard Also see * http://groups.google.com/group/gtfs-changes/msg/ed917a69cf8c5bef */ diff --git a/application/src/main/java/org/opentripplanner/transit/model/basic/TransitMode.java b/application/src/main/java/org/opentripplanner/transit/model/basic/TransitMode.java index e25cb435887..507b033f645 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/basic/TransitMode.java +++ b/application/src/main/java/org/opentripplanner/transit/model/basic/TransitMode.java @@ -69,7 +69,7 @@ public String enumValueDescription() { case TRAM -> "Tram, streetcar or light rail. Used for any light rail or street level system within a metropolitan area."; case FERRY -> "Used for short- and long-distance boat service."; case AIRPLANE -> "Taking an airplane"; - case CABLE_CAR -> "Used for street-level cable cars where the cable runs beneath the car."; + case CABLE_CAR -> "Used for street-level rail cars where the cable runs beneath the vehicle."; case GONDOLA -> "Gondola or suspended cable car. Typically used for aerial cable cars where the car is suspended from the cable."; case FUNICULAR -> "Used for any rail system that moves on steep inclines with a cable traction system."; case TROLLEYBUS -> "Used for trolleybus systems which draw power from overhead wires using poles on the roof of the vehicle."; diff --git a/doc/user/RoutingModes.md b/doc/user/RoutingModes.md index 0895e019716..c9b61712498 100644 --- a/doc/user/RoutingModes.md +++ b/doc/user/RoutingModes.md @@ -104,7 +104,7 @@ Used for short- and long-distance bus routes.

    CABLE_CAR

    -Used for street-level cable cars where the cable runs beneath the car. +Used for street-level rail cars where the cable runs beneath the vehicle.

    CARPOOL

    From 7eee9b3333cdbc87aa3a62437f0bb53109ce0c16 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Wed, 25 Sep 2024 12:25:45 +0100 Subject: [PATCH 070/213] Change the cableway mapping of Netex to GONDOLA --- .../org/opentripplanner/apis/transmodel/model/EnumTypes.java | 4 ++-- .../opentripplanner/netex/mapping/StopPlaceTypeMapper.java | 2 +- .../opentripplanner/netex/mapping/TransportModeMapper.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/EnumTypes.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/EnumTypes.java index b325eac3653..2f8e69cc593 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/EnumTypes.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/EnumTypes.java @@ -184,7 +184,7 @@ public class EnumTypes { .value("air", TransitMode.AIRPLANE) .value("bicycle", TraverseMode.BICYCLE) .value("bus", TransitMode.BUS) - .value("cableway", TransitMode.CABLE_CAR) + .value("cableway", TransitMode.GONDOLA) .value("water", TransitMode.FERRY) .value("funicular", TransitMode.FUNICULAR) .value("lift", TransitMode.GONDOLA) @@ -455,7 +455,7 @@ public class EnumTypes { .name("TransportMode") .value("air", TransitMode.AIRPLANE) .value("bus", TransitMode.BUS) - .value("cableway", TransitMode.CABLE_CAR) + .value("cableway", TransitMode.GONDOLA) .value("water", TransitMode.FERRY) .value("funicular", TransitMode.FUNICULAR) .value("lift", TransitMode.GONDOLA) diff --git a/application/src/main/java/org/opentripplanner/netex/mapping/StopPlaceTypeMapper.java b/application/src/main/java/org/opentripplanner/netex/mapping/StopPlaceTypeMapper.java index 22fbb1fca1c..b98ce0fd39f 100644 --- a/application/src/main/java/org/opentripplanner/netex/mapping/StopPlaceTypeMapper.java +++ b/application/src/main/java/org/opentripplanner/netex/mapping/StopPlaceTypeMapper.java @@ -29,7 +29,7 @@ private TransitMode mapVehicleMode(StopPlace stopPlace) { case AIR -> TransitMode.AIRPLANE; case BUS -> TransitMode.BUS; case TROLLEY_BUS -> TransitMode.TROLLEYBUS; - case CABLEWAY -> TransitMode.CABLE_CAR; + case CABLEWAY -> TransitMode.GONDOLA; case COACH -> TransitMode.COACH; case FUNICULAR -> TransitMode.FUNICULAR; case METRO -> TransitMode.SUBWAY; diff --git a/application/src/main/java/org/opentripplanner/netex/mapping/TransportModeMapper.java b/application/src/main/java/org/opentripplanner/netex/mapping/TransportModeMapper.java index 82a5f99c9c7..5db45f93c8d 100644 --- a/application/src/main/java/org/opentripplanner/netex/mapping/TransportModeMapper.java +++ b/application/src/main/java/org/opentripplanner/netex/mapping/TransportModeMapper.java @@ -32,7 +32,7 @@ public TransitMode mapAllVehicleModesOfTransport(AllVehicleModesOfTransportEnume return switch (mode) { case AIR -> TransitMode.AIRPLANE; case BUS -> TransitMode.BUS; - case CABLEWAY -> TransitMode.CABLE_CAR; + case CABLEWAY -> TransitMode.GONDOLA; case COACH -> TransitMode.COACH; case FUNICULAR -> TransitMode.FUNICULAR; case METRO -> TransitMode.SUBWAY; From ecae035bfc3e9355ced37447d688dd7c226d814a Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Thu, 17 Oct 2024 13:42:39 +0100 Subject: [PATCH 071/213] add test cases for cableway mapping --- .../netex/mapping/StopPlaceTypeMapperTest.java | 9 +++++++++ .../netex/mapping/TransportModeMapperTest.java | 7 +++++++ 2 files changed, 16 insertions(+) diff --git a/application/src/test/java/org/opentripplanner/netex/mapping/StopPlaceTypeMapperTest.java b/application/src/test/java/org/opentripplanner/netex/mapping/StopPlaceTypeMapperTest.java index cb9dabc911d..50e0f45929a 100644 --- a/application/src/test/java/org/opentripplanner/netex/mapping/StopPlaceTypeMapperTest.java +++ b/application/src/test/java/org/opentripplanner/netex/mapping/StopPlaceTypeMapperTest.java @@ -30,6 +30,15 @@ void mapWithTransportModeOnly() { assertNull(transitMode.subMode()); } + @Test + void mapCableway() { + var transitMode = stopPlaceTypeMapper.map( + new StopPlace().withTransportMode(AllVehicleModesOfTransportEnumeration.CABLEWAY) + ); + assertEquals(TransitMode.GONDOLA, transitMode.mainMode()); + assertNull(transitMode.subMode()); + } + @Test void mapWithSubMode() { var transitMode = stopPlaceTypeMapper.map( diff --git a/application/src/test/java/org/opentripplanner/netex/mapping/TransportModeMapperTest.java b/application/src/test/java/org/opentripplanner/netex/mapping/TransportModeMapperTest.java index 5df2cc3dc05..11c41548a60 100644 --- a/application/src/test/java/org/opentripplanner/netex/mapping/TransportModeMapperTest.java +++ b/application/src/test/java/org/opentripplanner/netex/mapping/TransportModeMapperTest.java @@ -67,6 +67,13 @@ void mapWithTransportModeOnly() throws UnsupportedModeException { assertNull(transitMode.subMode()); } + @Test + void mapCableway() throws UnsupportedModeException { + var transitMode = transportModeMapper.map(AllVehicleModesOfTransportEnumeration.CABLEWAY, null); + assertEquals(TransitMode.GONDOLA, transitMode.mainMode()); + assertNull(transitMode.subMode()); + } + @Test void mapWithSubMode() throws UnsupportedModeException { var transitMode = transportModeMapper.map( From bb9eeb907e82021a04da13c309c466cffaa7f842 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 17 Oct 2024 15:30:47 +0200 Subject: [PATCH 072/213] Update archive path for JFR file --- .github/workflows/performance-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/performance-test.yml b/.github/workflows/performance-test.yml index b25d346aece..c7f788b7144 100644 --- a/.github/workflows/performance-test.yml +++ b/.github/workflows/performance-test.yml @@ -116,4 +116,4 @@ jobs: uses: actions/upload-artifact@v4 with: name: ${{ matrix.location }}-flight-recorder - path: ${{ matrix.location}}-speed-test.jfr + path: application/${{ matrix.location }}-speed-test.jfr From b0d218662c5a516d65ff05fde14cfe7d203c8ec5 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 17 Oct 2024 15:46:36 +0200 Subject: [PATCH 073/213] Update expected results --- .../travelSearch-expected-results.csv | 717 +++++++----------- 1 file changed, 266 insertions(+), 451 deletions(-) diff --git a/test/performance/washington-state/travelSearch-expected-results.csv b/test/performance/washington-state/travelSearch-expected-results.csv index c84d7613624..07291b54946 100644 --- a/test/performance/washington-state/travelSearch-expected-results.csv +++ b/test/performance/washington-state/travelSearch-expected-results.csv @@ -1,452 +1,267 @@ tcId,nTransfers,duration,cost,walkDistance,startTime,endTime,agencies,modes,routes,stops,details -1,1,01:29:01,8356,2443,10:26:48,11:55:49,Metro Transit,BUS,160|165,kcm:57375|kcm:57430|kcm:57429|kcm:47570,Walk 18m28s ~ 108th Ave SE & SE 220th Pl(57375) ~ BUS 160 10:45:16 10:49:28 ~ 104th Ave SE & SE 240th St(57430) ~ Walk 1m27s ~ SE 240th St & 104th Ave SE(57429) ~ BUS 165 10:59 11:44 ~ 1st Ave S & SW Normandy Rd(47570) ~ Walk 11m49s -1,0,01:32:34,8788,3546,10:23:15,11:55:49,Metro Transit,BUS,165,kcm:57448|kcm:47570,Walk 33m35s ~ SE 240th St & 116th Ave SE(57448) ~ BUS 165 10:56:50 11:44 ~ 1st Ave S & SW Normandy Rd(47570) ~ Walk 11m49s -1,1,01:31:01,8476,2443,10:57:48,12:28:49,Metro Transit,BUS,160|165,kcm:57375|kcm:57430|kcm:57429|kcm:47570,Walk 18m28s ~ 108th Ave SE & SE 220th Pl(57375) ~ BUS 160 11:16:16 11:20:28 ~ 104th Ave SE & SE 240th St(57430) ~ Walk 1m27s ~ SE 240th St & 104th Ave SE(57429) ~ BUS 165 11:29 12:17 ~ 1st Ave S & SW Normandy Rd(47570) ~ Walk 11m49s -2,2,00:47:37,4659,0,10:01:27,10:49:04,Metro Transit|Sound Generations,BUS,Hyde Shuttle|165|Hyde Shuttle,sound-generations:area_558|kcm:61180|kcm:47570|sound-generations:area_551,sound-generations:area_558(area_558) ~ BUS null 10:01:27 10:25:37Walk 0s ~ Pacific Hwy S & S 240th St(61180) ~ BUS 165 10:27:37 10:44 ~ 1st Ave S & SW Normandy Rd(47570) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:46 10:49:04 -2,2,00:52:47,5067,137,10:02:55,10:55:42,Metro Transit|Sound Generations,BUS,Hyde Shuttle|A Line|Hyde Shuttle,sound-generations:area_558|kcm:60800|kcm:60810|sound-generations:area_551,sound-generations:area_558(area_558) ~ BUS null 10:02:55 10:25:12Walk 1m48s ~ Pacific Hwy S & Kent Des Moines Rd(60800) ~ BUS A Line 10:29 10:30:38 ~ Pacific Hwy S & S 224th St(60810) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:32:38 10:55:42 -2,1,00:54:22,5143,917,10:01:27,10:55:49,Metro Transit|Sound Generations,BUS,Hyde Shuttle|165,sound-generations:area_558|kcm:61180|kcm:47570,sound-generations:area_558(area_558) ~ BUS null 10:01:27 10:25:37Walk 0s ~ Pacific Hwy S & S 240th St(61180) ~ BUS 165 10:27:37 10:44 ~ 1st Ave S & SW Normandy Rd(47570) ~ Walk 11m49s -3,0,02:46:50,19487,12867,10:00:00,12:46:50,,,,,Walk 2h46m50s -3,1,01:20:03,8318,3143,10:26:48,11:46:51,Metro Transit,BUS,160|165,kcm:57375|kcm:57430|kcm:57429|kcm:50480,Walk 18m28s ~ 108th Ave SE & SE 220th Pl(57375) ~ BUS 160 10:45:16 10:49:28 ~ 104th Ave SE & SE 240th St(57430) ~ Walk 1m27s ~ SE 240th St & 104th Ave SE(57429) ~ BUS 165 10:59 11:25:38 ~ Pacific Hwy S & Kent Des Moines Rd(50480) ~ Walk 21m13s -3,0,01:23:36,8749,4246,10:23:15,11:46:51,Metro Transit,BUS,165,kcm:57448|kcm:50480,Walk 33m35s ~ SE 240th St & 116th Ave SE(57448) ~ BUS 165 10:56:50 11:25:38 ~ Pacific Hwy S & Kent Des Moines Rd(50480) ~ Walk 21m13s -4,2,00:35:06,3908,0,10:01:27,10:36:33,Metro Transit|Sound Generations,BUS,Hyde Shuttle|165|Hyde Shuttle,sound-generations:area_558|kcm:61180|kcm:47270|sound-generations:area_551,sound-generations:area_558(area_558) ~ BUS null 10:01:27 10:25:37Walk 0s ~ Pacific Hwy S & S 240th St(61180) ~ BUS 165 10:27:37 10:30:13 ~ S 240th St & 21st Ave S(47270) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:32:13 10:36:33 -4,2,00:36:03,4063,137,10:02:55,10:38:58,Metro Transit|Sound Generations,BUS,Hyde Shuttle|A Line|Hyde Shuttle,sound-generations:area_558|kcm:60800|kcm:60810|sound-generations:area_551,sound-generations:area_558(area_558) ~ BUS null 10:02:55 10:25:12Walk 1m48s ~ Pacific Hwy S & Kent Des Moines Rd(60800) ~ BUS A Line 10:29 10:30:38 ~ Pacific Hwy S & S 224th St(60810) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:32:38 10:38:58 -4,2,00:34:10,3998,202,10:10:18,10:44:28,Metro Transit|Sound Generations,BUS,Hyde Shuttle|156|Hyde Shuttle,sound-generations:area_558|kcm:48980|kcm:48990|sound-generations:area_551,sound-generations:area_558(area_558) ~ BUS null 10:10:18 10:33:40Walk 2m40s ~ 24th Ave S & S 230th St(48980) ~ BUS 156 10:38:20 10:39:02 ~ 24th Ave S & S 226th St(48990) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:41:02 10:44:28 -5,0,00:48:36,4732,1635,10:12:48,11:01:24,Metro Transit,BUS,160,kcm:57375|kcm:58255,Walk 18m28s ~ 108th Ave SE & SE 220th Pl(57375) ~ BUS 160 10:31:16 10:58:37 ~ Auburn Way N & 37th St NE(58255) ~ Walk 2m47s -5,0,00:49:19,4775,1635,10:26:48,11:16:07,Metro Transit,BUS,160,kcm:57375|kcm:58255,Walk 18m28s ~ 108th Ave SE & SE 220th Pl(57375) ~ BUS 160 10:45:16 11:13:20 ~ Auburn Way N & 37th St NE(58255) ~ Walk 2m47s -6,1,00:31:41,3260,212,10:00:01,10:31:42,Metro Transit|Sound Generations,BUS,Hyde Shuttle|160,sound-generations:area_558|kcm:58148|kcm:58255,sound-generations:area_558(area_558) ~ BUS null 10:00:01 10:18Walk 0s ~ Central Ave S & E Meeker St(58148) ~ BUS 160 10:20 10:28:55 ~ Auburn Way N & 37th St NE(58255) ~ Walk 2m47s -6,1,00:31:41,3260,212,10:15:01,10:46:42,Metro Transit|Sound Generations,BUS,Hyde Shuttle|160,sound-generations:area_558|kcm:58148|kcm:58255,sound-generations:area_558(area_558) ~ BUS null 10:15:01 10:33Walk 0s ~ Central Ave S & E Meeker St(58148) ~ BUS 160 10:35 10:43:55 ~ Auburn Way N & 37th St NE(58255) ~ Walk 2m47s -6,1,00:32:14,3293,212,10:29:10,11:01:24,Metro Transit|Sound Generations,BUS,Hyde Shuttle|160,sound-generations:area_558|kcm:58180|kcm:58255,sound-generations:area_558(area_558) ~ BUS null 10:29:10 10:49:40Walk 0s ~ Central Ave S & S 259th St(58180) ~ BUS 160 10:51:40 10:58:37 ~ Auburn Way N & 37th St NE(58255) ~ Walk 2m47s -7,2,01:58:18,11174,3077,10:12:48,12:11:06,Metro Transit,BUS,160|183|903,kcm:57375|kcm:62213|kcm:57459|kcm:80431|kcm:80439|kcm:60605,Walk 18m28s ~ 108th Ave SE & SE 220th Pl(57375) ~ BUS 160 10:31:16 10:46:43 ~ E Smith St & State Ave N(62213) ~ Walk 2m50s ~ Kent Sounder Station - Bay 9(57459) ~ BUS 183 11:00 11:37 ~ Federal Way TC - Bay 1(80431) ~ Walk 33s ~ Federal Way TC - Bay 9(80439) ~ BUS 903 11:45 11:52:43 ~ 1st Way S & S 333rd St(60605) ~ Walk 18m23s -7,1,02:02:04,11857,4532,10:12:48,12:14:52,Metro Transit,BUS,160|183,kcm:57375|kcm:62213|kcm:57459|kcm:80431,Walk 18m28s ~ 108th Ave SE & SE 220th Pl(57375) ~ BUS 160 10:31:16 10:46:43 ~ E Smith St & State Ave N(62213) ~ Walk 2m50s ~ Kent Sounder Station - Bay 9(57459) ~ BUS 183 11:00 11:37 ~ Federal Way TC - Bay 1(80431) ~ Walk 37m52s -7,1,01:49:15,9066,1761,10:26:48,12:16:03,Metro Transit,BUS,160|181,kcm:57375|kcm:57784|kcm:57775|kcm:83784,Walk 18m28s ~ 108th Ave SE & SE 220th Pl(57375) ~ BUS 160 10:45:16 11:26 ~ 2nd St SW & A St SW(57784) ~ Walk 1m12s ~ Auburn Transit Center - Bay 3(57775) ~ BUS 181 11:44 12:12:47 ~ SW 320th St & 1st Ave S(83784) ~ Walk 3m16s -8,2,00:48:03,4857,230,10:05:03,10:53:06,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|A Line|Road to Independence,sound-generations:area_558|kcm:61220|kcm:61280|pudget-sound-educational:area_622,sound-generations:area_558(area_558) ~ BUS null 10:05:03 10:30:17Walk 0s ~ Pacific Hwy S & S 260th St(61220) ~ BUS A Line 10:32:17 10:39:16 ~ Pacific Hwy S & S Dash Point Rd(61280) ~ Walk 8s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:41:24 10:50:20Walk 2m46s -8,2,00:48:07,4855,220,10:05:03,10:53:10,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|A Line|Road to Independence,sound-generations:area_558|kcm:61220|kcm:61300|pudget-sound-educational:area_622,sound-generations:area_558(area_558) ~ BUS null 10:05:03 10:30:17Walk 0s ~ Pacific Hwy S & S 260th St(61220) ~ BUS A Line 10:32:17 10:41:16 ~ Pacific Hwy S & S 308th St(61300) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:43:16 10:50:24Walk 2m46s -8,2,00:48:03,4857,230,10:15:03,11:03:06,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|A Line|Road to Independence,sound-generations:area_558|kcm:61220|kcm:61280|pudget-sound-educational:area_622,sound-generations:area_558(area_558) ~ BUS null 10:15:03 10:40:17Walk 0s ~ Pacific Hwy S & S 260th St(61220) ~ BUS A Line 10:42:17 10:49:16 ~ Pacific Hwy S & S Dash Point Rd(61280) ~ Walk 8s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:51:24 11:00:20Walk 2m46s -9,2,01:58:54,10301,1850,10:03:06,12:02:00,Metro Transit,BUS,160|101|50,kcm:57185|kcm:46440|kcm:79520|kcm:99252|kcm:31871,Walk 18m31s ~ 108th Ave SE & SE 220th Pl(57185) ~ BUS 160 10:21:37 10:49:04 ~ S 3rd St & Rainier Ave S(46440) ~ Walk 2m29s ~ SW Sunset Blvd & Rainier Ave S(79520) ~ BUS 101 10:59 11:16 ~ SODO Busway & S Spokane St(99252) ~ BUS 50 11:32:28 11:58:35 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m25s -9,3,01:59:27,11425,2468,10:12:48,12:12:15,Metro Transit|Sound Transit,BUS|RAIL,160|S Line|C Line|128,kcm:57375|kcm:57451|sound-transit:S_KE_NB|sound-transit:S_KS|kcm:1562|kcm:20041|kcm:32011|kcm:31871,Walk 18m28s ~ 108th Ave SE & SE 220th Pl(57375) ~ BUS 160 10:31:16 10:48 ~ Kent Sounder Station - Bay 1(57451) ~ Walk 2m9s ~ Kent Station (Northbound)(S_KE_NB) ~ RAIL S Line 10:55 11:22 ~ King Street Station(S_KS) ~ Walk 9m13s ~ Alaskan Way S & S Jackson St(1562) ~ BUS C Line 11:38:40 11:58 ~ SW Alaska St & California Ave SW - Bay 3(20041) ~ Walk 42s ~ SW Alaska St & 44th Ave SW - Bay 4(32011) ~ BUS 128 12:05 12:08:50 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m25s -9,2,02:01:05,11597,3386,10:12:48,12:13:53,Metro Transit|Sound Transit,BUS|RAIL,160|S Line|C Line,kcm:57375|kcm:57451|sound-transit:S_KE_NB|sound-transit:S_KS|kcm:1562|kcm:20041,Walk 18m28s ~ 108th Ave SE & SE 220th Pl(57375) ~ BUS 160 10:31:16 10:48 ~ Kent Sounder Station - Bay 1(57451) ~ Walk 2m9s ~ Kent Station (Northbound)(S_KE_NB) ~ RAIL S Line 10:55 11:22 ~ King Street Station(S_KS) ~ Walk 9m13s ~ Alaskan Way S & S Jackson St(1562) ~ BUS C Line 11:38:40 11:58 ~ SW Alaska St & California Ave SW - Bay 3(20041) ~ Walk 15m53s -10,3,01:16:01,7089,176,10:02:33,11:18:34,Metro Transit|Sound Generations,BUS,Hyde Shuttle|160|101|Hyde Shuttle,sound-generations:area_558|kcm:57200|kcm:46440|kcm:79520|kcm:99252|sound-generations:area_560,sound-generations:area_558(area_558) ~ BUS null 10:02:33 10:06:59Walk 0s ~ 108th Ave SE & SE 212th St(57200) ~ BUS 160 10:08:59 10:35:04 ~ S 3rd St & Rainier Ave S(46440) ~ Walk 2m29s ~ SW Sunset Blvd & Rainier Ave S(79520) ~ BUS 101 10:44 11:01 ~ SODO Busway & S Spokane St(99252) ~ Walk 0s ~ sound-generations:area_560(area_560) ~ BUS null 11:03 11:18:34 -10,2,01:09:25,5967,0,10:10:09,11:19:34,Metro Transit|Sound Generations,BUS,Hyde Shuttle|150|Hyde Shuttle,sound-generations:area_558|kcm:58087|kcm:99252|sound-generations:area_560,sound-generations:area_558(area_558) ~ BUS null 10:10:09 10:30:57Walk 0s ~ West Valley Hwy S & S 190th St(58087) ~ BUS 150 10:32:57 11:02 ~ SODO Busway & S Spokane St(99252) ~ Walk 0s ~ sound-generations:area_560(area_560) ~ BUS null 11:04 11:19:34 -10,3,01:16:55,7143,176,10:16:39,11:33:34,Metro Transit|Sound Generations,BUS,Hyde Shuttle|160|101|Hyde Shuttle,sound-generations:area_558|kcm:57200|kcm:46440|kcm:79520|kcm:99252|sound-generations:area_560,sound-generations:area_558(area_558) ~ BUS null 10:16:39 10:21:05Walk 0s ~ 108th Ave SE & SE 212th St(57200) ~ BUS 160 10:23:05 10:49:04 ~ S 3rd St & Rainier Ave S(46440) ~ Walk 2m29s ~ SW Sunset Blvd & Rainier Ave S(79520) ~ BUS 101 10:59 11:16 ~ SODO Busway & S Spokane St(99252) ~ Walk 0s ~ sound-generations:area_560(area_560) ~ BUS null 11:18 11:33:34 -11,1,01:52:12,10210,3103,10:12:48,12:05:00,Metro Transit|Sound Transit,BUS,160|578,kcm:57375|kcm:57784|pierce-transit:18728|pierce-transit:10401,Walk 18m28s ~ 108th Ave SE & SE 220th Pl(57375) ~ BUS 160 10:31:16 11:11 ~ 2nd St SW & A St SW(57784) ~ Walk 1m29s ~ Auburn Station - Bay 4(18728) ~ BUS 578 11:17 11:44 ~ Puyallup Station - Bay 3(10401) ~ Walk 21m -11,1,01:56:12,10450,3103,10:41:48,12:38:00,Metro Transit|Sound Transit,BUS,160|578,kcm:57375|kcm:57784|pierce-transit:18728|pierce-transit:10401,Walk 18m28s ~ 108th Ave SE & SE 220th Pl(57375) ~ BUS 160 11:00:16 11:42 ~ 2nd St SW & A St SW(57784) ~ Walk 1m29s ~ Auburn Station - Bay 4(18728) ~ BUS 578 11:49 12:17 ~ Puyallup Station - Bay 3(10401) ~ Walk 21m -12,2,00:53:59,5041,0,10:00:01,10:54:00,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|160|Road to Independence,sound-generations:area_558|kcm:58148|kcm:58230|pudget-sound-educational:area_622,sound-generations:area_558(area_558) ~ BUS null 10:00:01 10:18Walk 0s ~ Central Ave S & E Meeker St(58148) ~ BUS 160 10:20 10:26:26 ~ Auburn Way N & 85th Ave S(58230) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:28:26 10:54 -12,2,00:49:15,4775,25,10:11:57,11:01:12,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|160|Road to Independence,sound-generations:area_558|kcm:57375|kcm:57407|pudget-sound-educational:area_622,sound-generations:area_558(area_558) ~ BUS null 10:11:57 10:15:16Walk 0s ~ 108th Ave SE & SE 220th Pl(57375) ~ BUS 160 10:17:16 10:23:01 ~ 104th Ave SE & SE 248th St(57407) ~ Walk 21s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:25:22 11:01:12 -12,2,00:49:30,4772,0,10:11:57,11:01:27,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|160|Road to Independence,sound-generations:area_558|kcm:57375|kcm:57405|pudget-sound-educational:area_622,sound-generations:area_558(area_558) ~ BUS null 10:11:57 10:15:16Walk 0s ~ 108th Ave SE & SE 220th Pl(57375) ~ BUS 160 10:17:16 10:22:14 ~ 104th Ave SE & SE 244th St(57405) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:24:14 11:01:27 -13,3,03:10:03,15594,2462,11:02:37,14:12:40,Metro Transit|Sound Transit,BUS,160|101|554|208,kcm:57185|kcm:46440|kcm:79520|kcm:620|kcm:1480|kcm:64590|kcm:64593|kcm:64399,Walk 18m31s ~ 108th Ave SE & SE 220th Pl(57185) ~ BUS 160 11:21:08 11:49:04 ~ S 3rd St & Rainier Ave S(46440) ~ Walk 2m29s ~ SW Sunset Blvd & Rainier Ave S(79520) ~ BUS 101 11:59 12:24 ~ 4th Ave S & S Jackson St(620) ~ Walk 5m26s ~ S Jackson St & Maynard Ave S(1480) ~ BUS 554 12:46:10 13:12 ~ Issaquah Transit Center - Bay 6(64590) ~ Walk 1m1s ~ Issaquah Transit Center - Bay 4(64593) ~ BUS 208 13:30 14:06:59 ~ Railroad Ave SE & SE River St(64399) ~ Walk 5m41s -14,4,03:47:39,17037,509,10:10:09,13:57:48,Metro Transit|Sound Generations|Sound Transit,BUS,Hyde Shuttle|150|545|224|629,sound-generations:area_558|kcm:58087|kcm:620|kcm:72488|kcm:68803|kcm:64397,sound-generations:area_558(area_558) ~ BUS null 10:10:09 10:30:57Walk 0s ~ West Valley Hwy S & S 190th St(58087) ~ BUS 150 10:32:57 11:11 ~ 4th Ave S & S Jackson St(620) ~ BUS 545 11:21 12:01:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 12:15:31 12:49 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 13:04 13:51 ~ Railroad Avenue Southeast Ave SE & SE Northern St(64397) ~ Walk 6m48s -14,3,02:47:31,13055,858,11:25:09,14:12:40,Metro Transit|Sound Generations|Sound Transit,BUS,Hyde Shuttle|150|554|208,sound-generations:area_558|kcm:58087|kcm:620|kcm:1480|kcm:64590|kcm:64593|kcm:64399,sound-generations:area_558(area_558) ~ BUS null 11:25:09 11:45:57Walk 0s ~ West Valley Hwy S & S 190th St(58087) ~ BUS 150 11:47:57 12:27 ~ 4th Ave S & S Jackson St(620) ~ Walk 5m26s ~ S Jackson St & Maynard Ave S(1480) ~ BUS 554 12:46:10 13:12 ~ Issaquah Transit Center - Bay 6(64590) ~ Walk 1m1s ~ Issaquah Transit Center - Bay 4(64593) ~ BUS 208 13:30 14:06:59 ~ Railroad Ave SE & SE River St(64399) ~ Walk 5m41s -15,2,01:55:50,10661,2593,10:12:48,12:08:38,Metro Transit|Sound Transit,BUS|RAIL,160|S Line|3,kcm:57375|kcm:57451|sound-transit:S_KE_NB|sound-transit:S_KS|kcm:1540|kcm:41350,Walk 18m28s ~ 108th Ave SE & SE 220th Pl(57375) ~ BUS 160 10:31:16 10:48 ~ Kent Sounder Station - Bay 1(57451) ~ Walk 2m9s ~ Kent Station (Northbound)(S_KE_NB) ~ RAIL S Line 10:55 11:22 ~ King Street Station(S_KS) ~ Walk 11m5s ~ James St & 5th Ave(1540) ~ BUS 3 11:36 12:05:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m3s -15,2,02:08:32,11023,2052,10:15:06,12:23:38,Metro Transit,BUS,160|101|3,kcm:57185|kcm:46440|kcm:79520|kcm:691|kcm:575|kcm:41350,Walk 18m31s ~ 108th Ave SE & SE 220th Pl(57185) ~ BUS 160 10:33:37 11:01:04 ~ S 3rd St & Rainier Ave S(46440) ~ Walk 2m29s ~ SW Sunset Blvd & Rainier Ave S(79520) ~ BUS 101 11:14 11:45 ~ 4th Ave & Union St(691) ~ Walk 3m5s ~ 3rd Ave & Pike St(575) ~ BUS 3 11:58 12:20:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m3s -15,2,02:04:30,11977,3653,10:32:37,12:37:07,Metro Transit,BUS,160|101|E Line,kcm:57185|kcm:46440|kcm:79520|kcm:691|kcm:575|kcm:6320,Walk 18m31s ~ 108th Ave SE & SE 220th Pl(57185) ~ BUS 160 10:51:08 11:19:04 ~ S 3rd St & Rainier Ave S(46440) ~ Walk 2m29s ~ SW Sunset Blvd & Rainier Ave S(79520) ~ BUS 101 11:29 11:59 ~ 4th Ave & Union St(691) ~ Walk 3m5s ~ 3rd Ave & Pike St(575) ~ BUS E Line 12:05 12:12:02 ~ Aurora Ave N & Lynn St(6320) ~ Walk 25m5s -17,2,01:28:33,8382,1712,10:03:06,11:31:39,Metro Transit|Sound Transit,BUS|TRAM,160|101|1-Line,kcm:57185|kcm:46440|kcm:79520|kcm:99254|sound-transit:99111|sound-transit:99121,Walk 18m31s ~ 108th Ave SE & SE 220th Pl(57185) ~ BUS 160 10:21:37 10:49:04 ~ S 3rd St & Rainier Ave S(46440) ~ Walk 2m29s ~ SW Sunset Blvd & Rainier Ave S(79520) ~ BUS 101 10:59 11:18:40 ~ SODO Busway & S Lander St(99254) ~ Walk 49s ~ SODO Station(99111) ~ TRAM 1-Line 11:28 11:31 ~ Beacon Hill Station(99121) ~ Walk 39s -17,2,01:26:33,8262,1712,10:15:06,11:41:39,Metro Transit|Sound Transit,BUS|TRAM,160|101|1-Line,kcm:57185|kcm:46440|kcm:79520|kcm:99254|sound-transit:99111|sound-transit:99121,Walk 18m31s ~ 108th Ave SE & SE 220th Pl(57185) ~ BUS 160 10:33:37 11:01:04 ~ S 3rd St & Rainier Ave S(46440) ~ Walk 2m29s ~ SW Sunset Blvd & Rainier Ave S(79520) ~ BUS 101 11:14 11:33:40 ~ SODO Busway & S Lander St(99254) ~ Walk 49s ~ SODO Station(99111) ~ TRAM 1-Line 11:38 11:41 ~ Beacon Hill Station(99121) ~ Walk 39s -17,1,01:40:47,9688,3338,10:03:06,11:43:53,Metro Transit,BUS,160|101,kcm:57185|kcm:46440|kcm:79520|kcm:99264,Walk 18m31s ~ 108th Ave SE & SE 220th Pl(57185) ~ BUS 160 10:21:37 10:49:04 ~ S 3rd St & Rainier Ave S(46440) ~ Walk 2m29s ~ SW Sunset Blvd & Rainier Ave S(79520) ~ BUS 101 10:59 11:20:45 ~ SODO Busway & S Holgate St(99264) ~ Walk 23m8s -18,2,01:01:30,5571,108,10:10:09,11:11:39,Metro Transit|Sound Generations|Sound Transit,BUS|TRAM,Hyde Shuttle|150|1-Line,sound-generations:area_558|kcm:58087|kcm:99254|sound-transit:99111|sound-transit:99121,sound-generations:area_558(area_558) ~ BUS null 10:10:09 10:30:57Walk 0s ~ West Valley Hwy S & S 190th St(58087) ~ BUS 150 10:32:57 11:04:40 ~ SODO Busway & S Lander St(99254) ~ Walk 49s ~ SODO Station(99111) ~ TRAM 1-Line 11:08 11:11 ~ Beacon Hill Station(99121) ~ Walk 39s -18,2,01:13:34,6592,523,10:12:55,11:26:29,Metro Transit|Sound Generations|Sound Transit,BUS|TRAM,Hyde Shuttle|A Line|1-Line,sound-generations:area_558|kcm:60800|kcm:60850|sound-transit:99914|sound-transit:99240,sound-generations:area_558(area_558) ~ BUS null 10:12:55 10:35:12Walk 1m48s ~ Pacific Hwy S & Kent Des Moines Rd(60800) ~ BUS A Line 10:39 10:45:46 ~ International Blvd & S 200th St(60850) ~ Walk 4m23s ~ Angle Lake Station(99914) ~ TRAM 1-Line 10:56 11:25 ~ Beacon Hill Station(99240) ~ Walk 1m29s -18,1,01:19:44,7238,1734,10:10:09,11:29:53,Metro Transit|Sound Generations,BUS,Hyde Shuttle|150,sound-generations:area_558|kcm:58087|kcm:99264,sound-generations:area_558(area_558) ~ BUS null 10:10:09 10:30:57Walk 0s ~ West Valley Hwy S & S 190th St(58087) ~ BUS 150 10:32:57 11:06:45 ~ SODO Busway & S Holgate St(99264) ~ Walk 23m8s -19,2,01:45:45,10022,2530,10:04:53,11:50:38,Metro Transit,BUS,165|F Line|160,kcm:47580|kcm:53720|kcm:53975|kcm:59860|kcm:59902|kcm:57375,Walk 12m10s ~ 1st Ave S & S 176th St(47580) ~ BUS 165 10:17:03 10:24:32 ~ 4th Ave SW & SW 156th St(53720) ~ Walk 9s ~ 4th Ave SW & SW 156th St(53975) ~ BUS F Line 10:26:42 11:02 ~ Rainier Ave S & S 7th St(59860) ~ Walk 2m14s ~ S 7th St & Rainier Ave S(59902) ~ BUS 160 11:09:47 11:32:16 ~ 108th Ave SE & SE 220th Pl(57375) ~ Walk 18m22s -19,1,01:29:18,8290,2335,10:25:15,11:54:33,Metro Transit,BUS,165|160,kcm:48620|kcm:57127|kcm:57130|kcm:57185,Walk 10m11s ~ 1st Ave S & SW 178th St(48620) ~ BUS 165 10:35:26 11:21 ~ SE 240th St & 104th Ave SE(57127) ~ Walk 1m45s ~ 104th Ave SE & SE 240th St(57130) ~ BUS 160 11:31:23 11:36:08 ~ 108th Ave SE & SE 220th Pl(57185) ~ Walk 18m25s -19,0,01:31:19,8631,3439,10:25:15,11:56:34,Metro Transit,BUS,165,kcm:48620|kcm:57141,Walk 10m11s ~ 1st Ave S & SW 178th St(48620) ~ BUS 165 10:35:26 11:22:44 ~ SE 240th St & 116th Ave SE(57141) ~ Walk 33m50s -20,2,00:43:59,4441,0,10:02:15,10:46:14,Metro Transit|Sound Generations,BUS,Hyde Shuttle|165|Hyde Shuttle,sound-generations:area_551|kcm:48620|kcm:48950|sound-generations:area_558,sound-generations:area_551(area_551) ~ BUS null 10:02:15 10:04:26Walk 0s ~ 1st Ave S & SW 178th St(48620) ~ BUS 165 10:06:26 10:21:30 ~ Pacific Hwy S & S 240th St(48950) ~ Walk 0s ~ sound-generations:area_558(area_558) ~ BUS null 10:23:30 10:46:14 -20,2,00:49:19,4890,179,10:05:35,10:54:54,Metro Transit|Sound Generations,BUS,Hyde Shuttle|156|Hyde Shuttle,sound-generations:area_551|kcm:50310|kcm:50461|sound-generations:area_558,sound-generations:area_551(area_551) ~ BUS null 10:05:35 10:14:48Walk 0s ~ 8th Ave S & S 198th St(50310) ~ BUS 156 10:16:48 10:27:31 ~ Kent Des Moines Rd & 24th Ave S(50461) ~ Walk 2m20s ~ sound-generations:area_558(area_558) ~ BUS null 10:31:51 10:54:54 -20,2,00:55:24,5177,71,10:11:43,11:07:07,Metro Transit|Sound Generations,BUS,Hyde Shuttle|161|Hyde Shuttle,sound-generations:area_551|kcm:50145|kcm:84352|sound-generations:area_558,sound-generations:area_551(area_551) ~ BUS null 10:11:43 10:21:51Walk 1m3s ~ S 156th Way & Des Moines Memorial Dr S(50145) ~ BUS 161 10:24:54 10:52:36 ~ 84th Ave S & S 212th St(84352) ~ Walk 0s ~ sound-generations:area_558(area_558) ~ BUS null 10:54:36 11:07:07 -21,0,01:36:56,11279,7450,10:00:00,11:36:56,,,,,Walk 1h36m56s -21,0,00:39:19,4773,2458,10:25:15,11:04:34,Metro Transit,BUS,165,kcm:48620|kcm:48810,Walk 10m11s ~ 1st Ave S & SW 178th St(48620) ~ BUS 165 10:35:26 10:43 ~ Marine View Dr S & S 223rd St(48810) ~ Walk 21m34s -22,2,00:19:11,2953,0,10:02:15,10:21:26,Metro Transit|Sound Generations,BUS,Hyde Shuttle|165|Hyde Shuttle,sound-generations:area_551|kcm:48620|kcm:48800|sound-generations:area_551,sound-generations:area_551(area_551) ~ BUS null 10:02:15 10:04:26Walk 0s ~ 1st Ave S & SW 178th St(48620) ~ BUS 165 10:06:26 10:13:32 ~ Marine View Dr S & S 220th St(48800) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:15:32 10:21:26 -22,2,00:25:34,3336,0,10:05:35,10:31:09,Metro Transit|Sound Generations,BUS,Hyde Shuttle|156|Hyde Shuttle,sound-generations:area_551|kcm:50310|kcm:50450|sound-generations:area_551,sound-generations:area_551(area_551) ~ BUS null 10:05:35 10:14:48Walk 0s ~ 8th Ave S & S 198th St(50310) ~ BUS 156 10:16:48 10:26:31 ~ 24th Ave S & S 226th St(50450) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:28:31 10:31:09 -22,1,00:29:41,3480,672,10:05:35,10:35:16,Metro Transit|Sound Generations,BUS,Hyde Shuttle|156,sound-generations:area_551|kcm:50310|kcm:50450,sound-generations:area_551(area_551) ~ BUS null 10:05:35 10:14:48Walk 0s ~ 8th Ave S & S 198th St(50310) ~ BUS 156 10:16:48 10:26:31 ~ 24th Ave S & S 226th St(50450) ~ Walk 8m45s -23,1,01:21:52,6870,1024,10:25:15,11:47:07,Metro Transit,BUS,165|160,kcm:48620|kcm:57452|kcm:57451|kcm:58255,Walk 10m11s ~ 1st Ave S & SW 178th St(48620) ~ BUS 165 10:35:26 11:15 ~ Kent Sounder Station - Bay 2(57452) ~ Walk 29s ~ Kent Sounder Station - Bay 1(57451) ~ BUS 160 11:33 11:44:20 ~ Auburn Way N & 37th St NE(58255) ~ Walk 2m47s -23,1,01:07:52,6030,1024,10:55:15,12:03:07,Metro Transit,BUS,165|160,kcm:48620|kcm:57452|kcm:57451|kcm:58255,Walk 10m11s ~ 1st Ave S & SW 178th St(48620) ~ BUS 165 11:05:26 11:45 ~ Kent Sounder Station - Bay 2(57452) ~ Walk 29s ~ Kent Sounder Station - Bay 1(57451) ~ BUS 160 11:49 12:00:20 ~ Auburn Way N & 37th St NE(58255) ~ Walk 2m47s -24,2,00:54:51,5093,0,10:02:15,10:57:06,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|165|Road to Independence,sound-generations:area_551|kcm:48620|kcm:50717|pudget-sound-educational:area_622,sound-generations:area_551(area_551) ~ BUS null 10:02:15 10:04:26Walk 0s ~ 1st Ave S & SW 178th St(48620) ~ BUS 165 10:06:26 10:37:05 ~ 64th Ave S & W James St(50717) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:39:05 10:57:06 -24,2,01:01:25,5530,62,10:04:40,11:06:05,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|A Line|Road to Independence,sound-generations:area_551|kcm:61230|kcm:61280|pudget-sound-educational:area_622,sound-generations:area_551(area_551) ~ BUS null 10:04:40 10:31:03Walk 50s ~ Pacific Hwy S & S 268th St(61230) ~ BUS A Line 10:33:53 10:39:16 ~ Pacific Hwy S & S Dash Point Rd(61280) ~ Walk 8s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:41:24 11:06:05 -24,2,01:00:33,5555,168,10:05:32,11:06:05,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|A Line|Road to Independence,sound-generations:area_551|kcm:61240|kcm:61280|pudget-sound-educational:area_622,sound-generations:area_551(area_551) ~ BUS null 10:05:32 10:30:27Walk 2m12s ~ Pacific Hwy S & S 272nd St(61240) ~ BUS A Line 10:34:39 10:39:16 ~ Pacific Hwy S & S Dash Point Rd(61280) ~ Walk 8s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:41:24 11:06:05 -25,2,01:16:39,7336,1267,10:25:15,11:41:54,Metro Transit,BUS,165|A Line|187,kcm:48620|kcm:48950|kcm:61180|kcm:80431|kcm:80433|kcm:83784,Walk 10m11s ~ 1st Ave S & SW 178th St(48620) ~ BUS 165 10:35:26 10:50:30 ~ Pacific Hwy S & S 240th St(48950) ~ Walk 2m5s ~ Pacific Hwy S & S 240th St(61180) ~ BUS A Line 10:58:04 11:20 ~ Federal Way TC - Bay 1(80431) ~ Walk 1m4s ~ Federal Way TC - Bay 3(80433) ~ BUS 187 11:32 11:38:38 ~ SW 320th St & 1st Ave S(83784) ~ Walk 3m16s -25,1,01:20:02,8403,3270,10:25:15,11:45:17,Metro Transit,BUS,165|A Line,kcm:48620|kcm:48950|kcm:61180|kcm:61313,Walk 10m11s ~ 1st Ave S & SW 178th St(48620) ~ BUS 165 10:35:26 10:50:30 ~ Pacific Hwy S & S 240th St(48950) ~ Walk 2m5s ~ Pacific Hwy S & S 240th St(61180) ~ BUS A Line 10:58:04 11:14:51 ~ S 316th St & Pacific Hwy S(61313) ~ Walk 30m26s -25,2,01:20:48,7585,1267,10:55:15,12:16:03,Metro Transit,BUS,165|A Line|181,kcm:48620|kcm:48950|kcm:61180|kcm:80431|kcm:80433|kcm:83784,Walk 10m11s ~ 1st Ave S & SW 178th St(48620) ~ BUS 165 11:05:26 11:20:30 ~ Pacific Hwy S & S 240th St(48950) ~ Walk 2m5s ~ Pacific Hwy S & S 240th St(61180) ~ BUS A Line 11:29:08 11:52 ~ Federal Way TC - Bay 1(80431) ~ Walk 1m4s ~ Federal Way TC - Bay 3(80433) ~ BUS 181 12:05 12:12:47 ~ SW 320th St & 1st Ave S(83784) ~ Walk 3m16s -26,2,00:48:26,4916,282,10:04:40,10:53:06,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|A Line|Road to Independence,sound-generations:area_551|kcm:61230|kcm:61280|pudget-sound-educational:area_622,sound-generations:area_551(area_551) ~ BUS null 10:04:40 10:31:03Walk 50s ~ Pacific Hwy S & S 268th St(61230) ~ BUS A Line 10:33:53 10:39:16 ~ Pacific Hwy S & S Dash Point Rd(61280) ~ Walk 8s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:41:24 10:50:20Walk 2m46s -26,2,00:47:34,4942,388,10:05:32,10:53:06,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|A Line|Road to Independence,sound-generations:area_551|kcm:61240|kcm:61280|pudget-sound-educational:area_622,sound-generations:area_551(area_551) ~ BUS null 10:05:32 10:30:27Walk 2m12s ~ Pacific Hwy S & S 272nd St(61240) ~ BUS A Line 10:34:39 10:39:16 ~ Pacific Hwy S & S Dash Point Rd(61280) ~ Walk 8s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:41:24 10:50:20Walk 2m46s -26,2,00:48:30,4913,272,10:04:40,10:53:10,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|A Line|Road to Independence,sound-generations:area_551|kcm:61230|kcm:61300|pudget-sound-educational:area_622,sound-generations:area_551(area_551) ~ BUS null 10:04:40 10:31:03Walk 50s ~ Pacific Hwy S & S 268th St(61230) ~ BUS A Line 10:33:53 10:41:16 ~ Pacific Hwy S & S 308th St(61300) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:43:16 10:50:24Walk 2m46s -27,2,01:26:22,7887,1227,10:04:53,11:31:15,Metro Transit,BUS,165|131|128,kcm:47580|kcm:52301|kcm:52304|kcm:53870|kcm:31871,Walk 12m10s ~ 1st Ave S & S 176th St(47580) ~ BUS 165 10:17:03 10:27 ~ Burien Transit Center - Bay 1(52301) ~ Walk 37s ~ Burien Transit Center - Bay 4(52304) ~ BUS 131 10:30 10:39:43 ~ 4th Ave SW & SW 112th St(53870) ~ BUS 128 10:50:26 11:27:50 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m25s -27,1,01:39:26,9604,3370,10:04:53,11:44:19,Metro Transit,BUS,165|120,kcm:47580|kcm:52301|kcm:52303|kcm:21620,Walk 12m10s ~ 1st Ave S & S 176th St(47580) ~ BUS 165 10:17:03 10:27 ~ Burien Transit Center - Bay 1(52301) ~ Walk 1m6s ~ Burien Transit Center - Bay 3(52303) ~ BUS 120 10:36 11:12 ~ Delridge Way SW & SW Andover St(21620) ~ Walk 32m19s -27,2,01:45:32,10721,3516,10:05:43,11:51:15,Metro Transit,BUS,F Line|120|128,kcm:47646|kcm:52304|kcm:52303|kcm:21450|kcm:21440|kcm:31871,Walk 39m22s ~ SW 156th St & 2nd Ave SW(47646) ~ BUS F Line 10:45:05 10:48 ~ Burien Transit Center - Bay 4(52304) ~ Walk 37s ~ Burien Transit Center - Bay 3(52303) ~ BUS 120 10:56 11:24 ~ Delridge Way SW & SW Myrtle St(21450) ~ Walk 2m9s ~ SW Orchard St & Delridge Way SW(21440) ~ BUS 128 11:31 11:47:50 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m25s -28,2,00:49:08,4750,0,10:00:22,10:49:30,Metro Transit|Sound Generations,BUS,Hyde Shuttle|60|Hyde Shuttle,sound-generations:area_551|kcm:21170|kcm:22184|sound-generations:area_560,sound-generations:area_551(area_551) ~ BUS null 10:00:22 10:18:46Walk 0s ~ SW Roxbury St & 5th Pl SW(21170) ~ BUS 60 10:20:46 10:26:05 ~ Delridge Way SW & SW Henderson St(22184) ~ Walk 0s ~ sound-generations:area_560(area_560) ~ BUS null 10:28:05 10:49:30 -28,2,00:51:23,4927,57,10:04:58,10:56:21,Metro Transit|Sound Generations,BUS,Hyde Shuttle|21|Hyde Shuttle,sound-generations:area_551|kcm:22261|kcm:22750|sound-generations:area_560,sound-generations:area_551(area_551) ~ BUS null 10:04:58 10:32:01Walk 48s ~ SW Roxbury St & 30th Ave SW(22261) ~ BUS 21 10:34:49 10:44:32 ~ 35th Ave SW & SW Findlay St(22750) ~ Walk 0s ~ sound-generations:area_560(area_560) ~ BUS null 10:46:32 10:56:21 -28,2,00:51:26,4894,9,10:08:36,11:00:02,Metro Transit|Sound Generations,BUS,Hyde Shuttle|120|Hyde Shuttle,sound-generations:area_551|kcm:39431|kcm:31731|sound-generations:area_560,sound-generations:area_551(area_551) ~ BUS null 10:08:36 10:30Walk 0s ~ 15th Ave SW & SW Roxbury St - Bay 2(39431) ~ BUS 120 10:32 10:37 ~ 26th Ave SW & SW Barton St - Bay 2(31731) ~ Walk 7s ~ sound-generations:area_560(area_560) ~ BUS null 10:39:07 11:00:02 -29,2,02:12:45,11617,2538,10:25:15,12:38:00,Metro Transit|Sound Transit,BUS,165|A Line|578,kcm:48620|kcm:48950|kcm:61180|kcm:80431|pierce-transit:4136|pierce-transit:10401,Walk 10m11s ~ 1st Ave S & SW 178th St(48620) ~ BUS 165 10:35:26 10:50:30 ~ Pacific Hwy S & S 240th St(48950) ~ Walk 2m5s ~ Pacific Hwy S & S 240th St(61180) ~ BUS A Line 10:58:04 11:20 ~ Federal Way TC - Bay 1(80431) ~ Walk 27s ~ Federal Way TC - Bay 2(4136) ~ BUS 578 11:32 12:17 ~ Puyallup Station - Bay 3(10401) ~ Walk 21m -29,2,02:03:54,10186,1290,10:55:15,12:59:09,Metro Transit|Pierce Transit|Sound Transit,BUS,165|574|402,kcm:48620|kcm:53508|pierce-transit:3818|pierce-transit:29410|pierce-transit:1332,Walk 10m11s ~ 1st Ave S & SW 178th St(48620) ~ BUS 165 11:05:26 11:24:33 ~ Kent Des Moines Rd & I-5 Ramp(53508) ~ Walk 41s ~ I-5 & Kent - Des Moines Fwy Station(3818) ~ BUS 574 11:49 12:00 ~ Federal Way TC - Bay 5(29410) ~ BUS 402 12:11 12:53 ~ Meridian S & 9th Ave SW(1332) ~ Walk 6m9s -30,2,01:04:14,5656,0,10:02:15,11:06:29,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|165|Road to Independence,sound-generations:area_551|kcm:48620|kcm:50717|pudget-sound-educational:area_622,sound-generations:area_551(area_551) ~ BUS null 10:02:15 10:04:26Walk 0s ~ 1st Ave S & SW 178th St(48620) ~ BUS 165 10:06:26 10:37:05 ~ 64th Ave S & W James St(50717) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:39:05 11:06:29 -30,2,01:10:26,6064,52,10:04:40,11:15:06,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|A Line|Road to Independence,sound-generations:area_551|kcm:61230|kcm:61310|pudget-sound-educational:area_622,sound-generations:area_551(area_551) ~ BUS null 10:04:40 10:31:03Walk 50s ~ Pacific Hwy S & S 268th St(61230) ~ BUS A Line 10:33:53 10:42 ~ Pacific Hwy S & S 312th St(61310) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:44 11:15:06 -30,2,01:09:34,6090,158,10:05:32,11:15:06,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|A Line|Road to Independence,sound-generations:area_551|kcm:61240|kcm:61310|pudget-sound-educational:area_622,sound-generations:area_551(area_551) ~ BUS null 10:05:32 10:30:27Walk 2m12s ~ Pacific Hwy S & S 272nd St(61240) ~ BUS A Line 10:34:39 10:42 ~ Pacific Hwy S & S 312th St(61310) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:44 11:15:06 -31,4,03:52:55,18169,1615,10:04:53,13:57:48,Metro Transit|Sound Transit,BUS,165|131|545|224|629,kcm:47580|kcm:52301|kcm:52304|kcm:619|kcm:620|kcm:72488|kcm:68803|kcm:64397,Walk 12m10s ~ 1st Ave S & S 176th St(47580) ~ BUS 165 10:17:03 10:27 ~ Burien Transit Center - Bay 1(52301) ~ Walk 37s ~ Burien Transit Center - Bay 4(52304) ~ BUS 131 10:30 11:16 ~ 4th Ave S & S Jackson St(619) ~ Walk 1m46s ~ 4th Ave S & S Jackson St(620) ~ BUS 545 11:21 12:01:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 12:15:31 12:49 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 13:04 13:51 ~ Railroad Avenue Southeast Ave SE & SE Northern St(64397) ~ Walk 6m48s -31,3,03:09:47,15081,1777,11:02:53,14:12:40,Metro Transit|Sound Transit,BUS,165|131|554|208,kcm:47580|kcm:52301|kcm:52304|kcm:619|kcm:375|kcm:64590|kcm:64593|kcm:64399,Walk 12m10s ~ 1st Ave S & S 176th St(47580) ~ BUS 165 11:15:03 11:25 ~ Burien Transit Center - Bay 1(52301) ~ Walk 37s ~ Burien Transit Center - Bay 4(52304) ~ BUS 131 11:28 12:16 ~ 4th Ave S & S Jackson St(619) ~ Walk 4m21s ~ 2nd Ave Ext S & Yesler Way(375) ~ BUS 554 12:24 12:52 ~ Issaquah Transit Center - Bay 6(64590) ~ Walk 1m1s ~ Issaquah Transit Center - Bay 4(64593) ~ BUS 208 13:30 14:06:59 ~ Railroad Ave SE & SE River St(64399) ~ Walk 5m41s -31,3,03:09:13,17227,4645,11:03:27,14:12:40,Metro Transit|Sound Transit,BUS|TRAM,F Line|1-Line|554|208,kcm:50130|kcm:60922|sound-transit:99905|sound-transit:99260|kcm:1480|kcm:64590|kcm:64593|kcm:64399,Walk 39m32s ~ S 156th St & 1st Ave S(50130) ~ BUS F Line 11:42:59 11:52 ~ Tukwila International Blvd Station - Bay 2(60922) ~ Walk 3m51s ~ Tukwila Int'l Blvd Station(99905) ~ TRAM 1-Line 12:03 12:30 ~ Stadium Station(99260) ~ Walk 12m41s ~ S Jackson St & Maynard Ave S(1480) ~ BUS 554 12:46:10 13:12 ~ Issaquah Transit Center - Bay 6(64590) ~ Walk 1m1s ~ Issaquah Transit Center - Bay 4(64593) ~ BUS 208 13:30 14:06:59 ~ Railroad Ave SE & SE River St(64399) ~ Walk 5m41s -32,5,03:33:58,16543,145,10:22:13,13:56:11,Metro Transit|Snoqualmie Valley Transportation|Sound Generations|Sound Transit,BUS,Hyde Shuttle|131|545|224|629|Dial-A-Ride,sound-generations:area_551|kcm:49588|kcm:619|kcm:620|kcm:72488|kcm:68803|kcm:64366|snoqualmie-flex:area_486,sound-generations:area_551(area_551) ~ BUS null 10:22:13 10:41:46Walk 14s ~ 8th Ave SW & SW 99th St(49588) ~ BUS 131 10:44 11:16 ~ 4th Ave S & S Jackson St(619) ~ Walk 1m46s ~ 4th Ave S & S Jackson St(620) ~ BUS 545 11:21 12:01:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 12:15:31 12:49 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 13:04 13:25:48 ~ Sr 203 & NE 40th St(64366) ~ Walk 8s ~ snoqualmie-flex:area_485(area_485) ~ BUS null 13:27:56 13:56:11 -32,4,03:35:35,16411,646,10:22:13,13:57:48,Metro Transit|Sound Generations|Sound Transit,BUS,Hyde Shuttle|131|545|224|629,sound-generations:area_551|kcm:49588|kcm:619|kcm:620|kcm:72488|kcm:68803|kcm:64397,sound-generations:area_551(area_551) ~ BUS null 10:22:13 10:41:46Walk 14s ~ 8th Ave SW & SW 99th St(49588) ~ BUS 131 10:44 11:16 ~ 4th Ave S & S Jackson St(619) ~ Walk 1m46s ~ 4th Ave S & S Jackson St(620) ~ BUS 545 11:21 12:01:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 12:15:31 12:49 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 13:04 13:51 ~ Railroad Avenue Southeast Ave SE & SE Northern St(64397) ~ Walk 6m48s -33,2,01:48:45,9225,1215,10:04:53,11:53:38,Metro Transit,BUS,165|131|3,kcm:47580|kcm:52301|kcm:52304|kcm:605|kcm:41350,Walk 12m10s ~ 1st Ave S & S 176th St(47580) ~ BUS 165 10:17:03 10:27 ~ Burien Transit Center - Bay 1(52301) ~ Walk 37s ~ Burien Transit Center - Bay 4(52304) ~ BUS 131 10:30 11:27 ~ 3rd Ave & Bell St(605) ~ BUS 3 11:33:07 11:50:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m3s -33,2,01:50:45,9345,1215,10:32:53,12:23:38,Metro Transit,BUS,165|131|3,kcm:47580|kcm:52301|kcm:52304|kcm:605|kcm:41350,Walk 12m10s ~ 1st Ave S & S 176th St(47580) ~ BUS 165 10:45:03 10:55 ~ Burien Transit Center - Bay 1(52301) ~ Walk 37s ~ Burien Transit Center - Bay 4(52304) ~ BUS 131 10:59 11:57 ~ 3rd Ave & Bell St(605) ~ BUS 3 12:03:07 12:20:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m3s -33,3,02:09:19,12795,3471,10:33:27,12:42:46,Metro Transit|Sound Transit,BUS|TRAM,F Line|1-Line|5|2,kcm:50130|kcm:60922|sound-transit:99905|sound-transit:532|kcm:531|kcm:605|kcm:2820,Walk 39m32s ~ S 156th St & 1st Ave S(50130) ~ BUS F Line 11:12:59 11:22 ~ Tukwila International Blvd Station - Bay 2(60922) ~ Walk 3m51s ~ Tukwila Int'l Blvd Station(99905) ~ TRAM 1-Line 11:33 12:04 ~ Pioneer Square Station(532) ~ Walk 1m29s ~ 3rd Ave & James St(531) ~ BUS 5 12:09:47 12:18:02 ~ 3rd Ave & Bell St(605) ~ BUS 2 12:21:14 12:40:45 ~ 6th Ave W & W Mcgraw St(2820) ~ Walk 2m1s -34,3,01:20:55,7741,659,10:00:09,11:21:04,Metro Transit|Sound Generations,BUS,Hyde Shuttle|125|125|E Line|Hyde Shuttle,sound-generations:area_551|kcm:21292|kcm:21350|kcm:21620|kcm:575|kcm:6237|sound-generations:area_555,sound-generations:area_551(area_551) ~ BUS null 10:00:09 10:21:48Walk 40s ~ 16th Ave SW & SW Roxbury St - Bay 5(21292) ~ Walk 7m45s ~ 16th Ave SW & SW Henderson St(21350) ~ BUS 125 10:32:13 10:45 ~ Delridge Way SW & SW Andover St(21620) ~ BUS 125 10:45 10:59 ~ 3rd Ave & Pike St(575) ~ BUS E Line 11:05 11:08:18 ~ 7th Ave N & Harrison St(6237) ~ Walk 15s ~ sound-generations:area_555(area_555) ~ BUS null 11:10:33 11:21:04 -34,2,01:15:04,6313,12,10:12:29,11:27:33,Metro Transit|Sound Generations,BUS,Hyde Shuttle|132|28|Hyde Shuttle,sound-generations:area_551|kcm:49700|kcm:30635|kcm:6237|sound-generations:area_555,sound-generations:area_551(area_551) ~ BUS null 10:12:29 10:29:39Walk 0s ~ Des Moines Memorial Dr S & S 96th St(49700) ~ BUS 132 10:31:39 11:00 ~ 4th Ave S & S Royal Brougham Way(30635) ~ BUS 28 11:00 11:14:47 ~ 7th Ave N & Harrison St(6237) ~ Walk 15s ~ sound-generations:area_555(area_555) ~ BUS null 11:17:02 11:27:33 -34,1,01:31:23,8054,1835,10:12:29,11:43:52,Metro Transit|Sound Generations,BUS,Hyde Shuttle|132|28,sound-generations:area_551|kcm:49700|kcm:30635|kcm:6320,sound-generations:area_551(area_551) ~ BUS null 10:12:29 10:29:39Walk 0s ~ Des Moines Memorial Dr S & S 96th St(49700) ~ BUS 132 10:31:39 11:00 ~ 4th Ave S & S Royal Brougham Way(30635) ~ BUS 28 11:00 11:18:47 ~ Aurora Ave N & Lynn St(6320) ~ Walk 25m5s -35,2,01:01:36,6463,1206,10:04:53,11:06:29,Metro Transit|Sound Transit,BUS|TRAM,165|F Line|1-Line,kcm:47580|kcm:53720|kcm:53975|kcm:60922|sound-transit:99905|sound-transit:99240,Walk 12m10s ~ 1st Ave S & S 176th St(47580) ~ BUS 165 10:17:03 10:24:32 ~ 4th Ave SW & SW 156th St(53720) ~ Walk 9s ~ 4th Ave SW & SW 156th St(53975) ~ BUS F Line 10:26:42 10:37 ~ Tukwila International Blvd Station - Bay 2(60922) ~ Walk 3m51s ~ Tukwila Int'l Blvd Station(99905) ~ TRAM 1-Line 10:43 11:05 ~ Beacon Hill Station(99240) ~ Walk 1m29s -35,1,01:23:02,8715,3334,10:03:27,11:26:29,Metro Transit|Sound Transit,BUS|TRAM,F Line|1-Line,kcm:50130|kcm:60922|sound-transit:99905|sound-transit:99240,Walk 39m32s ~ S 156th St & 1st Ave S(50130) ~ BUS F Line 10:42:59 10:52 ~ Tukwila International Blvd Station - Bay 2(60922) ~ Walk 3m51s ~ Tukwila Int'l Blvd Station(99905) ~ TRAM 1-Line 11:03 11:25 ~ Beacon Hill Station(99240) ~ Walk 1m29s -35,1,01:30:01,8636,2785,10:04:53,11:34:54,Metro Transit,BUS,165|131,kcm:47580|kcm:52301|kcm:52304|kcm:30600,Walk 12m10s ~ 1st Ave S & S 176th St(47580) ~ BUS 165 10:17:03 10:27 ~ Burien Transit Center - Bay 1(52301) ~ Walk 37s ~ Burien Transit Center - Bay 4(52304) ~ BUS 131 10:30 11:11:03 ~ 4th Ave S & S Holgate St(30600) ~ Walk 23m51s -36,2,00:55:04,5413,321,10:01:25,10:56:29,Metro Transit|Sound Generations|Sound Transit,BUS|TRAM,Hyde Shuttle|F Line|1-Line,sound-generations:area_551|kcm:50145|kcm:60922|sound-transit:99905|sound-transit:99240,sound-generations:area_551(area_551) ~ BUS null 10:01:25 10:11:33Walk 1m3s ~ S 156th Way & Des Moines Memorial Dr S(50145) ~ BUS F Line 10:14:36 10:22 ~ Tukwila International Blvd Station - Bay 2(60922) ~ Walk 3m51s ~ Tukwila Int'l Blvd Station(99905) ~ TRAM 1-Line 10:33 10:55 ~ Beacon Hill Station(99240) ~ Walk 1m29s -36,1,00:52:13,4553,308,10:10:01,11:02:14,Metro Transit|Sound Generations,BUS,Hyde Shuttle|60,sound-generations:area_551|kcm:21110|kcm:41880,sound-generations:area_551(area_551) ~ BUS null 10:10:01 10:28:47Walk 0s ~ SW Roxbury St & 8th Ave SW(21110) ~ BUS 60 10:30:47 10:58 ~ 15th Ave S & S Stevens St(41880) ~ Walk 4m14s -36,2,00:49:45,5060,380,10:12:29,11:02:14,Metro Transit|Sound Generations,BUS,Hyde Shuttle|132|60,sound-generations:area_551|kcm:49700|kcm:31680|kcm:32140|kcm:41880,sound-generations:area_551(area_551) ~ BUS null 10:12:29 10:29:39Walk 0s ~ Des Moines Memorial Dr S & S 96th St(49700) ~ BUS 132 10:31:39 10:34:53 ~ S Cloverdale St & 12th Ave S(31680) ~ Walk 55s ~ S Cloverdale St & 12th Ave S(32140) ~ BUS 60 10:39:31 10:58 ~ 15th Ave S & S Stevens St(41880) ~ Walk 4m14s -37,0,02:46:43,19483,12868,10:00:00,12:46:43,,,,,Walk 2h46m43s -37,1,01:23:27,8626,3284,10:01:06,11:24:33,Metro Transit,BUS,165|160,kcm:48960|kcm:57127|kcm:57130|kcm:57185,Walk 22m47s ~ Pacific Hwy S & Kent Des Moines Rd(48960) ~ BUS 165 10:23:53 10:51 ~ SE 240th St & 104th Ave SE(57127) ~ Walk 1m45s ~ 104th Ave SE & SE 240th St(57130) ~ BUS 160 11:01:23 11:06:08 ~ 108th Ave SE & SE 220th Pl(57185) ~ Walk 18m25s -37,0,01:25:28,8967,4388,10:01:06,11:26:34,Metro Transit,BUS,165,kcm:48960|kcm:57141,Walk 22m47s ~ Pacific Hwy S & Kent Des Moines Rd(48960) ~ BUS 165 10:23:53 10:52:44 ~ SE 240th St & 116th Ave SE(57141) ~ Walk 33m50s -38,2,00:47:28,4948,406,10:00:24,10:47:52,Metro Transit|Sound Generations,BUS,Hyde Shuttle|183|Hyde Shuttle,sound-generations:area_551|kcm:47971|kcm:47974|kcm:53056|sound-generations:area_558,sound-generations:area_551(area_551) ~ BUS null 10:00:24 10:13:08Walk 1m19s ~ S 272nd St & Pacific Hwy S(47971) ~ Walk 3m56s ~ S 272nd St & S Star Lake Rd(47974) ~ BUS 183 10:20:23 10:23:56 ~ Military Rd S & S 264th St(53056) ~ Walk 0s ~ sound-generations:area_558(area_558) ~ BUS null 10:25:56 10:47:52 -38,2,00:39:29,4228,77,10:09:09,10:48:38,Metro Transit|Sound Generations,BUS,Hyde Shuttle|A Line|Hyde Shuttle,sound-generations:area_551|kcm:61190|kcm:61201|sound-generations:area_558,sound-generations:area_551(area_551) ~ BUS null 10:09:09 10:16:21Walk 1m2s ~ Pacific Hwy S & S 246th St(61190) ~ BUS A Line 10:19:23 10:20:41 ~ Pacific Hwy S & S 252nd St(61201) ~ Walk 0s ~ sound-generations:area_558(area_558) ~ BUS null 10:22:41 10:48:38 -38,2,00:38:01,4244,225,10:11:51,10:49:52,Metro Transit|Sound Generations,BUS,Hyde Shuttle|165|Hyde Shuttle,sound-generations:area_551|kcm:48930|kcm:47263|sound-generations:area_558,sound-generations:area_551(area_551) ~ BUS null 10:11:51 10:16:49Walk 0s ~ S 240th St & 21st Ave S(48930) ~ BUS 165 10:18:49 10:20 ~ Highline College(47263) ~ Walk 3m4s ~ sound-generations:area_558(area_558) ~ BUS null 10:25:04 10:49:52 -39,0,01:36:57,11280,7450,10:00:00,11:36:57,,,,,Walk 1h36m57s -39,0,00:40:49,4933,2548,10:15:00,10:55:49,Metro Transit,BUS,165,kcm:47390|kcm:47570,Walk 21m ~ Marine View Dr S & S 223rd St(47390) ~ BUS 165 10:36 10:44 ~ 1st Ave S & SW Normandy Rd(47570) ~ Walk 11m49s -39,0,00:48:56,5603,2817,10:29:27,11:18:23,Metro Transit,BUS,156,kcm:48990|kcm:49190,Walk 9m35s ~ 24th Ave S & S 226th St(48990) ~ BUS 156 10:39:02 10:51:04 ~ 8th Ave S & Des Moines Memorial Dr S(49190) ~ Walk 27m19s -40,2,00:20:26,3028,0,10:00:38,10:21:04,Metro Transit|Sound Generations,BUS,Hyde Shuttle|165|Hyde Shuttle,sound-generations:area_551|kcm:47390|kcm:47570|sound-generations:area_551,sound-generations:area_551(area_551) ~ BUS null 10:00:38 10:06Walk 0s ~ Marine View Dr S & S 223rd St(47390) ~ BUS 165 10:08 10:16 ~ 1st Ave S & SW Normandy Rd(47570) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:18 10:21:04 -40,1,00:27:11,3512,917,10:00:38,10:27:49,Metro Transit|Sound Generations,BUS,Hyde Shuttle|165,sound-generations:area_551|kcm:47390|kcm:47570,sound-generations:area_551(area_551) ~ BUS null 10:00:38 10:06Walk 0s ~ Marine View Dr S & S 223rd St(47390) ~ BUS 165 10:08 10:16 ~ 1st Ave S & SW Normandy Rd(47570) ~ Walk 11m49s -40,2,00:24:33,3275,0,10:05:02,10:29:35,Metro Transit|Sound Generations,BUS,Hyde Shuttle|156|Hyde Shuttle,sound-generations:area_551|kcm:47406|kcm:49150|sound-generations:area_551,sound-generations:area_551(area_551) ~ BUS null 10:05:02 10:11:06Walk 0s ~ S 216th St & 11th Ave S(47406) ~ BUS 156 10:13:06 10:18:53 ~ 8th Ave S & S 194th St(49150) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:20:53 10:29:35 -41,1,01:00:18,6263,1973,10:01:06,11:01:24,Metro Transit,BUS,165|160,kcm:48960|kcm:57452|kcm:57451|kcm:58255,Walk 22m47s ~ Pacific Hwy S & Kent Des Moines Rd(48960) ~ BUS 165 10:23:53 10:45 ~ Kent Sounder Station - Bay 2(57452) ~ Walk 29s ~ Kent Sounder Station - Bay 1(57451) ~ BUS 160 10:48 10:58:37 ~ Auburn Way N & 37th St NE(58255) ~ Walk 2m47s -41,2,01:21:47,8189,2019,10:09:20,11:31:07,Metro Transit,BUS,A Line|183|160,kcm:61170|kcm:61240|kcm:47974|kcm:57452|kcm:57451|kcm:58255,Walk 15m57s ~ Pacific Hwy S & S 224th St(61170) ~ BUS A Line 10:25:17 10:34:39 ~ Pacific Hwy S & S 272nd St(61240) ~ Walk 7m32s ~ S 272nd St & S Star Lake Rd(47974) ~ BUS 183 10:48:23 11:08 ~ Kent Sounder Station - Bay 2(57452) ~ Walk 29s ~ Kent Sounder Station - Bay 1(57451) ~ BUS 160 11:17 11:28:20 ~ Auburn Way N & 37th St NE(58255) ~ Walk 2m47s -41,1,01:17:01,7266,1973,10:30:06,11:47:07,Metro Transit,BUS,165|160,kcm:48960|kcm:57452|kcm:57451|kcm:58255,Walk 22m47s ~ Pacific Hwy S & Kent Des Moines Rd(48960) ~ BUS 165 10:52:53 11:15 ~ Kent Sounder Station - Bay 2(57452) ~ Walk 29s ~ Kent Sounder Station - Bay 1(57451) ~ BUS 160 11:33 11:44:20 ~ Auburn Way N & 37th St NE(58255) ~ Walk 2m47s -42,2,00:42:19,4639,406,10:00:24,10:42:43,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|183|Road to Independence,sound-generations:area_551|kcm:47971|kcm:47974|kcm:53050|pudget-sound-educational:area_622,sound-generations:area_551(area_551) ~ BUS null 10:00:24 10:13:08Walk 1m19s ~ S 272nd St & Pacific Hwy S(47971) ~ Walk 3m56s ~ S 272nd St & S Star Lake Rd(47974) ~ BUS 183 10:20:23 10:22:23 ~ Military Rd S & S 272nd St(53050) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:24:23 10:42:43 -42,2,00:36:28,4114,171,10:08:49,10:45:17,Puget Sound Educational Service District|Sound Generations|Sound Transit,BUS,Hyde Shuttle|574|Road to Independence,sound-generations:area_551|pierce-transit:3818|pierce-transit:25846|pudget-sound-educational:area_622,sound-generations:area_551(area_551) ~ BUS null 10:08:49 10:14:45Walk 2m15s ~ I-5 & Kent - Des Moines Fwy Station(3818) ~ BUS 574 10:19 10:22 ~ Star Lake Fwy Station(25846) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:24 10:45:17 -42,1,00:40:22,4625,1357,10:06:20,10:46:42,Metro Transit|Sound Generations,BUS,Hyde Shuttle|160,sound-generations:area_558|kcm:58150|kcm:58255,Walk 14m53s ~ sound-generations:area_558(area_558) ~ BUS null 10:21:13 10:34:05Walk 0s ~ Central Ave S & E Russell St(58150) ~ BUS 160 10:36:05 10:43:55 ~ Auburn Way N & 37th St NE(58255) ~ Walk 2m47s -43,1,00:54:31,5614,1550,10:19:20,11:13:51,Metro Transit,BUS,A Line|181,kcm:61170|kcm:80431|kcm:80433|kcm:83784,Walk 15m57s ~ Pacific Hwy S & S 224th St(61170) ~ BUS A Line 10:35:17 10:59 ~ Federal Way TC - Bay 1(80431) ~ Walk 1m4s ~ Federal Way TC - Bay 3(80433) ~ BUS 181 11:04 11:10:35 ~ SW 320th St & 1st Ave S(83784) ~ Walk 3m16s -43,1,00:49:26,5758,2172,10:24:25,11:13:51,Metro Transit|Sound Transit,BUS,574|181,pierce-transit:3818|pierce-transit:29410|kcm:80433|kcm:83784,Walk 24m35s ~ I-5 & Kent - Des Moines Fwy Station(3818) ~ BUS 574 10:49 11:00 ~ Federal Way TC - Bay 5(29410) ~ Walk 33s ~ Federal Way TC - Bay 3(80433) ~ BUS 181 11:04 11:10:35 ~ SW 320th St & 1st Ave S(83784) ~ Walk 3m16s -43,0,01:05:35,7142,3553,10:09:20,11:14:55,Metro Transit,BUS,A Line,kcm:61170|kcm:61313,Walk 15m57s ~ Pacific Hwy S & S 224th St(61170) ~ BUS A Line 10:25:17 10:44:29 ~ S 316th St & Pacific Hwy S(61313) ~ Walk 30m26s -44,2,00:40:00,4665,626,10:00:24,10:40:24,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|183|Road to Independence,sound-generations:area_551|kcm:47971|kcm:47974|kcm:50734|pudget-sound-educational:area_622,sound-generations:area_551(area_551) ~ BUS null 10:00:24 10:13:08Walk 1m19s ~ S 272nd St & Pacific Hwy S(47971) ~ Walk 3m56s ~ S 272nd St & S Star Lake Rd(47974) ~ BUS 183 10:20:23 10:21 ~ S 272nd St & 26th Ave S(50734) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:23 10:37:38Walk 2m46s -44,2,00:33:26,4098,391,10:08:49,10:42:15,Puget Sound Educational Service District|Sound Generations|Sound Transit,BUS,Hyde Shuttle|574|Road to Independence,sound-generations:area_551|pierce-transit:3818|pierce-transit:25846|pudget-sound-educational:area_622,sound-generations:area_551(area_551) ~ BUS null 10:08:49 10:14:45Walk 2m15s ~ I-5 & Kent - Des Moines Fwy Station(3818) ~ BUS 574 10:19 10:22 ~ Star Lake Fwy Station(25846) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:24 10:39:29Walk 2m46s -44,2,00:33:57,4069,307,10:09:09,10:43:06,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|A Line|Road to Independence,sound-generations:area_551|kcm:61190|kcm:61280|pudget-sound-educational:area_622,sound-generations:area_551(area_551) ~ BUS null 10:09:09 10:16:21Walk 1m2s ~ Pacific Hwy S & S 246th St(61190) ~ BUS A Line 10:19:23 10:29:16 ~ Pacific Hwy S & S Dash Point Rd(61280) ~ Walk 8s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:31:24 10:40:20Walk 2m46s -45,2,01:42:38,9397,1963,10:06:22,11:49:00,Metro Transit|Sound Transit,BUS|TRAM,635|1-Line|50,kcm:47417|kcm:47200|sound-transit:99914|sound-transit:99256|kcm:99261|kcm:31871,Walk 18m33s ~ S 216th St & 20th Ave S(47417) ~ BUS 635 10:24:55 10:31 ~ S 200th St & 28th Ave S(47200) ~ Walk 2m30s ~ Angle Lake Station(99914) ~ TRAM 1-Line 10:36 11:08 ~ SODO Station(99256) ~ Walk 2m7s ~ S Lander St & SODO Busway(99261) ~ BUS 50 11:22 11:45:35 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m25s -45,1,01:48:10,8969,1694,10:03:05,11:51:15,Metro Transit,BUS,A Line|128,kcm:60810|kcm:60921|kcm:60923|kcm:31871,Walk 17m33s ~ Pacific Hwy S & S 224th St(60810) ~ BUS A Line 10:20:38 10:40 ~ Tukwila International Blvd Station - Bay 1(60921) ~ Walk 2m28s ~ Tukwila International Blvd Station - Bay 3(60923) ~ BUS 128 10:51 11:47:50 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m25s -45,2,01:38:55,9193,2004,10:23:05,12:02:00,Metro Transit|Sound Transit,BUS|TRAM,A Line|1-Line|50,kcm:60810|kcm:60850|sound-transit:99914|sound-transit:99256|kcm:99261|kcm:31871,Walk 17m33s ~ Pacific Hwy S & S 224th St(60810) ~ BUS A Line 10:40:38 10:45:46 ~ International Blvd & S 200th St(60850) ~ Walk 4m23s ~ Angle Lake Station(99914) ~ TRAM 1-Line 10:56 11:28 ~ SODO Station(99256) ~ Walk 2m7s ~ S Lander St & SODO Busway(99261) ~ BUS 50 11:35 11:58:35 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m25s -46,2,00:59:51,5399,9,10:00:11,11:00:02,Metro Transit|Sound Generations,BUS,Hyde Shuttle|120|Hyde Shuttle,sound-generations:area_551|kcm:39431|kcm:31731|sound-generations:area_560,sound-generations:area_551(area_551) ~ BUS null 10:00:11 10:30Walk 0s ~ 15th Ave SW & SW Roxbury St - Bay 2(39431) ~ BUS 120 10:32 10:37 ~ 26th Ave SW & SW Barton St - Bay 2(31731) ~ Walk 7s ~ sound-generations:area_560(area_560) ~ BUS null 10:39:07 11:00:02 -46,2,00:51:21,4883,0,10:09:41,11:01:02,Metro Transit|Sound Generations,BUS,Hyde Shuttle|132|Hyde Shuttle,sound-generations:area_551|kcm:49700|kcm:49720|sound-generations:area_560,sound-generations:area_551(area_551) ~ BUS null 10:09:41 10:29:39Walk 0s ~ Des Moines Memorial Dr S & S 96th St(49700) ~ BUS 132 10:31:39 10:33:52 ~ 14th Ave S & S Trenton St(49720) ~ Walk 0s ~ sound-generations:area_560(area_560) ~ BUS null 10:35:52 11:01:02 -46,2,00:59:51,5399,9,10:10:11,11:10:02,Metro Transit|Sound Generations,BUS,Hyde Shuttle|120|Hyde Shuttle,sound-generations:area_551|kcm:39431|kcm:31731|sound-generations:area_560,sound-generations:area_551(area_551) ~ BUS null 10:10:11 10:40Walk 0s ~ 15th Ave SW & SW Roxbury St - Bay 2(39431) ~ BUS 120 10:42 10:47 ~ 26th Ave SW & SW Barton St - Bay 2(31731) ~ Walk 7s ~ sound-generations:area_560(area_560) ~ BUS null 10:49:07 11:10:02 -47,1,01:36:49,8326,1794,10:19:20,11:56:09,Metro Transit|Pierce Transit,BUS,A Line|402,kcm:61170|kcm:80431|pierce-transit:29410|pierce-transit:1332,Walk 15m57s ~ Pacific Hwy S & S 224th St(61170) ~ BUS A Line 10:35:17 10:59 ~ Federal Way TC - Bay 1(80431) ~ Walk 1m37s ~ Federal Way TC - Bay 5(29410) ~ BUS 402 11:10 11:50 ~ Meridian S & 9th Ave SW(1332) ~ Walk 6m9s -47,1,01:31:44,8410,2334,10:24:25,11:56:09,Pierce Transit|Sound Transit,BUS,574|402,pierce-transit:3818|pierce-transit:29410|pierce-transit:1332,Walk 24m35s ~ I-5 & Kent - Des Moines Fwy Station(3818) ~ BUS 574 10:49 11:00 ~ Federal Way TC - Bay 5(29410) ~ BUS 402 11:10 11:50 ~ Meridian S & 9th Ave SW(1332) ~ Walk 6m9s -47,1,01:58:40,10378,2821,10:39:20,12:38:00,Metro Transit|Sound Transit,BUS,A Line|578,kcm:61170|kcm:80431|pierce-transit:4136|pierce-transit:10401,Walk 15m57s ~ Pacific Hwy S & S 224th St(61170) ~ BUS A Line 10:55:17 11:20 ~ Federal Way TC - Bay 1(80431) ~ Walk 27s ~ Federal Way TC - Bay 2(4136) ~ BUS 578 11:32 12:17 ~ Puyallup Station - Bay 3(10401) ~ Walk 21m -48,2,00:50:58,5158,406,10:00:24,10:51:22,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|183|Road to Independence,sound-generations:area_551|kcm:47971|kcm:47974|kcm:50734|pudget-sound-educational:area_622,sound-generations:area_551(area_551) ~ BUS null 10:00:24 10:13:08Walk 1m19s ~ S 272nd St & Pacific Hwy S(47971) ~ Walk 3m56s ~ S 272nd St & S Star Lake Rd(47974) ~ BUS 183 10:20:23 10:21 ~ S 272nd St & 26th Ave S(50734) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:23 10:51:22 -48,2,00:44:24,4590,171,10:08:49,10:53:13,Puget Sound Educational Service District|Sound Generations|Sound Transit,BUS,Hyde Shuttle|574|Road to Independence,sound-generations:area_551|pierce-transit:3818|pierce-transit:25846|pudget-sound-educational:area_622,sound-generations:area_551(area_551) ~ BUS null 10:08:49 10:14:45Walk 2m15s ~ I-5 & Kent - Des Moines Fwy Station(3818) ~ BUS 574 10:19 10:22 ~ Star Lake Fwy Station(25846) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:24 10:53:13 -48,2,00:51:25,5200,428,10:09:09,11:00:34,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|A Line|Road to Independence,sound-generations:area_551|kcm:61190|kcm:61230|pudget-sound-educational:area_622,sound-generations:area_551(area_551) ~ BUS null 10:09:09 10:16:21Walk 1m2s ~ Pacific Hwy S & S 246th St(61190) ~ BUS A Line 10:19:23 10:23:53 ~ Pacific Hwy S & S 268th St(61230) ~ Walk 4m44s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:30:37 11:00:34 -49,4,03:51:26,18600,2321,10:06:22,13:57:48,Metro Transit|Sound Transit,BUS|TRAM,635|1-Line|545|224|629,kcm:47417|kcm:47200|sound-transit:99914|sound-transit:99260|kcm:21765|kcm:72488|kcm:68803|kcm:64397,Walk 18m33s ~ S 216th St & 20th Ave S(47417) ~ BUS 635 10:24:55 10:31 ~ S 200th St & 28th Ave S(47200) ~ Walk 2m30s ~ Angle Lake Station(99914) ~ TRAM 1-Line 10:36 11:10 ~ Stadium Station(99260) ~ Walk 3m13s ~ 6th Ave S & S Royal Brougham Way(21765) ~ BUS 545 11:17 12:01:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 12:15:31 12:49 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 13:04 13:51 ~ Railroad Avenue Southeast Ave SE & SE Northern St(64397) ~ Walk 6m48s -49,3,02:49:27,14769,3036,11:23:13,14:12:40,Metro Transit|Sound Transit,BUS|TRAM,A Line|1-Line|554|208,kcm:60810|kcm:60850|sound-transit:99914|sound-transit:99260|kcm:1480|kcm:64590|kcm:64593|kcm:64399,Walk 17m33s ~ Pacific Hwy S & S 224th St(60810) ~ BUS A Line 11:40:46 11:46:20 ~ International Blvd & S 200th St(60850) ~ Walk 4m23s ~ Angle Lake Station(99914) ~ TRAM 1-Line 11:56 12:30 ~ Stadium Station(99260) ~ Walk 12m41s ~ S Jackson St & Maynard Ave S(1480) ~ BUS 554 12:46:10 13:12 ~ Issaquah Transit Center - Bay 6(64590) ~ Walk 1m1s ~ Issaquah Transit Center - Bay 4(64593) ~ BUS 208 13:30 14:06:59 ~ Railroad Ave SE & SE River St(64399) ~ Walk 5m41s -50,5,03:42:23,17048,145,10:13:48,13:56:11,Metro Transit|Snoqualmie Valley Transportation|Sound Generations|Sound Transit,BUS,Hyde Shuttle|131|545|224|629|Dial-A-Ride,sound-generations:area_551|kcm:49588|kcm:619|kcm:620|kcm:72488|kcm:68803|kcm:64366|snoqualmie-flex:area_486,sound-generations:area_551(area_551) ~ BUS null 10:13:48 10:41:46Walk 14s ~ 8th Ave SW & SW 99th St(49588) ~ BUS 131 10:44 11:16 ~ 4th Ave S & S Jackson St(619) ~ Walk 1m46s ~ 4th Ave S & S Jackson St(620) ~ BUS 545 11:21 12:01:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 12:15:31 12:49 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 13:04 13:25:48 ~ Sr 203 & NE 40th St(64366) ~ Walk 8s ~ snoqualmie-flex:area_485(area_485) ~ BUS null 13:27:56 13:56:11 -50,4,03:44:00,16916,646,10:13:48,13:57:48,Metro Transit|Sound Generations|Sound Transit,BUS,Hyde Shuttle|131|545|224|629,sound-generations:area_551|kcm:49588|kcm:619|kcm:620|kcm:72488|kcm:68803|kcm:64397,sound-generations:area_551(area_551) ~ BUS null 10:13:48 10:41:46Walk 14s ~ 8th Ave SW & SW 99th St(49588) ~ BUS 131 10:44 11:16 ~ 4th Ave S & S Jackson St(619) ~ Walk 1m46s ~ 4th Ave S & S Jackson St(620) ~ BUS 545 11:21 12:01:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 12:15:31 12:49 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 13:04 13:51 ~ Railroad Avenue Southeast Ave SE & SE Northern St(64397) ~ Walk 6m48s -50,5,03:40:06,17479,910,10:17:42,13:57:48,Metro Transit|Sound Generations|Sound Transit,BUS|TRAM,Hyde Shuttle|635|1-Line|545|224|629,sound-generations:area_551|kcm:47206|kcm:47200|sound-transit:99914|sound-transit:99260|kcm:21765|kcm:72488|kcm:68803|kcm:64397,sound-generations:area_551(area_551) ~ BUS null 10:17:42 10:23:48Walk 12s ~ 24th Ave S & S 216th St(47206) ~ BUS 635 10:26 10:31 ~ S 200th St & 28th Ave S(47200) ~ Walk 2m30s ~ Angle Lake Station(99914) ~ TRAM 1-Line 10:36 11:10 ~ Stadium Station(99260) ~ Walk 3m13s ~ 6th Ave S & S Royal Brougham Way(21765) ~ BUS 545 11:17 12:01:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 12:15:31 12:49 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 13:04 13:51 ~ Railroad Avenue Southeast Ave SE & SE Northern St(64397) ~ Walk 6m48s -51,3,01:47:16,10250,1913,10:06:22,11:53:38,Metro Transit|Sound Transit,BUS|TRAM,635|1-Line|131|3,kcm:47417|kcm:47200|sound-transit:99914|sound-transit:532|kcm:531|kcm:605|kcm:41350,Walk 18m33s ~ S 216th St & 20th Ave S(47417) ~ BUS 635 10:24:55 10:31 ~ S 200th St & 28th Ave S(47200) ~ Walk 2m30s ~ Angle Lake Station(99914) ~ TRAM 1-Line 10:36 11:14 ~ Pioneer Square Station(532) ~ Walk 1m29s ~ 3rd Ave & James St(531) ~ BUS 131 11:17:57 11:27 ~ 3rd Ave & Bell St(605) ~ BUS 3 11:33:07 11:50:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m3s -51,2,01:54:47,11093,3289,10:06:22,12:01:09,Metro Transit|Sound Transit,BUS|TRAM,635|1-Line|62,kcm:47417|kcm:47200|sound-transit:99914|sound-transit:532|kcm:531|kcm:18590,Walk 18m33s ~ S 216th St & 20th Ave S(47417) ~ BUS 635 10:24:55 10:31 ~ S 200th St & 28th Ave S(47200) ~ Walk 2m30s ~ Angle Lake Station(99914) ~ TRAM 1-Line 10:36 11:14 ~ Pioneer Square Station(532) ~ Walk 1m29s ~ 3rd Ave & James St(531) ~ BUS 62 11:19:55 11:39:36 ~ Dexter Ave N & 4th Ave N(18590) ~ Walk 21m33s -51,3,01:55:33,10767,1954,10:13:05,12:08:38,Metro Transit|Sound Transit,BUS|TRAM,A Line|1-Line|40|3,kcm:60810|kcm:60850|sound-transit:99914|sound-transit:532|kcm:531|kcm:600|kcm:41350,Walk 17m33s ~ Pacific Hwy S & S 224th St(60810) ~ BUS A Line 10:30:38 10:35:46 ~ International Blvd & S 200th St(60850) ~ Walk 4m23s ~ Angle Lake Station(99914) ~ TRAM 1-Line 10:46 11:24 ~ Pioneer Square Station(532) ~ Walk 1m29s ~ 3rd Ave & James St(531) ~ BUS 40 11:31:37 11:38:03 ~ 3rd Ave & Virginia St(600) ~ BUS 3 11:45:57 12:05:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m3s -52,2,01:17:52,6481,12,10:09:41,11:27:33,Metro Transit|Sound Generations,BUS,Hyde Shuttle|132|28|Hyde Shuttle,sound-generations:area_551|kcm:49700|kcm:30635|kcm:6237|sound-generations:area_555,sound-generations:area_551(area_551) ~ BUS null 10:09:41 10:29:39Walk 0s ~ Des Moines Memorial Dr S & S 96th St(49700) ~ BUS 132 10:31:39 11:00 ~ 4th Ave S & S Royal Brougham Way(30635) ~ BUS 28 11:00 11:14:47 ~ 7th Ave N & Harrison St(6237) ~ Walk 15s ~ sound-generations:area_555(area_555) ~ BUS null 11:17:02 11:27:33 -52,1,01:34:11,8222,1835,10:09:41,11:43:52,Metro Transit|Sound Generations,BUS,Hyde Shuttle|132|28,sound-generations:area_551|kcm:49700|kcm:30635|kcm:6320,sound-generations:area_551(area_551) ~ BUS null 10:09:41 10:29:39Walk 0s ~ Des Moines Memorial Dr S & S 96th St(49700) ~ BUS 132 10:31:39 11:00 ~ 4th Ave S & S Royal Brougham Way(30635) ~ BUS 28 11:00 11:18:47 ~ Aurora Ave N & Lynn St(6320) ~ Walk 25m5s -52,3,01:30:16,7833,24,10:13:48,11:44:04,Metro Transit|Sound Generations,BUS,Hyde Shuttle|131|E Line|Hyde Shuttle,sound-generations:area_551|kcm:49588|kcm:600|kcm:6237|sound-generations:area_555,sound-generations:area_551(area_551) ~ BUS null 10:13:48 10:41:46Walk 14s ~ 8th Ave SW & SW 99th St(49588) ~ BUS 131 10:44 11:25:09 ~ 3rd Ave & Virginia St(600) ~ BUS E Line 11:28:57 11:31:18 ~ 7th Ave N & Harrison St(6237) ~ Walk 15s ~ sound-generations:area_555(area_555) ~ BUS null 11:33:33 11:44:04 -53,1,01:00:07,6049,1684,10:06:22,11:06:29,Metro Transit|Sound Transit,BUS|TRAM,635|1-Line,kcm:47417|kcm:47200|sound-transit:99914|sound-transit:99240,Walk 18m33s ~ S 216th St & 20th Ave S(47417) ~ BUS 635 10:24:55 10:31 ~ S 200th St & 28th Ave S(47200) ~ Walk 2m30s ~ Angle Lake Station(99914) ~ TRAM 1-Line 10:36 11:05 ~ Beacon Hill Station(99240) ~ Walk 1m29s -53,1,01:03:24,6265,1725,10:13:05,11:16:29,Metro Transit|Sound Transit,BUS|TRAM,A Line|1-Line,kcm:60810|kcm:60850|sound-transit:99914|sound-transit:99240,Walk 17m33s ~ Pacific Hwy S & S 224th St(60810) ~ BUS A Line 10:30:38 10:35:46 ~ International Blvd & S 200th St(60850) ~ Walk 4m23s ~ Angle Lake Station(99914) ~ TRAM 1-Line 10:46 11:15 ~ Beacon Hill Station(99240) ~ Walk 1m29s -53,1,01:03:24,6265,1725,10:23:05,11:26:29,Metro Transit|Sound Transit,BUS|TRAM,A Line|1-Line,kcm:60810|kcm:60850|sound-transit:99914|sound-transit:99240,Walk 17m33s ~ Pacific Hwy S & S 224th St(60810) ~ BUS A Line 10:40:38 10:45:46 ~ International Blvd & S 200th St(60850) ~ Walk 4m23s ~ Angle Lake Station(99914) ~ TRAM 1-Line 10:56 11:25 ~ Beacon Hill Station(99240) ~ Walk 1m29s -54,2,00:53:16,5275,386,10:03:13,10:56:29,Metro Transit|Sound Generations|Sound Transit,BUS|TRAM,Hyde Shuttle|A Line|1-Line,sound-generations:area_551|kcm:60810|kcm:60850|sound-transit:99914|sound-transit:99240,sound-generations:area_551(area_551) ~ BUS null 10:03:13 10:08:38Walk 0s ~ Pacific Hwy S & S 224th St(60810) ~ BUS A Line 10:10:38 10:15:46 ~ International Blvd & S 200th St(60850) ~ Walk 4m23s ~ Angle Lake Station(99914) ~ TRAM 1-Line 10:26 10:55 ~ Beacon Hill Station(99240) ~ Walk 1m29s -54,1,00:55:19,5420,1239,10:01:10,10:56:29,Sound Generations|Sound Transit,BUS|TRAM,Hyde Shuttle|1-Line,sound-generations:area_551|kcm:47202|sound-transit:99914|sound-transit:99240,sound-generations:area_551(area_551) ~ BUS null 10:01:10 10:08:47Walk 28s ~ 24th Ave S & S 208th St(47202) ~ Walk 14m45s ~ Angle Lake Station(99914) ~ TRAM 1-Line 10:26 10:55 ~ Beacon Hill Station(99240) ~ Walk 1m29s -54,1,01:00:38,5058,308,10:01:36,11:02:14,Metro Transit|Sound Generations,BUS,Hyde Shuttle|60,sound-generations:area_551|kcm:21110|kcm:41880,sound-generations:area_551(area_551) ~ BUS null 10:01:36 10:28:47Walk 0s ~ SW Roxbury St & 8th Ave SW(21110) ~ BUS 60 10:30:47 10:58 ~ 15th Ave S & S Stevens St(41880) ~ Walk 4m14s -55,0,00:45:18,4538,1641,10:06:44,10:52:02,Metro Transit,BUS,160,kcm:57915|kcm:57185,Walk 2m48s ~ Auburn Way N & 37th St NE(57915) ~ BUS 160 10:09:32 10:33:37 ~ 108th Ave SE & SE 220th Pl(57185) ~ Walk 18m25s -55,0,00:47:32,4672,1641,10:22:01,11:09:33,Metro Transit,BUS,160,kcm:57915|kcm:57185,Walk 2m48s ~ Auburn Way N & 37th St NE(57915) ~ BUS 160 10:24:49 10:51:08 ~ 108th Ave SE & SE 220th Pl(57185) ~ Walk 18m25s -55,0,00:47:32,4672,1641,10:37:01,11:24:33,Metro Transit,BUS,160,kcm:57915|kcm:57185,Walk 2m48s ~ Auburn Way N & 37th St NE(57915) ~ BUS 160 10:39:49 11:06:08 ~ 108th Ave SE & SE 220th Pl(57185) ~ Walk 18m25s -56,1,00:31:12,3231,213,10:06:44,10:37:56,Metro Transit|Sound Generations,BUS,160|Hyde Shuttle,kcm:57915|kcm:57990|sound-generations:area_558,Walk 2m48s ~ Auburn Way N & 37th St NE(57915) ~ BUS 160 10:09:32 10:17:01 ~ Central Ave S & S 259th St(57990) ~ Walk 0s ~ sound-generations:area_558(area_558) ~ BUS null 10:19:01 10:37:56 -56,2,00:38:01,4103,28,10:07:12,10:45:13,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Road to Independence|161|Hyde Shuttle,pudget-sound-educational:area_622|kcm:57452|kcm:80640|sound-generations:area_558,pudget-sound-educational:area_622(area_622) ~ BUS null 10:07:12 10:24:36Walk 24s ~ Kent Sounder Station - Bay 2(57452) ~ BUS 161 10:27 10:30:28 ~ Central Ave N & S 228th St(80640) ~ Walk 0s ~ sound-generations:area_558(area_558) ~ BUS null 10:32:28 10:45:13 -56,0,00:45:18,4538,1641,10:06:44,10:52:02,Metro Transit,BUS,160,kcm:57915|kcm:57185,Walk 2m48s ~ Auburn Way N & 37th St NE(57915) ~ BUS 160 10:09:32 10:33:37 ~ 108th Ave SE & SE 220th Pl(57185) ~ Walk 18m25s -57,1,01:19:05,6879,1267,10:06:44,11:25:49,Metro Transit,BUS,160|165,kcm:57915|kcm:57453|kcm:57459|kcm:47570,Walk 2m48s ~ Auburn Way N & 37th St NE(57915) ~ BUS 160 10:09:32 10:21 ~ Kent Sounder Station - Bay 3(57453) ~ Walk 2m2s ~ Kent Sounder Station - Bay 9(57459) ~ BUS 165 10:37 11:14 ~ 1st Ave S & SW Normandy Rd(47570) ~ Walk 11m49s -57,1,01:18:48,6862,1267,10:37:01,11:55:49,Metro Transit,BUS,160|165,kcm:57915|kcm:57453|kcm:57459|kcm:47570,Walk 2m48s ~ Auburn Way N & 37th St NE(57915) ~ BUS 160 10:39:49 10:52 ~ Kent Sounder Station - Bay 3(57453) ~ Walk 2m2s ~ Kent Sounder Station - Bay 9(57459) ~ BUS 165 11:07 11:44 ~ 1st Ave S & SW Normandy Rd(47570) ~ Walk 11m49s -57,1,01:21:48,7042,1267,11:07:01,12:28:49,Metro Transit,BUS,160|165,kcm:57915|kcm:57453|kcm:57459|kcm:47570,Walk 2m48s ~ Auburn Way N & 37th St NE(57915) ~ BUS 160 11:09:49 11:22 ~ Kent Sounder Station - Bay 3(57453) ~ Walk 2m2s ~ Kent Sounder Station - Bay 9(57459) ~ BUS 165 11:37 12:17 ~ 1st Ave S & SW Normandy Rd(47570) ~ Walk 11m49s -58,2,00:58:29,5511,275,10:06:25,11:04:54,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Road to Independence|A Line|Hyde Shuttle,pudget-sound-educational:area_622|kcm:60750|kcm:60752|sound-generations:area_551,pudget-sound-educational:area_622(area_622) ~ BUS null 10:06:25 10:28:19Walk 1m9s ~ Pacific Hwy S & S 272nd St(60750) ~ BUS A Line 10:31:28 10:32:02 ~ Pacific Hwy S & S 268th St(60752) ~ Walk 2m40s ~ sound-generations:area_551(area_551) ~ BUS null 10:36:42 11:04:54 -58,2,00:58:42,5459,187,10:06:25,11:05:07,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Road to Independence|A Line|Hyde Shuttle,pudget-sound-educational:area_622|kcm:60750|kcm:48949|sound-generations:area_551,pudget-sound-educational:area_622(area_622) ~ BUS null 10:06:25 10:28:19Walk 1m9s ~ Pacific Hwy S & S 272nd St(60750) ~ BUS A Line 10:31:28 10:37:16 ~ Pacific Hwy S & S 240th St(48949) ~ Walk 1m26s ~ sound-generations:area_551(area_551) ~ BUS null 10:40:42 11:05:07 -58,2,00:59:17,5423,88,10:06:25,11:05:42,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Road to Independence|A Line|Hyde Shuttle,pudget-sound-educational:area_622|kcm:60750|kcm:60810|sound-generations:area_551,pudget-sound-educational:area_622(area_622) ~ BUS null 10:06:25 10:28:19Walk 1m9s ~ Pacific Hwy S & S 272nd St(60750) ~ BUS A Line 10:31:28 10:40:38 ~ Pacific Hwy S & S 224th St(60810) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:42:38 11:05:42 -59,1,01:10:07,6841,1967,10:06:44,11:16:51,Metro Transit,BUS,160|165,kcm:57915|kcm:57453|kcm:57459|kcm:50480,Walk 2m48s ~ Auburn Way N & 37th St NE(57915) ~ BUS 160 10:09:32 10:21 ~ Kent Sounder Station - Bay 3(57453) ~ Walk 2m2s ~ Kent Sounder Station - Bay 9(57459) ~ BUS 165 10:37 10:55:38 ~ Pacific Hwy S & Kent Des Moines Rd(50480) ~ Walk 21m13s -59,2,01:17:02,7684,1717,10:11:08,11:28:10,Metro Transit|Sound Transit,BUS,160|578|A Line,kcm:58255|kcm:57784|pierce-transit:8770|pierce-transit:7910|kcm:80438|kcm:60810,Walk 2m47s ~ Auburn Way N & 37th St NE(58255) ~ BUS 160 10:13:55 10:25 ~ 2nd St SW & A St SW(57784) ~ Walk 1m10s ~ Auburn Station - Bay 3(8770) ~ BUS 578 10:34 10:46 ~ Federal Way TC - Bay 7(7910) ~ Walk 1m15s ~ Federal Way TC - Bay 8(80438) ~ BUS A Line 10:50 11:10:38 ~ Pacific Hwy S & S 224th St(60810) ~ Walk 17m32s -59,1,01:09:50,6824,1967,10:37:01,11:46:51,Metro Transit,BUS,160|165,kcm:57915|kcm:57453|kcm:57459|kcm:50480,Walk 2m48s ~ Auburn Way N & 37th St NE(57915) ~ BUS 160 10:39:49 10:52 ~ Kent Sounder Station - Bay 3(57453) ~ Walk 2m2s ~ Kent Sounder Station - Bay 9(57459) ~ BUS 165 11:07 11:25:38 ~ Pacific Hwy S & Kent Des Moines Rd(50480) ~ Walk 21m13s -60,2,00:40:44,4310,88,10:06:25,10:47:09,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Road to Independence|A Line|Hyde Shuttle,pudget-sound-educational:area_622|kcm:60750|kcm:60800|sound-generations:area_551,pudget-sound-educational:area_622(area_622) ~ BUS null 10:06:25 10:28:19Walk 1m9s ~ Pacific Hwy S & S 272nd St(60750) ~ BUS A Line 10:31:28 10:39 ~ Pacific Hwy S & Kent Des Moines Rd(60800) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:41 10:47:09 -60,1,00:41:47,4711,1358,10:06:44,10:48:31,Metro Transit|Sound Generations,BUS,160|Hyde Shuttle,kcm:57915|kcm:57990|sound-generations:area_558,Walk 2m48s ~ Auburn Way N & 37th St NE(57915) ~ BUS 160 10:09:32 10:17:01 ~ Central Ave S & S 259th St(57990) ~ Walk 0s ~ sound-generations:area_558(area_558) ~ BUS null 10:19:01 10:33:39Walk 14m52s -60,2,00:40:44,4310,88,10:16:25,10:57:09,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Road to Independence|A Line|Hyde Shuttle,pudget-sound-educational:area_622|kcm:60750|kcm:60800|sound-generations:area_551,pudget-sound-educational:area_622(area_622) ~ BUS null 10:16:25 10:38:19Walk 1m9s ~ Pacific Hwy S & S 272nd St(60750) ~ BUS A Line 10:41:28 10:49 ~ Pacific Hwy S & Kent Des Moines Rd(60800) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:51 10:57:09 -61,1,00:47:43,4473,550,10:26:08,11:13:51,Metro Transit,BUS,160|181,kcm:58255|kcm:57784|kcm:57775|kcm:83784,Walk 2m47s ~ Auburn Way N & 37th St NE(58255) ~ BUS 160 10:28:55 10:40 ~ 2nd St SW & A St SW(57784) ~ Walk 1m12s ~ Auburn Transit Center - Bay 3(57775) ~ BUS 181 10:44 11:10:35 ~ SW 320th St & 1st Ave S(83784) ~ Walk 3m16s -61,2,01:00:46,5967,710,10:41:08,11:41:54,Metro Transit|Sound Transit,BUS,160|578|187,kcm:58255|kcm:57784|pierce-transit:8770|pierce-transit:7910|kcm:80433|kcm:83784,Walk 2m47s ~ Auburn Way N & 37th St NE(58255) ~ BUS 160 10:43:55 10:55 ~ 2nd St SW & A St SW(57784) ~ Walk 1m10s ~ Auburn Station - Bay 3(8770) ~ BUS 578 11:04 11:16 ~ Federal Way TC - Bay 7(7910) ~ Walk 2m22s ~ Federal Way TC - Bay 3(80433) ~ BUS 187 11:32 11:38:38 ~ SW 320th St & 1st Ave S(83784) ~ Walk 3m16s -61,1,01:03:19,5409,550,10:41:08,11:44:27,Metro Transit,BUS,160|181,kcm:58255|kcm:57784|kcm:57775|kcm:83784,Walk 2m47s ~ Auburn Way N & 37th St NE(58255) ~ BUS 160 10:43:55 10:55 ~ 2nd St SW & A St SW(57784) ~ Walk 1m12s ~ Auburn Transit Center - Bay 3(57775) ~ BUS 181 11:14 11:41:11 ~ SW 320th St & 1st Ave S(83784) ~ Walk 3m16s -62,1,00:31:50,3302,254,10:10:04,10:41:54,Metro Transit|Puget Sound Educational Service District,BUS,Road to Independence|187,pudget-sound-educational:area_622|kcm:60640|kcm:83784,pudget-sound-educational:area_622(area_622) ~ BUS null 10:10:04 10:32:51Walk 0s ~ S 320th St & 20th Ave S(60640) ~ BUS 187 10:34:51 10:38:38 ~ SW 320th St & 1st Ave S(83784) ~ Walk 3m16s -62,1,00:32:23,3335,254,10:11:28,10:43:51,Metro Transit|Puget Sound Educational Service District,BUS,Road to Independence|181,pudget-sound-educational:area_622|kcm:60638|kcm:83784,pudget-sound-educational:area_622(area_622) ~ BUS null 10:11:28 10:33:23Walk 0s ~ S 320th St & 23rd Ave S(60638) ~ BUS 181 10:35:23 10:40:35 ~ SW 320th St & 1st Ave S(83784) ~ Walk 3m16s -62,1,00:38:16,3820,433,10:22:01,11:00:17,Metro Transit|Puget Sound Educational Service District,BUS,160|Road to Independence,kcm:57915|kcm:57950|pudget-sound-educational:area_622,Walk 2m48s ~ Auburn Way N & 37th St NE(57915) ~ BUS 160 10:24:49 10:28:17 ~ Auburn Way N & S 277th St(57950) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:30:17 10:57:31Walk 2m46s -63,2,01:55:16,9112,546,10:06:44,12:02:00,Metro Transit,BUS,160|150|50,kcm:57915|kcm:57453|kcm:57458|kcm:99252|kcm:31871,Walk 2m48s ~ Auburn Way N & 37th St NE(57915) ~ BUS 160 10:09:32 10:21 ~ Kent Sounder Station - Bay 3(57453) ~ Walk 1m24s ~ Kent Sounder Station - Bay 8(57458) ~ BUS 150 10:32 11:17 ~ SODO Busway & S Spokane St(99252) ~ BUS 50 11:32:28 11:58:35 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m25s -63,3,01:46:07,9735,1278,10:26:08,12:12:15,Metro Transit|Sound Transit,BUS|RAIL,160|S Line|C Line|128,kcm:58255|kcm:57784|sound-transit:S_AU_NB|sound-transit:S_KS|kcm:1562|kcm:20041|kcm:32011|kcm:31871,Walk 2m47s ~ Auburn Way N & 37th St NE(58255) ~ BUS 160 10:28:55 10:40 ~ 2nd St SW & A St SW(57784) ~ Walk 2m5s ~ Auburn Station (Northbound)(S_AU_NB) ~ RAIL S Line 10:48 11:22 ~ King Street Station(S_KS) ~ Walk 9m13s ~ Alaskan Way S & S Jackson St(1562) ~ BUS C Line 11:38:40 11:58 ~ SW Alaska St & California Ave SW - Bay 3(20041) ~ Walk 42s ~ SW Alaska St & 44th Ave SW - Bay 4(32011) ~ BUS 128 12:05 12:08:50 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m25s -63,2,01:47:45,9907,2196,10:26:08,12:13:53,Metro Transit|Sound Transit,BUS|RAIL,160|S Line|C Line,kcm:58255|kcm:57784|sound-transit:S_AU_NB|sound-transit:S_KS|kcm:1562|kcm:20041,Walk 2m47s ~ Auburn Way N & 37th St NE(58255) ~ BUS 160 10:28:55 10:40 ~ 2nd St SW & A St SW(57784) ~ Walk 2m5s ~ Auburn Station (Northbound)(S_AU_NB) ~ RAIL S Line 10:48 11:22 ~ King Street Station(S_KS) ~ Walk 9m13s ~ Alaskan Way S & S Jackson St(1562) ~ BUS C Line 11:38:40 11:58 ~ SW Alaska St & California Ave SW - Bay 3(20041) ~ Walk 15m53s -65,2,01:03:01,6196,835,10:26:08,11:29:09,Metro Transit|Pierce Transit|Sound Transit,BUS,160|578|425,kcm:58255|kcm:57784|pierce-transit:18728|pierce-transit:10401|pierce-transit:26645|pierce-transit:1332,Walk 2m47s ~ Auburn Way N & 37th St NE(58255) ~ BUS 160 10:28:55 10:40 ~ 2nd St SW & A St SW(57784) ~ Walk 1m29s ~ Auburn Station - Bay 4(18728) ~ BUS 578 10:47 11:14 ~ Puyallup Station - Bay 3(10401) ~ Walk 48s ~ Puyallup Station - Bay 2(26645) ~ BUS 425 11:19 11:23 ~ Meridian S & 9th Ave SW(1332) ~ Walk 6m9s -65,1,01:08:52,6710,1892,10:26:08,11:35:00,Metro Transit|Sound Transit,BUS,160|578,kcm:58255|kcm:57784|pierce-transit:18728|pierce-transit:10401,Walk 2m47s ~ Auburn Way N & 37th St NE(58255) ~ BUS 160 10:28:55 10:40 ~ 2nd St SW & A St SW(57784) ~ Walk 1m29s ~ Auburn Station - Bay 4(18728) ~ BUS 578 10:47 11:14 ~ Puyallup Station - Bay 3(10401) ~ Walk 21m -65,1,01:09:10,6728,1892,10:55:50,12:05:00,Metro Transit|Sound Transit,BUS,160|578,kcm:58255|kcm:57784|pierce-transit:18728|pierce-transit:10401,Walk 2m47s ~ Auburn Way N & 37th St NE(58255) ~ BUS 160 10:58:37 11:11 ~ 2nd St SW & A St SW(57784) ~ Walk 1m29s ~ Auburn Station - Bay 4(18728) ~ BUS 578 11:17 11:44 ~ Puyallup Station - Bay 3(10401) ~ Walk 21m -66,1,00:32:54,3333,213,10:06:44,10:39:38,Metro Transit|Puget Sound Educational Service District,BUS,160|Road to Independence,kcm:57915|kcm:57950|pudget-sound-educational:area_622,Walk 2m48s ~ Auburn Way N & 37th St NE(57915) ~ BUS 160 10:09:32 10:12:47 ~ Auburn Way N & S 277th St(57950) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:14:47 10:39:38 -66,1,00:33:36,3375,212,10:11:08,10:44:44,Metro Transit|Puget Sound Educational Service District,BUS,160|Road to Independence,kcm:58255|kcm:57901|pudget-sound-educational:area_622,Walk 2m47s ~ Auburn Way N & 37th St NE(58255) ~ BUS 160 10:13:55 10:18 ~ Auburn Way N & 15th St NE(57901) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:20 10:44:44 -66,2,00:36:13,3975,0,10:14:52,10:51:05,Pierce Transit|Puget Sound Educational Service District,BUS,Road to Independence|402|Road to Independence,pudget-sound-educational:area_622|pierce-transit:13268|pierce-transit:1010|pudget-sound-educational:area_622,pudget-sound-educational:area_622(area_622) ~ BUS null 10:14:52 10:38Walk 0s ~ Meridian N & Spencer(13268) ~ BUS 402 10:40 10:41 ~ Meridian N & Valley Ave E(1010) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:43 10:51:05 -67,4,03:46:40,17251,880,10:11:08,13:57:48,Metro Transit|Sound Transit,BUS,160|578|545|224|629,kcm:58255|kcm:57784|pierce-transit:8770|pierce-transit:13217|kcm:700|kcm:72488|kcm:68803|kcm:64397,Walk 2m47s ~ Auburn Way N & 37th St NE(58255) ~ BUS 160 10:13:55 10:25 ~ 2nd St SW & A St SW(57784) ~ Walk 1m10s ~ Auburn Station - Bay 3(8770) ~ BUS 578 10:34 11:19 ~ 4th Ave & Pike St(13217) ~ Walk 1m11s ~ 4th Ave & Pike St(700) ~ BUS 545 11:26 12:01:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 12:15:31 12:49 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 13:04 13:51 ~ Railroad Avenue Southeast Ave SE & SE Northern St(64397) ~ Walk 6m48s -67,3,03:02:07,14126,1098,11:10:33,14:12:40,Metro Transit|Sound Transit,BUS,160|578|554|208,kcm:58255|kcm:57784|pierce-transit:8770|pierce-transit:13217|kcm:280|kcm:64590|kcm:64593|kcm:64399,Walk 2m47s ~ Auburn Way N & 37th St NE(58255) ~ BUS 160 11:13:20 11:26 ~ 2nd St SW & A St SW(57784) ~ Walk 1m10s ~ Auburn Station - Bay 3(8770) ~ BUS 578 11:36 12:21 ~ 4th Ave & Pike St(13217) ~ Walk 4m17s ~ 2nd Ave & Stewart St(280) ~ BUS 554 12:37:53 13:12 ~ Issaquah Transit Center - Bay 6(64590) ~ Walk 1m1s ~ Issaquah Transit Center - Bay 4(64593) ~ BUS 208 13:30 14:06:59 ~ Railroad Ave SE & SE River St(64399) ~ Walk 5m41s -68,4,03:37:46,16578,700,10:20:02,13:57:48,Metro Transit|Puget Sound Educational Service District|Sound Transit,BUS,Road to Independence|578|545|224|629,pudget-sound-educational:area_622|pierce-transit:7910|pierce-transit:13217|kcm:700|kcm:72488|kcm:68803|kcm:64397,pudget-sound-educational:area_622(area_622) ~ BUS null 10:20:02 10:42:20Walk 1m40s ~ Federal Way TC - Bay 7(7910) ~ BUS 578 10:46 11:19 ~ 4th Ave & Pike St(13217) ~ Walk 1m11s ~ 4th Ave & Pike St(700) ~ BUS 545 11:26 12:01:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 12:15:31 12:49 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 13:04 13:51 ~ Railroad Avenue Southeast Ave SE & SE Northern St(64397) ~ Walk 6m48s -68,3,02:50:38,13298,918,11:22:02,14:12:40,Metro Transit|Puget Sound Educational Service District|Sound Transit,BUS,Road to Independence|578|554|208,pudget-sound-educational:area_622|pierce-transit:7910|pierce-transit:13217|kcm:280|kcm:64590|kcm:64593|kcm:64399,pudget-sound-educational:area_622(area_622) ~ BUS null 11:22:02 11:44:20Walk 1m40s ~ Federal Way TC - Bay 7(7910) ~ BUS 578 11:48 12:21 ~ 4th Ave & Pike St(13217) ~ Walk 4m17s ~ 2nd Ave & Stewart St(280) ~ BUS 554 12:37:53 13:12 ~ Issaquah Transit Center - Bay 6(64590) ~ Walk 1m1s ~ Issaquah Transit Center - Bay 4(64593) ~ BUS 208 13:30 14:06:59 ~ Railroad Ave SE & SE River St(64399) ~ Walk 5m41s -69,2,01:42:30,8465,704,10:11:08,11:53:38,Metro Transit|Sound Transit,BUS,160|578|3,kcm:58255|kcm:57784|pierce-transit:8770|pierce-transit:13217|kcm:575|kcm:41350,Walk 2m47s ~ Auburn Way N & 37th St NE(58255) ~ BUS 160 10:13:55 10:25 ~ 2nd St SW & A St SW(57784) ~ Walk 1m10s ~ Auburn Station - Bay 3(8770) ~ BUS 578 10:34 11:19 ~ 4th Ave & Pike St(13217) ~ Walk 2m32s ~ 3rd Ave & Pike St(575) ~ BUS 3 11:28 11:50:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m3s -69,2,01:42:30,8972,1403,10:26:08,12:08:38,Metro Transit|Sound Transit,BUS|RAIL,160|S Line|3,kcm:58255|kcm:57784|sound-transit:S_AU_NB|sound-transit:S_KS|kcm:1540|kcm:41350,Walk 2m47s ~ Auburn Way N & 37th St NE(58255) ~ BUS 160 10:28:55 10:40 ~ 2nd St SW & A St SW(57784) ~ Walk 2m5s ~ Auburn Station (Northbound)(S_AU_NB) ~ RAIL S Line 10:48 11:22 ~ King Street Station(S_KS) ~ Walk 11m5s ~ James St & 5th Ave(1540) ~ BUS 3 11:36 12:05:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m3s -69,2,01:42:30,8465,704,10:41:08,12:23:38,Metro Transit|Sound Transit,BUS,160|578|3,kcm:58255|kcm:57784|pierce-transit:8770|pierce-transit:13217|kcm:575|kcm:41350,Walk 2m47s ~ Auburn Way N & 37th St NE(58255) ~ BUS 160 10:43:55 10:55 ~ 2nd St SW & A St SW(57784) ~ Walk 1m10s ~ Auburn Station - Bay 3(8770) ~ BUS 578 11:04 11:49 ~ 4th Ave & Pike St(13217) ~ Walk 2m32s ~ 3rd Ave & Pike St(575) ~ BUS 3 11:58 12:20:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m3s -71,2,01:24:55,7192,408,10:06:44,11:31:39,Metro Transit|Sound Transit,BUS|TRAM,160|150|1-Line,kcm:57915|kcm:57453|kcm:57458|kcm:99254|sound-transit:99111|sound-transit:99121,Walk 2m48s ~ Auburn Way N & 37th St NE(57915) ~ BUS 160 10:09:32 10:21 ~ Kent Sounder Station - Bay 3(57453) ~ Walk 1m24s ~ Kent Sounder Station - Bay 8(57458) ~ BUS 150 10:32 11:19:40 ~ SODO Busway & S Lander St(99254) ~ Walk 49s ~ SODO Station(99111) ~ TRAM 1-Line 11:28 11:31 ~ Beacon Hill Station(99121) ~ Walk 39s -71,2,01:19:38,6875,408,10:22:01,11:41:39,Metro Transit|Sound Transit,BUS|TRAM,160|150|1-Line,kcm:57915|kcm:57453|kcm:57458|kcm:99254|sound-transit:99111|sound-transit:99121,Walk 2m48s ~ Auburn Way N & 37th St NE(57915) ~ BUS 160 10:24:49 10:37 ~ Kent Sounder Station - Bay 3(57453) ~ Walk 1m24s ~ Kent Sounder Station - Bay 8(57458) ~ BUS 150 10:47 11:34:40 ~ SODO Busway & S Lander St(99254) ~ Walk 49s ~ SODO Station(99111) ~ TRAM 1-Line 11:38 11:41 ~ Beacon Hill Station(99121) ~ Walk 39s -71,2,01:15:31,7239,1237,10:26:08,11:41:39,Metro Transit|Sound Transit,BUS|RAIL|TRAM,160|S Line|1-Line,kcm:58255|kcm:57784|sound-transit:S_AU_NB|sound-transit:S_KS|sound-transit:99101|sound-transit:99121,Walk 2m47s ~ Auburn Way N & 37th St NE(58255) ~ BUS 160 10:28:55 10:40 ~ 2nd St SW & A St SW(57784) ~ Walk 2m5s ~ Auburn Station (Northbound)(S_AU_NB) ~ RAIL S Line 10:48 11:22 ~ King Street Station(S_KS) ~ Walk 11m18s ~ Stadium Station(99101) ~ TRAM 1-Line 11:36 11:41 ~ Beacon Hill Station(99121) ~ Walk 39s -72,2,01:09:06,6049,138,10:02:33,11:11:39,Metro Transit|Puget Sound Educational Service District|Sound Transit,BUS|TRAM,Road to Independence|150|1-Line,pudget-sound-educational:area_622|kcm:59773|kcm:99254|sound-transit:99111|sound-transit:99121,pudget-sound-educational:area_622(area_622) ~ BUS null 10:02:33 10:17:31Walk 27s ~ W James St & Lincoln Ave N(59773) ~ BUS 150 10:19:58 11:04:40 ~ SODO Busway & S Lander St(99254) ~ Walk 49s ~ SODO Station(99111) ~ TRAM 1-Line 11:08 11:11 ~ Beacon Hill Station(99121) ~ Walk 39s -72,2,01:20:04,6947,474,10:06:25,11:26:29,Metro Transit|Puget Sound Educational Service District|Sound Transit,BUS|TRAM,Road to Independence|A Line|1-Line,pudget-sound-educational:area_622|kcm:60750|kcm:60850|sound-transit:99914|sound-transit:99240,pudget-sound-educational:area_622(area_622) ~ BUS null 10:06:25 10:28:19Walk 1m9s ~ Pacific Hwy S & S 272nd St(60750) ~ BUS A Line 10:31:28 10:45:46 ~ International Blvd & S 200th St(60850) ~ Walk 4m23s ~ Angle Lake Station(99914) ~ TRAM 1-Line 10:56 11:25 ~ Beacon Hill Station(99240) ~ Walk 1m29s -72,1,01:27:20,7716,1764,10:02:33,11:29:53,Metro Transit|Puget Sound Educational Service District,BUS,Road to Independence|150,pudget-sound-educational:area_622|kcm:59773|kcm:99264,pudget-sound-educational:area_622(area_622) ~ BUS null 10:02:33 10:17:31Walk 27s ~ W James St & Lincoln Ave N(59773) ~ BUS 150 10:19:58 11:06:45 ~ SODO Busway & S Holgate St(99264) ~ Walk 23m8s -73,1,01:30:16,7950,1790,10:24:17,11:54:33,Metro Transit,BUS,181|160,kcm:83706|kcm:57774|kcm:57185,Walk 4m38s ~ S 320th St & 1st Ave S(83706) ~ BUS 181 10:28:55 10:55 ~ Auburn Transit Center - Bay 2(57774) ~ BUS 160 10:58 11:36:08 ~ 108th Ave SE & SE 220th Pl(57185) ~ Walk 18m25s -73,2,01:52:11,11453,3963,10:32:22,12:24:33,Metro Transit,BUS,A Line|165|160,kcm:60660|kcm:48949|kcm:48950|kcm:57127|kcm:57130|kcm:57185,Walk 30m30s ~ Pacific Hwy S & S 316th St(60660) ~ BUS A Line 11:02:52 11:17:16 ~ Pacific Hwy S & S 240th St(48949) ~ Walk 56s ~ Pacific Hwy S & S 240th St(48950) ~ BUS 165 11:20:30 11:51 ~ SE 240th St & 104th Ave SE(57127) ~ Walk 1m45s ~ 104th Ave SE & SE 240th St(57130) ~ BUS 160 12:01:23 12:06:08 ~ 108th Ave SE & SE 220th Pl(57185) ~ Walk 18m25s -73,1,01:54:12,11794,5067,10:32:22,12:26:34,Metro Transit,BUS,A Line|165,kcm:60660|kcm:48949|kcm:48950|kcm:57141,Walk 30m30s ~ Pacific Hwy S & S 316th St(60660) ~ BUS A Line 11:02:52 11:17:16 ~ Pacific Hwy S & S 240th St(48949) ~ Walk 56s ~ Pacific Hwy S & S 240th St(48950) ~ BUS 165 11:20:30 11:52:44 ~ SE 240th St & 116th Ave SE(57141) ~ Walk 33m50s -74,2,00:46:15,4743,220,10:02:16,10:48:31,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Road to Independence|183|Hyde Shuttle,pudget-sound-educational:area_622|kcm:53050|kcm:50709|sound-generations:area_558,Walk 2m46s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:05:02 10:20:23Walk 0s ~ Military Rd S & S 272nd St(53050) ~ BUS 183 10:22:23 10:28:58 ~ Reith Rd & Lake Fenwick Rd S(50709) ~ Walk 0s ~ sound-generations:area_558(area_558) ~ BUS null 10:30:58 10:48:31 -74,2,00:50:20,4988,220,10:05:04,10:55:24,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Road to Independence|183|Hyde Shuttle,pudget-sound-educational:area_622|kcm:58785|kcm:50779|sound-generations:area_558,Walk 2m46s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:07:50 10:27:43Walk 0s ~ W Meeker St & Frager Rd(58785) ~ BUS 183 10:29:43 10:33:54 ~ W James St & 64th Ave S(50779) ~ Walk 0s ~ sound-generations:area_558(area_558) ~ BUS null 10:35:54 10:55:24 -74,2,00:45:23,4691,220,10:13:59,10:59:22,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Road to Independence|183|Hyde Shuttle,pudget-sound-educational:area_622|kcm:58781|kcm:50781|sound-generations:area_558,Walk 2m46s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:16:45 10:36:48Walk 0s ~ W Meeker St & Frager Rd(58781) ~ BUS 183 10:38:48 10:39:48 ~ Reith Rd & Lake Fenwick Rd S(50781) ~ Walk 0s ~ sound-generations:area_558(area_558) ~ BUS null 10:41:48 10:59:22 -75,1,01:23:27,8713,3408,10:02:22,11:25:49,Metro Transit,BUS,A Line|165,kcm:60660|kcm:48949|kcm:61180|kcm:47570,Walk 30m30s ~ Pacific Hwy S & S 316th St(60660) ~ BUS A Line 10:32:52 10:47:16 ~ Pacific Hwy S & S 240th St(48949) ~ Walk 2m7s ~ Pacific Hwy S & S 240th St(61180) ~ BUS 165 10:57:37 11:14 ~ 1st Ave S & SW Normandy Rd(47570) ~ Walk 11m49s -75,2,01:24:06,8942,2885,10:24:17,11:48:23,Metro Transit,BUS,181|A Line|156,kcm:83706|kcm:80438|kcm:60830|kcm:47403|kcm:49190,Walk 4m38s ~ S 320th St & 1st Ave S(83706) ~ BUS 181 10:28:55 10:36 ~ Federal Way TC - Bay 8(80438) ~ BUS A Line 10:40 11:02:22 ~ International Blvd & S 216th St(60830) ~ Walk 6m18s ~ S 216th St & 24th Ave S(47403) ~ BUS 156 11:11 11:21:04 ~ 8th Ave S & Des Moines Memorial Dr S(49190) ~ Walk 27m19s -75,1,01:36:01,10501,4862,10:12:22,11:48:23,Metro Transit,BUS,A Line|156,kcm:60660|kcm:60830|kcm:47403|kcm:49190,Walk 30m30s ~ Pacific Hwy S & S 316th St(60660) ~ BUS A Line 10:42:52 11:02:22 ~ International Blvd & S 216th St(60830) ~ Walk 6m18s ~ S 216th St & 24th Ave S(47403) ~ BUS 156 11:11 11:21:04 ~ 8th Ave S & Des Moines Memorial Dr S(49190) ~ Walk 27m19s -76,2,00:50:32,5125,395,10:02:33,10:53:05,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Road to Independence|A Line|Hyde Shuttle,pudget-sound-educational:area_622|kcm:60670|kcm:60750|sound-generations:area_551,Walk 2m46s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:05:19 10:12Walk 0s ~ Pacific Hwy S & S 312th St(60670) ~ BUS A Line 10:14 10:21:28 ~ Pacific Hwy S & S 272nd St(60750) ~ Walk 2m23s ~ sound-generations:area_551(area_551) ~ BUS null 10:25:51 10:53:05 -76,2,00:50:32,5125,395,10:12:33,11:03:05,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Road to Independence|A Line|Hyde Shuttle,pudget-sound-educational:area_622|kcm:60670|kcm:60750|sound-generations:area_551,Walk 2m46s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:15:19 10:22Walk 0s ~ Pacific Hwy S & S 312th St(60670) ~ BUS A Line 10:24 10:31:28 ~ Pacific Hwy S & S 272nd St(60750) ~ Walk 2m23s ~ sound-generations:area_551(area_551) ~ BUS null 10:35:51 11:03:05 -76,2,00:50:32,5125,395,10:22:33,11:13:05,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Road to Independence|A Line|Hyde Shuttle,pudget-sound-educational:area_622|kcm:60670|kcm:60750|sound-generations:area_551,Walk 2m46s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:25:19 10:32Walk 0s ~ Pacific Hwy S & S 312th St(60670) ~ BUS A Line 10:34 10:41:28 ~ Pacific Hwy S & S 272nd St(60750) ~ Walk 2m23s ~ sound-generations:area_551(area_551) ~ BUS null 10:45:51 11:13:05 -77,0,01:05:48,7247,3678,10:02:22,11:08:10,Metro Transit,BUS,A Line,kcm:60660|kcm:60810,Walk 30m30s ~ Pacific Hwy S & S 316th St(60660) ~ BUS A Line 10:32:52 10:50:38 ~ Pacific Hwy S & S 224th St(60810) ~ Walk 17m32s -77,1,00:53:53,5688,1701,10:24:17,11:18:10,Metro Transit,BUS,181|A Line,kcm:83706|kcm:80438|kcm:60810,Walk 4m38s ~ S 320th St & 1st Ave S(83706) ~ BUS 181 10:28:55 10:36 ~ Federal Way TC - Bay 8(80438) ~ BUS A Line 10:40 11:00:38 ~ Pacific Hwy S & S 224th St(60810) ~ Walk 17m32s -77,0,01:05:48,7247,3678,10:12:22,11:18:10,Metro Transit,BUS,A Line,kcm:60660|kcm:60810,Walk 30m30s ~ Pacific Hwy S & S 316th St(60660) ~ BUS A Line 10:42:52 11:00:38 ~ Pacific Hwy S & S 224th St(60810) ~ Walk 17m32s -78,2,00:34:36,4044,220,10:02:33,10:37:09,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Road to Independence|A Line|Hyde Shuttle,pudget-sound-educational:area_622|kcm:60670|kcm:60800|sound-generations:area_551,Walk 2m46s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:05:19 10:12Walk 0s ~ Pacific Hwy S & S 312th St(60670) ~ BUS A Line 10:14 10:29 ~ Pacific Hwy S & Kent Des Moines Rd(60800) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:31 10:37:09 -78,2,00:34:36,4044,220,10:12:33,10:47:09,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Road to Independence|A Line|Hyde Shuttle,pudget-sound-educational:area_622|kcm:60670|kcm:60800|sound-generations:area_551,Walk 2m46s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:15:19 10:22Walk 0s ~ Pacific Hwy S & S 312th St(60670) ~ BUS A Line 10:24 10:39 ~ Pacific Hwy S & Kent Des Moines Rd(60800) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:41 10:47:09 -78,1,00:45:37,5087,1559,10:02:33,10:48:10,Metro Transit|Puget Sound Educational Service District,BUS,Road to Independence|A Line,pudget-sound-educational:area_622|kcm:60670|kcm:60810,Walk 2m46s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:05:19 10:12Walk 0s ~ Pacific Hwy S & S 312th St(60670) ~ BUS A Line 10:14 10:30:38 ~ Pacific Hwy S & S 224th St(60810) ~ Walk 17m32s -79,1,00:48:20,4530,575,10:24:17,11:12:37,Metro Transit,BUS,181|160,kcm:83706|kcm:57774|kcm:57915,Walk 4m38s ~ S 320th St & 1st Ave S(83706) ~ BUS 181 10:28:55 10:55 ~ Auburn Transit Center - Bay 2(57774) ~ BUS 160 10:58 11:09:49 ~ Auburn Way N & 37th St NE(57915) ~ Walk 2m48s -79,1,01:03:20,5430,575,10:54:17,11:57:37,Metro Transit,BUS,181|160,kcm:83706|kcm:57774|kcm:57915,Walk 4m38s ~ S 320th St & 1st Ave S(83706) ~ BUS 181 10:58:55 11:27 ~ Auburn Transit Center - Bay 2(57774) ~ BUS 160 11:43 11:54:49 ~ Auburn Way N & 37th St NE(57915) ~ Walk 2m48s -79,2,01:12:20,6650,679,10:59:17,12:11:37,Metro Transit|Sound Transit,BUS,187|578|160,kcm:83706|kcm:80433|pierce-transit:4136|pierce-transit:18728|kcm:57774|kcm:57915,Walk 4m38s ~ S 320th St & 1st Ave S(83706) ~ BUS 187 11:03:55 11:10 ~ Federal Way TC - Bay 3(80433) ~ Walk 37s ~ Federal Way TC - Bay 2(4136) ~ BUS 578 11:32 11:49 ~ Auburn Station - Bay 4(18728) ~ Walk 44s ~ Auburn Transit Center - Bay 2(57774) ~ BUS 160 11:57 12:08:49 ~ Auburn Way N & 37th St NE(57915) ~ Walk 2m48s -80,2,00:35:50,4118,220,10:03:45,10:39:35,Pierce Transit|Puget Sound Educational Service District,BUS,Road to Independence|402|Road to Independence,pudget-sound-educational:area_622|pierce-transit:1797|pierce-transit:1004|pudget-sound-educational:area_622,Walk 2m46s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:06:31 10:15Walk 0s ~ Pacific Hwy & S 336th St(1797) ~ BUS 402 10:17 10:20 ~ Enchanted Pkwy & S 352nd(1004) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:22 10:39:35 -80,1,00:34:47,3479,254,10:07:19,10:42:06,Metro Transit|Puget Sound Educational Service District,BUS,181|Road to Independence,kcm:83784|kcm:83711|pudget-sound-educational:area_622,Walk 3m16s ~ SW 320th St & 1st Ave S(83784) ~ BUS 181 10:10:35 10:11:10 ~ SW 320th St & 3rd Pl SW(83711) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:13:10 10:42:06 -80,2,00:43:58,4670,308,10:12:33,10:56:31,Metro Transit|Puget Sound Educational Service District,BUS,Road to Independence|A Line|Road to Independence,pudget-sound-educational:area_622|kcm:60670|kcm:60750|pudget-sound-educational:area_622,Walk 2m46s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:15:19 10:22Walk 0s ~ Pacific Hwy S & S 312th St(60670) ~ BUS A Line 10:24 10:31:28 ~ Pacific Hwy S & S 272nd St(60750) ~ Walk 1m9s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:34:37 10:56:31 -81,3,01:47:58,9555,922,10:24:17,12:12:15,Metro Transit|Sound Transit,BUS,181|578|C Line|128,kcm:83706|kcm:80438|pierce-transit:7910|pierce-transit:13217|kcm:431|kcm:20041|kcm:32011|kcm:31871,Walk 4m38s ~ S 320th St & 1st Ave S(83706) ~ BUS 181 10:28:55 10:36 ~ Federal Way TC - Bay 8(80438) ~ Walk 1m15s ~ Federal Way TC - Bay 7(7910) ~ BUS 578 10:46 11:19 ~ 4th Ave & Pike St(13217) ~ Walk 2m36s ~ 3rd Ave & Pike St(431) ~ BUS C Line 11:33 11:58 ~ SW Alaska St & California Ave SW - Bay 3(20041) ~ Walk 42s ~ SW Alaska St & 44th Ave SW - Bay 4(32011) ~ BUS 128 12:05 12:08:50 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m25s -81,1,02:04:39,11789,4236,10:09:14,12:13:53,Metro Transit|Sound Transit,BUS,578|C Line,pierce-transit:7910|pierce-transit:13217|kcm:431|kcm:20041,Walk 36m46s ~ Federal Way TC - Bay 7(7910) ~ BUS 578 10:46 11:19 ~ 4th Ave & Pike St(13217) ~ Walk 2m36s ~ 3rd Ave & Pike St(431) ~ BUS C Line 11:33 11:58 ~ SW Alaska St & California Ave SW - Bay 3(20041) ~ Walk 15m53s -81,1,02:19:53,11605,2694,10:12:22,12:32:15,Metro Transit,BUS,A Line|128,kcm:60660|kcm:60921|kcm:60923|kcm:31871,Walk 30m30s ~ Pacific Hwy S & S 316th St(60660) ~ BUS A Line 10:42:52 11:20 ~ Tukwila International Blvd Station - Bay 1(60921) ~ Walk 2m28s ~ Tukwila International Blvd Station - Bay 3(60923) ~ BUS 128 11:32 12:28:50 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m25s -83,2,01:28:48,8640,2051,10:00:21,11:29:09,Metro Transit|Pierce Transit|Sound Transit,BUS,903|578|425,kcm:60646|kcm:80439|pierce-transit:4136|pierce-transit:10401|pierce-transit:26645|pierce-transit:1332,Walk 19m4s ~ S 333rd St & 1st Way S(60646) ~ BUS 903 10:19:25 10:28 ~ Federal Way TC - Bay 9(80439) ~ Walk 1m ~ Federal Way TC - Bay 2(4136) ~ BUS 578 10:31 11:14 ~ Puyallup Station - Bay 3(10401) ~ Walk 48s ~ Puyallup Station - Bay 2(26645) ~ BUS 425 11:19 11:23 ~ Meridian S & 9th Ave SW(1332) ~ Walk 6m9s -83,1,01:34:39,9153,3108,10:00:21,11:35:00,Metro Transit|Sound Transit,BUS,903|578,kcm:60646|kcm:80439|pierce-transit:4136|pierce-transit:10401,Walk 19m4s ~ S 333rd St & 1st Way S(60646) ~ BUS 903 10:19:25 10:28 ~ Federal Way TC - Bay 9(80439) ~ Walk 1m ~ Federal Way TC - Bay 2(4136) ~ BUS 578 10:31 11:14 ~ Puyallup Station - Bay 3(10401) ~ Walk 21m -83,1,01:01:52,5891,1322,10:54:17,11:56:09,Metro Transit|Pierce Transit,BUS,181|402,kcm:83706|kcm:61330|pierce-transit:1792|pierce-transit:1332,Walk 4m38s ~ S 320th St & 1st Ave S(83706) ~ BUS 181 10:58:55 11:02:47 ~ S 320th St & Pacific Hwy S(61330) ~ Walk 6m31s ~ Pacific Hwy & S 324th St(1792) ~ BUS 402 11:14 11:50 ~ Meridian S & 9th Ave SW(1332) ~ Walk 6m9s -84,2,00:41:39,4467,220,10:03:45,10:45:24,Pierce Transit|Puget Sound Educational Service District,BUS,Road to Independence|402|Road to Independence,pudget-sound-educational:area_622|pierce-transit:1797|pierce-transit:1004|pudget-sound-educational:area_622,Walk 2m46s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:06:31 10:15Walk 0s ~ Pacific Hwy & S 336th St(1797) ~ BUS 402 10:17 10:20 ~ Enchanted Pkwy & S 352nd(1004) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:22 10:45:24 -84,1,00:40:36,3828,254,10:07:19,10:47:55,Metro Transit|Puget Sound Educational Service District,BUS,181|Road to Independence,kcm:83784|kcm:83711|pudget-sound-educational:area_622,Walk 3m16s ~ SW 320th St & 1st Ave S(83784) ~ BUS 181 10:10:35 10:11:10 ~ SW 320th St & 3rd Pl SW(83711) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:13:10 10:47:55 -84,2,00:46:27,4755,220,10:13:33,11:00:00,Pierce Transit|Puget Sound Educational Service District,BUS,Road to Independence|409|Road to Independence,pudget-sound-educational:area_622|pierce-transit:326261448|pierce-transit:1133|pudget-sound-educational:area_622,Walk 2m46s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:16:19 10:46Walk 0s ~ 29th St NE & 5th Ave NE(326261448) ~ BUS 409 10:48 10:49 ~ Main Ave E & 15th St SE(1133) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:51 11:00 -85,4,03:33:31,16578,1034,10:24:17,13:57:48,Metro Transit|Sound Transit,BUS,181|578|545|224|629,kcm:83706|kcm:80438|pierce-transit:7910|pierce-transit:13217|kcm:700|kcm:72488|kcm:68803|kcm:64397,Walk 4m38s ~ S 320th St & 1st Ave S(83706) ~ BUS 181 10:28:55 10:36 ~ Federal Way TC - Bay 8(80438) ~ Walk 1m15s ~ Federal Way TC - Bay 7(7910) ~ BUS 578 10:46 11:19 ~ 4th Ave & Pike St(13217) ~ Walk 1m11s ~ 4th Ave & Pike St(700) ~ BUS 545 11:26 12:01:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 12:15:31 12:49 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 13:04 13:51 ~ Railroad Avenue Southeast Ave SE & SE Northern St(64397) ~ Walk 6m48s -85,3,03:48:34,18639,3430,10:09:14,13:57:48,Metro Transit|Sound Transit,BUS,578|545|224|629,pierce-transit:7910|pierce-transit:13217|kcm:700|kcm:72488|kcm:68803|kcm:64397,Walk 36m46s ~ Federal Way TC - Bay 7(7910) ~ BUS 578 10:46 11:19 ~ 4th Ave & Pike St(13217) ~ Walk 1m11s ~ 4th Ave & Pike St(700) ~ BUS 545 11:26 12:01:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 12:15:31 12:49 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 13:04 13:51 ~ Railroad Avenue Southeast Ave SE & SE Northern St(64397) ~ Walk 6m48s -85,3,02:48:23,13417,1252,11:24:17,14:12:40,Metro Transit|Sound Transit,BUS,181|578|554|208,kcm:83706|kcm:80438|pierce-transit:7910|pierce-transit:13217|kcm:280|kcm:64590|kcm:64593|kcm:64399,Walk 4m38s ~ S 320th St & 1st Ave S(83706) ~ BUS 181 11:28:55 11:36 ~ Federal Way TC - Bay 8(80438) ~ Walk 1m15s ~ Federal Way TC - Bay 7(7910) ~ BUS 578 11:48 12:21 ~ 4th Ave & Pike St(13217) ~ Walk 4m17s ~ 2nd Ave & Stewart St(280) ~ BUS 554 12:37:53 13:12 ~ Issaquah Transit Center - Bay 6(64590) ~ Walk 1m1s ~ Issaquah Transit Center - Bay 4(64593) ~ BUS 208 13:30 14:06:59 ~ Railroad Ave SE & SE River St(64399) ~ Walk 5m41s -86,4,03:26:19,16078,942,10:31:29,13:57:48,Metro Transit|Puget Sound Educational Service District|Sound Transit,BUS,Road to Independence|578|545|224|629,pudget-sound-educational:area_622|kcm:80437|pierce-transit:7910|pierce-transit:13217|kcm:700|kcm:72488|kcm:68803|kcm:64397,Walk 2m46s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:34:15 10:42:05Walk 1m42s ~ Federal Way TC - Bay 7(80437) ~ Walk 13s ~ Federal Way TC - Bay 7(7910) ~ BUS 578 10:46 11:19 ~ 4th Ave & Pike St(13217) ~ Walk 1m11s ~ 4th Ave & Pike St(700) ~ BUS 545 11:26 12:01:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 12:15:31 12:49 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 13:04 13:51 ~ Railroad Avenue Southeast Ave SE & SE Northern St(64397) ~ Walk 6m48s -86,3,03:48:34,18639,3430,10:09:14,13:57:48,Metro Transit|Sound Transit,BUS,578|545|224|629,pierce-transit:7910|pierce-transit:13217|kcm:700|kcm:72488|kcm:68803|kcm:64397,Walk 36m46s ~ Federal Way TC - Bay 7(7910) ~ BUS 578 10:46 11:19 ~ 4th Ave & Pike St(13217) ~ Walk 1m11s ~ 4th Ave & Pike St(700) ~ BUS 545 11:26 12:01:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 12:15:31 12:49 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 13:04 13:51 ~ Railroad Avenue Southeast Ave SE & SE Northern St(64397) ~ Walk 6m48s -86,3,02:39:11,12798,1160,11:33:29,14:12:40,Metro Transit|Puget Sound Educational Service District|Sound Transit,BUS,Road to Independence|578|554|208,pudget-sound-educational:area_622|kcm:80437|pierce-transit:7910|pierce-transit:13217|kcm:280|kcm:64590|kcm:64593|kcm:64399,Walk 2m46s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 11:36:15 11:44:05Walk 1m42s ~ Federal Way TC - Bay 7(80437) ~ Walk 13s ~ Federal Way TC - Bay 7(7910) ~ BUS 578 11:48 12:21 ~ 4th Ave & Pike St(13217) ~ Walk 4m17s ~ 2nd Ave & Stewart St(280) ~ BUS 554 12:37:53 13:12 ~ Issaquah Transit Center - Bay 6(64590) ~ Walk 1m1s ~ Issaquah Transit Center - Bay 4(64593) ~ BUS 208 13:30 14:06:59 ~ Railroad Ave SE & SE River St(64399) ~ Walk 5m41s -87,2,01:29:21,7792,858,10:24:17,11:53:38,Metro Transit|Sound Transit,BUS,181|578|3,kcm:83706|kcm:80438|pierce-transit:7910|pierce-transit:13217|kcm:575|kcm:41350,Walk 4m38s ~ S 320th St & 1st Ave S(83706) ~ BUS 181 10:28:55 10:36 ~ Federal Way TC - Bay 8(80438) ~ Walk 1m15s ~ Federal Way TC - Bay 7(7910) ~ BUS 578 10:46 11:19 ~ 4th Ave & Pike St(13217) ~ Walk 2m32s ~ 3rd Ave & Pike St(575) ~ BUS 3 11:28 11:50:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m3s -87,1,01:44:24,9854,3254,10:09:14,11:53:38,Metro Transit|Sound Transit,BUS,578|3,pierce-transit:7910|pierce-transit:13217|kcm:575|kcm:41350,Walk 36m46s ~ Federal Way TC - Bay 7(7910) ~ BUS 578 10:46 11:19 ~ 4th Ave & Pike St(13217) ~ Walk 2m32s ~ 3rd Ave & Pike St(575) ~ BUS 3 11:28 11:50:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m3s -87,2,01:24:21,7542,936,10:59:17,12:23:38,Metro Transit|Sound Transit,BUS,187|578|3,kcm:83706|kcm:80433|pierce-transit:7910|pierce-transit:13217|kcm:575|kcm:41350,Walk 4m38s ~ S 320th St & 1st Ave S(83706) ~ BUS 187 11:03:55 11:10 ~ Federal Way TC - Bay 3(80433) ~ Walk 2m22s ~ Federal Way TC - Bay 7(7910) ~ BUS 578 11:16 11:49 ~ 4th Ave & Pike St(13217) ~ Walk 2m32s ~ 3rd Ave & Pike St(575) ~ BUS 3 11:58 12:20:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m3s -89,1,01:34:07,8841,2725,10:02:22,11:36:29,Metro Transit|Sound Transit,BUS|TRAM,A Line|1-Line,kcm:60660|kcm:60850|sound-transit:99914|sound-transit:99240,Walk 30m30s ~ Pacific Hwy S & S 316th St(60660) ~ BUS A Line 10:32:52 10:55:46 ~ International Blvd & S 200th St(60850) ~ Walk 4m23s ~ Angle Lake Station(99914) ~ TRAM 1-Line 11:06 11:35 ~ Beacon Hill Station(99240) ~ Walk 1m29s -89,2,01:22:12,7282,748,10:24:17,11:46:29,Metro Transit|Sound Transit,BUS|TRAM,181|A Line|1-Line,kcm:83706|kcm:80438|kcm:60850|sound-transit:99914|sound-transit:99240,Walk 4m38s ~ S 320th St & 1st Ave S(83706) ~ BUS 181 10:28:55 10:36 ~ Federal Way TC - Bay 8(80438) ~ BUS A Line 10:40 11:05:46 ~ International Blvd & S 200th St(60850) ~ Walk 4m23s ~ Angle Lake Station(99914) ~ TRAM 1-Line 11:16 11:45 ~ Beacon Hill Station(99240) ~ Walk 1m29s -89,1,01:34:07,8841,2725,10:12:22,11:46:29,Metro Transit|Sound Transit,BUS|TRAM,A Line|1-Line,kcm:60660|kcm:60850|sound-transit:99914|sound-transit:99240,Walk 30m30s ~ Pacific Hwy S & S 316th St(60660) ~ BUS A Line 10:42:52 11:05:46 ~ International Blvd & S 200th St(60850) ~ Walk 4m23s ~ Angle Lake Station(99914) ~ TRAM 1-Line 11:16 11:45 ~ Beacon Hill Station(99240) ~ Walk 1m29s -90,2,01:13:56,6681,606,10:02:33,11:16:29,Metro Transit|Puget Sound Educational Service District|Sound Transit,BUS|TRAM,Road to Independence|A Line|1-Line,pudget-sound-educational:area_622|kcm:60670|kcm:60850|sound-transit:99914|sound-transit:99240,Walk 2m46s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:05:19 10:12Walk 0s ~ Pacific Hwy S & S 312th St(60670) ~ BUS A Line 10:14 10:35:46 ~ International Blvd & S 200th St(60850) ~ Walk 4m23s ~ Angle Lake Station(99914) ~ TRAM 1-Line 10:46 11:15 ~ Beacon Hill Station(99240) ~ Walk 1m29s -90,3,01:18:10,7644,760,10:03:29,11:21:39,Metro Transit|Puget Sound Educational Service District|Sound Transit,BUS|TRAM,Road to Independence|578|101|1-Line,pudget-sound-educational:area_622|kcm:80437|pierce-transit:7910|pierce-transit:13217|kcm:1230|kcm:99271|sound-transit:99101|sound-transit:99121,Walk 2m46s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:06:15 10:14:05Walk 1m42s ~ Federal Way TC - Bay 7(80437) ~ Walk 13s ~ Federal Way TC - Bay 7(7910) ~ BUS 578 10:18 10:53 ~ 4th Ave & Pike St(13217) ~ Walk 3m11s ~ Union St & 4th Ave(1230) ~ BUS 101 11:02:47 11:11:44 ~ SODO Busway & S Royal Brougham Way(99271) ~ Walk 1m50s ~ Stadium Station(99101) ~ TRAM 1-Line 11:16 11:21 ~ Beacon Hill Station(99121) ~ Walk 39s -90,2,01:13:56,6681,606,10:12:33,11:26:29,Metro Transit|Puget Sound Educational Service District|Sound Transit,BUS|TRAM,Road to Independence|A Line|1-Line,pudget-sound-educational:area_622|kcm:60670|kcm:60850|sound-transit:99914|sound-transit:99240,Walk 2m46s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:15:19 10:22Walk 0s ~ Pacific Hwy S & S 312th St(60670) ~ BUS A Line 10:24 10:45:46 ~ International Blvd & S 200th St(60850) ~ Walk 4m23s ~ Angle Lake Station(99914) ~ TRAM 1-Line 10:56 11:25 ~ Beacon Hill Station(99240) ~ Walk 1m29s -91,2,01:59:45,10446,1981,10:05:53,12:05:38,Metro Transit,BUS,50|101|160,kcm:31970|kcm:99253|kcm:79610|kcm:59891|kcm:57375,Walk 3m8s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:09:01 10:33:54 ~ SODO Busway & S Spokane St(99253) ~ BUS 101 10:48 11:03 ~ SW Sunset Blvd & Hardie Ave SW(79610) ~ Walk 4m34s ~ Rainier Ave S & S 3rd Pl(59891) ~ BUS 160 11:22:49 11:47:16 ~ 108th Ave SE & SE 220th Pl(57375) ~ Walk 18m22s -91,2,01:58:45,10512,2158,10:21:53,12:20:38,Metro Transit,BUS,50|101|160,kcm:31970|kcm:99254|kcm:99263|kcm:79610|kcm:59891|kcm:57375,Walk 3m8s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:25:01 10:48 ~ SODO Busway & S Lander St(99254) ~ Walk 2m30s ~ SODO Busway & S Lander St(99263) ~ BUS 101 11:00:45 11:18 ~ SW Sunset Blvd & Hardie Ave SW(79610) ~ Walk 4m34s ~ Rainier Ave S & S 3rd Pl(59891) ~ BUS 160 11:37:22 12:02:16 ~ 108th Ave SE & SE 220th Pl(57375) ~ Walk 18m22s -91,2,01:58:45,10386,1981,10:35:53,12:34:38,Metro Transit,BUS,50|101|160,kcm:31970|kcm:99253|kcm:79610|kcm:59891|kcm:57375,Walk 3m8s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:39:01 11:03:54 ~ SODO Busway & S Spokane St(99253) ~ BUS 101 11:18 11:33 ~ SW Sunset Blvd & Hardie Ave SW(79610) ~ Walk 4m34s ~ Rainier Ave S & S 3rd Pl(59891) ~ BUS 160 11:51:22 12:16:16 ~ 108th Ave SE & SE 220th Pl(57375) ~ Walk 18m22s -92,2,01:10:03,6139,188,10:07:53,11:17:56,Metro Transit|Sound Generations,BUS,Hyde Shuttle|150|Hyde Shuttle,sound-generations:area_560|kcm:45870|kcm:99253|kcm:58134|sound-generations:area_558,sound-generations:area_560(area_560) ~ BUS null 10:07:53 10:21:25Walk 0s ~ 4th Ave S & S Spokane St(45870) ~ Walk 2m35s ~ SODO Busway & S Spokane St(99253) ~ BUS 150 10:26 10:54:35 ~ West Valley Hwy & Todd Blvd(58134) ~ Walk 0s ~ sound-generations:area_558(area_558) ~ BUS null 10:56:35 11:17:56 -92,2,01:10:03,6139,188,10:22:53,11:32:56,Metro Transit|Sound Generations,BUS,Hyde Shuttle|150|Hyde Shuttle,sound-generations:area_560|kcm:45870|kcm:99253|kcm:58134|sound-generations:area_558,sound-generations:area_560(area_560) ~ BUS null 10:22:53 10:36:25Walk 0s ~ 4th Ave S & S Spokane St(45870) ~ Walk 2m35s ~ SODO Busway & S Spokane St(99253) ~ BUS 150 10:41 11:09:35 ~ West Valley Hwy & Todd Blvd(58134) ~ Walk 0s ~ sound-generations:area_558(area_558) ~ BUS null 11:11:35 11:32:56 -92,2,01:10:03,6139,188,10:37:53,11:47:56,Metro Transit|Sound Generations,BUS,Hyde Shuttle|150|Hyde Shuttle,sound-generations:area_560|kcm:45870|kcm:99253|kcm:58134|sound-generations:area_558,sound-generations:area_560(area_560) ~ BUS null 10:37:53 10:51:25Walk 0s ~ 4th Ave S & S Spokane St(45870) ~ Walk 2m35s ~ SODO Busway & S Spokane St(99253) ~ BUS 150 10:56 11:24:35 ~ West Valley Hwy & Todd Blvd(58134) ~ Walk 0s ~ sound-generations:area_558(area_558) ~ BUS null 11:26:35 11:47:56 -93,2,01:22:43,7563,1087,10:21:53,11:44:36,Metro Transit,BUS,50|120|165,kcm:31970|kcm:21600|kcm:22010|kcm:52305|kcm:48620,Walk 3m8s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:25:01 10:36:44 ~ Delridge Way SW & SW Genesee St(21600) ~ Walk 1m12s ~ Delridge Way SW & SW Genesee St(22010) ~ BUS 120 10:48:18 11:24 ~ Burien Transit Center - Bay 5(52305) ~ BUS 165 11:27 11:34:26 ~ 1st Ave S & SW 178th St(48620) ~ Walk 10m10s -93,1,01:29:02,8787,3111,10:15:34,11:44:36,Metro Transit,BUS,120|165,kcm:21990|kcm:52305|kcm:48620,Walk 31m58s ~ Delridge Way SW & SW Andover St(21990) ~ BUS 120 10:47:32 11:24 ~ Burien Transit Center - Bay 5(52305) ~ BUS 165 11:27 11:34:26 ~ 1st Ave S & SW 178th St(48620) ~ Walk 10m10s -93,2,01:29:28,8011,1147,10:41:08,12:10:36,Metro Transit,BUS,128|120|165,kcm:31970|kcm:22160|kcm:22152|kcm:52305|kcm:48620,Walk 3m8s ~ California Ave SW & SW Spokane St(31970) ~ BUS 128 10:44:16 11:00 ~ SW Orchard St & Delridge Way SW(22160) ~ Walk 2m3s ~ Delridge Way SW & SW Myrtle St(22152) ~ BUS 120 11:14 11:44 ~ Burien Transit Center - Bay 5(52305) ~ BUS 165 11:53 12:00:26 ~ 1st Ave S & SW 178th St(48620) ~ Walk 10m10s -94,2,00:48:54,4736,0,10:09:43,10:58:37,Metro Transit|Sound Generations,BUS,Hyde Shuttle|128|Hyde Shuttle,sound-generations:area_560|kcm:22252|kcm:21104|sound-generations:area_551,sound-generations:area_560(area_560) ~ BUS null 10:09:43 10:31:59Walk 0s ~ Delridge Way SW & SW Henderson St(22252) ~ BUS 128 10:33:59 10:37:47 ~ 8th Ave SW & SW 99th St(21104) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:39:47 10:58:37 -94,1,00:59:53,4960,226,10:01:08,11:01:01,Metro Transit|Sound Generations,BUS,128|Hyde Shuttle,kcm:31970|kcm:49585|sound-generations:area_551,Walk 3m8s ~ California Ave SW & SW Spokane St(31970) ~ BUS 128 10:04:16 10:38:40 ~ 8th Ave SW & SW 102nd St(49585) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:40:40 11:01:01 -94,2,00:53:05,4987,0,10:13:02,11:06:07,Metro Transit|Sound Generations,BUS,Hyde Shuttle|132|Hyde Shuttle,sound-generations:area_560|kcm:49739|kcm:49750|sound-generations:area_551,sound-generations:area_560(area_560) ~ BUS null 10:13:02 10:39:03Walk 0s ~ 14th Ave S & S Trenton St(49739) ~ BUS 132 10:41:03 10:43:23 ~ Des Moines Memorial Dr S & S 96th St(49750) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:45:23 11:06:07 -95,1,01:41:05,8419,1524,10:01:08,11:42:13,Metro Transit,BUS,128|A Line,kcm:31970|kcm:60922|kcm:60921|kcm:61170,Walk 3m8s ~ California Ave SW & SW Spokane St(31970) ~ BUS 128 10:04:16 11:03 ~ Tukwila International Blvd Station - Bay 2(60922) ~ Walk 2m9s ~ Tukwila International Blvd Station - Bay 1(60921) ~ BUS A Line 11:10 11:26:17 ~ Pacific Hwy S & S 224th St(61170) ~ Walk 15m56s -95,2,01:36:20,8840,1729,10:05:53,11:42:13,Metro Transit|Sound Transit,BUS|TRAM,50|1-Line|A Line,kcm:31970|kcm:99263|sound-transit:99111|sound-transit:99913|kcm:61120|kcm:61170,Walk 3m8s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:09:01 10:32 ~ SODO Busway & S Lander St(99263) ~ Walk 2m1s ~ SODO Station(99111) ~ TRAM 1-Line 10:38 11:10 ~ Angle Lake Station(99913) ~ Walk 2m18s ~ International Blvd & S 200th St(61120) ~ BUS A Line 11:21:12 11:26:17 ~ Pacific Hwy S & S 224th St(61170) ~ Walk 15m56s -95,2,01:39:55,9149,1842,10:21:53,12:01:48,Metro Transit|Sound Transit,BUS|TRAM,50|1-Line|635,kcm:31970|kcm:99254|sound-transit:99111|sound-transit:99913|kcm:47200|kcm:47404,Walk 3m8s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:25:01 10:48 ~ SODO Busway & S Lander St(99254) ~ Walk 49s ~ SODO Station(99111) ~ TRAM 1-Line 10:58 11:30 ~ Angle Lake Station(99913) ~ Walk 1m37s ~ S 200th St & 28th Ave S(47200) ~ BUS 635 11:39 11:42:55 ~ S 216th St & 20th Ave S(47404) ~ Walk 18m53s -96,2,00:50:56,4858,0,10:13:02,11:03:58,Metro Transit|Sound Generations,BUS,Hyde Shuttle|132|Hyde Shuttle,sound-generations:area_560|kcm:49739|kcm:49750|sound-generations:area_551,sound-generations:area_560(area_560) ~ BUS null 10:13:02 10:39:03Walk 0s ~ 14th Ave S & S Trenton St(49739) ~ BUS 132 10:41:03 10:43:23 ~ Des Moines Memorial Dr S & S 96th St(49750) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:45:23 11:03:58 -96,1,01:06:18,5345,226,10:01:08,11:07:26,Metro Transit|Sound Generations,BUS,128|Hyde Shuttle,kcm:31970|kcm:49585|sound-generations:area_551,Walk 3m8s ~ California Ave SW & SW Spokane St(31970) ~ BUS 128 10:04:16 10:38:40 ~ 8th Ave SW & SW 102nd St(49585) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:40:40 11:07:26 -96,2,00:58:36,5318,0,10:17:09,11:15:45,Metro Transit|Sound Generations,BUS,Hyde Shuttle|120|Hyde Shuttle,sound-generations:area_560|kcm:21280|kcm:52050|sound-generations:area_551,sound-generations:area_560(area_560) ~ BUS null 10:17:09 10:41:12Walk 0s ~ SW Roxbury St & 20th Ave SW(21280) ~ BUS 120 10:43:12 10:45:53 ~ 15th Ave SW & SW 100th St(52050) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:47:53 11:15:45 -97,2,01:41:14,8227,482,10:05:53,11:47:07,Metro Transit,BUS,50|150|160,kcm:31970|kcm:99253|kcm:57455|kcm:57451|kcm:58255,Walk 3m8s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:09:01 10:33:54 ~ SODO Busway & S Spokane St(99253) ~ BUS 150 10:41 11:26 ~ Kent Sounder Station - Bay 5(57455) ~ Walk 44s ~ Kent Sounder Station - Bay 1(57451) ~ BUS 160 11:33 11:44:20 ~ Auburn Way N & 37th St NE(58255) ~ Walk 2m47s -97,2,01:41:14,8353,659,10:21:53,12:03:07,Metro Transit,BUS,50|150|160,kcm:31970|kcm:99254|kcm:99263|kcm:57455|kcm:57451|kcm:58255,Walk 3m8s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:25:01 10:48 ~ SODO Busway & S Lander St(99254) ~ Walk 2m30s ~ SODO Busway & S Lander St(99263) ~ BUS 150 10:54 11:41 ~ Kent Sounder Station - Bay 5(57455) ~ Walk 44s ~ Kent Sounder Station - Bay 1(57451) ~ BUS 160 11:49 12:00:20 ~ Auburn Way N & 37th St NE(58255) ~ Walk 2m47s -97,2,01:42:14,8287,482,10:35:53,12:18:07,Metro Transit,BUS,50|150|160,kcm:31970|kcm:99253|kcm:57455|kcm:57451|kcm:58255,Walk 3m8s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:39:01 11:03:54 ~ SODO Busway & S Spokane St(99253) ~ BUS 150 11:11 11:57 ~ Kent Sounder Station - Bay 5(57455) ~ Walk 44s ~ Kent Sounder Station - Bay 1(57451) ~ BUS 160 12:04 12:15:20 ~ Auburn Way N & 37th St NE(58255) ~ Walk 2m47s -98,2,01:17:49,6605,188,10:07:53,11:25:42,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|150|Road to Independence,sound-generations:area_560|kcm:45870|kcm:99253|kcm:80580|pudget-sound-educational:area_622,sound-generations:area_560(area_560) ~ BUS null 10:07:53 10:21:25Walk 0s ~ 4th Ave S & S Spokane St(45870) ~ Walk 2m35s ~ SODO Busway & S Spokane St(99253) ~ BUS 150 10:26 11:08:20 ~ W James St & Lincoln Ave N(80580) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 11:10:20 11:25:42 -98,2,01:17:49,6605,188,10:22:53,11:40:42,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|150|Road to Independence,sound-generations:area_560|kcm:45870|kcm:99253|kcm:80580|pudget-sound-educational:area_622,sound-generations:area_560(area_560) ~ BUS null 10:22:53 10:36:25Walk 0s ~ 4th Ave S & S Spokane St(45870) ~ Walk 2m35s ~ SODO Busway & S Spokane St(99253) ~ BUS 150 10:41 11:23:20 ~ W James St & Lincoln Ave N(80580) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 11:25:20 11:40:42 -98,2,01:17:49,6605,188,10:37:53,11:55:42,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|150|Road to Independence,sound-generations:area_560|kcm:45870|kcm:99253|kcm:80580|pudget-sound-educational:area_622,sound-generations:area_560(area_560) ~ BUS null 10:37:53 10:51:25Walk 0s ~ 4th Ave S & S Spokane St(45870) ~ Walk 2m35s ~ SODO Busway & S Spokane St(99253) ~ BUS 150 10:56 11:38:20 ~ W James St & Lincoln Ave N(80580) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 11:40:20 11:55:42 -99,1,01:59:21,11465,4233,10:10:04,12:09:25,Metro Transit|Sound Transit,BUS,C Line|578,kcm:19862|kcm:539|pierce-transit:20510|pierce-transit:4136,Walk 15m56s ~ SW Alaska St & California Ave SW - Bay 1(19862) ~ BUS C Line 10:26 10:51:13 ~ 3rd Ave & Marion St(539) ~ Walk 2m7s ~ 2nd Ave & Marion St(20510) ~ BUS 578 11:00 11:32 ~ Federal Way TC - Bay 2(4136) ~ Walk 37m25s -99,3,01:54:55,10025,980,10:21:08,12:16:03,Metro Transit|Sound Transit,BUS,128|560|574|181,kcm:31970|kcm:22253|pierce-transit:27940|pierce-transit:13215|pierce-transit:29410|kcm:80433|kcm:83784,Walk 3m8s ~ California Ave SW & SW Spokane St(31970) ~ BUS 128 10:24:16 10:54:33 ~ Delridge Way SW & SW Barton St(22253) ~ Walk 6m ~ SW Roxbury St & 20th Ave SW(27940) ~ BUS 560 11:03 11:26 ~ SeaTac Airport Terminal - Bay 2(13215) ~ BUS 574 11:40 12:00 ~ Federal Way TC - Bay 5(29410) ~ Walk 33s ~ Federal Way TC - Bay 3(80433) ~ BUS 181 12:05 12:12:47 ~ SW 320th St & 1st Ave S(83784) ~ Walk 3m16s -99,2,02:05:59,10581,1658,10:10:04,12:16:03,Metro Transit|Sound Transit,BUS,C Line|578|181,kcm:19862|kcm:539|pierce-transit:20510|pierce-transit:4136|kcm:80433|kcm:83784,Walk 15m56s ~ SW Alaska St & California Ave SW - Bay 1(19862) ~ BUS C Line 10:26 10:51:13 ~ 3rd Ave & Marion St(539) ~ Walk 2m7s ~ 2nd Ave & Marion St(20510) ~ BUS 578 11:00 11:32 ~ Federal Way TC - Bay 2(4136) ~ Walk 37s ~ Federal Way TC - Bay 3(80433) ~ BUS 181 12:05 12:12:47 ~ SW 320th St & 1st Ave S(83784) ~ Walk 3m16s -100,3,01:12:19,7132,535,10:01:32,11:13:51,Metro Transit|Sound Generations|Sound Transit,BUS,Hyde Shuttle|24|578|181,sound-generations:area_560|kcm:30635|kcm:619|pierce-transit:30709|pierce-transit:4136|kcm:80433|kcm:83784,sound-generations:area_560(area_560) ~ BUS null 10:01:32 10:22:28Walk 1m32s ~ 4th Ave S & S Royal Brougham Way(30635) ~ BUS 24 10:26 10:28 ~ 4th Ave S & S Jackson St(619) ~ Walk 1m54s ~ 2nd Ave Ext & Jackson St S(30709) ~ BUS 578 10:33 11:01 ~ Federal Way TC - Bay 2(4136) ~ Walk 37s ~ Federal Way TC - Bay 3(80433) ~ BUS 181 11:04 11:10:35 ~ SW 320th St & 1st Ave S(83784) ~ Walk 3m16s -100,2,01:30:29,7594,494,10:07:53,11:38:22,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|150|Road to Independence,sound-generations:area_560|kcm:45870|kcm:99253|kcm:50779|pudget-sound-educational:area_622,sound-generations:area_560(area_560) ~ BUS null 10:07:53 10:21:25Walk 0s ~ 4th Ave S & S Spokane St(45870) ~ Walk 2m35s ~ SODO Busway & S Spokane St(99253) ~ BUS 150 10:26 11:06:18 ~ W James St & 64th Ave S(50779) ~ Walk 1m10s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 11:09:28 11:35:36Walk 2m46s -100,3,01:32:36,8124,220,10:09:39,11:42:15,Puget Sound Educational Service District|Sound Generations|Sound Transit,BUS,Hyde Shuttle|560|574|Road to Independence,sound-generations:area_560|pierce-transit:15709|pierce-transit:13215|pierce-transit:25846|pudget-sound-educational:area_622,sound-generations:area_560(area_560) ~ BUS null 10:09:39 10:31Walk 0s ~ Westwood Village - Bay 4(15709) ~ BUS 560 10:33 10:58 ~ SeaTac Airport Terminal - Bay 2(13215) ~ BUS 574 11:10 11:22 ~ Star Lake Fwy Station(25846) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 11:24 11:39:29Walk 2m46s -101,2,01:59:23,9816,1162,10:05:53,12:05:16,Metro Transit|Pierce Transit|Sound Transit,BUS,50|594|400,kcm:31970|kcm:99253|pierce-transit:597|pierce-transit:20163|pierce-transit:12938|pierce-transit:8058,Walk 3m8s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:09:01 10:33:54 ~ SODO Busway & S Spokane St(99253) ~ Walk 2s ~ Bus Wy & S Spokane St(597) ~ BUS 594 10:36 11:16 ~ Tacoma Dome Station - Zone E(20163) ~ Walk 1m10s ~ Tacoma Dome Station - Zone C(12938) ~ BUS 400 11:30 11:54 ~ 5th St SW & 9th Ave SW - Red Lot(8058) ~ Walk 11m16s -101,1,02:27:56,12211,2929,10:10:04,12:38:00,Metro Transit|Sound Transit,BUS,C Line|578,kcm:19862|kcm:539|pierce-transit:20510|pierce-transit:10401,Walk 15m56s ~ SW Alaska St & California Ave SW - Bay 1(19862) ~ BUS C Line 10:26 10:51:13 ~ 3rd Ave & Marion St(539) ~ Walk 2m7s ~ 2nd Ave & Marion St(20510) ~ BUS 578 11:00 12:17 ~ Puyallup Station - Bay 3(10401) ~ Walk 21m -101,3,02:08:16,10752,899,10:50:53,12:59:09,Metro Transit|Pierce Transit|Sound Transit,BUS,50|150|578|402,kcm:31970|kcm:99254|kcm:620|pierce-transit:30709|pierce-transit:4136|pierce-transit:29410|pierce-transit:1332,Walk 3m8s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:54:01 11:17 ~ SODO Busway & S Lander St(99254) ~ BUS 150 11:19:40 11:26 ~ 4th Ave S & S Jackson St(620) ~ Walk 1m54s ~ 2nd Ave Ext & Jackson St S(30709) ~ BUS 578 11:33 12:03 ~ Federal Way TC - Bay 2(4136) ~ Walk 1m10s ~ Federal Way TC - Bay 5(29410) ~ BUS 402 12:11 12:53 ~ Meridian S & 9th Ave SW(1332) ~ Walk 6m9s -102,3,01:30:43,8085,354,10:01:32,11:32:15,Metro Transit|Puget Sound Educational Service District|Sound Generations|Sound Transit,BUS,Hyde Shuttle|24|578|Road to Independence,sound-generations:area_560|kcm:30635|kcm:619|pierce-transit:30709|pierce-transit:4136|pudget-sound-educational:area_622,sound-generations:area_560(area_560) ~ BUS null 10:01:32 10:22:28Walk 1m32s ~ 4th Ave S & S Royal Brougham Way(30635) ~ BUS 24 10:26 10:28 ~ 4th Ave S & S Jackson St(619) ~ Walk 1m54s ~ 2nd Ave Ext & Jackson St S(30709) ~ BUS 578 10:33 11:01 ~ Federal Way TC - Bay 2(4136) ~ Walk 1m59s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 11:04:59 11:32:15 -102,2,01:28:52,7268,188,10:07:53,11:36:45,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|150|Road to Independence,sound-generations:area_560|kcm:45870|kcm:99253|kcm:80580|pudget-sound-educational:area_622,sound-generations:area_560(area_560) ~ BUS null 10:07:53 10:21:25Walk 0s ~ 4th Ave S & S Spokane St(45870) ~ Walk 2m35s ~ SODO Busway & S Spokane St(99253) ~ BUS 150 10:26 11:08:20 ~ W James St & Lincoln Ave N(80580) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 11:10:20 11:36:45 -102,2,01:28:52,7268,188,10:22:53,11:51:45,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Hyde Shuttle|150|Road to Independence,sound-generations:area_560|kcm:45870|kcm:99253|kcm:80580|pudget-sound-educational:area_622,sound-generations:area_560(area_560) ~ BUS null 10:22:53 10:36:25Walk 0s ~ 4th Ave S & S Spokane St(45870) ~ Walk 2m35s ~ SODO Busway & S Spokane St(99253) ~ BUS 150 10:41 11:23:20 ~ W James St & Lincoln Ave N(80580) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 11:25:20 11:51:45 -103,4,03:21:55,15791,930,10:35:53,13:57:48,Metro Transit|Sound Transit,BUS,50|C Line|545|224|629,kcm:31970|kcm:33220|kcm:539|kcm:660|kcm:72488|kcm:68803|kcm:64397,Walk 3m8s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:39:01 10:44:45 ~ SW Alaska St & Fauntleroy Way SW(33220) ~ BUS C Line 10:47:29 11:11:13 ~ 3rd Ave & Marion St(539) ~ Walk 2m56s ~ 4th Ave & Madison St(660) ~ BUS 545 11:23:53 12:01:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 12:15:31 12:49 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 13:04 13:51 ~ Railroad Avenue Southeast Ave SE & SE Northern St(64397) ~ Walk 6m48s -103,3,03:27:44,16270,1918,10:30:04,13:57:48,Metro Transit|Sound Transit,BUS,C Line|545|224|629,kcm:19862|kcm:539|kcm:660|kcm:72488|kcm:68803|kcm:64397,Walk 15m56s ~ SW Alaska St & California Ave SW - Bay 1(19862) ~ BUS C Line 10:46 11:11:13 ~ 3rd Ave & Marion St(539) ~ Walk 2m56s ~ 4th Ave & Madison St(660) ~ BUS 545 11:23:53 12:01:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 12:15:31 12:49 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 13:04 13:51 ~ Railroad Avenue Southeast Ave SE & SE Northern St(64397) ~ Walk 6m48s -104,2,01:59:03,9899,1326,10:11:27,12:10:30,Metro Transit|Sound Generations|Sound Transit,BUS,Hyde Shuttle|554|208,sound-generations:area_560|kcm:21850|kcm:1480|kcm:64590|kcm:64593|kcm:64399,sound-generations:area_560(area_560) ~ BUS null 10:11:27 10:33:04Walk 0s ~ Airport Way S & S Royal Brougham Way(21850) ~ Walk 11m6s ~ S Jackson St & Maynard Ave S(1480) ~ BUS 554 10:46:10 11:12 ~ Issaquah Transit Center - Bay 6(64590) ~ Walk 1m1s ~ Issaquah Transit Center - Bay 4(64593) ~ BUS 208 11:31 12:04:49 ~ Railroad Ave SE & SE River St(64399) ~ Walk 5m41s -104,3,03:05:58,13952,530,10:51:50,13:57:48,Metro Transit|Sound Generations|Sound Transit,BUS,Hyde Shuttle|545|224|629,sound-generations:area_560|kcm:21765|kcm:72488|kcm:68803|kcm:64397,sound-generations:area_560(area_560) ~ BUS null 10:51:50 11:14:44Walk 16s ~ 6th Ave S & S Royal Brougham Way(21765) ~ BUS 545 11:17 12:01:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 12:15:31 12:49 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 13:04 13:51 ~ Railroad Avenue Southeast Ave SE & SE Northern St(64397) ~ Walk 6m48s -105,2,01:16:14,7909,2061,10:05:53,11:22:07,Metro Transit,BUS,50|C Line|E Line,kcm:31970|kcm:33220|kcm:558|kcm:6320,Walk 3m8s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:09:01 10:14:45 ~ SW Alaska St & Fauntleroy Way SW(33220) ~ BUS C Line 10:17:29 10:42 ~ 3rd Ave & Seneca St(558) ~ BUS E Line 10:48:24 10:57:02 ~ Aurora Ave N & Lynn St(6320) ~ Walk 25m5s -105,1,01:22:03,8388,3049,10:00:04,11:22:07,Metro Transit,BUS,C Line|E Line,kcm:19862|kcm:558|kcm:6320,Walk 15m56s ~ SW Alaska St & California Ave SW - Bay 1(19862) ~ BUS C Line 10:16 10:42 ~ 3rd Ave & Seneca St(558) ~ BUS E Line 10:48:24 10:57:02 ~ Aurora Ave N & Lynn St(6320) ~ Walk 25m5s -105,1,01:13:34,6683,1448,10:10:04,11:23:38,Metro Transit,BUS,C Line|3,kcm:19862|kcm:558|kcm:41350,Walk 15m56s ~ SW Alaska St & California Ave SW - Bay 1(19862) ~ BUS C Line 10:26 10:52 ~ 3rd Ave & Seneca St(558) ~ BUS 3 10:55:51 11:20:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m3s -106,0,02:47:34,19399,12750,10:00:00,12:47:34,,,,,Walk 2h47m34s -107,1,00:35:46,3643,411,10:05:53,10:41:39,Metro Transit|Sound Transit,BUS|TRAM,50|1-Line,kcm:31970|kcm:99263|sound-transit:99111|sound-transit:99121,Walk 3m8s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:09:01 10:32 ~ SODO Busway & S Lander St(99263) ~ Walk 2m1s ~ SODO Station(99111) ~ TRAM 1-Line 10:38 10:41 ~ Beacon Hill Station(99121) ~ Walk 39s -107,0,00:44:49,4202,1263,10:05:53,10:50:42,Metro Transit,BUS,50,kcm:31970|kcm:30770,Walk 3m8s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:09:01 10:36:46 ~ S Columbian Way & S Spokane St(30770) ~ Walk 13m56s -107,1,00:39:46,3832,334,10:21:53,11:01:39,Metro Transit|Sound Transit,BUS|TRAM,50|1-Line,kcm:31970|kcm:99254|sound-transit:99111|sound-transit:99121,Walk 3m8s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:25:01 10:48 ~ SODO Busway & S Lander St(99254) ~ Walk 49s ~ SODO Station(99111) ~ TRAM 1-Line 10:58 11:01 ~ Beacon Hill Station(99121) ~ Walk 39s -108,1,00:24:25,2725,82,10:07:14,10:31:39,Sound Generations|Sound Transit,BUS|TRAM,Hyde Shuttle|1-Line,sound-generations:area_560|sound-transit:99111|sound-transit:99121,sound-generations:area_560(area_560) ~ BUS null 10:07:14 10:25:30Walk 30s ~ SODO Station(99111) ~ TRAM 1-Line 10:28 10:31 ~ Beacon Hill Station(99121) ~ Walk 39s -108,1,00:24:25,2725,82,10:17:14,10:41:39,Sound Generations|Sound Transit,BUS|TRAM,Hyde Shuttle|1-Line,sound-generations:area_560|sound-transit:99111|sound-transit:99121,sound-generations:area_560(area_560) ~ BUS null 10:17:14 10:35:30Walk 30s ~ SODO Station(99111) ~ TRAM 1-Line 10:38 10:41 ~ Beacon Hill Station(99121) ~ Walk 39s -108,0,00:44:49,4202,1263,10:05:53,10:50:42,Metro Transit,BUS,50,kcm:31970|kcm:30770,Walk 3m8s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:09:01 10:36:46 ~ S Columbian Way & S Spokane St(30770) ~ Walk 13m56s -109,1,01:26:19,8565,2975,10:13:14,11:39:33,Metro Transit|Sound Transit,BUS|RAIL,S Line|160,sound-transit:S_PU_NB|sound-transit:S_KE_NB|kcm:57453|kcm:57185,Walk 19m46s ~ Puyallup Station (Northbound)(S_PU_NB) ~ RAIL S Line 10:33 10:55 ~ Kent Station (Northbound)(S_KE_NB) ~ Walk 1m34s ~ Kent Sounder Station - Bay 3(57453) ~ BUS 160 11:07 11:21:08 ~ 108th Ave SE & SE 220th Pl(57185) ~ Walk 18m25s -109,2,01:54:40,10460,2399,10:14:53,12:09:33,Metro Transit|Pierce Transit|Sound Transit,BUS,400|578|160,pierce-transit:6085|pierce-transit:11956|pierce-transit:10401|pierce-transit:8770|kcm:57774|kcm:57185,Walk 11m7s ~ Fairview Dr & 9th Ave SW Red Lot(6085) ~ BUS 400 10:26 10:29 ~ Puyallup Station - Bay 1(11956) ~ Walk 1m20s ~ Puyallup Station - Bay 3(10401) ~ BUS 578 10:33 11:04 ~ Auburn Station - Bay 3(8770) ~ Walk 25s ~ Auburn Transit Center - Bay 2(57774) ~ BUS 160 11:13 11:51:08 ~ 108th Ave SE & SE 220th Pl(57185) ~ Walk 18m25s -109,1,01:55:37,10364,3032,10:43:56,12:39:33,Metro Transit|Sound Transit,BUS,578|160,pierce-transit:10401|pierce-transit:8770|kcm:57774|kcm:57185,Walk 21m4s ~ Puyallup Station - Bay 3(10401) ~ BUS 578 11:05 11:36 ~ Auburn Station - Bay 3(8770) ~ Walk 25s ~ Auburn Transit Center - Bay 2(57774) ~ BUS 160 11:43 12:21:08 ~ 108th Ave SE & SE 220th Pl(57185) ~ Walk 18m25s -110,2,00:48:12,4694,0,10:08:12,10:56:24,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Road to Independence|160|Hyde Shuttle,pudget-sound-educational:area_622|kcm:57422|kcm:57180|sound-generations:area_558,pudget-sound-educational:area_622(area_622) ~ BUS null 10:08:12 10:43:44Walk 0s ~ 104th Ave SE & SE 240th St(57422) ~ BUS 160 10:45:44 10:50:18 ~ 108th Ave SE & SE 224th St(57180) ~ Walk 0s ~ sound-generations:area_558(area_558) ~ BUS null 10:52:18 10:56:24 -110,2,00:48:02,4684,0,10:11:20,10:59:22,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Road to Independence|183|Hyde Shuttle,pudget-sound-educational:area_622|kcm:58781|kcm:50781|sound-generations:area_558,pudget-sound-educational:area_622(area_622) ~ BUS null 10:11:20 10:36:48Walk 0s ~ W Meeker St & Frager Rd(58781) ~ BUS 183 10:38:48 10:39:48 ~ Reith Rd & Lake Fenwick Rd S(50781) ~ Walk 0s ~ sound-generations:area_558(area_558) ~ BUS null 10:41:48 10:59:22 -110,2,00:45:07,4509,0,10:16:08,11:01:15,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Road to Independence|165|Hyde Shuttle,pudget-sound-educational:area_622|kcm:57090|kcm:57141|sound-generations:area_558,pudget-sound-educational:area_622(area_622) ~ BUS null 10:16:08 10:44:49Walk 0s ~ E James St & Jason Ave N(57090) ~ BUS 165 10:46:49 10:52:44 ~ SE 240th St & 116th Ave SE(57141) ~ Walk 0s ~ sound-generations:area_558(area_558) ~ BUS null 10:54:44 11:01:15 -111,1,01:42:35,9173,2485,10:13:14,11:55:49,Metro Transit|Sound Transit,BUS|RAIL,S Line|165,sound-transit:S_PU_NB|sound-transit:S_KE_NB|kcm:57459|kcm:47570,Walk 19m46s ~ Puyallup Station (Northbound)(S_PU_NB) ~ RAIL S Line 10:33 10:55 ~ Kent Station (Northbound)(S_KE_NB) ~ Walk 1m32s ~ Kent Sounder Station - Bay 9(57459) ~ BUS 165 11:07 11:44 ~ 1st Ave S & SW Normandy Rd(47570) ~ Walk 11m49s -111,2,02:13:56,11235,1898,10:14:53,12:28:49,Metro Transit|Pierce Transit|Sound Transit,BUS,400|574|165,pierce-transit:6085|pierce-transit:20163|pierce-transit:3046|pierce-transit:14363|kcm:21945|kcm:47570,Walk 11m7s ~ Fairview Dr & 9th Ave SW Red Lot(6085) ~ BUS 400 10:26 10:49 ~ Tacoma Dome Station - Zone E(20163) ~ Walk 20s ~ Tacoma Dome Station - Zone A(3046) ~ BUS 574 10:58 11:26 ~ I-5 & Kent - Des Moines Fwy Station(14363) ~ Walk 1m56s ~ Kent Des Moines Park And Ride(21945) ~ BUS 165 11:52 12:17 ~ 1st Ave S & SW Normandy Rd(47570) ~ Walk 11m49s -111,2,02:11:53,11657,2660,10:43:56,12:55:49,Metro Transit|Sound Transit,BUS,578|574|165,pierce-transit:10401|pierce-transit:7910|pierce-transit:12344|pierce-transit:14363|kcm:21945|kcm:47570,Walk 21m4s ~ Puyallup Station - Bay 3(10401) ~ BUS 578 11:05 11:48 ~ Federal Way TC - Bay 7(7910) ~ Walk 31s ~ Federal Way TC - Bay 8(12344) ~ BUS 574 12:00 12:11 ~ I-5 & Kent - Des Moines Fwy Station(14363) ~ Walk 1m56s ~ Kent Des Moines Park And Ride(21945) ~ BUS 165 12:22 12:44 ~ 1st Ave S & SW Normandy Rd(47570) ~ Walk 11m49s -112,2,01:09:25,6167,275,10:05:29,11:14:54,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Road to Independence|A Line|Hyde Shuttle,pudget-sound-educational:area_622|kcm:60750|kcm:60752|sound-generations:area_551,pudget-sound-educational:area_622(area_622) ~ BUS null 10:05:29 10:38:19Walk 1m9s ~ Pacific Hwy S & S 272nd St(60750) ~ BUS A Line 10:41:28 10:42:02 ~ Pacific Hwy S & S 268th St(60752) ~ Walk 2m40s ~ sound-generations:area_551(area_551) ~ BUS null 10:46:42 11:14:54 -112,2,01:09:38,6115,187,10:05:29,11:15:07,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Road to Independence|A Line|Hyde Shuttle,pudget-sound-educational:area_622|kcm:60750|kcm:48949|sound-generations:area_551,pudget-sound-educational:area_622(area_622) ~ BUS null 10:05:29 10:38:19Walk 1m9s ~ Pacific Hwy S & S 272nd St(60750) ~ BUS A Line 10:41:28 10:47:16 ~ Pacific Hwy S & S 240th St(48949) ~ Walk 1m26s ~ sound-generations:area_551(area_551) ~ BUS null 10:50:42 11:15:07 -112,2,01:10:13,6079,88,10:05:29,11:15:42,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Road to Independence|A Line|Hyde Shuttle,pudget-sound-educational:area_622|kcm:60750|kcm:60810|sound-generations:area_551,pudget-sound-educational:area_622(area_622) ~ BUS null 10:05:29 10:38:19Walk 1m9s ~ Pacific Hwy S & S 272nd St(60750) ~ BUS A Line 10:41:28 10:50:38 ~ Pacific Hwy S & S 224th St(60810) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:52:38 11:15:42 -113,1,01:33:37,9135,3185,10:13:14,11:46:51,Metro Transit|Sound Transit,BUS|RAIL,S Line|165,sound-transit:S_PU_NB|sound-transit:S_KE_NB|kcm:57459|kcm:50480,Walk 19m46s ~ Puyallup Station (Northbound)(S_PU_NB) ~ RAIL S Line 10:33 10:55 ~ Kent Station (Northbound)(S_KE_NB) ~ Walk 1m32s ~ Kent Sounder Station - Bay 9(57459) ~ BUS 165 11:07 11:25:38 ~ Pacific Hwy S & Kent Des Moines Rd(50480) ~ Walk 21m13s -113,1,01:35:13,8695,2428,10:13:05,11:48:18,Metro Transit|Pierce Transit,BUS,402|A Line,pierce-transit:1294|pierce-transit:2255|kcm:80438|kcm:60810,Walk 5m55s ~ Meridian S & 9th Ave SE(1294) ~ BUS 402 10:19 10:59 ~ 23rd Ave S & S 322nd St(2255) ~ Walk 8m40s ~ Federal Way TC - Bay 8(80438) ~ BUS A Line 11:10 11:30:46 ~ Pacific Hwy S & S 224th St(60810) ~ Walk 17m32s -113,2,01:43:25,9648,2235,10:14:53,11:58:18,Metro Transit|Pierce Transit|Sound Transit,BUS,400|574|A Line,pierce-transit:6085|pierce-transit:20163|pierce-transit:3046|pierce-transit:12344|kcm:80438|kcm:60810,Walk 11m7s ~ Fairview Dr & 9th Ave SW Red Lot(6085) ~ BUS 400 10:26 10:49 ~ Tacoma Dome Station - Zone E(20163) ~ Walk 20s ~ Tacoma Dome Station - Zone A(3046) ~ BUS 574 10:58 11:15 ~ Federal Way TC - Bay 8(12344) ~ Walk 44s ~ Federal Way TC - Bay 8(80438) ~ BUS A Line 11:20 11:40:46 ~ Pacific Hwy S & S 224th St(60810) ~ Walk 17m32s -114,2,00:51:40,4966,88,10:05:29,10:57:09,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Road to Independence|A Line|Hyde Shuttle,pudget-sound-educational:area_622|kcm:60750|kcm:60800|sound-generations:area_551,pudget-sound-educational:area_622(area_622) ~ BUS null 10:05:29 10:38:19Walk 1m9s ~ Pacific Hwy S & S 272nd St(60750) ~ BUS A Line 10:41:28 10:49 ~ Pacific Hwy S & Kent Des Moines Rd(60800) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:51 10:57:09 -114,2,00:49:02,4744,0,10:13:32,11:02:34,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Road to Independence|165|Hyde Shuttle,pudget-sound-educational:area_622|kcm:50755|kcm:53506|sound-generations:area_551,pudget-sound-educational:area_622(area_622) ~ BUS null 10:13:32 10:38:22Walk 0s ~ W Meeker St & Washington Ave N(50755) ~ BUS 165 10:40:22 10:54:27 ~ Kent Des Moines Rd & I-5 Ramp(53506) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:56:27 11:02:34 -114,2,00:51:40,4966,88,10:15:29,11:07:09,Metro Transit|Puget Sound Educational Service District|Sound Generations,BUS,Road to Independence|A Line|Hyde Shuttle,pudget-sound-educational:area_622|kcm:60750|kcm:60800|sound-generations:area_551,pudget-sound-educational:area_622(area_622) ~ BUS null 10:15:29 10:48:19Walk 1m9s ~ Pacific Hwy S & S 272nd St(60750) ~ BUS A Line 10:51:28 10:59 ~ Pacific Hwy S & Kent Des Moines Rd(60800) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 11:01 11:07:09 -115,1,00:59:23,6042,1759,10:13:14,11:12:37,Metro Transit|Sound Transit,BUS|RAIL,S Line|160,sound-transit:S_PU_NB|sound-transit:S_AU_NB|kcm:57774|kcm:57915,Walk 19m46s ~ Puyallup Station (Northbound)(S_PU_NB) ~ RAIL S Line 10:33 10:48 ~ Auburn Station (Northbound)(S_AU_NB) ~ Walk 1m19s ~ Auburn Transit Center - Bay 2(57774) ~ BUS 160 10:58 11:09:49 ~ Auburn Way N & 37th St NE(57915) ~ Walk 2m48s -115,2,01:12:44,7039,1184,10:14:53,11:27:37,Metro Transit|Pierce Transit|Sound Transit,BUS,400|578|160,pierce-transit:6085|pierce-transit:11956|pierce-transit:10401|pierce-transit:8770|kcm:57774|kcm:57915,Walk 11m7s ~ Fairview Dr & 9th Ave SW Red Lot(6085) ~ BUS 400 10:26 10:29 ~ Puyallup Station - Bay 1(11956) ~ Walk 1m20s ~ Puyallup Station - Bay 3(10401) ~ BUS 578 10:33 11:04 ~ Auburn Station - Bay 3(8770) ~ Walk 25s ~ Auburn Transit Center - Bay 2(57774) ~ BUS 160 11:13 11:24:49 ~ Auburn Way N & 37th St NE(57915) ~ Walk 2m48s -115,1,01:13:41,6943,1817,10:43:56,11:57:37,Metro Transit|Sound Transit,BUS,578|160,pierce-transit:10401|pierce-transit:8770|kcm:57774|kcm:57915,Walk 21m4s ~ Puyallup Station - Bay 3(10401) ~ BUS 578 11:05 11:36 ~ Auburn Station - Bay 3(8770) ~ Walk 25s ~ Auburn Transit Center - Bay 2(57774) ~ BUS 160 11:43 11:54:49 ~ Auburn Way N & 37th St NE(57915) ~ Walk 2m48s -116,1,00:38:51,3856,440,10:13:05,10:51:56,Pierce Transit|Puget Sound Educational Service District,BUS,402|Road to Independence,pierce-transit:1294|pierce-transit:1341|pudget-sound-educational:area_622,Walk 5m55s ~ Meridian S & 9th Ave SE(1294) ~ BUS 402 10:19 10:28 ~ Meridian N & Valley Ave E(1341) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:30 10:51:56 -116,2,00:36:00,3970,13,10:15:56,10:51:56,Pierce Transit|Puget Sound Educational Service District,BUS,Road to Independence|402|Road to Independence,pudget-sound-educational:area_622|pierce-transit:27124|pierce-transit:1341|pudget-sound-educational:area_622,pudget-sound-educational:area_622(area_622) ~ BUS null 10:15:56 10:18:45Walk 15s ~ 3rd St SE & 4th Ave SE(27124) ~ BUS 402 10:21 10:28 ~ Meridian N & Valley Ave E(1341) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:30 10:51:56 -116,2,00:42:07,4332,4,10:20:12,11:02:19,Pierce Transit|Puget Sound Educational Service District,BUS,Road to Independence|400|Road to Independence,pudget-sound-educational:area_622|pierce-transit:6085|pierce-transit:2626|pudget-sound-educational:area_622,pudget-sound-educational:area_622(area_622) ~ BUS null 10:20:12 10:23:57Walk 3s ~ Fairview Dr & 9th Ave SW Red Lot(6085) ~ BUS 400 10:26 10:31 ~ Stewart Ave W & 15th St NW(2626) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:33 11:02:19 -117,1,01:00:46,5578,991,10:13:05,11:13:51,Metro Transit|Pierce Transit,BUS,402|181,pierce-transit:1294|pierce-transit:2255|kcm:60638|kcm:83784,Walk 5m55s ~ Meridian S & 9th Ave SE(1294) ~ BUS 402 10:19 10:59 ~ 23rd Ave S & S 322nd St(2255) ~ Walk 3m56s ~ S 320th St & 23rd Ave S(60638) ~ BUS 181 11:05:23 11:10:35 ~ SW 320th St & 1st Ave S(83784) ~ Walk 3m16s -117,0,01:15:13,7182,2826,10:13:05,11:28:18,Pierce Transit,BUS,402,pierce-transit:1294|pierce-transit:2267,Walk 5m55s ~ Meridian S & 9th Ave SE(1294) ~ BUS 402 10:19 10:57 ~ 324th St S & 17th Ave S(2267) ~ Walk 31m18s -117,2,01:27:01,7922,1228,10:14:53,11:41:54,Metro Transit|Pierce Transit|Sound Transit,BUS,400|574|187,pierce-transit:6085|pierce-transit:20163|pierce-transit:3046|pierce-transit:12344|kcm:80433|kcm:83784,Walk 11m7s ~ Fairview Dr & 9th Ave SW Red Lot(6085) ~ BUS 400 10:26 10:49 ~ Tacoma Dome Station - Zone E(20163) ~ Walk 20s ~ Tacoma Dome Station - Zone A(3046) ~ BUS 574 10:58 11:15 ~ Federal Way TC - Bay 8(12344) ~ Walk 1m51s ~ Federal Way TC - Bay 3(80433) ~ BUS 187 11:32 11:38:38 ~ SW 320th St & 1st Ave S(83784) ~ Walk 3m16s -118,1,00:38:55,3727,254,10:02:59,10:41:54,Metro Transit|Puget Sound Educational Service District,BUS,Road to Independence|187,pudget-sound-educational:area_622|kcm:60640|kcm:83784,pudget-sound-educational:area_622(area_622) ~ BUS null 10:02:59 10:32:51Walk 0s ~ S 320th St & 20th Ave S(60640) ~ BUS 187 10:34:51 10:38:38 ~ SW 320th St & 1st Ave S(83784) ~ Walk 3m16s -118,1,00:39:02,3734,254,10:04:49,10:43:51,Metro Transit|Puget Sound Educational Service District,BUS,Road to Independence|181,pudget-sound-educational:area_622|kcm:83663|kcm:83784,pudget-sound-educational:area_622(area_622) ~ BUS null 10:04:49 10:28:20Walk 0s ~ S 320th St & Military Rd S(83663) ~ BUS 181 10:30:20 10:40:35 ~ SW 320th St & 1st Ave S(83784) ~ Walk 3m16s -118,1,00:51:42,4792,660,10:13:05,11:04:47,Pierce Transit|Puget Sound Educational Service District,BUS,402|Road to Independence,pierce-transit:1294|pierce-transit:1341|pudget-sound-educational:area_622,Walk 5m55s ~ Meridian S & 9th Ave SE(1294) ~ BUS 402 10:19 10:28 ~ Meridian N & Valley Ave E(1341) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 10:30 11:02:01Walk 2m46s -119,2,01:59:01,10704,2381,10:13:14,12:12:15,Metro Transit|Sound Transit,BUS|RAIL,S Line|C Line|128,sound-transit:S_PU_NB|sound-transit:S_KS|kcm:1562|kcm:20041|kcm:32011|kcm:31871,Walk 19m46s ~ Puyallup Station (Northbound)(S_PU_NB) ~ RAIL S Line 10:33 11:22 ~ King Street Station(S_KS) ~ Walk 9m13s ~ Alaskan Way S & S Jackson St(1562) ~ BUS C Line 11:38:40 11:58 ~ SW Alaska St & California Ave SW - Bay 3(20041) ~ Walk 42s ~ SW Alaska St & 44th Ave SW - Bay 4(32011) ~ BUS 128 12:05 12:08:50 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m25s -119,1,02:00:39,10876,3299,10:13:14,12:13:53,Metro Transit|Sound Transit,BUS|RAIL,S Line|C Line,sound-transit:S_PU_NB|sound-transit:S_KS|kcm:1562|kcm:20041,Walk 19m46s ~ Puyallup Station (Northbound)(S_PU_NB) ~ RAIL S Line 10:33 11:22 ~ King Street Station(S_KS) ~ Walk 9m13s ~ Alaskan Way S & S Jackson St(1562) ~ BUS C Line 11:38:40 11:58 ~ SW Alaska St & California Ave SW - Bay 3(20041) ~ Walk 15m53s -119,2,02:04:07,10154,1239,10:14:53,12:19:00,Metro Transit|Pierce Transit|Sound Transit,BUS,400|594|50,pierce-transit:6085|pierce-transit:20163|pierce-transit:27454|pierce-transit:593|kcm:99261|kcm:31871,Walk 11m7s ~ Fairview Dr & 9th Ave SW Red Lot(6085) ~ BUS 400 10:26 10:49 ~ Tacoma Dome Station - Zone E(20163) ~ Walk 47s ~ Tacoma Dome Station - Zone B(27454) ~ BUS 594 11:07 11:47 ~ Bus Wy & Lander St(593) ~ Walk 1m31s ~ S Lander St & SODO Busway(99261) ~ BUS 50 11:52 12:15:35 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m25s -121,2,03:28:44,16046,2378,10:43:56,14:12:40,Metro Transit|Sound Transit,BUS,578|554|208,pierce-transit:10401|pierce-transit:13217|kcm:280|kcm:64590|kcm:64593|kcm:64399,Walk 21m4s ~ Puyallup Station - Bay 3(10401) ~ BUS 578 11:05 12:21 ~ 4th Ave & Pike St(13217) ~ Walk 4m17s ~ 2nd Ave & Stewart St(280) ~ BUS 554 12:37:53 13:12 ~ Issaquah Transit Center - Bay 6(64590) ~ Walk 1m1s ~ Issaquah Transit Center - Bay 4(64593) ~ BUS 208 13:30 14:06:59 ~ Railroad Ave SE & SE River St(64399) ~ Walk 5m41s -121,4,04:18:43,19355,1128,11:18:05,15:36:48,Metro Transit|Pierce Transit|Sound Transit,BUS,402|578|545|224|629,pierce-transit:1294|pierce-transit:11956|pierce-transit:10401|pierce-transit:13217|kcm:700|kcm:72488|kcm:68803|kcm:64397,Walk 5m55s ~ Meridian S & 9th Ave SE(1294) ~ BUS 402 11:24 11:29 ~ Puyallup Station - Bay 1(11956) ~ Walk 1m20s ~ Puyallup Station - Bay 3(10401) ~ BUS 578 11:35 12:52 ~ 4th Ave & Pike St(13217) ~ Walk 1m11s ~ 4th Ave & Pike St(700) ~ BUS 545 12:56 13:31:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 13:54:31 14:28 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 14:43 15:30 ~ Railroad Avenue Southeast Ave SE & SE Northern St(64397) ~ Walk 6m48s -121,3,04:22:52,19746,2160,11:13:56,15:36:48,Metro Transit|Sound Transit,BUS,578|545|224|629,pierce-transit:10401|pierce-transit:13217|kcm:700|kcm:72488|kcm:68803|kcm:64397,Walk 21m4s ~ Puyallup Station - Bay 3(10401) ~ BUS 578 11:35 12:52 ~ 4th Ave & Pike St(13217) ~ Walk 1m11s ~ 4th Ave & Pike St(700) ~ BUS 545 12:56 13:31:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 13:54:31 14:28 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 14:43 15:30 ~ Railroad Avenue Southeast Ave SE & SE Northern St(64397) ~ Walk 6m48s -122,5,03:43:14,17135,199,10:12:57,13:56:11,Metro Transit|Puget Sound Educational Service District|Snoqualmie Valley Transportation|Sound Transit,BUS,Road to Independence|578|545|224|629|Dial-A-Ride,pudget-sound-educational:area_622|pierce-transit:7910|pierce-transit:13217|kcm:700|kcm:72488|kcm:68803|kcm:64366|snoqualmie-flex:area_486,pudget-sound-educational:area_622(area_622) ~ BUS null 10:12:57 10:42:20Walk 1m40s ~ Federal Way TC - Bay 7(7910) ~ BUS 578 10:46 11:19 ~ 4th Ave & Pike St(13217) ~ Walk 1m11s ~ 4th Ave & Pike St(700) ~ BUS 545 11:26 12:01:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 12:15:31 12:49 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 13:04 13:25:48 ~ Sr 203 & NE 40th St(64366) ~ Walk 8s ~ snoqualmie-flex:area_485(area_485) ~ BUS null 13:27:56 13:56:11 -122,4,03:44:51,17003,700,10:12:57,13:57:48,Metro Transit|Puget Sound Educational Service District|Sound Transit,BUS,Road to Independence|578|545|224|629,pudget-sound-educational:area_622|pierce-transit:7910|pierce-transit:13217|kcm:700|kcm:72488|kcm:68803|kcm:64397,pudget-sound-educational:area_622(area_622) ~ BUS null 10:12:57 10:42:20Walk 1m40s ~ Federal Way TC - Bay 7(7910) ~ BUS 578 10:46 11:19 ~ 4th Ave & Pike St(13217) ~ Walk 1m11s ~ 4th Ave & Pike St(700) ~ BUS 545 11:26 12:01:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 12:15:31 12:49 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 13:04 13:51 ~ Railroad Avenue Southeast Ave SE & SE Northern St(64397) ~ Walk 6m48s -122,3,02:57:43,13723,918,11:14:57,14:12:40,Metro Transit|Puget Sound Educational Service District|Sound Transit,BUS,Road to Independence|578|554|208,pudget-sound-educational:area_622|pierce-transit:7910|pierce-transit:13217|kcm:280|kcm:64590|kcm:64593|kcm:64399,pudget-sound-educational:area_622(area_622) ~ BUS null 11:14:57 11:44:20Walk 1m40s ~ Federal Way TC - Bay 7(7910) ~ BUS 578 11:48 12:21 ~ 4th Ave & Pike St(13217) ~ Walk 4m17s ~ 2nd Ave & Stewart St(280) ~ BUS 554 12:37:53 13:12 ~ Issaquah Transit Center - Bay 6(64590) ~ Walk 1m1s ~ Issaquah Transit Center - Bay 4(64593) ~ BUS 208 13:30 14:06:59 ~ Railroad Ave SE & SE River St(64399) ~ Walk 5m41s -123,1,01:55:24,9941,2506,10:13:14,12:08:38,Metro Transit|Sound Transit,BUS|RAIL,S Line|3,sound-transit:S_PU_NB|sound-transit:S_KS|kcm:1540|kcm:41350,Walk 19m46s ~ Puyallup Station (Northbound)(S_PU_NB) ~ RAIL S Line 10:33 11:22 ~ King Street Station(S_KS) ~ Walk 11m5s ~ James St & 5th Ave(1540) ~ BUS 3 11:36 12:05:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m3s -123,2,02:08:45,10516,1351,10:14:53,12:23:38,Metro Transit|Pierce Transit|Sound Transit,BUS,400|578|3,pierce-transit:6085|pierce-transit:11956|pierce-transit:10401|pierce-transit:13217|kcm:575|kcm:41350,Walk 11m7s ~ Fairview Dr & 9th Ave SW Red Lot(6085) ~ BUS 400 10:26 10:29 ~ Puyallup Station - Bay 1(11956) ~ Walk 1m20s ~ Puyallup Station - Bay 3(10401) ~ BUS 578 10:33 11:49 ~ 4th Ave & Pike St(13217) ~ Walk 2m32s ~ 3rd Ave & Pike St(575) ~ BUS 3 11:58 12:20:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m3s -123,1,02:07:42,10300,1984,10:43:56,12:51:38,Metro Transit|Sound Transit,BUS,578|3,pierce-transit:10401|pierce-transit:13217|kcm:575|kcm:41350,Walk 21m4s ~ Puyallup Station - Bay 3(10401) ~ BUS 578 11:05 12:21 ~ 4th Ave & Pike St(13217) ~ Walk 2m32s ~ 3rd Ave & Pike St(575) ~ BUS 3 12:26 12:48:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m3s -124,1,01:55:24,9941,2506,10:13:14,12:08:38,Metro Transit|Sound Transit,BUS|RAIL,S Line|3,sound-transit:S_PU_NB|sound-transit:S_KS|kcm:1540|kcm:41350,Walk 19m46s ~ Puyallup Station (Northbound)(S_PU_NB) ~ RAIL S Line 10:33 11:22 ~ King Street Station(S_KS) ~ Walk 11m5s ~ James St & 5th Ave(1540) ~ BUS 3 11:36 12:05:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m3s -124,1,02:08:55,10177,1715,10:43:56,12:52:51,Sound Generations|Sound Transit,BUS,578|Hyde Shuttle,pierce-transit:10401|pierce-transit:24330|sound-generations:area_555,Walk 21m4s ~ Puyallup Station - Bay 3(10401) ~ BUS 578 11:05 12:30 ~ Howell St & Yale Ave(24330) ~ Walk 2m3s ~ sound-generations:area_555(area_555) ~ BUS null 12:34:03 12:52:51 -124,1,02:09:55,10237,1715,11:13:56,13:23:51,Sound Generations|Sound Transit,BUS,578|Hyde Shuttle,pierce-transit:10401|pierce-transit:24330|sound-generations:area_555,Walk 21m4s ~ Puyallup Station - Bay 3(10401) ~ BUS 578 11:35 13:01 ~ Howell St & Yale Ave(24330) ~ Walk 2m3s ~ sound-generations:area_555(area_555) ~ BUS null 13:05:03 13:23:51 -125,1,01:28:25,8208,2340,10:13:14,11:41:39,Sound Transit,RAIL|TRAM,S Line|1-Line,sound-transit:S_PU_NB|sound-transit:S_KS|sound-transit:99101|sound-transit:99121,Walk 19m46s ~ Puyallup Station (Northbound)(S_PU_NB) ~ RAIL S Line 10:33 11:22 ~ King Street Station(S_KS) ~ Walk 11m18s ~ Stadium Station(99101) ~ TRAM 1-Line 11:36 11:41 ~ Beacon Hill Station(99121) ~ Walk 39s -125,0,01:47:21,10186,4338,10:13:14,12:00:35,Sound Transit,RAIL,S Line,sound-transit:S_PU_NB|sound-transit:S_KS,Walk 19m46s ~ Puyallup Station (Northbound)(S_PU_NB) ~ RAIL S Line 10:33 11:22 ~ King Street Station(S_KS) ~ Walk 38m35s -125,2,01:46:46,8936,989,10:14:53,12:01:39,Pierce Transit|Sound Transit,BUS|TRAM,400|594|1-Line,pierce-transit:6085|pierce-transit:20163|pierce-transit:27454|pierce-transit:593|sound-transit:99111|sound-transit:99121,Walk 11m7s ~ Fairview Dr & 9th Ave SW Red Lot(6085) ~ BUS 400 10:26 10:49 ~ Tacoma Dome Station - Zone E(20163) ~ Walk 47s ~ Tacoma Dome Station - Zone B(27454) ~ BUS 594 11:07 11:47 ~ Bus Wy & Lander St(593) ~ Walk 46s ~ SODO Station(99111) ~ TRAM 1-Line 11:58 12:01 ~ Beacon Hill Station(99121) ~ Walk 39s -126,2,01:24:12,6955,138,10:07:27,11:31:39,Metro Transit|Puget Sound Educational Service District|Sound Transit,BUS|TRAM,Road to Independence|150|1-Line,pudget-sound-educational:area_622|kcm:59773|kcm:99254|sound-transit:99111|sound-transit:99121,pudget-sound-educational:area_622(area_622) ~ BUS null 10:07:27 10:32:31Walk 27s ~ W James St & Lincoln Ave N(59773) ~ BUS 150 10:34:58 11:19:40 ~ SODO Busway & S Lander St(99254) ~ Walk 49s ~ SODO Station(99111) ~ TRAM 1-Line 11:28 11:31 ~ Beacon Hill Station(99121) ~ Walk 39s -126,2,01:19:12,6655,138,10:22:27,11:41:39,Metro Transit|Puget Sound Educational Service District|Sound Transit,BUS|TRAM,Road to Independence|150|1-Line,pudget-sound-educational:area_622|kcm:59773|kcm:99254|sound-transit:99111|sound-transit:99121,pudget-sound-educational:area_622(area_622) ~ BUS null 10:22:27 10:47:31Walk 27s ~ W James St & Lincoln Ave N(59773) ~ BUS 150 10:49:58 11:34:40 ~ SODO Busway & S Lander St(99254) ~ Walk 49s ~ SODO Station(99111) ~ TRAM 1-Line 11:38 11:41 ~ Beacon Hill Station(99121) ~ Walk 39s -126,2,01:16:47,7129,987,10:24:52,11:41:39,Puget Sound Educational Service District|Sound Transit,BUS|RAIL|TRAM,Road to Independence|S Line|1-Line,pudget-sound-educational:area_622|sound-transit:S_KE_NB|sound-transit:S_KS|sound-transit:99101|sound-transit:99121,pudget-sound-educational:area_622(area_622) ~ BUS null 10:24:52 10:51:23Walk 1m37s ~ Kent Station (Northbound)(S_KE_NB) ~ RAIL S Line 10:55 11:22 ~ King Street Station(S_KS) ~ Walk 11m18s ~ Stadium Station(99101) ~ TRAM 1-Line 11:36 11:41 ~ Beacon Hill Station(99121) ~ Walk 39s -127,3,02:50:16,14302,2282,10:31:35,13:21:51,Metro Transit|Sound Transit,BUS,208|554|240|160,kcm:82425|kcm:64448|kcm:64502|kcm:67019|kcm:67015|kcm:46478|kcm:46465|kcm:57375,Walk 4m ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 11:00 ~ SE Bush St & Rainier Blvd S(64448) ~ Walk 3m19s ~ E Sunset Way & 1st Ave NE(64502) ~ BUS 554 11:22 11:38 ~ I-90 Expressway Ramp & 142nd Pl SE - Bay 3(67019) ~ Walk 3m25s ~ Eastgate Park & Ride Acs & 140th Ave SE - Bay 2(67015) ~ BUS 240 11:48 12:30 ~ Renton Transit Center - Bay 3(46478) ~ Walk 1m42s ~ Renton Transit Center - Bay 8(46465) ~ BUS 160 12:34 13:03:29 ~ 108th Ave SE & SE 220th Pl(57375) ~ Walk 18m22s -129,5,02:39:01,14368,1606,10:31:35,13:10:36,Metro Transit|Sound Transit,BUS|TRAM,208|554|7|1-Line|F Line|165,kcm:82425|kcm:64448|kcm:64502|kcm:8494|kcm:8590|kcm:8681|sound-transit:55949|sound-transit:99900|kcm:60923|kcm:53720|kcm:53975|kcm:48620,Walk 4m ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 11:00 ~ SE Bush St & Rainier Blvd S(64448) ~ Walk 3m19s ~ E Sunset Way & 1st Ave NE(64502) ~ BUS 554 11:22 11:52 ~ Rainier Ave S & S Charles St(8494) ~ Walk 1m31s ~ Rainier Ave S & S Charles St(8590) ~ BUS 7 12:01:06 12:08 ~ Rainier Ave S & S Forest St - Bay 4(8681) ~ Walk 2m40s ~ Mount Baker Station(55949) ~ TRAM 1-Line 12:13 12:33 ~ Tukwila Int'l Blvd Station(99900) ~ Walk 1m11s ~ Tukwila International Blvd Station - Bay 3(60923) ~ BUS F Line 12:37 12:48:59 ~ 4th Ave SW & SW 156th St(53720) ~ Walk 9s ~ 4th Ave SW & SW 156th St(53975) ~ BUS 165 12:54:44 13:00:26 ~ 1st Ave S & SW 178th St(48620) ~ Walk 10m10s -129,4,02:55:51,16445,3874,10:31:35,13:27:26,Metro Transit|Sound Transit,BUS|TRAM,208|554|7|1-Line|F Line,kcm:82425|kcm:64448|kcm:64502|kcm:8494|kcm:8590|kcm:8681|sound-transit:55949|sound-transit:99900|kcm:60923|kcm:47646,Walk 4m ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 11:00 ~ SE Bush St & Rainier Blvd S(64448) ~ Walk 3m19s ~ E Sunset Way & 1st Ave NE(64502) ~ BUS 554 11:22 11:52 ~ Rainier Ave S & S Charles St(8494) ~ Walk 1m31s ~ Rainier Ave S & S Charles St(8590) ~ BUS 7 12:01:06 12:08 ~ Rainier Ave S & S Forest St - Bay 4(8681) ~ Walk 2m40s ~ Mount Baker Station(55949) ~ TRAM 1-Line 12:13 12:33 ~ Tukwila Int'l Blvd Station(99900) ~ Walk 1m11s ~ Tukwila International Blvd Station - Bay 3(60923) ~ BUS F Line 12:37 12:48:05 ~ SW 156th St & 2nd Ave SW(47646) ~ Walk 39m21s -129,3,03:09:05,15638,2601,10:31:35,13:40:40,Metro Transit|Sound Transit,BUS,208|554|150|156,kcm:82425|kcm:64448|kcm:64502|kcm:620|kcm:390|kcm:59312|kcm:50250,Walk 4m ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 11:00 ~ SE Bush St & Rainier Blvd S(64448) ~ Walk 3m19s ~ E Sunset Way & 1st Ave NE(64502) ~ BUS 554 11:22 12:00 ~ 4th Ave S & S Jackson St(620) ~ Walk 1m52s ~ 2nd Ave Ext S & S Jackson St(390) ~ BUS 150 12:17 12:47 ~ Andover Park W & Baker Blvd - Bay 1(59312) ~ BUS 156 12:55 13:15:01 ~ 8th Ave S & Des Moines Memorial Dr S(50250) ~ Walk 25m39s -131,4,02:41:30,14267,2098,10:31:35,13:13:05,Metro Transit|Sound Transit,BUS|TRAM,208|554|7|1-Line|A Line,kcm:82425|kcm:64448|kcm:64502|kcm:8494|kcm:8590|kcm:8681|sound-transit:55949|sound-transit:99913|kcm:61120|kcm:61170,Walk 4m ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 11:00 ~ SE Bush St & Rainier Blvd S(64448) ~ Walk 3m19s ~ E Sunset Way & 1st Ave NE(64502) ~ BUS 554 11:22 11:52 ~ Rainier Ave S & S Charles St(8494) ~ Walk 1m31s ~ Rainier Ave S & S Charles St(8590) ~ BUS 7 12:01:06 12:08 ~ Rainier Ave S & S Forest St - Bay 4(8681) ~ Walk 2m40s ~ Mount Baker Station(55949) ~ TRAM 1-Line 12:13 12:40 ~ Angle Lake Station(99913) ~ Walk 2m18s ~ International Blvd & S 200th St(61120) ~ BUS A Line 12:51:37 12:57:09 ~ Pacific Hwy S & S 224th St(61170) ~ Walk 15m56s -131,3,02:51:30,14724,2807,10:31:35,13:23:05,Metro Transit|Sound Transit,BUS|TRAM,208|554|1-Line|A Line,kcm:82425|kcm:64448|kcm:64502|kcm:620|sound-transit:99101|sound-transit:99913|kcm:61120|kcm:61170,Walk 4m ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 11:00 ~ SE Bush St & Rainier Blvd S(64448) ~ Walk 3m19s ~ E Sunset Way & 1st Ave NE(64502) ~ BUS 554 11:22 12:00 ~ 4th Ave S & S Jackson St(620) ~ Walk 12m33s ~ Stadium Station(99101) ~ TRAM 1-Line 12:16 12:50 ~ Angle Lake Station(99913) ~ Walk 2m18s ~ International Blvd & S 200th St(61120) ~ BUS A Line 13:01:37 13:07:09 ~ Pacific Hwy S & S 224th St(61170) ~ Walk 15m56s -131,3,03:06:26,14542,1314,10:31:35,13:38:01,Metro Transit|Sound Transit,BUS,208|554|150|156,kcm:82425|kcm:64448|kcm:64502|kcm:620|kcm:390|kcm:59312|kcm:50450,Walk 4m ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 11:00 ~ SE Bush St & Rainier Blvd S(64448) ~ Walk 3m19s ~ E Sunset Way & 1st Ave NE(64502) ~ BUS 554 11:22 12:00 ~ 4th Ave S & S Jackson St(620) ~ Walk 1m52s ~ 2nd Ave Ext S & S Jackson St(390) ~ BUS 150 12:17 12:47 ~ Andover Park W & Baker Blvd - Bay 1(59312) ~ BUS 156 12:55 13:29:16 ~ 24th Ave S & S 226th St(50450) ~ Walk 8m45s -133,3,03:03:32,14057,898,10:31:35,13:35:07,Metro Transit|Sound Transit,BUS,208|554|150|160,kcm:82425|kcm:64448|kcm:64502|kcm:620|kcm:390|kcm:57455|kcm:57451|kcm:58255,Walk 4m ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 11:00 ~ SE Bush St & Rainier Blvd S(64448) ~ Walk 3m19s ~ E Sunset Way & 1st Ave NE(64502) ~ BUS 554 11:22 12:00 ~ 4th Ave S & S Jackson St(620) ~ Walk 1m52s ~ 2nd Ave Ext S & S Jackson St(390) ~ BUS 150 12:17 13:13 ~ Kent Sounder Station - Bay 5(57455) ~ Walk 44s ~ Kent Sounder Station - Bay 1(57451) ~ BUS 160 13:21 13:32:20 ~ Auburn Way N & 37th St NE(58255) ~ Walk 2m47s -135,3,02:45:04,12993,948,10:31:35,13:16:39,Metro Transit|Sound Transit,BUS,208|554|577|181,kcm:82425|kcm:64448|kcm:64502|kcm:620|pierce-transit:30709|pierce-transit:4136|kcm:80433|kcm:83784,Walk 4m ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 11:00 ~ SE Bush St & Rainier Blvd S(64448) ~ Walk 3m19s ~ E Sunset Way & 1st Ave NE(64502) ~ BUS 554 11:22 12:00 ~ 4th Ave S & S Jackson St(620) ~ Walk 1m54s ~ 2nd Ave Ext & Jackson St S(30709) ~ BUS 577 12:17 12:47 ~ Federal Way TC - Bay 2(4136) ~ Walk 37s ~ Federal Way TC - Bay 3(80433) ~ BUS 181 13:05 13:13:23 ~ SW 320th St & 1st Ave S(83784) ~ Walk 3m16s -135,2,02:52:50,14741,3523,10:31:35,13:24:25,Metro Transit|Sound Transit,BUS,208|554|577,kcm:82425|kcm:64448|kcm:64502|kcm:620|pierce-transit:30709|pierce-transit:4136,Walk 4m ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 11:00 ~ SE Bush St & Rainier Blvd S(64448) ~ Walk 3m19s ~ E Sunset Way & 1st Ave NE(64502) ~ BUS 554 11:22 12:00 ~ 4th Ave S & S Jackson St(620) ~ Walk 1m54s ~ 2nd Ave Ext & Jackson St S(30709) ~ BUS 577 12:17 12:47 ~ Federal Way TC - Bay 2(4136) ~ Walk 37m25s -137,3,02:17:25,11313,944,10:31:35,12:49:00,Metro Transit|Sound Transit,BUS,208|554|125|50,kcm:82425|kcm:64448|kcm:64502|kcm:648|kcm:481|kcm:21990|kcm:31871,Walk 4m ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 11:00 ~ SE Bush St & Rainier Blvd S(64448) ~ Walk 3m19s ~ E Sunset Way & 1st Ave NE(64502) ~ BUS 554 11:22 12:02:35 ~ 4th Ave & Cherry St(648) ~ Walk 2m48s ~ 3rd Ave & Columbia St(481) ~ BUS 125 12:08 12:18 ~ Delridge Way SW & SW Andover St(21990) ~ BUS 50 12:30 12:45:35 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m25s -137,2,02:18:23,12259,3027,10:31:35,12:49:58,Metro Transit|Sound Transit,BUS,208|554|125,kcm:82425|kcm:64448|kcm:64502|kcm:648|kcm:481|kcm:21990,Walk 4m ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 11:00 ~ SE Bush St & Rainier Blvd S(64448) ~ Walk 3m19s ~ E Sunset Way & 1st Ave NE(64502) ~ BUS 554 11:22 12:02:35 ~ 4th Ave & Cherry St(648) ~ Walk 2m48s ~ 3rd Ave & Columbia St(481) ~ BUS 125 12:08 12:18 ~ Delridge Way SW & SW Andover St(21990) ~ Walk 31m58s -137,2,02:22:18,11723,1917,10:31:35,12:53:53,Metro Transit|Sound Transit,BUS,208|554|C Line,kcm:82425|kcm:64448|kcm:64502|kcm:648|kcm:481|kcm:20041,Walk 4m ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 11:00 ~ SE Bush St & Rainier Blvd S(64448) ~ Walk 3m19s ~ E Sunset Way & 1st Ave NE(64502) ~ BUS 554 11:22 12:02:35 ~ 4th Ave & Cherry St(648) ~ Walk 2m48s ~ 3rd Ave & Columbia St(481) ~ BUS C Line 12:17 12:38 ~ SW Alaska St & California Ave SW - Bay 3(20041) ~ Walk 15m53s -139,3,03:30:34,15898,1193,10:31:35,14:02:09,Metro Transit|Pierce Transit|Sound Transit,BUS,208|554|577|402,kcm:82425|kcm:64448|kcm:64502|kcm:620|pierce-transit:30709|pierce-transit:4136|pierce-transit:29410|pierce-transit:1332,Walk 4m ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 11:00 ~ SE Bush St & Rainier Blvd S(64448) ~ Walk 3m19s ~ E Sunset Way & 1st Ave NE(64502) ~ BUS 554 11:22 12:00 ~ 4th Ave S & S Jackson St(620) ~ Walk 1m54s ~ 2nd Ave Ext & Jackson St S(30709) ~ BUS 577 12:17 12:47 ~ Federal Way TC - Bay 2(4136) ~ Walk 1m10s ~ Federal Way TC - Bay 5(29410) ~ BUS 402 13:10 13:56 ~ Meridian S & 9th Ave SW(1332) ~ Walk 6m9s -139,2,03:40:25,16627,2219,10:31:35,14:12:00,Metro Transit|Sound Transit,BUS,208|554|578,kcm:82425|kcm:64448|kcm:64502|kcm:620|pierce-transit:30709|pierce-transit:10401,Walk 4m ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 11:00 ~ SE Bush St & Rainier Blvd S(64448) ~ Walk 3m19s ~ E Sunset Way & 1st Ave NE(64502) ~ BUS 554 11:22 12:00 ~ 4th Ave S & S Jackson St(620) ~ Walk 1m54s ~ 2nd Ave Ext & Jackson St S(30709) ~ BUS 578 12:32 13:51 ~ Puyallup Station - Bay 3(10401) ~ Walk 21m -140,3,02:46:40,12938,767,10:31:35,13:18:15,Metro Transit|Puget Sound Educational Service District|Sound Transit,BUS,208|554|577|Road to Independence,kcm:82425|kcm:64448|kcm:64502|kcm:620|pierce-transit:30709|pierce-transit:4136|pudget-sound-educational:area_622,Walk 4m ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 11:00 ~ SE Bush St & Rainier Blvd S(64448) ~ Walk 3m19s ~ E Sunset Way & 1st Ave NE(64502) ~ BUS 554 11:22 12:00 ~ 4th Ave S & S Jackson St(620) ~ Walk 1m54s ~ 2nd Ave Ext & Jackson St S(30709) ~ BUS 577 12:17 12:47 ~ Federal Way TC - Bay 2(4136) ~ Walk 1m59s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 12:50:59 13:18:15 -140,2,03:40:25,16627,2219,10:31:35,14:12:00,Metro Transit|Sound Transit,BUS,208|554|578,kcm:82425|kcm:64448|kcm:64502|kcm:620|pierce-transit:30709|pierce-transit:10401,Walk 4m ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 11:00 ~ SE Bush St & Rainier Blvd S(64448) ~ Walk 3m19s ~ E Sunset Way & 1st Ave NE(64502) ~ BUS 554 11:22 12:00 ~ 4th Ave S & S Jackson St(620) ~ Walk 1m54s ~ 2nd Ave Ext & Jackson St S(30709) ~ BUS 578 12:32 13:51 ~ Puyallup Station - Bay 3(10401) ~ Walk 21m -141,2,02:06:03,10031,924,10:31:35,12:37:38,Metro Transit|Sound Transit,BUS,208|554|3,kcm:82425|kcm:64448|kcm:64502|kcm:730|kcm:600|kcm:41350,Walk 4m ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 11:00 ~ SE Bush St & Rainier Blvd S(64448) ~ Walk 3m19s ~ E Sunset Way & 1st Ave NE(64502) ~ BUS 554 11:22 12:07:55 ~ 4th Ave & Lenora St(730) ~ Walk 2m24s ~ 3rd Ave & Virginia St(600) ~ BUS 3 12:14:57 12:34:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m3s -142,2,01:59:04,9574,889,10:31:35,12:30:39,Metro Transit|Sound Generations|Sound Transit,BUS,208|554|Hyde Shuttle,kcm:82425|kcm:64448|kcm:64502|kcm:18440|sound-generations:area_555,Walk 4m ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 11:00 ~ SE Bush St & Rainier Blvd S(64448) ~ Walk 3m19s ~ E Sunset Way & 1st Ave NE(64502) ~ BUS 554 11:22 12:09 ~ Blanchard St & 6th Ave(18440) ~ Walk 5m12s ~ sound-generations:area_555(area_555) ~ BUS null 12:16:12 12:30:39 -143,2,01:45:17,9177,1478,10:31:35,12:16:52,Metro Transit|Sound Transit,BUS,208|554|36,kcm:82425|kcm:64448|kcm:64502|kcm:8494|kcm:3710|kcm:3820,Walk 4m ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 11:00 ~ SE Bush St & Rainier Blvd S(64448) ~ Walk 3m19s ~ E Sunset Way & 1st Ave NE(64502) ~ BUS 554 11:22 11:52 ~ Rainier Ave S & S Charles St(8494) ~ Walk 9m51s ~ 12th Ave S & S Weller St(3710) ~ BUS 36 12:04:36 12:13:36 ~ Beacon Ave S & S Stevens St(3820) ~ Walk 3m16s -143,1,01:49:13,9676,2668,10:31:35,12:20:48,Metro Transit|Sound Transit,BUS,208|554,kcm:82425|kcm:64448|kcm:64502|kcm:8494,Walk 4m ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 11:00 ~ SE Bush St & Rainier Blvd S(64448) ~ Walk 3m19s ~ E Sunset Way & 1st Ave NE(64502) ~ BUS 554 11:22 11:52 ~ Rainier Ave S & S Charles St(8494) ~ Walk 28m48s -144,3,01:40:12,8854,621,10:31:35,12:11:47,Metro Transit|Sound Generations|Sound Transit,BUS,208|554|7|Hyde Shuttle,kcm:82425|kcm:64448|kcm:64502|kcm:8494|kcm:8590|kcm:8620|sound-generations:area_564,Walk 4m ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 11:00 ~ SE Bush St & Rainier Blvd S(64448) ~ Walk 3m19s ~ E Sunset Way & 1st Ave NE(64502) ~ BUS 554 11:22 11:52 ~ Rainier Ave S & S Charles St(8494) ~ Walk 1m31s ~ Rainier Ave S & S Charles St(8590) ~ BUS 7 12:01:06 12:03:38 ~ Rainier Ave S & S State St(8620) ~ Walk 0s ~ sound-generations:area_564(area_564) ~ BUS null 12:05:38 12:11:47 -144,1,01:49:13,9676,2668,10:31:35,12:20:48,Metro Transit|Sound Transit,BUS,208|554,kcm:82425|kcm:64448|kcm:64502|kcm:8494,Walk 4m ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 11:00 ~ SE Bush St & Rainier Blvd S(64448) ~ Walk 3m19s ~ E Sunset Way & 1st Ave NE(64502) ~ BUS 554 11:22 11:52 ~ Rainier Ave S & S Charles St(8494) ~ Walk 28m48s -145,2,01:59:24,10455,2028,10:06:14,12:05:38,Metro Transit,BUS,2|101|160,kcm:2570|kcm:450|kcm:1230|kcm:79610|kcm:59891|kcm:57375,Walk 1m51s ~ W Mcgraw St & 6th Ave W(2570) ~ BUS 2 10:08:05 10:29 ~ 3rd Ave & Union St(450) ~ Walk 2m1s ~ Union St & 4th Ave(1230) ~ BUS 101 10:33:47 11:03 ~ SW Sunset Blvd & Hardie Ave SW(79610) ~ Walk 4m34s ~ Rainier Ave S & S 3rd Pl(59891) ~ BUS 160 11:22:49 11:47:16 ~ 108th Ave SE & SE 220th Pl(57375) ~ Walk 18m22s -145,2,02:03:09,10735,2100,10:17:29,12:20:38,Metro Transit,BUS,3|101|160,kcm:41300|kcm:480|kcm:340|kcm:79610|kcm:59891|kcm:57375,Walk 3m12s ~ 3rd Ave W & W Mcgraw St(41300) ~ BUS 3 10:20:41 10:43:20 ~ 3rd Ave & Marion St(480) ~ Walk 1m32s ~ 2nd Ave & Marion St(340) ~ BUS 101 10:51 11:18 ~ SW Sunset Blvd & Hardie Ave SW(79610) ~ Walk 4m34s ~ Rainier Ave S & S 3rd Pl(59891) ~ BUS 160 11:37:22 12:02:16 ~ 108th Ave SE & SE 220th Pl(57375) ~ Walk 18m22s -145,2,02:02:09,10675,2100,10:32:29,12:34:38,Metro Transit,BUS,3|101|160,kcm:41300|kcm:480|kcm:340|kcm:79610|kcm:59891|kcm:57375,Walk 3m12s ~ 3rd Ave W & W Mcgraw St(41300) ~ BUS 3 10:35:41 10:58:20 ~ 3rd Ave & Marion St(480) ~ Walk 1m32s ~ 2nd Ave & Marion St(340) ~ BUS 101 11:06 11:33 ~ SW Sunset Blvd & Hardie Ave SW(79610) ~ Walk 4m34s ~ Rainier Ave S & S 3rd Pl(59891) ~ BUS 160 11:51:22 12:16:16 ~ 108th Ave SE & SE 220th Pl(57375) ~ Walk 18m22s -147,2,01:38:22,8383,921,10:06:14,11:44:36,Metro Transit,BUS,2|120|165,kcm:2570|kcm:420|kcm:52305|kcm:48620,Walk 1m51s ~ W Mcgraw St & 6th Ave W(2570) ~ BUS 2 10:08:05 10:25:27 ~ 3rd Ave & Virginia St(420) ~ BUS 120 10:30 11:24 ~ Burien Transit Center - Bay 5(52305) ~ BUS 165 11:27 11:34:26 ~ 1st Ave S & SW 178th St(48620) ~ Walk 10m10s -147,2,01:52:34,9310,1022,10:18:02,12:10:36,Metro Transit,BUS,13|2|120|165,kcm:41300|kcm:2220|kcm:420|kcm:52305|kcm:48620,Walk 3m12s ~ 3rd Ave W & W Mcgraw St(41300) ~ BUS 13 10:21:14 10:36 ~ 3rd Ave & Cedar St(2220) ~ BUS 2 10:36 10:40:27 ~ 3rd Ave & Virginia St(420) ~ BUS 120 10:50 11:44 ~ Burien Transit Center - Bay 5(52305) ~ BUS 165 11:53 12:00:26 ~ 1st Ave S & SW 178th St(48620) ~ Walk 10m10s -147,2,01:51:33,9601,1493,10:19:03,12:10:36,Metro Transit,BUS,1|14|120|165,kcm:2060|kcm:2220|kcm:420|kcm:52305|kcm:48620,Walk 9m8s ~ 10th Ave W & W Crockett St(2060) ~ BUS 1 10:28:11 10:40 ~ 3rd Ave & Cedar St(2220) ~ BUS 14 10:40 10:43:53 ~ 3rd Ave & Virginia St(420) ~ BUS 120 10:50 11:44 ~ Burien Transit Center - Bay 5(52305) ~ BUS 165 11:53 12:00:26 ~ 1st Ave S & SW 178th St(48620) ~ Walk 10m10s -148,4,01:17:46,7791,172,10:00:09,11:17:55,Metro Transit|Sound Generations,BUS,Hyde Shuttle|24|124|120|128|Hyde Shuttle,sound-generations:area_555|kcm:19410|kcm:2220|kcm:420|kcm:22174|kcm:22252|kcm:21080|sound-generations:area_551,sound-generations:area_555(area_555) ~ BUS null 10:00:09 10:08:26Walk 18s ~ Elliott Ave W & W Harrison St(19410) ~ BUS 24 10:10:44 10:14 ~ 3rd Ave & Cedar St(2220) ~ BUS 124 10:14 10:17:38 ~ 3rd Ave & Virginia St(420) ~ BUS 120 10:20 10:48:02 ~ Delridge Way SW & SW Henderson St(22174) ~ Walk 2m ~ Delridge Way SW & SW Henderson St(22252) ~ BUS 128 10:53:59 10:56 ~ SW Roxbury St & 15th Ave SW - Bay 3(21080) ~ Walk 9s ~ sound-generations:area_551(area_551) ~ BUS null 10:58:09 11:17:55 -148,3,01:17:48,7083,21,10:00:09,11:17:57,Metro Transit|Sound Generations,BUS,Hyde Shuttle|24|124|120|Hyde Shuttle,sound-generations:area_555|kcm:19410|kcm:2220|kcm:420|kcm:52030|sound-generations:area_551,sound-generations:area_555(area_555) ~ BUS null 10:00:09 10:08:26Walk 18s ~ Elliott Ave W & W Harrison St(19410) ~ BUS 24 10:10:44 10:14 ~ 3rd Ave & Cedar St(2220) ~ BUS 124 10:14 10:17:38 ~ 3rd Ave & Virginia St(420) ~ BUS 120 10:20 10:55 ~ 15th Ave SW & SW Roxbury St - Bay 1(52030) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:57 11:17:57 -148,3,01:20:29,7433,278,10:06:14,11:26:43,Metro Transit|Sound Generations,BUS,2|120|60|Hyde Shuttle,kcm:2570|kcm:420|kcm:22174|kcm:22252|kcm:21120|sound-generations:area_551,Walk 1m51s ~ W Mcgraw St & 6th Ave W(2570) ~ BUS 2 10:08:05 10:25:27 ~ 3rd Ave & Virginia St(420) ~ BUS 120 10:30 10:58:02 ~ Delridge Way SW & SW Henderson St(22174) ~ Walk 2m ~ Delridge Way SW & SW Henderson St(22252) ~ BUS 60 11:02:51 11:07:37 ~ SW Roxbury St & 5th Ave SW(21120) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 11:09:37 11:26:43 -149,3,01:55:34,10686,1845,10:06:14,12:01:48,Metro Transit|Sound Transit,BUS|TRAM,2|124|1-Line|635,kcm:2570|kcm:2220|kcm:21833|sound-transit:99101|sound-transit:99913|kcm:47200|kcm:47404,Walk 1m51s ~ W Mcgraw St & 6th Ave W(2570) ~ BUS 2 10:08:05 10:21 ~ 3rd Ave & Cedar St(2220) ~ BUS 124 10:28 10:45 ~ 6th Ave S & S Royal Brougham Way(21833) ~ Walk 2m12s ~ Stadium Station(99101) ~ TRAM 1-Line 10:56 11:30 ~ Angle Lake Station(99913) ~ Walk 1m37s ~ S 200th St & 28th Ave S(47200) ~ BUS 635 11:39 11:42:55 ~ S 216th St & 20th Ave S(47404) ~ Walk 18m53s -149,2,01:59:19,11327,3252,10:02:29,12:01:48,Metro Transit|Sound Transit,BUS|TRAM,3|1-Line|635,kcm:41300|kcm:1560|sound-transit:99101|sound-transit:99913|kcm:47200|kcm:47404,Walk 3m12s ~ 3rd Ave W & W Mcgraw St(41300) ~ BUS 3 10:05:41 10:31 ~ James St & 3rd Ave(1560) ~ Walk 19m38s ~ Stadium Station(99101) ~ TRAM 1-Line 10:56 11:30 ~ Angle Lake Station(99913) ~ Walk 1m37s ~ S 200th St & 28th Ave S(47200) ~ BUS 635 11:39 11:42:55 ~ S 216th St & 20th Ave S(47404) ~ Walk 18m53s -149,2,01:55:59,9850,1437,10:06:14,12:02:13,Metro Transit,BUS,2|124|A Line,kcm:2570|kcm:2220|kcm:60922|kcm:60921|kcm:61170,Walk 1m51s ~ W Mcgraw St & 6th Ave W(2570) ~ BUS 2 10:08:05 10:21 ~ 3rd Ave & Cedar St(2220) ~ BUS 124 10:28 11:20 ~ Tukwila International Blvd Station - Bay 2(60922) ~ Walk 2m9s ~ Tukwila International Blvd Station - Bay 1(60921) ~ BUS A Line 11:30 11:46:17 ~ Pacific Hwy S & S 224th St(61170) ~ Walk 15m56s -150,4,01:24:11,8176,172,10:00:09,11:24:20,Metro Transit|Sound Generations,BUS,Hyde Shuttle|24|124|120|128|Hyde Shuttle,sound-generations:area_555|kcm:19410|kcm:2220|kcm:420|kcm:22174|kcm:22252|kcm:21080|sound-generations:area_551,sound-generations:area_555(area_555) ~ BUS null 10:00:09 10:08:26Walk 18s ~ Elliott Ave W & W Harrison St(19410) ~ BUS 24 10:10:44 10:14 ~ 3rd Ave & Cedar St(2220) ~ BUS 124 10:14 10:17:38 ~ 3rd Ave & Virginia St(420) ~ BUS 120 10:20 10:48:02 ~ Delridge Way SW & SW Henderson St(22174) ~ Walk 2m ~ Delridge Way SW & SW Henderson St(22252) ~ BUS 128 10:53:59 10:56 ~ SW Roxbury St & 15th Ave SW - Bay 3(21080) ~ Walk 9s ~ sound-generations:area_551(area_551) ~ BUS null 10:58:09 11:24:20 -150,3,01:24:13,7468,21,10:00:09,11:24:22,Metro Transit|Sound Generations,BUS,Hyde Shuttle|24|124|120|Hyde Shuttle,sound-generations:area_555|kcm:19410|kcm:2220|kcm:420|kcm:52030|sound-generations:area_551,sound-generations:area_555(area_555) ~ BUS null 10:00:09 10:08:26Walk 18s ~ Elliott Ave W & W Harrison St(19410) ~ BUS 24 10:10:44 10:14 ~ 3rd Ave & Cedar St(2220) ~ BUS 124 10:14 10:17:38 ~ 3rd Ave & Virginia St(420) ~ BUS 120 10:20 10:55 ~ 15th Ave SW & SW Roxbury St - Bay 1(52030) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:57 11:24:22 -150,3,01:26:54,7818,278,10:06:14,11:33:08,Metro Transit|Sound Generations,BUS,2|120|60|Hyde Shuttle,kcm:2570|kcm:420|kcm:22174|kcm:22252|kcm:21120|sound-generations:area_551,Walk 1m51s ~ W Mcgraw St & 6th Ave W(2570) ~ BUS 2 10:08:05 10:25:27 ~ 3rd Ave & Virginia St(420) ~ BUS 120 10:30 10:58:02 ~ Delridge Way SW & SW Henderson St(22174) ~ Walk 2m ~ Delridge Way SW & SW Henderson St(22252) ~ BUS 60 11:02:51 11:07:37 ~ SW Roxbury St & 5th Ave SW(21120) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 11:09:37 11:33:08 -151,2,01:56:53,9196,529,10:06:14,12:03:07,Metro Transit,BUS,2|150|160,kcm:2570|kcm:450|kcm:1230|kcm:57455|kcm:57451|kcm:58255,Walk 1m51s ~ W Mcgraw St & 6th Ave W(2570) ~ BUS 2 10:08:05 10:29 ~ 3rd Ave & Union St(450) ~ Walk 2m1s ~ Union St & 4th Ave(1230) ~ BUS 150 10:41:47 11:41 ~ Kent Sounder Station - Bay 5(57455) ~ Walk 44s ~ Kent Sounder Station - Bay 1(57451) ~ BUS 160 11:49 12:00:20 ~ Auburn Way N & 37th St NE(58255) ~ Walk 2m47s -151,2,01:54:08,9098,611,10:17:29,12:11:37,Metro Transit|Sound Transit,BUS,3|578|160,kcm:41300|kcm:480|pierce-transit:20510|pierce-transit:18728|kcm:57774|kcm:57915,Walk 3m12s ~ 3rd Ave W & W Mcgraw St(41300) ~ BUS 3 10:20:41 10:43:20 ~ 3rd Ave & Marion St(480) ~ Walk 1m27s ~ 2nd Ave & Marion St(20510) ~ BUS 578 11:00 11:49 ~ Auburn Station - Bay 4(18728) ~ Walk 44s ~ Auburn Transit Center - Bay 2(57774) ~ BUS 160 11:57 12:08:49 ~ Auburn Way N & 37th St NE(57915) ~ Walk 2m48s -151,2,01:53:35,9119,695,10:18:02,12:11:37,Metro Transit|Sound Transit,BUS,13|2|578|160,kcm:41300|kcm:2220|kcm:420|pierce-transit:2011772586|pierce-transit:18728|kcm:57774|kcm:57915,Walk 3m12s ~ 3rd Ave W & W Mcgraw St(41300) ~ BUS 13 10:21:14 10:36 ~ 3rd Ave & Cedar St(2220) ~ BUS 2 10:36 10:40:27 ~ 3rd Ave & Virginia St(420) ~ Walk 2m52s ~ Stewart St & 3rd Ave(2011772586) ~ BUS 578 10:55 11:49 ~ Auburn Station - Bay 4(18728) ~ Walk 44s ~ Auburn Transit Center - Bay 2(57774) ~ BUS 160 11:57 12:08:49 ~ Auburn Way N & 37th St NE(57915) ~ Walk 2m48s -153,1,01:51:56,10276,3219,10:17:29,12:09:25,Metro Transit|Sound Transit,BUS,3|578,kcm:41300|kcm:480|pierce-transit:20510|pierce-transit:4136,Walk 3m12s ~ 3rd Ave W & W Mcgraw St(41300) ~ BUS 3 10:20:41 10:43:20 ~ 3rd Ave & Marion St(480) ~ Walk 1m27s ~ 2nd Ave & Marion St(20510) ~ BUS 578 11:00 11:32 ~ Federal Way TC - Bay 2(4136) ~ Walk 37m25s -153,1,01:51:23,10297,3303,10:18:02,12:09:25,Metro Transit|Sound Transit,BUS,13|2|578,kcm:41300|kcm:2220|kcm:420|pierce-transit:2011772586|pierce-transit:4136,Walk 3m12s ~ 3rd Ave W & W Mcgraw St(41300) ~ BUS 13 10:21:14 10:36 ~ 3rd Ave & Cedar St(2220) ~ BUS 2 10:36 10:40:27 ~ 3rd Ave & Virginia St(420) ~ Walk 2m52s ~ Stewart St & 3rd Ave(2011772586) ~ BUS 578 10:55 11:32 ~ Federal Way TC - Bay 2(4136) ~ Walk 37m25s -153,1,01:50:22,10535,3690,10:19:03,12:09:25,Metro Transit|Sound Transit,BUS,1|14|578,kcm:2060|kcm:2220|kcm:480|pierce-transit:20510|pierce-transit:4136,Walk 9m8s ~ 10th Ave W & W Crockett St(2060) ~ BUS 1 10:28:11 10:40 ~ 3rd Ave & Cedar St(2220) ~ BUS 14 10:40 10:49:59 ~ 3rd Ave & Marion St(480) ~ Walk 1m27s ~ 2nd Ave & Marion St(20510) ~ BUS 578 11:00 11:32 ~ Federal Way TC - Bay 2(4136) ~ Walk 37m25s -155,2,01:05:01,6025,440,10:06:14,11:11:15,Metro Transit,BUS,2|C Line|128,kcm:2570|kcm:420|kcm:20041|kcm:32011|kcm:31871,Walk 1m51s ~ W Mcgraw St & 6th Ave W(2570) ~ BUS 2 10:08:05 10:25:27 ~ 3rd Ave & Virginia St(420) ~ BUS C Line 10:30 10:57 ~ SW Alaska St & California Ave SW - Bay 3(20041) ~ Walk 42s ~ SW Alaska St & 44th Ave SW - Bay 4(32011) ~ BUS 128 11:04 11:07:50 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m25s -155,1,01:06:39,6198,1358,10:06:14,11:12:53,Metro Transit,BUS,2|C Line,kcm:2570|kcm:420|kcm:20041,Walk 1m51s ~ W Mcgraw St & 6th Ave W(2570) ~ BUS 2 10:08:05 10:25:27 ~ 3rd Ave & Virginia St(420) ~ BUS C Line 10:30 10:57 ~ SW Alaska St & California Ave SW - Bay 3(20041) ~ Walk 15m53s -155,2,01:01:31,5848,486,10:17:29,11:19:00,Metro Transit,BUS,3|120|50,kcm:41300|kcm:420|kcm:21990|kcm:31871,Walk 3m12s ~ 3rd Ave W & W Mcgraw St(41300) ~ BUS 3 10:20:41 10:36:53 ~ 3rd Ave & Virginia St(420) ~ BUS 120 10:40 10:57:32 ~ Delridge Way SW & SW Andover St(21990) ~ BUS 50 11:00 11:15:35 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m25s -156,0,02:47:40,19401,12748,10:00:00,12:47:40,,,,,Walk 2h47m40s -157,1,02:20:31,11022,1915,10:17:29,12:38:00,Metro Transit|Sound Transit,BUS,3|578,kcm:41300|kcm:480|pierce-transit:20510|pierce-transit:10401,Walk 3m12s ~ 3rd Ave W & W Mcgraw St(41300) ~ BUS 3 10:20:41 10:43:20 ~ 3rd Ave & Marion St(480) ~ Walk 1m27s ~ 2nd Ave & Marion St(20510) ~ BUS 578 11:00 12:17 ~ Puyallup Station - Bay 3(10401) ~ Walk 21m -157,2,02:11:40,10353,889,10:47:29,12:59:09,Metro Transit|Pierce Transit|Sound Transit,BUS,3|578|402,kcm:41300|kcm:480|pierce-transit:20510|pierce-transit:4136|pierce-transit:29410|pierce-transit:1332,Walk 3m12s ~ 3rd Ave W & W Mcgraw St(41300) ~ BUS 3 10:50:41 11:13:20 ~ 3rd Ave & Marion St(480) ~ Walk 1m27s ~ 2nd Ave & Marion St(20510) ~ BUS 578 11:30 12:03 ~ Federal Way TC - Bay 2(4136) ~ Walk 1m10s ~ Federal Way TC - Bay 5(29410) ~ BUS 402 12:11 12:53 ~ Meridian S & 9th Ave SW(1332) ~ Walk 6m9s -157,1,02:23:31,11202,1915,10:47:29,13:11:00,Metro Transit|Sound Transit,BUS,3|578,kcm:41300|kcm:480|pierce-transit:20510|pierce-transit:10401,Walk 3m12s ~ 3rd Ave W & W Mcgraw St(41300) ~ BUS 3 10:50:41 11:13:20 ~ 3rd Ave & Marion St(480) ~ Walk 1m27s ~ 2nd Ave & Marion St(20510) ~ BUS 578 11:30 12:50 ~ Puyallup Station - Bay 3(10401) ~ Walk 21m -159,2,02:04:16,9816,775,10:06:14,12:10:30,Metro Transit|Sound Transit,BUS,2|554|208,kcm:2570|kcm:430|kcm:280|kcm:64590|kcm:64593|kcm:64399,Walk 1m51s ~ W Mcgraw St & 6th Ave W(2570) ~ BUS 2 10:08:05 10:26:59 ~ 3rd Ave & Pine St(430) ~ Walk 2m6s ~ 2nd Ave & Stewart St(280) ~ BUS 554 10:37:53 11:12 ~ Issaquah Transit Center - Bay 6(64590) ~ Walk 1m1s ~ Issaquah Transit Center - Bay 4(64593) ~ BUS 208 11:31 12:04:49 ~ Railroad Ave SE & SE River St(64399) ~ Walk 5m41s -159,3,03:09:46,14447,909,10:48:02,13:57:48,Metro Transit|Sound Transit,BUS,13|2|545|224|629,kcm:41300|kcm:2220|kcm:430|kcm:700|kcm:72488|kcm:68803|kcm:64397,Walk 3m12s ~ 3rd Ave W & W Mcgraw St(41300) ~ BUS 13 10:51:14 11:06 ~ 3rd Ave & Cedar St(2220) ~ BUS 2 11:06 11:11:59 ~ 3rd Ave & Pine St(430) ~ Walk 2m30s ~ 4th Ave & Pike St(700) ~ BUS 545 11:26 12:01:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 12:15:31 12:49 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 13:04 13:51 ~ Railroad Avenue Southeast Ave SE & SE Northern St(64397) ~ Walk 6m48s -160,2,02:00:19,9806,1115,10:10:11,12:10:30,Metro Transit|Sound Generations|Sound Transit,BUS,Hyde Shuttle|554|208,sound-generations:area_555|kcm:26665|kcm:1920|kcm:64590|kcm:64593|kcm:64399,sound-generations:area_555(area_555) ~ BUS null 10:10:11 10:24:49Walk 1m17s ~ Westlake Ave & 9th Ave(26665) ~ Walk 7m54s ~ Lenora St & 4th Ave(1920) ~ BUS 554 10:36 11:12 ~ Issaquah Transit Center - Bay 6(64590) ~ Walk 1m1s ~ Issaquah Transit Center - Bay 4(64593) ~ BUS 208 11:31 12:04:49 ~ Railroad Ave SE & SE River St(64399) ~ Walk 5m41s -160,3,02:56:25,13718,1015,11:01:23,13:57:48,Metro Transit|Sound Generations|Sound Transit,BUS,Hyde Shuttle|545|224|629,sound-generations:area_555|kcm:10240|kcm:1051|kcm:72488|kcm:68803|kcm:64397,sound-generations:area_555(area_555) ~ BUS null 11:01:23 11:17:56Walk 2m1s ~ Boren Ave & Virginia St(10240) ~ Walk 5m11s ~ Olive Way & Boren Ave(1051) ~ BUS 545 11:27:08 12:01:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 12:15:31 12:49 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 13:04 13:51 ~ Railroad Avenue Southeast Ave SE & SE Northern St(64397) ~ Walk 6m48s -161,1,00:52:05,4645,450,10:02:29,10:54:34,Metro Transit,BUS,3|36,kcm:41300|kcm:450|kcm:3820,Walk 3m12s ~ 3rd Ave W & W Mcgraw St(41300) ~ BUS 3 10:05:41 10:25 ~ 3rd Ave & Union St(450) ~ BUS 36 10:30:15 10:51:18 ~ Beacon Ave S & S Stevens St(3820) ~ Walk 3m16s -161,2,00:51:53,5367,622,10:06:14,10:58:07,Metro Transit,BUS,2|27|60,kcm:2570|kcm:450|kcm:433|kcm:27500|kcm:3800,Walk 1m51s ~ W Mcgraw St & 6th Ave W(2570) ~ BUS 2 10:08:05 10:29 ~ 3rd Ave & Union St(450) ~ Walk 1m32s ~ 3rd Ave & Pike St(433) ~ BUS 27 10:33 10:40:48 ~ E Yesler Way & Broadway(27500) ~ BUS 60 10:44:43 10:53 ~ Beacon Ave S & S Bayview St(3800) ~ Walk 5m7s -161,1,00:58:38,4962,349,10:06:14,11:04:52,Metro Transit,BUS,2|36,kcm:2570|kcm:450|kcm:3820,Walk 1m51s ~ W Mcgraw St & 6th Ave W(2570) ~ BUS 2 10:08:05 10:29 ~ 3rd Ave & Union St(450) ~ BUS 36 10:40:15 11:01:36 ~ Beacon Ave S & S Stevens St(3820) ~ Walk 3m16s -162,2,00:41:30,4446,219,10:00:09,10:41:39,Metro Transit|Sound Generations|Sound Transit,BUS|TRAM,Hyde Shuttle|24|124|1-Line,sound-generations:area_555|kcm:19410|kcm:2220|kcm:21833|sound-transit:99101|sound-transit:99121,sound-generations:area_555(area_555) ~ BUS null 10:00:09 10:08:26Walk 18s ~ Elliott Ave W & W Harrison St(19410) ~ BUS 24 10:10:44 10:14 ~ 3rd Ave & Cedar St(2220) ~ BUS 124 10:14 10:31 ~ 6th Ave S & S Royal Brougham Way(21833) ~ Walk 2m12s ~ Stadium Station(99101) ~ TRAM 1-Line 10:36 10:41 ~ Beacon Hill Station(99121) ~ Walk 39s -162,2,00:46:01,4639,101,10:05:38,10:51:39,Sound Generations|Sound Transit,BUS|TRAM,Hyde Shuttle|545|1-Line,sound-generations:area_555|kcm:905|kcm:760|sound-transit:1108|sound-transit:99121,sound-generations:area_555(area_555) ~ BUS null 10:05:38 10:23:57Walk 25s ~ Stewart St & Yale Ave N(905) ~ BUS 545 10:26:22 10:28 ~ 5th Ave & Pine St(760) ~ Walk 20s ~ Westlake Station(1108) ~ TRAM 1-Line 10:39 10:51 ~ Beacon Hill Station(99121) ~ Walk 39s -162,1,00:49:12,4851,906,10:02:27,10:51:39,Sound Generations|Sound Transit,BUS|TRAM,Hyde Shuttle|1-Line,sound-generations:area_555|kcm:2275|sound-transit:99610|sound-transit:99121,sound-generations:area_555(area_555) ~ BUS null 10:02:27 10:21:05Walk 4m12s ~ E Denny Way & Bellevue Ave E(2275) ~ Walk 8m43s ~ Capitol Hill Station(99610) ~ TRAM 1-Line 10:36 10:51 ~ Beacon Hill Station(99121) ~ Walk 39s -163,2,01:31:07,8781,2053,10:03:31,11:34:38,Metro Transit|Sound Transit,BUS|TRAM,1-Line|101|160,sound-transit:99240|sound-transit:99256|kcm:99263|kcm:79610|kcm:59891|kcm:57375,Walk 1m29s ~ Beacon Hill Station(99240) ~ TRAM 1-Line 10:05 10:08 ~ SODO Station(99256) ~ Walk 2m30s ~ SODO Busway & S Lander St(99263) ~ BUS 101 10:16 10:33 ~ SW Sunset Blvd & Hardie Ave SW(79610) ~ Walk 4m34s ~ Rainier Ave S & S 3rd Pl(59891) ~ BUS 160 10:51:49 11:16:16 ~ 108th Ave SE & SE 220th Pl(57375) ~ Walk 18m22s -163,2,01:37:07,9141,2053,10:13:31,11:50:38,Metro Transit|Sound Transit,BUS|TRAM,1-Line|101|160,sound-transit:99240|sound-transit:99256|kcm:99263|kcm:79610|kcm:59891|kcm:57375,Walk 1m29s ~ Beacon Hill Station(99240) ~ TRAM 1-Line 10:15 10:18 ~ SODO Station(99256) ~ Walk 2m30s ~ SODO Busway & S Lander St(99263) ~ BUS 101 10:31 10:48 ~ SW Sunset Blvd & Hardie Ave SW(79610) ~ Walk 4m34s ~ Rainier Ave S & S 3rd Pl(59891) ~ BUS 160 11:07:49 11:32:16 ~ 108th Ave SE & SE 220th Pl(57375) ~ Walk 18m22s -163,1,01:44:26,10023,3496,10:06:12,11:50:38,Metro Transit,BUS,101|160,kcm:99266|kcm:79610|kcm:59891|kcm:57375,Walk 23m3s ~ SODO Busway & S Holgate St(99266) ~ BUS 101 10:29:15 10:48 ~ SW Sunset Blvd & Hardie Ave SW(79610) ~ Walk 4m34s ~ Rainier Ave S & S 3rd Pl(59891) ~ BUS 160 11:07:49 11:32:16 ~ 108th Ave SE & SE 220th Pl(57375) ~ Walk 18m22s -165,1,01:19:05,8303,3196,10:20:21,11:39:26,Metro Transit|Sound Transit,BUS|TRAM,1-Line|F Line,sound-transit:99121|sound-transit:99900|kcm:60923|kcm:47646,Walk 39s ~ Beacon Hill Station(99121) ~ TRAM 1-Line 10:21 10:43 ~ Tukwila Int'l Blvd Station(99900) ~ Walk 1m11s ~ Tukwila International Blvd Station - Bay 3(60923) ~ BUS F Line 10:49 11:00:05 ~ SW 156th St & 2nd Ave SW(47646) ~ Walk 39m21s -165,1,01:09:19,7067,2317,10:30:21,11:39:40,Metro Transit|Sound Transit,BUS|TRAM,1-Line|156,sound-transit:99121|sound-transit:99904|kcm:60903|kcm:50250,Walk 39s ~ Beacon Hill Station(99121) ~ TRAM 1-Line 10:31 10:56 ~ SeaTac/Airport Station(99904) ~ Walk 6m47s ~ S 176th St & 30th Ave S - Bay 3(60903) ~ BUS 156 11:07 11:14:01 ~ 8th Ave S & Des Moines Memorial Dr S(50250) ~ Walk 25m39s -165,2,01:14:15,6946,928,10:30:21,11:44:36,Metro Transit|Sound Transit,BUS|TRAM,1-Line|F Line|165,sound-transit:99121|sound-transit:99900|kcm:60923|kcm:53720|kcm:53975|kcm:48620,Walk 39s ~ Beacon Hill Station(99121) ~ TRAM 1-Line 10:31 10:53 ~ Tukwila Int'l Blvd Station(99900) ~ Walk 1m11s ~ Tukwila International Blvd Station - Bay 3(60923) ~ BUS F Line 11:04 11:15:59 ~ 4th Ave SW & SW 156th St(53720) ~ Walk 9s ~ 4th Ave SW & SW 156th St(53975) ~ BUS 165 11:28:44 11:34:26 ~ 1st Ave S & SW 178th St(48620) ~ Walk 10m10s -166,1,00:51:14,4544,380,10:00:51,10:52:05,Metro Transit|Sound Generations,BUS,60|Hyde Shuttle,kcm:42048|kcm:21170|sound-generations:area_551,Walk 5m12s ~ 15th Ave S & S Stevens St(42048) ~ BUS 60 10:06:03 10:32:46 ~ SW Roxbury St & 5th Pl SW(21170) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:34:46 10:52:05 -166,2,00:50:36,4852,21,10:01:29,10:52:05,Metro Transit|Sound Generations,BUS,Hyde Shuttle|60|Hyde Shuttle,sound-generations:area_564|kcm:42048|kcm:21170|sound-generations:area_551,sound-generations:area_564(area_564) ~ BUS null 10:01:29 10:03:45Walk 18s ~ 15th Ave S & S Stevens St(42048) ~ BUS 60 10:06:03 10:32:46 ~ SW Roxbury St & 5th Pl SW(21170) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:34:46 10:52:05 -166,1,00:51:14,4544,380,10:13:51,11:05:05,Metro Transit|Sound Generations,BUS,60|Hyde Shuttle,kcm:42048|kcm:21170|sound-generations:area_551,Walk 5m12s ~ 15th Ave S & S Stevens St(42048) ~ BUS 60 10:19:03 10:45:46 ~ SW Roxbury St & 5th Pl SW(21170) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:47:46 11:05:05 -167,1,01:00:52,5893,1420,10:10:21,11:11:13,Metro Transit|Sound Transit,BUS|TRAM,1-Line|A Line,sound-transit:99121|sound-transit:99913|kcm:61120|kcm:61170,Walk 39s ~ Beacon Hill Station(99121) ~ TRAM 1-Line 10:11 10:40 ~ Angle Lake Station(99913) ~ Walk 2m18s ~ International Blvd & S 200th St(61120) ~ BUS A Line 10:50:12 10:55:17 ~ Pacific Hwy S & S 224th St(61170) ~ Walk 15m56s -167,1,01:01:52,5953,1420,10:20:21,11:22:13,Metro Transit|Sound Transit,BUS|TRAM,1-Line|A Line,sound-transit:99121|sound-transit:99913|kcm:61120|kcm:61170,Walk 39s ~ Beacon Hill Station(99121) ~ TRAM 1-Line 10:21 10:50 ~ Angle Lake Station(99913) ~ Walk 2m18s ~ International Blvd & S 200th St(61120) ~ BUS A Line 11:01:12 11:06:17 ~ Pacific Hwy S & S 224th St(61170) ~ Walk 15m56s -167,1,01:01:27,6074,1610,10:30:21,11:31:48,Metro Transit|Sound Transit,BUS|TRAM,1-Line|635,sound-transit:99121|sound-transit:99913|kcm:47200|kcm:47404,Walk 39s ~ Beacon Hill Station(99121) ~ TRAM 1-Line 10:31 11:00 ~ Angle Lake Station(99913) ~ Walk 1m37s ~ S 200th St & 28th Ave S(47200) ~ BUS 635 11:09 11:12:55 ~ S 216th St & 20th Ave S(47404) ~ Walk 18m53s -168,1,00:57:39,4929,380,10:00:51,10:58:30,Metro Transit|Sound Generations,BUS,60|Hyde Shuttle,kcm:42048|kcm:21170|sound-generations:area_551,Walk 5m12s ~ 15th Ave S & S Stevens St(42048) ~ BUS 60 10:06:03 10:32:46 ~ SW Roxbury St & 5th Pl SW(21170) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:34:46 10:58:30 -168,2,00:57:01,5237,21,10:01:29,10:58:30,Metro Transit|Sound Generations,BUS,Hyde Shuttle|60|Hyde Shuttle,sound-generations:area_564|kcm:42048|kcm:21170|sound-generations:area_551,sound-generations:area_564(area_564) ~ BUS null 10:01:29 10:03:45Walk 18s ~ 15th Ave S & S Stevens St(42048) ~ BUS 60 10:06:03 10:32:46 ~ SW Roxbury St & 5th Pl SW(21170) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:34:46 10:58:30 -168,2,00:51:14,5025,206,10:10:21,11:01:35,Metro Transit|Sound Generations|Sound Transit,BUS|TRAM,1-Line|A Line|Hyde Shuttle,sound-transit:99121|sound-transit:99913|kcm:61120|kcm:61150|sound-generations:area_551,Walk 39s ~ Beacon Hill Station(99121) ~ TRAM 1-Line 10:11 10:40 ~ Angle Lake Station(99913) ~ Walk 2m18s ~ International Blvd & S 200th St(61120) ~ BUS A Line 10:50:12 10:53:30 ~ Pacific Hwy S & S 216th St(61150) ~ Walk 0s ~ sound-generations:area_551(area_551) ~ BUS null 10:55:30 11:01:35 -169,2,01:17:36,6862,554,10:13:31,11:31:07,Metro Transit|Sound Transit,BUS|TRAM,1-Line|150|160,sound-transit:99240|sound-transit:99256|kcm:99263|kcm:57455|kcm:57451|kcm:58255,Walk 1m29s ~ Beacon Hill Station(99240) ~ TRAM 1-Line 10:15 10:18 ~ SODO Station(99256) ~ Walk 2m30s ~ SODO Busway & S Lander St(99263) ~ BUS 150 10:24 11:11 ~ Kent Sounder Station - Bay 5(57455) ~ Walk 44s ~ Kent Sounder Station - Bay 1(57451) ~ BUS 160 11:17 11:28:20 ~ Auburn Way N & 37th St NE(58255) ~ Walk 2m47s -169,2,01:23:36,7222,554,10:23:31,11:47:07,Metro Transit|Sound Transit,BUS|TRAM,1-Line|150|160,sound-transit:99240|sound-transit:99256|kcm:99263|kcm:57455|kcm:57451|kcm:58255,Walk 1m29s ~ Beacon Hill Station(99240) ~ TRAM 1-Line 10:25 10:28 ~ SODO Station(99256) ~ Walk 2m30s ~ SODO Busway & S Lander St(99263) ~ BUS 150 10:39 11:26 ~ Kent Sounder Station - Bay 5(57455) ~ Walk 44s ~ Kent Sounder Station - Bay 1(57451) ~ BUS 160 11:33 11:44:20 ~ Auburn Way N & 37th St NE(58255) ~ Walk 2m47s -169,1,01:32:55,8225,1997,10:14:12,11:47:07,Metro Transit,BUS,150|160,kcm:99266|kcm:57455|kcm:57451|kcm:58255,Walk 23m3s ~ SODO Busway & S Holgate St(99266) ~ BUS 150 10:37:15 11:26 ~ Kent Sounder Station - Bay 5(57455) ~ Walk 44s ~ Kent Sounder Station - Bay 1(57451) ~ BUS 160 11:33 11:44:20 ~ Auburn Way N & 37th St NE(58255) ~ Walk 2m47s -170,2,01:12:11,6351,298,10:13:31,11:25:42,Metro Transit|Puget Sound Educational Service District|Sound Transit,BUS|TRAM,1-Line|150|Road to Independence,sound-transit:99240|sound-transit:99256|kcm:99263|kcm:80580|pudget-sound-educational:area_622,Walk 1m29s ~ Beacon Hill Station(99240) ~ TRAM 1-Line 10:15 10:18 ~ SODO Station(99256) ~ Walk 2m30s ~ SODO Busway & S Lander St(99263) ~ BUS 150 10:24 11:08:20 ~ W James St & Lincoln Ave N(80580) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 11:10:20 11:25:42 -170,2,01:17:11,6651,298,10:23:31,11:40:42,Metro Transit|Puget Sound Educational Service District|Sound Transit,BUS|TRAM,1-Line|150|Road to Independence,sound-transit:99240|sound-transit:99256|kcm:99263|kcm:80580|pudget-sound-educational:area_622,Walk 1m29s ~ Beacon Hill Station(99240) ~ TRAM 1-Line 10:25 10:28 ~ SODO Station(99256) ~ Walk 2m30s ~ SODO Busway & S Lander St(99263) ~ BUS 150 10:39 11:23:20 ~ W James St & Lincoln Ave N(80580) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 11:25:20 11:40:42 -170,1,01:26:30,7653,1741,10:14:12,11:40:42,Metro Transit|Puget Sound Educational Service District,BUS,150|Road to Independence,kcm:99266|kcm:80580|pudget-sound-educational:area_622,Walk 23m3s ~ SODO Busway & S Holgate St(99266) ~ BUS 150 10:37:15 11:23:20 ~ W James St & Lincoln Ave N(80580) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 11:25:20 11:40:42 -171,2,01:08:51,6341,576,10:05:00,11:13:51,Metro Transit|Sound Transit,BUS,36|578|181,kcm:3460|kcm:1530|pierce-transit:30709|pierce-transit:4136|kcm:80433|kcm:83784,Walk 2m25s ~ Beacon Ave S & S Stevens St(3460) ~ BUS 36 10:07:25 10:22 ~ S Jackson St & 5th Ave S(1530) ~ Walk 1m52s ~ 2nd Ave Ext & Jackson St S(30709) ~ BUS 578 10:33 11:01 ~ Federal Way TC - Bay 2(4136) ~ Walk 37s ~ Federal Way TC - Bay 3(80433) ~ BUS 181 11:04 11:10:35 ~ SW 320th St & 1st Ave S(83784) ~ Walk 3m16s -171,3,01:00:20,6596,799,10:13:31,11:13:51,Metro Transit|Sound Transit,BUS|TRAM,1-Line|24|578|181,sound-transit:99240|sound-transit:99260|kcm:30635|kcm:619|pierce-transit:30709|pierce-transit:4136|kcm:80433|kcm:83784,Walk 1m29s ~ Beacon Hill Station(99240) ~ TRAM 1-Line 10:15 10:20 ~ Stadium Station(99260) ~ Walk 3m46s ~ 4th Ave S & S Royal Brougham Way(30635) ~ BUS 24 10:26 10:28 ~ 4th Ave S & S Jackson St(619) ~ Walk 1m54s ~ 2nd Ave Ext & Jackson St S(30709) ~ BUS 578 10:33 11:01 ~ Federal Way TC - Bay 2(4136) ~ Walk 37s ~ Federal Way TC - Bay 3(80433) ~ BUS 181 11:04 11:10:35 ~ SW 320th St & 1st Ave S(83784) ~ Walk 3m16s -171,1,01:33:25,9097,3151,10:05:00,11:38:25,Metro Transit|Sound Transit,BUS,36|578,kcm:3460|kcm:1530|pierce-transit:30709|pierce-transit:4136,Walk 2m25s ~ Beacon Ave S & S Stevens St(3460) ~ BUS 36 10:07:25 10:22 ~ S Jackson St & 5th Ave S(1530) ~ Walk 1m52s ~ 2nd Ave Ext & Jackson St S(30709) ~ BUS 578 10:33 11:01 ~ Federal Way TC - Bay 2(4136) ~ Walk 37m25s -173,1,00:44:29,4230,503,10:03:31,10:48:00,Metro Transit|Sound Transit,BUS|TRAM,1-Line|50,sound-transit:99240|sound-transit:99256|kcm:99261|kcm:31871,Walk 1m29s ~ Beacon Hill Station(99240) ~ TRAM 1-Line 10:05 10:08 ~ SODO Station(99256) ~ Walk 2m7s ~ S Lander St & SODO Busway(99261) ~ BUS 50 10:21 10:44:35 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m25s -173,1,00:37:29,3810,503,10:23:31,11:01:00,Metro Transit|Sound Transit,BUS|TRAM,1-Line|50,sound-transit:99240|sound-transit:99256|kcm:99261|kcm:31871,Walk 1m29s ~ Beacon Hill Station(99240) ~ TRAM 1-Line 10:25 10:28 ~ SODO Station(99256) ~ Walk 2m7s ~ S Lander St & SODO Busway(99261) ~ BUS 50 10:33 10:57:35 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m25s -173,0,00:46:48,4302,1227,10:14:12,11:01:00,Metro Transit,BUS,50,kcm:30530|kcm:31871,Walk 12m56s ~ S Columbian Way & S Spokane St(30530) ~ BUS 50 10:27:08 10:57:35 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m25s -174,1,00:24:22,2815,209,10:03:31,10:27:53,Sound Generations|Sound Transit,BUS|TRAM,1-Line|Hyde Shuttle,sound-transit:99240|sound-transit:99256|sound-generations:area_560,Walk 1m29s ~ Beacon Hill Station(99240) ~ TRAM 1-Line 10:05 10:08 ~ SODO Station(99256) ~ Walk 1m20s ~ sound-generations:area_560(area_560) ~ BUS null 10:11:20 10:27:53 -174,1,00:24:22,2815,209,10:13:31,10:37:53,Sound Generations|Sound Transit,BUS|TRAM,1-Line|Hyde Shuttle,sound-transit:99240|sound-transit:99256|sound-generations:area_560,Walk 1m29s ~ Beacon Hill Station(99240) ~ TRAM 1-Line 10:15 10:18 ~ SODO Station(99256) ~ Walk 1m20s ~ sound-generations:area_560(area_560) ~ BUS null 10:21:20 10:37:53 -174,1,00:24:22,2815,209,10:23:31,10:47:53,Sound Generations|Sound Transit,BUS|TRAM,1-Line|Hyde Shuttle,sound-transit:99240|sound-transit:99256|sound-generations:area_560,Walk 1m29s ~ Beacon Hill Station(99240) ~ TRAM 1-Line 10:25 10:28 ~ SODO Station(99256) ~ Walk 1m20s ~ sound-generations:area_560(area_560) ~ BUS null 10:31:20 10:47:53 -175,2,01:51:09,9053,821,10:05:00,11:56:09,Metro Transit|Pierce Transit|Sound Transit,BUS,36|578|402,kcm:3460|kcm:1530|pierce-transit:30709|pierce-transit:4136|pierce-transit:29410|pierce-transit:1332,Walk 2m25s ~ Beacon Ave S & S Stevens St(3460) ~ BUS 36 10:07:25 10:22 ~ S Jackson St & 5th Ave S(1530) ~ Walk 1m52s ~ 2nd Ave Ext & Jackson St S(30709) ~ BUS 578 10:33 11:01 ~ Federal Way TC - Bay 2(4136) ~ Walk 1m10s ~ Federal Way TC - Bay 5(29410) ~ BUS 402 11:10 11:50 ~ Meridian S & 9th Ave SW(1332) ~ Walk 6m9s -175,1,02:00:00,9723,1847,10:05:00,12:05:00,Metro Transit|Sound Transit,BUS,36|578,kcm:3460|kcm:1530|pierce-transit:30709|pierce-transit:10401,Walk 2m25s ~ Beacon Ave S & S Stevens St(3460) ~ BUS 36 10:07:25 10:22 ~ S Jackson St & 5th Ave S(1530) ~ Walk 1m52s ~ 2nd Ave Ext & Jackson St S(30709) ~ BUS 578 10:33 11:44 ~ Puyallup Station - Bay 3(10401) ~ Walk 21m -175,2,01:51:45,9310,1110,10:13:31,12:05:16,Pierce Transit|Sound Transit,BUS|TRAM,1-Line|594|400,sound-transit:99240|sound-transit:99260|pierce-transit:595|pierce-transit:20163|pierce-transit:12938|pierce-transit:8058,Walk 1m29s ~ Beacon Hill Station(99240) ~ TRAM 1-Line 10:15 10:20 ~ Stadium Station(99260) ~ Walk 1m4s ~ Bus Wy & Royal Brougham St(595) ~ BUS 594 10:30 11:16 ~ Tacoma Dome Station - Zone E(20163) ~ Walk 1m10s ~ Tacoma Dome Station - Zone C(12938) ~ BUS 400 11:30 11:54 ~ 5th St SW & 9th Ave SW - Red Lot(8058) ~ Walk 11m16s -176,2,01:27:15,7294,395,10:05:00,11:32:15,Metro Transit|Puget Sound Educational Service District|Sound Transit,BUS,36|578|Road to Independence,kcm:3460|kcm:1530|pierce-transit:30709|pierce-transit:4136|pudget-sound-educational:area_622,Walk 2m25s ~ Beacon Ave S & S Stevens St(3460) ~ BUS 36 10:07:25 10:22 ~ S Jackson St & 5th Ave S(1530) ~ Walk 1m52s ~ 2nd Ave Ext & Jackson St S(30709) ~ BUS 578 10:33 11:01 ~ Federal Way TC - Bay 2(4136) ~ Walk 1m59s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 11:04:59 11:32:15 -176,3,01:18:44,7549,618,10:13:31,11:32:15,Metro Transit|Puget Sound Educational Service District|Sound Transit,BUS|TRAM,1-Line|24|578|Road to Independence,sound-transit:99240|sound-transit:99260|kcm:30635|kcm:619|pierce-transit:30709|pierce-transit:4136|pudget-sound-educational:area_622,Walk 1m29s ~ Beacon Hill Station(99240) ~ TRAM 1-Line 10:15 10:20 ~ Stadium Station(99260) ~ Walk 3m46s ~ 4th Ave S & S Royal Brougham Way(30635) ~ BUS 24 10:26 10:28 ~ 4th Ave S & S Jackson St(619) ~ Walk 1m54s ~ 2nd Ave Ext & Jackson St S(30709) ~ BUS 578 10:33 11:01 ~ Federal Way TC - Bay 2(4136) ~ Walk 1m59s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 11:04:59 11:32:15 -176,2,01:23:14,7014,298,10:13:31,11:36:45,Metro Transit|Puget Sound Educational Service District|Sound Transit,BUS|TRAM,1-Line|150|Road to Independence,sound-transit:99240|sound-transit:99256|kcm:99263|kcm:80580|pudget-sound-educational:area_622,Walk 1m29s ~ Beacon Hill Station(99240) ~ TRAM 1-Line 10:15 10:18 ~ SODO Station(99256) ~ Walk 2m30s ~ SODO Busway & S Lander St(99263) ~ BUS 150 10:24 11:08:20 ~ W James St & Lincoln Ave N(80580) ~ Walk 0s ~ pudget-sound-educational:area_622(area_622) ~ BUS null 11:10:20 11:36:45 -177,2,01:45:30,8652,741,10:25:00,12:10:30,Metro Transit|Sound Transit,BUS,36|554|208,kcm:3460|kcm:1510|kcm:1480|kcm:64590|kcm:64593|kcm:64399,Walk 2m25s ~ Beacon Ave S & S Stevens St(3460) ~ BUS 36 10:27:25 10:40:54 ~ S Jackson St & Maynard Ave S(1510) ~ Walk 1m28s ~ S Jackson St & Maynard Ave S(1480) ~ BUS 554 10:46:10 11:12 ~ Issaquah Transit Center - Bay 6(64590) ~ Walk 1m1s ~ Issaquah Transit Center - Bay 4(64593) ~ BUS 208 11:31 12:04:49 ~ Railroad Ave SE & SE River St(64399) ~ Walk 5m41s -177,1,01:47:04,9477,2553,10:23:26,12:10:30,Metro Transit|Sound Transit,BUS,554|208,kcm:8590|kcm:64590|kcm:64593|kcm:64399,Walk 27m34s ~ Rainier Ave S & S Charles St(8590) ~ BUS 554 10:51 11:12 ~ Issaquah Transit Center - Bay 6(64590) ~ Walk 1m1s ~ Issaquah Transit Center - Bay 4(64593) ~ BUS 208 11:31 12:04:49 ~ Railroad Ave SE & SE River St(64399) ~ Walk 5m41s -177,3,02:54:17,13493,861,11:03:31,13:57:48,Metro Transit|Sound Transit,BUS|TRAM,1-Line|545|224|629,sound-transit:99240|sound-transit:99260|kcm:21765|kcm:72488|kcm:68803|kcm:64397,Walk 1m29s ~ Beacon Hill Station(99240) ~ TRAM 1-Line 11:05 11:10 ~ Stadium Station(99260) ~ Walk 3m13s ~ 6th Ave S & S Royal Brougham Way(21765) ~ BUS 545 11:17 12:01:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 12:15:31 12:49 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 13:04 13:51 ~ Railroad Avenue Southeast Ave SE & SE Northern St(64397) ~ Walk 6m48s -178,2,01:36:36,8393,1099,10:33:54,12:10:30,Metro Transit|Sound Generations|Sound Transit,BUS,Hyde Shuttle|554|208,sound-generations:area_564|kcm:8485|kcm:8590|kcm:64590|kcm:64593|kcm:64399,sound-generations:area_564(area_564) ~ BUS null 10:33:54 10:40:49Walk 31s ~ Rainier Ave S & I-90(8485) ~ Walk 7m40s ~ Rainier Ave S & S Charles St(8590) ~ BUS 554 10:51 11:12 ~ Issaquah Transit Center - Bay 6(64590) ~ Walk 1m1s ~ Issaquah Transit Center - Bay 4(64593) ~ BUS 208 11:31 12:04:49 ~ Railroad Ave SE & SE River St(64399) ~ Walk 5m41s -178,1,01:47:04,9477,2553,10:23:26,12:10:30,Metro Transit|Sound Transit,BUS,554|208,kcm:8590|kcm:64590|kcm:64593|kcm:64399,Walk 27m34s ~ Rainier Ave S & S Charles St(8590) ~ BUS 554 10:51 11:12 ~ Issaquah Transit Center - Bay 6(64590) ~ Walk 1m1s ~ Issaquah Transit Center - Bay 4(64593) ~ BUS 208 11:31 12:04:49 ~ Railroad Ave SE & SE River St(64399) ~ Walk 5m41s -178,3,02:54:17,13493,861,11:03:31,13:57:48,Metro Transit|Sound Transit,BUS|TRAM,1-Line|545|224|629,sound-transit:99240|sound-transit:99260|kcm:21765|kcm:72488|kcm:68803|kcm:64397,Walk 1m29s ~ Beacon Hill Station(99240) ~ TRAM 1-Line 11:05 11:10 ~ Stadium Station(99260) ~ Walk 3m13s ~ 6th Ave S & S Royal Brougham Way(21765) ~ BUS 545 11:17 12:01:45 ~ Redmond Way & 166th Ave NE(72488) ~ BUS 224 12:15:31 12:49 ~ Brown Ave NE & NE Richardson St(68803) ~ BUS 629 13:04 13:51 ~ Railroad Avenue Southeast Ave SE & SE Northern St(64397) ~ Walk 6m48s -179,2,00:50:07,5144,453,10:03:31,10:53:38,Metro Transit|Sound Transit,BUS|TRAM,1-Line|131|3,sound-transit:99240|sound-transit:532|kcm:531|kcm:605|kcm:41350,Walk 1m29s ~ Beacon Hill Station(99240) ~ TRAM 1-Line 10:05 10:14 ~ Pioneer Square Station(532) ~ Walk 1m29s ~ 3rd Ave & James St(531) ~ BUS 131 10:17:57 10:27 ~ 3rd Ave & Bell St(605) ~ BUS 3 10:33:07 10:50:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m3s -179,1,00:53:47,4700,388,10:05:00,10:58:47,Metro Transit,BUS,36|13,kcm:3460|kcm:575|kcm:41350,Walk 2m25s ~ Beacon Ave S & S Stevens St(3460) ~ BUS 36 10:07:25 10:31 ~ 3rd Ave & Pike St(575) ~ BUS 13 10:34 10:55:44 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m3s -179,1,00:53:38,4691,388,10:15:00,11:08:38,Metro Transit,BUS,36|3,kcm:3460|kcm:538|kcm:41350,Walk 2m25s ~ Beacon Ave S & S Stevens St(3460) ~ BUS 36 10:17:25 10:36:22 ~ 3rd Ave & Columbia St(538) ~ BUS 3 10:38:24 11:05:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m3s -180,0,01:55:43,13349,8814,10:00:00,11:55:43,,,,,Walk 1h55m43s +1,0,23m22s,2002,0,10:00:00,10:23:22,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:23:22 +1,0,23m22s,2002,0,10:00:00,10:23:22,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:23:22 +1,0,23m22s,2002,0,10:00:00,10:23:22,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:23:22 +2,1,36m2s,3945,788,10:40:34,11:16:36,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|165,volunteer:area_873|kcm:48550|kcm:48620,volunteer:area_873(area_873) ~ BUS null 10:40:34 10:59:42 ~ Walk 5s ~ 1st Ave S & SW 156th St(48550) ~ BUS 165 11:01:47 11:06:26 ~ 1st Ave S & SW 178th St(48620) ~ Walk 10m10s +2,1,1h4m17s,5712,884,10:21:11,11:25:28,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|165,volunteer:area_873|kcm:57448|kcm:47570,volunteer:area_873(area_873) ~ BUS null 10:21:11 10:24:50 ~ Walk 0s ~ SE 240th St & 116th Ave SE(57448) ~ BUS 165 10:26:50 11:14 ~ 1st Ave S & SW Normandy Rd(47570) ~ Walk 11m28s +2,1,1h4m17s,5712,884,10:51:11,11:55:28,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|165,volunteer:area_873|kcm:57448|kcm:47570,volunteer:area_873(area_873) ~ BUS null 10:51:11 10:54:50 ~ Walk 0s ~ SE 240th St & 116th Ave SE(57448) ~ BUS 165 10:56:50 11:44 ~ 1st Ave S & SW Normandy Rd(47570) ~ Walk 11m28s +3,0,18m45s,1725,0,10:00:00,10:18:45,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:18:45 +3,0,18m45s,1725,0,10:00:00,10:18:45,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:18:45 +3,0,18m45s,1725,0,10:00:00,10:18:45,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:18:45 +4,1,28m57s,3475,729,10:19:40,10:48:37,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|156,volunteer:area_873|kcm:48980|kcm:48990,volunteer:area_873(area_873) ~ BUS null 10:19:40 10:36:20 ~ Walk 0s ~ 24th Ave S & S 230th St(48980) ~ BUS 156 10:38:20 10:39:02 ~ 24th Ave S & S 226th St(48990) ~ Walk 9m35s +4,1,28m57s,3475,729,10:49:40,11:18:37,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|156,volunteer:area_873|kcm:48980|kcm:48990,volunteer:area_873(area_873) ~ BUS null 10:49:40 11:06:20 ~ Walk 0s ~ 24th Ave S & S 230th St(48980) ~ BUS 156 11:08:20 11:09:02 ~ 24th Ave S & S 226th St(48990) ~ Walk 9m35s +4,0,1h24m18s,8796,4255,10:23:15,11:47:33,Metro Transit,BUS,165,kcm:57448|kcm:50480,Walk 33m35s ~ SE 240th St & 116th Ave SE(57448) ~ BUS 165 10:56:50 11:25:40 ~ Pacific Hwy S & Kent Des Moines Rd(50480) ~ Walk 21m53s +5,0,31m32s,2556,89,10:00:00,10:31:32,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:30:19 ~ Walk 1m13s +5,0,31m32s,2556,89,10:00:00,10:31:32,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:30:19 ~ Walk 1m13s +5,0,31m32s,2556,89,10:00:00,10:31:32,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:30:19 ~ Walk 1m13s +6,1,45m11s,4547,878,10:01:00,10:46:11,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|50,volunteer:area_873|kcm:31890|kcm:31900,volunteer:area_873(area_873) ~ BUS null 10:01 10:31:33 ~ Walk 24s ~ California Ave SW & SW Hanford St(31890) ~ BUS 50 10:33:57 10:34:37 ~ California Ave SW & SW Stevens St(31900) ~ Walk 11m34s +6,1,36m29s,3577,264,10:33:47,11:10:16,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|128,volunteer:area_873|kcm:31850|kcm:31871,volunteer:area_873(area_873) ~ BUS null 10:33:47 11:03:15 ~ Walk 25s ~ California Ave SW & SW Andover St(31850) ~ BUS 128 11:05:40 11:06:50 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m26s +7,0,28m30s,2310,0,10:00:00,10:28:30,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_1083,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:28:30 +7,0,28m30s,2310,0,07:00:00,07:28:30,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_1083,ccsww-kc:area_897(area_897) ~ BUS null 7:00 7:28:30 +8,1,36m2s,3709,474,10:10:01,10:46:03,Pierce Transit|Volunteer Services: King County,BUS,Volunteer Services: King County|402,ccsww-kc:area_1083|pierce:1334|pierce:1294,ccsww-kc:area_897(area_897) ~ BUS null 10:10:01 10:36:52 ~ Walk 32s ~ Meridian S & 10th Ave SE(1334) ~ BUS 402 10:39:24 10:40:12 ~ Meridian S & 9th Ave SE(1294) ~ Walk 5m51s +8,1,41m,3997,457,11:04:55,11:45:55,Pierce Transit|Volunteer Services: King County,BUS,Volunteer Services: King County|402,ccsww-kc:area_1083|pierce:1338|pierce:1332,ccsww-kc:area_897(area_897) ~ BUS null 11:04:55 11:30:20 ~ Walk 0s ~ Meridian N & River Rd(1338) ~ BUS 402 11:32:20 11:39:31 ~ Meridian S & 9th Ave SW(1332) ~ Walk 6m24s +9,0,38m30s,2910,0,10:00:00,10:38:30,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:38:30 +9,0,38m30s,2910,0,10:00:00,10:38:30,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:38:30 +9,0,38m30s,2910,0,10:00:00,10:38:30,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:38:30 +10,1,46m38s,4213,294,10:23:47,11:10:25,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|SVT,volunteer:area_873|kcm:85395|kcm:82425,volunteer:area_873(area_873) ~ BUS null 10:23:47 11:00:09 ~ Walk 0s ~ 384th Ave SE & SE 92nd St(85395) ~ BUS SVT 11:02:09 11:06:26 ~ Railroad Ave S & SE King St(82425) ~ Walk 3m59s +10,1,52m29s,4665,434,11:18:00,12:10:29,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|208,volunteer:area_873|kcm:64425|kcm:64399,volunteer:area_873(area_873) ~ BUS null 11:18 11:50:44 ~ Walk 8s ~ Snoqualmie Pkwy & SE Jacobia St(64425) ~ BUS 208 11:52:52 12:04:49 ~ Railroad Ave SE & SE River St(64399) ~ Walk 5m40s +11,0,35m9s,2711,3,10:00:00,10:35:09,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:35:06 ~ Walk 3s +11,0,35m9s,2711,3,10:00:00,10:35:09,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:35:06 ~ Walk 3s +11,0,35m9s,2711,3,10:00:00,10:35:09,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:35:06 ~ Walk 3s +12,1,44m58s,4070,248,10:02:08,10:47:06,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|4,volunteer:area_873|kcm:4280|kcm:41350,volunteer:area_873(area_873) ~ BUS null 10:02:08 10:33:22 ~ Walk 6s ~ Taylor Ave N & Lee St(4280) ~ BUS 4 10:35:28 10:43:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m31s +13,0,25m36s,2136,0,10:00:00,10:25:36,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:25:36 +13,0,25m36s,2136,0,10:00:00,10:25:36,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:25:36 +13,0,25m36s,2136,0,10:00:00,10:25:36,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:25:36 +14,1,33m26s,3274,95,10:16:57,10:50:23,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|36,volunteer:area_873|kcm:30390|kcm:3470,volunteer:area_873(area_873) ~ BUS null 10:16:57 10:38:44 ~ Walk 0s ~ Beacon Ave S & S Spencer St(30390) ~ BUS 36 10:40:44 10:49 ~ Beacon Ave S & S Lander St(3470) ~ Walk 1m23s +14,1,33m26s,3274,95,10:46:57,11:20:23,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|36,volunteer:area_873|kcm:30390|kcm:3470,volunteer:area_873(area_873) ~ BUS null 10:46:57 11:08:44 ~ Walk 0s ~ Beacon Ave S & S Spencer St(30390) ~ BUS 36 11:10:44 11:19 ~ Beacon Ave S & S Lander St(3470) ~ Walk 1m23s +15,0,22m55s,1975,0,10:00:00,10:22:55,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:22:55 +15,0,22m55s,1975,0,10:00:00,10:22:55,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:22:55 +15,0,22m55s,1975,0,10:00:00,10:22:55,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:22:55 +16,2,29m24s,3566,0,10:00:14,10:29:38,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|160|Volunteer Transportation,volunteer:area_873|kcm:57190|kcm:57200|volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00:14 10:21:10 ~ Walk 0s ~ 108th Ave SE & SE 217th St(57190) ~ BUS 160 10:23:10 10:23:59 ~ 108th Ave SE & SE 212th St(57200) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 10:25:59 10:29:38 +16,1,46m28s,5295,1754,10:00:14,10:46:42,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|160,volunteer:area_873|kcm:57190|kcm:57200,volunteer:area_873(area_873) ~ BUS null 10:00:14 10:21:10 ~ Walk 0s ~ 108th Ave SE & SE 217th St(57190) ~ BUS 160 10:23:10 10:23:59 ~ 108th Ave SE & SE 212th St(57200) ~ Walk 22m43s +16,2,55m8s,5110,0,10:03:43,10:58:51,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|165|Volunteer Transportation,volunteer:area_873|kcm:48620|kcm:57141|volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:03:43 10:05:26 ~ Walk 0s ~ 1st Ave S & SW 178th St(48620) ~ BUS 165 10:07:26 10:53:10 ~ SE 240th St & 116th Ave SE(57141) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 10:55:10 10:58:51 +17,0,13m2s,1382,0,10:00:00,10:13:02,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:13:02 +17,0,13m2s,1382,0,10:00:00,10:13:02,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:13:02 +17,0,13m2s,1382,0,10:00:00,10:13:02,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:13:02 +18,2,17m32s,2854,0,10:11:03,10:28:35,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|165|Volunteer Transportation,volunteer:area_873|kcm:47540|kcm:47550|volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:11:03 10:13:54 ~ Walk 0s ~ 1st Ave S & S 186th St(47540) ~ BUS 165 10:15:54 10:16:20 ~ 1st Ave S & SW 185th St(47550) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 10:18:20 10:28:35 +18,1,31m21s,3972,1214,10:00:44,10:32:05,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|A Line,volunteer:area_873|kcm:61150|kcm:61170,volunteer:area_873(area_873) ~ BUS null 10:00:44 10:12:12 ~ Walk 0s ~ Pacific Hwy S & S 216th St(61150) ~ BUS A Line 10:14:12 10:16:08 ~ Pacific Hwy S & S 224th St(61170) ~ Walk 15m57s +18,1,33m5s,4412,1670,10:03:43,10:36:48,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|165,volunteer:area_873|kcm:48620|kcm:48810,volunteer:area_873(area_873) ~ BUS null 10:03:43 10:05:26 ~ Walk 0s ~ 1st Ave S & SW 178th St(48620) ~ BUS 165 10:07:26 10:15 ~ Marine View Dr S & S 223rd St(48810) ~ Walk 21m48s +19,0,27m49s,2333,89,10:00:00,10:27:49,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:26:36 ~ Walk 1m13s +19,0,27m49s,2333,89,10:00:00,10:27:49,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:26:36 ~ Walk 1m13s +19,0,27m49s,2333,89,10:00:00,10:27:49,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:26:36 ~ Walk 1m13s +20,1,44m39s,4065,262,10:11:22,10:56:01,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|50,volunteer:area_873|kcm:15395|kcm:31871,volunteer:area_873(area_873) ~ BUS null 10:11:22 10:30:16 ~ Walk 22s ~ 1st Ave S & S Hanford St(15395) ~ BUS 50 10:32:38 10:52:35 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m26s +20,1,42m36s,3948,267,10:27:40,11:10:16,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|128,volunteer:area_873|kcm:36190|kcm:31871,volunteer:area_873(area_873) ~ BUS null 10:27:40 10:45:49 ~ Walk 20s ~ 16th Ave SW & SW Webster St(36190) ~ BUS 128 10:48:09 11:06:50 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m26s +21,0,38m44s,2924,0,10:00:00,10:38:44,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_1083,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:38:44 +21,0,38m44s,2924,0,07:00:00,07:38:44,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_1083,ccsww-kc:area_897(area_897) ~ BUS null 7:00 7:38:44 +22,1,48m27s,4502,538,10:00:23,10:48:50,Pierce Transit|Volunteer Services: King County,BUS,Volunteer Services: King County|402,ccsww-kc:area_1083|pierce:1294|pierce:21821,ccsww-kc:area_897(area_897) ~ BUS null 10:00:23 10:37:53 ~ Walk 19s ~ Meridian S & 9th Ave SE(1294) ~ BUS 402 10:40:12 10:41:23 ~ 3rd St SE & 7th Ave SE(21821) ~ Walk 7m27s +22,1,1h19m39s,7173,1647,10:16:06,11:35:45,Sound Generations: Volunteer Transportation|Sound Transit,BUS,Volunteer Transportation|578,volunteer:area_873|pierce:18728|pierce:10401,volunteer:area_873(area_873) ~ BUS null 10:16:06 10:44:03 ~ Walk 57s ~ Auburn Station - Bay 4(18728) ~ BUS 578 10:47 11:14 ~ Puyallup Station - Bay 3(10401) ~ Walk 21m45s +22,1,1h1m,5197,457,10:44:55,11:45:55,Pierce Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|402,volunteer:area_873|pierce:30893|pierce:1332,volunteer:area_873(area_873) ~ BUS null 10:44:55 11:06:51 ~ Walk 0s ~ 16th Ave S & S 344th St(30893) ~ BUS 402 11:08:51 11:39:31 ~ Meridian S & 9th Ave SW(1332) ~ Walk 6m24s +23,0,44m39s,3279,0,10:00:00,10:44:39,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:44:39 +23,0,44m39s,3279,0,10:00:00,10:44:39,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:44:39 +23,0,44m39s,3279,0,10:00:00,10:44:39,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:44:39 +24,1,52m47s,4582,294,10:17:38,11:10:25,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|SVT,volunteer:area_873|kcm:85395|kcm:82425,volunteer:area_873(area_873) ~ BUS null 10:17:38 11:00:09 ~ Walk 0s ~ 384th Ave SE & SE 92nd St(85395) ~ BUS SVT 11:02:09 11:06:26 ~ Railroad Ave S & SE King St(82425) ~ Walk 3m59s +24,1,1h2m34s,5265,426,11:07:55,12:10:29,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|208,volunteer:area_873|kcm:64416|kcm:64399,volunteer:area_873(area_873) ~ BUS null 11:07:55 11:40:52 ~ Walk 0s ~ I-90 & 270th Ave SE(64416) ~ BUS 208 11:42:52 12:04:49 ~ Railroad Ave SE & SE River St(64399) ~ Walk 5m40s +25,0,27m16s,2238,3,10:00:00,10:27:16,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:27:13 ~ Walk 3s +25,0,27m16s,2238,3,10:00:00,10:27:16,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:27:13 ~ Walk 3s +25,0,27m16s,2238,3,10:00:00,10:27:16,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:27:13 ~ Walk 3s +26,1,36m42s,3797,553,10:05:18,10:42:00,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|4,volunteer:area_873|kcm:3910|kcm:3920,volunteer:area_873(area_873) ~ BUS null 10:05:18 10:31:49 ~ Walk 17s ~ W Mcgraw St & 2nd Ave W(3910) ~ BUS 4 10:34:06 10:34:39 ~ Queen Anne Ave N & W Mcgraw St(3920) ~ Walk 7m21s +26,1,33m12s,3374,264,10:13:54,10:47:06,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|4,volunteer:area_873|kcm:41340|kcm:41350,volunteer:area_873(area_873) ~ BUS null 10:13:54 10:40:21 ~ Walk 22s ~ W Mcgraw St & Queen Anne Ave N(41340) ~ BUS 4 10:42:43 10:43:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m31s +27,0,21m53s,1913,0,10:00:00,10:21:53,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:21:53 +27,0,21m53s,1913,0,10:00:00,10:21:53,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:21:53 +27,0,21m53s,1913,0,10:00:00,10:21:53,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:21:53 +28,1,32m21s,3209,95,10:15:02,10:47:23,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|60,volunteer:area_873|kcm:40871|kcm:3470,volunteer:area_873(area_873) ~ BUS null 10:15:02 10:29:34 ~ Walk 0s ~ Corson Ave S & S Willow St(40871) ~ BUS 60 10:31:34 10:46 ~ Beacon Ave S & S Lander St(3470) ~ Walk 1m23s +28,1,32m21s,3209,95,10:39:02,11:11:23,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|60,volunteer:area_873|kcm:40871|kcm:3470,volunteer:area_873(area_873) ~ BUS null 10:39:02 10:53:34 ~ Walk 0s ~ Corson Ave S & S Willow St(40871) ~ BUS 60 10:55:34 11:10 ~ Beacon Ave S & S Lander St(3470) ~ Walk 1m23s +29,0,18m59s,1739,0,10:00:00,10:18:59,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:18:59 +29,0,18m59s,1739,0,10:00:00,10:18:59,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:18:59 +29,0,18m59s,1739,0,10:00:00,10:18:59,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:18:59 +30,2,25m36s,3338,0,10:01:26,10:27:02,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|160|Volunteer Transportation,volunteer:area_873|kcm:57180|kcm:57185|volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:01:26 10:19:36 ~ Walk 0s ~ 108th Ave SE & SE 224th St(57180) ~ BUS 160 10:21:36 10:22:22 ~ 108th Ave SE & SE 220th Pl(57185) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 10:24:22 10:27:02 +30,1,39m21s,4624,1428,10:01:26,10:40:47,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|160,volunteer:area_873|kcm:57180|kcm:57185,volunteer:area_873(area_873) ~ BUS null 10:01:26 10:19:36 ~ Walk 0s ~ 108th Ave SE & SE 224th St(57180) ~ BUS 160 10:21:36 10:22:22 ~ 108th Ave SE & SE 220th Pl(57185) ~ Walk 18m25s +30,1,28m31s,3405,667,10:20:33,10:49:04,Metro Transit|Sound Generations: Volunteer Transportation,BUS,156|Volunteer Transportation,kcm:50450|kcm:50461|volunteer:area_873,Walk 8m43s ~ 24th Ave S & S 226th St(50450) ~ BUS 156 10:29:16 10:30:10 ~ Kent Des Moines Rd & 24th Ave S(50461) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 10:32:10 10:49:04 +31,0,12m40s,1360,0,10:00:00,10:12:40,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:12:40 +31,0,12m40s,1360,0,10:00:00,10:12:40,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:12:40 +31,0,12m40s,1360,0,10:00:00,10:12:40,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:12:40 +32,1,25m33s,3398,898,10:02:55,10:28:28,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|165,volunteer:area_873|kcm:47390|kcm:47570,volunteer:area_873(area_873) ~ BUS null 10:02:55 10:05:49 ~ Walk 11s ~ Marine View Dr S & S 223rd St(47390) ~ BUS 165 10:08 10:17 ~ 1st Ave S & SW Normandy Rd(47570) ~ Walk 11m28s +32,2,17m37s,2859,0,10:34:45,10:52:22,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|165|Volunteer Transportation,volunteer:area_873|kcm:48770|kcm:48780|volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:34:45 10:40:05 ~ Walk 0s ~ S 216th Pl & S 216th St(48770) ~ BUS 165 10:42:05 10:42:28 ~ S 216th Pl & 4th Pl S(48780) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 10:44:28 10:52:22 +32,1,24m33s,3338,898,10:30:55,10:55:28,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|165,volunteer:area_873|kcm:47390|kcm:47570,volunteer:area_873(area_873) ~ BUS null 10:30:55 10:33:49 ~ Walk 11s ~ Marine View Dr S & S 223rd St(47390) ~ BUS 165 10:36 10:44 ~ 1st Ave S & SW Normandy Rd(47570) ~ Walk 11m28s +33,0,28m46s,2390,89,10:00:00,10:28:46,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:27:33 ~ Walk 1m13s +33,0,28m46s,2390,89,10:00:00,10:28:46,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:27:33 ~ Walk 1m13s +33,0,28m46s,2390,89,10:00:00,10:28:46,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:27:33 ~ Walk 1m13s +34,1,33m56s,3424,264,10:02:05,10:36:01,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|50,volunteer:area_873|kcm:31850|kcm:31871,volunteer:area_873(area_873) ~ BUS null 10:02:05 10:28:47 ~ Walk 25s ~ California Ave SW & SW Andover St(31850) ~ BUS 50 10:31:12 10:32:35 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m26s +34,1,38m20s,4059,756,10:20:33,10:58:53,Metro Transit|Sound Generations: Volunteer Transportation,BUS,156|Volunteer Transportation,kcm:50450|kcm:50461|volunteer:area_873,Walk 8m43s ~ 24th Ave S & S 226th St(50450) ~ BUS 156 10:29:16 10:30:10 ~ Kent Des Moines Rd & 24th Ave S(50461) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 10:32:10 10:57:40 ~ Walk 1m13s +35,0,28m32s,2312,0,10:00:00,10:28:32,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_1083,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:28:32 +35,0,28m32s,2312,0,07:00:00,07:28:32,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_1083,ccsww-kc:area_897(area_897) ~ BUS null 7:00 7:28:32 +36,1,36m4s,3711,474,10:09:59,10:46:03,Pierce Transit|Volunteer Services: King County,BUS,Volunteer Services: King County|402,ccsww-kc:area_1083|pierce:1334|pierce:1294,ccsww-kc:area_897(area_897) ~ BUS null 10:09:59 10:36:52 ~ Walk 32s ~ Meridian S & 10th Ave SE(1334) ~ BUS 402 10:39:24 10:40:12 ~ Meridian S & 9th Ave SE(1294) ~ Walk 5m51s +36,1,52m14s,4671,457,10:53:41,11:45:55,Pierce Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|402,volunteer:area_873|pierce:30893|pierce:1332,volunteer:area_873(area_873) ~ BUS null 10:53:41 11:06:51 ~ Walk 0s ~ 16th Ave S & S 344th St(30893) ~ BUS 402 11:08:51 11:39:31 ~ Meridian S & 9th Ave SW(1332) ~ Walk 6m24s +36,2,1h15m30s,7027,970,10:47:44,12:03:14,Pierce Transit|Sound Generations: Volunteer Transportation|Sound Transit,BUS,Volunteer Transportation|574|400,volunteer:area_873|pierce:3818|pierce:377411996|pierce:12938|pierce:8058,volunteer:area_873(area_873) ~ BUS null 10:47:44 10:52 ~ Walk 0s ~ I-5 & Kent - Des Moines Fwy Station(3818) ~ BUS 574 10:54 11:21 ~ Tacoma Dome Station - Zone H(377411996) ~ Walk 1m49s ~ Tacoma Dome Station - Zone C(12938) ~ BUS 400 11:28 11:51:06 ~ 5th St SW & 9th Ave SW - Red Lot(8058) ~ Walk 12m8s +37,0,44m44s,3284,0,10:00:00,10:44:44,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:44:44 +37,0,44m44s,3284,0,10:00:00,10:44:44,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:44:44 +37,0,44m44s,3284,0,10:00:00,10:44:44,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:44:44 +38,1,52m52s,4587,294,10:17:33,11:10:25,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|SVT,volunteer:area_873|kcm:85395|kcm:82425,volunteer:area_873(area_873) ~ BUS null 10:17:33 11:00:09 ~ Walk 0s ~ 384th Ave SE & SE 92nd St(85395) ~ BUS SVT 11:02:09 11:06:26 ~ Railroad Ave S & SE King St(82425) ~ Walk 3m59s +38,1,1h2m39s,5270,426,11:07:50,12:10:29,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|208,volunteer:area_873|kcm:64416|kcm:64399,volunteer:area_873(area_873) ~ BUS null 11:07:50 11:40:52 ~ Walk 0s ~ I-90 & 270th Ave SE(64416) ~ BUS 208 11:42:52 12:04:49 ~ Railroad Ave SE & SE River St(64399) ~ Walk 5m40s +39,0,32m23s,2545,3,10:00:00,10:32:23,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:32:20 ~ Walk 3s +39,0,32m23s,2545,3,10:00:00,10:32:23,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:32:20 ~ Walk 3s +39,0,32m23s,2545,3,10:00:00,10:32:23,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:32:20 ~ Walk 3s +40,1,42m12s,3904,248,10:04:54,10:47:06,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|4,volunteer:area_873|kcm:4280|kcm:41350,volunteer:area_873(area_873) ~ BUS null 10:04:54 10:33:22 ~ Walk 6s ~ Taylor Ave N & Lee St(4280) ~ BUS 4 10:35:28 10:43:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m31s +40,1,42m12s,3904,248,10:49:54,11:32:06,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|4,volunteer:area_873|kcm:4280|kcm:41350,volunteer:area_873(area_873) ~ BUS null 10:49:54 11:18:22 ~ Walk 6s ~ Taylor Ave N & Lee St(4280) ~ BUS 4 11:20:28 11:28:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m31s +41,0,22m50s,1970,0,10:00:00,10:22:50,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:22:50 +41,0,22m50s,1970,0,10:00:00,10:22:50,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:22:50 +41,0,22m50s,1970,0,10:00:00,10:22:50,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:22:50 +42,1,30m40s,3108,95,10:19:43,10:50:23,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|36,volunteer:area_873|kcm:30390|kcm:3470,volunteer:area_873(area_873) ~ BUS null 10:19:43 10:38:44 ~ Walk 0s ~ Beacon Ave S & S Spencer St(30390) ~ BUS 36 10:40:44 10:49 ~ Beacon Ave S & S Lander St(3470) ~ Walk 1m23s +42,1,30m40s,3108,95,10:49:43,11:20:23,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|36,volunteer:area_873|kcm:30390|kcm:3470,volunteer:area_873(area_873) ~ BUS null 10:49:43 11:08:44 ~ Walk 0s ~ Beacon Ave S & S Spencer St(30390) ~ BUS 36 11:10:44 11:19 ~ Beacon Ave S & S Lander St(3470) ~ Walk 1m23s +43,0,32m7s,2591,89,10:00:00,10:32:07,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,Walk 1m13s ~ volunteer:area_873(area_873) ~ BUS null 10:01:13 10:32:07 +43,0,32m7s,2591,89,10:00:00,10:32:07,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,Walk 1m13s ~ hopelink:area_1085(area_1085) ~ BUS null 10:01:13 10:32:07 +43,0,32m7s,2591,89,10:00:00,10:32:07,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,Walk 1m13s ~ ccsww-kc:area_897(area_897) ~ BUS null 10:01:13 10:32:07 +44,2,42m20s,4407,89,10:05:35,10:47:55,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|160|Volunteer Transportation,volunteer:area_873|kcm:59370|kcm:57340|volunteer:area_873,Walk 1m13s ~ volunteer:area_873(area_873) ~ BUS null 10:06:48 10:31:38 ~ Walk 0s ~ S Carr Rd & Talbot Rd S(59370) ~ BUS 160 10:33:38 10:42:04 ~ 108th Ave SE & SE 204th St(57340) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 10:44:04 10:47:55 +44,1,52m29s,5477,1517,10:00:18,10:52:47,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|160,volunteer:area_873|kcm:57180|kcm:57185,Walk 1m13s ~ volunteer:area_873(area_873) ~ BUS null 10:01:31 10:31:36 ~ Walk 0s ~ 108th Ave SE & SE 224th St(57180) ~ BUS 160 10:33:36 10:34:22 ~ 108th Ave SE & SE 220th Pl(57185) ~ Walk 18m25s +44,1,39m25s,3727,219,10:45:16,11:24:41,Metro Transit|Sound Generations: Volunteer Transportation,BUS,50|Volunteer Transportation,kcm:31970|kcm:22820|volunteer:area_873,Walk 2m45s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:48:01 10:55:34 ~ 35th Ave SW & SW Avalon Way(22820) ~ Walk 11s ~ volunteer:area_873(area_873) ~ BUS null 10:57:45 11:24:41 +45,0,27m6s,2290,89,10:00:00,10:27:06,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,Walk 1m13s ~ volunteer:area_873(area_873) ~ BUS null 10:01:13 10:27:06 +45,0,27m6s,2290,89,10:00:00,10:27:06,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,Walk 1m13s ~ hopelink:area_1085(area_1085) ~ BUS null 10:01:13 10:27:06 +45,0,27m6s,2290,89,10:00:00,10:27:06,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,Walk 1m13s ~ ccsww-kc:area_897(area_897) ~ BUS null 10:01:13 10:27:06 +46,1,39m8s,4197,879,10:07:28,10:46:36,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|165,volunteer:area_873|kcm:48570|kcm:48620,Walk 1m13s ~ volunteer:area_873(area_873) ~ BUS null 10:08:41 10:30:21 ~ Walk 7s ~ 1st Ave S & SW 160th St(48570) ~ BUS 165 10:32:28 10:36:26 ~ 1st Ave S & SW 178th St(48620) ~ Walk 10m10s +46,1,38m21s,3657,214,10:21:31,10:59:52,Metro Transit|Sound Generations: Volunteer Transportation,BUS,128|Volunteer Transportation,kcm:31970|kcm:22170|volunteer:area_873,Walk 2m45s ~ California Ave SW & SW Spokane St(31970) ~ BUS 128 10:24:16 10:40:20 ~ Dumar Way SW & SW Orchard St(22170) ~ Walk 13s ~ volunteer:area_873(area_873) ~ BUS null 10:42:33 10:59:52 +46,1,38m21s,3657,214,11:01:31,11:39:52,Metro Transit|Sound Generations: Volunteer Transportation,BUS,128|Volunteer Transportation,kcm:31970|kcm:22170|volunteer:area_873,Walk 2m45s ~ California Ave SW & SW Spokane St(31970) ~ BUS 128 11:04:16 11:20:20 ~ Dumar Way SW & SW Orchard St(22170) ~ Walk 13s ~ volunteer:area_873(area_873) ~ BUS null 11:22:33 11:39:52 +47,0,29m17s,2421,89,10:00:00,10:29:17,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,Walk 1m13s ~ volunteer:area_873(area_873) ~ BUS null 10:01:13 10:29:17 +47,0,29m17s,2421,89,10:00:00,10:29:17,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,Walk 1m13s ~ hopelink:area_1085(area_1085) ~ BUS null 10:01:13 10:29:17 +47,0,29m17s,2421,89,10:00:00,10:29:17,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,Walk 1m13s ~ ccsww-kc:area_897(area_897) ~ BUS null 10:01:13 10:29:17 +48,1,36m35s,3557,219,10:45:16,11:21:51,Metro Transit|Sound Generations: Volunteer Transportation,BUS,50|Volunteer Transportation,kcm:31970|kcm:22820|volunteer:area_873,Walk 2m45s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:48:01 10:55:34 ~ 35th Ave SW & SW Avalon Way(22820) ~ Walk 11s ~ volunteer:area_873(area_873) ~ BUS null 10:57:45 11:21:51 +50,1,1h30m1s,7860,1736,10:05:44,11:35:45,Sound Generations: Volunteer Transportation|Sound Transit,BUS,Volunteer Transportation|578,volunteer:area_873|pierce:18728|pierce:10401,Walk 1m13s ~ volunteer:area_873(area_873) ~ BUS null 10:06:57 10:44:03 ~ Walk 57s ~ Auburn Station - Bay 4(18728) ~ BUS 578 10:47 11:14 ~ Puyallup Station - Bay 3(10401) ~ Walk 21m45s +50,1,55m14s,4676,219,10:45:16,11:40:30,Metro Transit|Volunteer Services: King County,BUS,50|Volunteer Services: King County,kcm:31970|kcm:22820|ccsww-kc:area_1083,Walk 2m45s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:48:01 10:55:34 ~ 35th Ave SW & SW Avalon Way(22820) ~ Walk 11s ~ ccsww-kc:area_897(area_897) ~ BUS null 10:57:45 11:40:30 +50,1,1h12m25s,5946,546,10:33:30,11:45:55,Pierce Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|402,volunteer:area_873|pierce:30893|pierce:1332,Walk 1m13s ~ volunteer:area_873(area_873) ~ BUS null 10:34:43 11:06:51 ~ Walk 0s ~ 16th Ave S & S 344th St(30893) ~ BUS 402 11:08:51 11:39:31 ~ Meridian S & 9th Ave SW(1332) ~ Walk 6m24s +51,0,42m42s,3226,89,10:00:00,10:42:42,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,Walk 1m13s ~ volunteer:area_873(area_873) ~ BUS null 10:01:13 10:42:42 +51,0,42m42s,3226,89,10:00:00,10:42:42,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,Walk 1m13s ~ hopelink:area_1085(area_1085) ~ BUS null 10:01:13 10:42:42 +51,0,42m42s,3226,89,10:00:00,10:42:42,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,Walk 1m13s ~ ccsww-kc:area_897(area_897) ~ BUS null 10:01:13 10:42:42 +52,1,49m50s,4352,219,10:45:16,11:35:06,Metro Transit|Sound Generations: Volunteer Transportation,BUS,50|Volunteer Transportation,kcm:31970|kcm:22820|volunteer:area_873,Walk 2m45s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:48:01 10:55:34 ~ 35th Ave SW & SW Avalon Way(22820) ~ Walk 11s ~ volunteer:area_873(area_873) ~ BUS null 10:57:45 11:35:06 +53,0,19m58s,1865,92,10:00:00,10:19:58,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,Walk 1m13s ~ volunteer:area_873(area_873) ~ BUS null 10:01:13 10:19:55 ~ Walk 3s +53,0,19m58s,1865,92,10:00:00,10:19:58,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,Walk 1m13s ~ hopelink:area_1085(area_1085) ~ BUS null 10:01:13 10:19:55 ~ Walk 3s +53,0,19m58s,1865,92,10:00:00,10:19:58,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,Walk 1m13s ~ ccsww-kc:area_897(area_897) ~ BUS null 10:01:13 10:19:55 ~ Walk 3s +54,1,27m16s,3001,222,10:25:16,10:52:32,Metro Transit|Sound Generations: Volunteer Transportation,BUS,50|Volunteer Transportation,kcm:31970|kcm:22820|volunteer:area_873,Walk 2m45s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:28:01 10:35:34 ~ 35th Ave SW & SW Avalon Way(22820) ~ Walk 11s ~ volunteer:area_873(area_873) ~ BUS null 10:37:45 10:52:29 ~ Walk 3s +54,1,27m16s,3001,222,10:45:16,11:12:32,Metro Transit|Sound Generations: Volunteer Transportation,BUS,50|Volunteer Transportation,kcm:31970|kcm:22820|volunteer:area_873,Walk 2m45s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:48:01 10:55:34 ~ 35th Ave SW & SW Avalon Way(22820) ~ Walk 11s ~ volunteer:area_873(area_873) ~ BUS null 10:57:45 11:12:29 ~ Walk 3s +54,1,27m44s,3171,423,10:48:20,11:16:04,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|2,volunteer:area_873|kcm:2820|kcm:2830,Walk 1m13s ~ volunteer:area_873(area_873) ~ BUS null 10:49:33 11:08:39 ~ Walk 6s ~ 6th Ave W & W Mcgraw St(2820) ~ BUS 2 11:10:45 11:11:37 ~ 6th Ave W & W Smith St(2830) ~ Walk 4m27s +55,0,13m48s,1492,89,10:00:00,10:13:48,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,Walk 1m13s ~ volunteer:area_873(area_873) ~ BUS null 10:01:13 10:13:48 +55,0,13m48s,1492,89,10:00:00,10:13:48,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,Walk 1m13s ~ hopelink:area_1085(area_1085) ~ BUS null 10:01:13 10:13:48 +55,0,13m48s,1492,89,10:00:00,10:13:48,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,Walk 1m13s ~ ccsww-kc:area_897(area_897) ~ BUS null 10:01:13 10:13:48 +56,1,18m,2424,202,10:05:23,10:23:23,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|60,volunteer:area_873|kcm:41850|kcm:3470,Walk 1m13s ~ volunteer:area_873(area_873) ~ BUS null 10:06:36 10:17:08 ~ Walk 19s ~ 15th Ave S & S Spokane St(41850) ~ BUS 60 10:19:27 10:22 ~ Beacon Ave S & S Lander St(3470) ~ Walk 1m23s +56,1,21m6s,2628,219,10:25:16,10:46:22,Metro Transit|Sound Generations: Volunteer Transportation,BUS,50|Volunteer Transportation,kcm:31970|kcm:22820|volunteer:area_873,Walk 2m45s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:28:01 10:35:34 ~ 35th Ave SW & SW Avalon Way(22820) ~ Walk 11s ~ volunteer:area_873(area_873) ~ BUS null 10:37:45 10:46:22 +56,1,42m7s,4037,438,10:05:16,10:47:23,Metro Transit,BUS,50|60,kcm:31970|kcm:30770|kcm:41850|kcm:3470,Walk 2m45s ~ California Ave SW & SW Spokane St(31970) ~ BUS 50 10:08:01 10:33:46 ~ S Columbian Way & S Spokane St(30770) ~ Walk 3m11s ~ 15th Ave S & S Spokane St(41850) ~ BUS 60 10:43:27 10:46 ~ Beacon Ave S & S Lander St(3470) ~ Walk 1m23s +58,2,1h9m7s,6673,984,10:14:12,11:23:19,Pierce Transit|Sound Generations: Volunteer Transportation|Sound Transit,BUS,400|578|Volunteer Transportation,pierce:6085|pierce:11956|pierce:10401|pierce:8770|volunteer:area_873,Walk 11m22s ~ Fairview Dr & 9th Ave SW Red Lot(6085) ~ BUS 400 10:25:34 10:29 ~ Puyallup Station - Bay 1(11956) ~ Walk 1m20s ~ Puyallup Station - Bay 3(10401) ~ BUS 578 10:33 11:04 ~ Auburn Station - Bay 3(8770) ~ Walk 38s ~ volunteer:area_873(area_873) ~ BUS null 11:06:38 11:23:19 +58,1,1h12m8s,6703,1622,10:11:11,11:23:19,Sound Generations: Volunteer Transportation|Sound Transit,BUS,578|Volunteer Transportation,pierce:10401|pierce:8770|volunteer:area_873,Walk 21m49s ~ Puyallup Station - Bay 3(10401) ~ BUS 578 10:33 11:04 ~ Auburn Station - Bay 3(8770) ~ Walk 38s ~ volunteer:area_873(area_873) ~ BUS null 11:06:38 11:23:19 +58,1,59m3s,5068,440,10:34:17,11:33:20,Pierce Transit|Sound Generations: Volunteer Transportation,BUS,402|Volunteer Transportation,pierce:1294|pierce:1003|volunteer:area_873,Walk 5m55s ~ Meridian S & 9th Ave SE(1294) ~ BUS 402 10:40:12 11:12:13 ~ Enchanted Pkwy & S 352nd St(1003) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 11:14:13 11:33:20 +60,1,1h2m48s,5293,440,10:34:17,11:37:05,Pierce Transit|Sound Generations: Volunteer Transportation,BUS,402|Volunteer Transportation,pierce:1294|pierce:1003|volunteer:area_873,Walk 5m55s ~ Meridian S & 9th Ave SE(1294) ~ BUS 402 10:40:12 11:12:13 ~ Enchanted Pkwy & S 352nd St(1003) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 11:14:13 11:37:05 +60,2,1h35m43s,8169,850,10:14:12,11:49:55,Pierce Transit|Sound Generations: Volunteer Transportation|Sound Transit,BUS,400|574|Volunteer Transportation,pierce:6085|pierce:20163|pierce:3046|pierce:16997|volunteer:area_873,Walk 11m22s ~ Fairview Dr & 9th Ave SW Red Lot(6085) ~ BUS 400 10:25:34 10:49 ~ Tacoma Dome Station - Zone E(20163) ~ Walk 20s ~ Tacoma Dome Station - Zone A(3046) ~ BUS 574 10:59 11:39:08 ~ 188th St S & 42nd Av S(16997) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 11:41:08 11:49:55 +60,1,1h22m38s,7333,1622,10:43:11,12:05:49,Sound Generations: Volunteer Transportation|Sound Transit,BUS,578|Volunteer Transportation,pierce:10401|pierce:8770|volunteer:area_873,Walk 21m49s ~ Puyallup Station - Bay 3(10401) ~ BUS 578 11:05 11:36 ~ Auburn Station - Bay 3(8770) ~ Walk 38s ~ volunteer:area_873(area_873) ~ BUS null 11:38:38 12:05:49 +62,1,1h13m33s,6788,1622,10:11:11,11:24:44,Sound Generations: Volunteer Transportation|Sound Transit,BUS,578|Volunteer Transportation,pierce:10401|pierce:8770|volunteer:area_873,Walk 21m49s ~ Puyallup Station - Bay 3(10401) ~ BUS 578 10:33 11:04 ~ Auburn Station - Bay 3(8770) ~ Walk 38s ~ volunteer:area_873(area_873) ~ BUS null 11:06:38 11:24:44 +62,1,57m6s,4951,440,10:34:17,11:31:23,Pierce Transit|Sound Generations: Volunteer Transportation,BUS,402|Volunteer Transportation,pierce:1294|pierce:1003|volunteer:area_873,Walk 5m55s ~ Meridian S & 9th Ave SE(1294) ~ BUS 402 10:40:12 11:12:13 ~ Enchanted Pkwy & S 352nd St(1003) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 11:14:13 11:31:23 +62,2,1h21m50s,7357,880,10:14:12,11:36:02,Pierce Transit|Sound Generations: Volunteer Transportation|Sound Transit,BUS,400|574|Volunteer Transportation,pierce:6085|pierce:20163|pierce:3046|pierce:14363|volunteer:area_873,Walk 11m22s ~ Fairview Dr & 9th Ave SW Red Lot(6085) ~ BUS 400 10:25:34 10:49 ~ Tacoma Dome Station - Zone E(20163) ~ Walk 20s ~ Tacoma Dome Station - Zone A(3046) ~ BUS 574 10:59 11:28 ~ I-5 & Kent - Des Moines Fwy Station(14363) ~ Walk 25s ~ volunteer:area_873(area_873) ~ BUS null 11:30:25 11:36:02 +64,1,1h13m16s,5985,529,10:34:17,11:47:33,Pierce Transit|Sound Generations: Volunteer Transportation,BUS,402|Volunteer Transportation,pierce:1294|pierce:1003|volunteer:area_873,Walk 5m55s ~ Meridian S & 9th Ave SE(1294) ~ BUS 402 10:40:12 11:12:13 ~ Enchanted Pkwy & S 352nd St(1003) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 11:14:13 11:46:20 ~ Walk 1m13s +64,1,1h53m25s,9252,1726,10:11:11,12:04:36,Sound Generations: Volunteer Transportation|Sound Transit,BUS,578|Volunteer Transportation,pierce:10401|pierce:24707|volunteer:area_873,Walk 21m49s ~ Puyallup Station - Bay 3(10401) ~ BUS 578 10:33 11:47 ~ 4th Ave & University(24707) ~ Walk 49s ~ volunteer:area_873(area_873) ~ BUS null 11:49:49 12:03:23 ~ Walk 1m13s +64,2,2h1m49s,9933,1126,10:14:12,12:16:01,Metro Transit|Pierce Transit|Sound Transit,BUS,400|594|50,pierce:6085|pierce:20163|pierce:27454|pierce:596|kcm:99252|kcm:31871,Walk 11m22s ~ Fairview Dr & 9th Ave SW Red Lot(6085) ~ BUS 400 10:25:34 10:49 ~ Tacoma Dome Station - Zone E(20163) ~ Walk 47s ~ Tacoma Dome Station - Zone B(27454) ~ BUS 594 11:07 11:44 ~ Bus Wy & S Spokane St(596) ~ Walk 1s ~ SODO Busway & S Spokane St(99252) ~ BUS 50 11:48:43 12:12:35 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m26s +66,2,1h28m6s,7812,984,10:14:12,11:42:18,Pierce Transit|Sound Generations: Volunteer Transportation|Sound Transit,BUS,400|578|Volunteer Transportation,pierce:6085|pierce:11956|pierce:10401|pierce:8770|volunteer:area_873,Walk 11m22s ~ Fairview Dr & 9th Ave SW Red Lot(6085) ~ BUS 400 10:25:34 10:29 ~ Puyallup Station - Bay 1(11956) ~ Walk 1m20s ~ Puyallup Station - Bay 3(10401) ~ BUS 578 10:33 11:04 ~ Auburn Station - Bay 3(8770) ~ Walk 38s ~ volunteer:area_873(area_873) ~ BUS null 11:06:38 11:42:18 +66,1,1h31m7s,7842,1622,10:11:11,11:42:18,Sound Generations: Volunteer Transportation|Sound Transit,BUS,578|Volunteer Transportation,pierce:10401|pierce:8770|volunteer:area_873,Walk 21m49s ~ Puyallup Station - Bay 3(10401) ~ BUS 578 10:33 11:04 ~ Auburn Station - Bay 3(8770) ~ Walk 38s ~ volunteer:area_873(area_873) ~ BUS null 11:06:38 11:42:18 +66,1,1h18m,6205,440,10:34:17,11:52:17,Pierce Transit|Sound Generations: Volunteer Transportation,BUS,402|Volunteer Transportation,pierce:1294|pierce:1003|volunteer:area_873,Walk 5m55s ~ Meridian S & 9th Ave SE(1294) ~ BUS 402 10:40:12 11:12:13 ~ Enchanted Pkwy & S 352nd St(1003) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 11:14:13 11:52:17 +68,1,1h16m48s,6136,443,10:34:17,11:51:05,Pierce Transit|Sound Generations: Volunteer Transportation,BUS,402|Volunteer Transportation,pierce:1294|pierce:1003|volunteer:area_873,Walk 5m55s ~ Meridian S & 9th Ave SE(1294) ~ BUS 402 10:40:12 11:12:13 ~ Enchanted Pkwy & S 352nd St(1003) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 11:14:13 11:51:02 ~ Walk 3s +68,2,2h13m46s,10807,1358,10:14:12,12:27:58,Metro Transit|Pierce Transit|Sound Transit,BUS,400|578|13,pierce:6085|pierce:11956|pierce:10401|pierce:13217|kcm:575|kcm:41350,Walk 11m22s ~ Fairview Dr & 9th Ave SW Red Lot(6085) ~ BUS 400 10:25:34 10:29 ~ Puyallup Station - Bay 1(11956) ~ Walk 1m20s ~ Puyallup Station - Bay 3(10401) ~ BUS 578 10:33 11:49 ~ 4th Ave & Pine St(13217) ~ Walk 3m9s ~ 3rd Ave & Pike St(575) ~ BUS 13 12:02 12:24:27 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m31s +68,1,2h16m47s,10837,1996,10:11:11,12:27:58,Metro Transit|Sound Transit,BUS,578|13,pierce:10401|pierce:13217|kcm:575|kcm:41350,Walk 21m49s ~ Puyallup Station - Bay 3(10401) ~ BUS 578 10:33 11:49 ~ 4th Ave & Pine St(13217) ~ Walk 3m9s ~ 3rd Ave & Pike St(575) ~ BUS 13 12:02 12:24:27 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m31s +70,1,1h7m18s,5563,440,10:34:17,11:41:35,Pierce Transit|Sound Generations: Volunteer Transportation,BUS,402|Volunteer Transportation,pierce:1294|pierce:1003|volunteer:area_873,Walk 5m55s ~ Meridian S & 9th Ave SE(1294) ~ BUS 402 10:40:12 11:12:13 ~ Enchanted Pkwy & S 352nd St(1003) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 11:14:13 11:41:35 +70,1,1h58m48s,10232,2626,10:14:12,12:13:00,Pierce Transit|Sound Transit,BUS,400|594,pierce:6085|pierce:20163|pierce:27454|pierce:590,Walk 11m22s ~ Fairview Dr & 9th Ave SW Red Lot(6085) ~ BUS 400 10:25:34 10:49 ~ Tacoma Dome Station - Zone E(20163) ~ Walk 47s ~ Tacoma Dome Station - Zone B(27454) ~ BUS 594 11:07 11:48:46 ~ Bus Wy & Holgate St(590) ~ Walk 24m14s +70,2,1h59m54s,9794,1104,10:14:12,12:14:06,Metro Transit|Pierce Transit|Sound Transit,BUS,400|594|36,pierce:6085|pierce:20163|pierce:27454|pierce:267|kcm:1471|kcm:3810,Walk 11m22s ~ Fairview Dr & 9th Ave SW Red Lot(6085) ~ BUS 400 10:25:34 10:49 ~ Tacoma Dome Station - Zone E(20163) ~ Walk 47s ~ Tacoma Dome Station - Zone B(27454) ~ BUS 594 11:07 11:53 ~ 4th Ave S & Jackson St(267) ~ Walk 1m55s ~ S Jackson St & 5th Ave S(1471) ~ BUS 36 12:00 12:12 ~ Beacon Ave S & S Lander St(3810) ~ Walk 2m6s +71,0,38m41s,2921,0,10:00:00,10:38:41,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:38:41 +71,0,38m41s,2921,0,10:00:00,10:38:41,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:38:41 +71,0,38m41s,2921,0,10:00:00,10:38:41,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:38:41 +72,2,47m6s,4628,0,10:02:51,10:49:57,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|160|Volunteer Transportation,volunteer:area_873|kcm:57350|kcm:57375|volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:02:51 10:41 ~ Walk 0s ~ 108th Ave SE & SE 208th St(57350) ~ BUS 160 10:43 10:45:16 ~ 108th Ave SE & SE 220th Pl(57375) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 10:47:16 10:49:57 +72,2,45m9s,4511,0,10:17:26,11:02:35,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|165|Volunteer Transportation,volunteer:area_873|kcm:62173|kcm:57448|volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:17:26 10:49 ~ Walk 0s ~ 132nd Ave SE & SE 256th St(62173) ~ BUS 165 10:51 10:56:50 ~ SE 240th St & 116th Ave SE(57448) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 10:58:50 11:02:35 +72,1,1h47s,5906,1423,10:02:51,11:03:38,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|160,volunteer:area_873|kcm:57350|kcm:57375,volunteer:area_873(area_873) ~ BUS null 10:02:51 10:41 ~ Walk 0s ~ 108th Ave SE & SE 208th St(57350) ~ BUS 160 10:43 10:45:16 ~ 108th Ave SE & SE 220th Pl(57375) ~ Walk 18m22s +73,0,44m55s,3295,0,10:00:00,10:44:55,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:44:55 +73,0,44m55s,3295,0,10:00:00,10:44:55,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:44:55 +73,0,44m55s,3295,0,10:00:00,10:44:55,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:44:55 +74,2,50m16s,4818,0,10:02:13,10:52:29,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|165|Volunteer Transportation,volunteer:area_873|kcm:47590|kcm:47600|volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:02:13 10:44:39 ~ Walk 0s ~ 1st Ave S & S 170th St(47590) ~ BUS 165 10:46:39 10:47:22 ~ 1st Ave S & S 168th St(47600) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 10:49:22 10:52:29 +74,1,59m6s,4961,294,10:31:36,11:30:42,Metro Transit|Sound Generations: Volunteer Transportation,BUS,208|Volunteer Transportation,kcm:82425|kcm:64470|volunteer:area_873,Walk 3m59s ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 10:55:11 ~ I-90 & 270th Ave SE(64470) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 10:57:11 11:30:42 +76,1,55m36s,5030,667,10:12:37,11:08:13,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|156,volunteer:area_873|kcm:50445|kcm:50450,volunteer:area_873(area_873) ~ BUS null 10:12:37 10:56:34 ~ Walk 0s ~ 24th Ave S & S 223rd St(50445) ~ BUS 156 10:58:34 10:59:31 ~ 24th Ave S & S 226th St(50450) ~ Walk 8m42s +76,1,59m30s,4985,294,10:31:36,11:31:06,Metro Transit|Sound Generations: Volunteer Transportation,BUS,208|Volunteer Transportation,kcm:82425|kcm:64470|volunteer:area_873,Walk 3m59s ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 10:55:11 ~ I-90 & 270th Ave SE(64470) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 10:57:11 11:31:06 +77,0,41m36s,3160,89,10:00:00,10:41:36,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:40:23 ~ Walk 1m13s +77,0,41m36s,3160,89,10:00:00,10:41:36,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:40:23 ~ Walk 1m13s +77,0,41m36s,3160,89,10:00:00,10:41:36,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:40:23 ~ Walk 1m13s +78,1,46m33s,4181,264,10:03:43,10:50:16,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|128,volunteer:area_873|kcm:31850|kcm:31871,volunteer:area_873(area_873) ~ BUS null 10:03:43 10:43:15 ~ Walk 25s ~ California Ave SW & SW Andover St(31850) ~ BUS 128 10:45:40 10:46:50 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m26s +78,1,55m47s,4827,383,10:31:36,11:27:23,Metro Transit|Sound Generations: Volunteer Transportation,BUS,208|Volunteer Transportation,kcm:82425|kcm:64470|volunteer:area_873,Walk 3m59s ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 10:55:11 ~ I-90 & 270th Ave SE(64470) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 10:57:11 11:26:10 ~ Walk 1m13s +80,1,58m58s,4953,294,10:31:36,11:30:34,Metro Transit|Volunteer Services: King County,BUS,208|Volunteer Services: King County,kcm:82425|kcm:64415|ccsww-kc:area_1083,Walk 3m59s ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 10:44:31 ~ Snoqualmie Pkwy & Swenson Dr SE(64415) ~ Walk 0s ~ ccsww-kc:area_897(area_897) ~ BUS null 10:46:31 11:30:34 +80,1,1h27m34s,7648,1647,10:08:11,11:35:45,Sound Generations: Volunteer Transportation|Sound Transit,BUS,Volunteer Transportation|578,volunteer:area_873|pierce:18728|pierce:10401,volunteer:area_873(area_873) ~ BUS null 10:08:11 10:44:03 ~ Walk 57s ~ Auburn Station - Bay 4(18728) ~ BUS 578 10:47 11:14 ~ Puyallup Station - Bay 3(10401) ~ Walk 21m45s +80,1,1h17m45s,6202,457,10:28:10,11:45:55,Pierce Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|402,volunteer:area_873|pierce:30893|pierce:1332,volunteer:area_873(area_873) ~ BUS null 10:28:10 11:06:51 ~ Walk 0s ~ 16th Ave S & S 344th St(30893) ~ BUS 402 11:08:51 11:39:31 ~ Meridian S & 9th Ave SW(1332) ~ Walk 6m24s +81,0,41m43s,3105,3,10:00:00,10:41:43,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:41:40 ~ Walk 3s +81,0,41m43s,3105,3,10:00:00,10:41:43,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:41:40 ~ Walk 3s +81,0,41m43s,3105,3,10:00:00,10:41:43,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:41:40 ~ Walk 3s +82,1,47m39s,4241,264,10:14:27,11:02:06,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|4,volunteer:area_873|kcm:41340|kcm:41350,volunteer:area_873(area_873) ~ BUS null 10:14:27 10:55:21 ~ Walk 22s ~ W Mcgraw St & Queen Anne Ave N(41340) ~ BUS 4 10:57:43 10:58:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m31s +82,1,55m52s,4770,297,10:31:36,11:27:28,Metro Transit|Sound Generations: Volunteer Transportation,BUS,208|Volunteer Transportation,kcm:82425|kcm:64470|volunteer:area_873,Walk 3m59s ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 10:55:11 ~ I-90 & 270th Ave SE(64470) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 10:57:11 11:27:25 ~ Walk 3s +83,0,33m51s,2631,0,10:00:00,10:33:51,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:33:51 +83,0,33m51s,2631,0,10:00:00,10:33:51,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:33:51 +83,0,33m51s,2631,0,10:00:00,10:33:51,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:33:51 +84,1,39m45s,3665,113,10:19:38,10:59:23,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|60,volunteer:area_873|kcm:41850|kcm:3470,volunteer:area_873(area_873) ~ BUS null 10:19:38 10:53:08 ~ Walk 19s ~ 15th Ave S & S Spokane St(41850) ~ BUS 60 10:55:27 10:58 ~ Beacon Ave S & S Lander St(3470) ~ Walk 1m23s +84,1,48m,4295,294,10:31:36,11:19:36,Metro Transit|Sound Generations: Volunteer Transportation,BUS,208|Volunteer Transportation,kcm:82425|kcm:64470|volunteer:area_873,Walk 3m59s ~ Railroad Ave S & SE King St(82425) ~ BUS 208 10:35:35 10:55:11 ~ I-90 & 270th Ave SE(64470) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 10:57:11 11:19:36 +85,0,34m42s,2684,3,10:00:00,10:34:42,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,Walk 3s ~ volunteer:area_873(area_873) ~ BUS null 10:00:03 10:34:42 +85,0,34m42s,2684,3,10:00:00,10:34:42,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,Walk 3s ~ hopelink:area_1085(area_1085) ~ BUS null 10:00:03 10:34:42 +85,0,34m42s,2684,3,10:00:00,10:34:42,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,Walk 3s ~ ccsww-kc:area_897(area_897) ~ BUS null 10:00:03 10:34:42 +86,2,40m43s,4248,3,10:09:14,10:49:57,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|160|Volunteer Transportation,volunteer:area_873|kcm:57350|kcm:57375|volunteer:area_873,Walk 3s ~ volunteer:area_873(area_873) ~ BUS null 10:09:17 10:41 ~ Walk 0s ~ 108th Ave SE & SE 208th St(57350) ~ BUS 160 10:43 10:45:16 ~ 108th Ave SE & SE 220th Pl(57375) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 10:47:16 10:49:57 +86,1,54m24s,5526,1426,10:09:14,11:03:38,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|160,volunteer:area_873|kcm:57350|kcm:57375,Walk 3s ~ volunteer:area_873(area_873) ~ BUS null 10:09:17 10:41 ~ Walk 0s ~ 108th Ave SE & SE 208th St(57350) ~ BUS 160 10:43 10:45:16 ~ 108th Ave SE & SE 220th Pl(57375) ~ Walk 18m22s +86,1,43m45s,3991,239,10:30:22,11:14:07,Metro Transit|Sound Generations: Volunteer Transportation,BUS,4|Volunteer Transportation,kcm:41300|kcm:4020|volunteer:area_873,Walk 3m19s ~ 3rd Ave W & W Mcgraw St(41300) ~ BUS 4 10:33:41 10:41:02 ~ Taylor Ave N & Prospect St(4020) ~ Walk 6s ~ volunteer:area_873(area_873) ~ BUS null 10:43:08 11:14:07 +87,0,26m,2162,3,10:00:00,10:26:00,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,Walk 3s ~ volunteer:area_873(area_873) ~ BUS null 10:00:03 10:26 +87,0,26m,2162,3,10:00:00,10:26:00,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,Walk 3s ~ hopelink:area_1085(area_1085) ~ BUS null 10:00:03 10:26 +87,0,26m,2162,3,10:00:00,10:26:00,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,Walk 3s ~ ccsww-kc:area_897(area_897) ~ BUS null 10:00:03 10:26 +88,1,35m3s,3469,239,10:15:22,10:50:25,Metro Transit|Sound Generations: Volunteer Transportation,BUS,4|Volunteer Transportation,kcm:41300|kcm:4020|volunteer:area_873,Walk 3m19s ~ 3rd Ave W & W Mcgraw St(41300) ~ BUS 4 10:18:41 10:26:02 ~ Taylor Ave N & Prospect St(4020) ~ Walk 6s ~ volunteer:area_873(area_873) ~ BUS null 10:28:08 10:50:25 +88,1,35m3s,3469,239,10:45:22,11:20:25,Metro Transit|Sound Generations: Volunteer Transportation,BUS,4|Volunteer Transportation,kcm:41300|kcm:4020|volunteer:area_873,Walk 3m19s ~ 3rd Ave W & W Mcgraw St(41300) ~ BUS 4 10:48:41 10:56:02 ~ Taylor Ave N & Prospect St(4020) ~ Walk 6s ~ volunteer:area_873(area_873) ~ BUS null 10:58:08 11:20:25 +89,0,31m52s,2514,3,10:00:00,10:31:52,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,Walk 3s ~ volunteer:area_873(area_873) ~ BUS null 10:00:03 10:31:52 +89,0,31m52s,2514,3,10:00:00,10:31:52,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,Walk 3s ~ hopelink:area_1085(area_1085) ~ BUS null 10:00:03 10:31:52 +89,0,31m52s,2514,3,10:00:00,10:31:52,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,Walk 3s ~ ccsww-kc:area_897(area_897) ~ BUS null 10:00:03 10:31:52 +90,1,40m55s,3821,239,10:00:22,10:41:17,Metro Transit|Sound Generations: Volunteer Transportation,BUS,4|Volunteer Transportation,kcm:41300|kcm:4020|volunteer:area_873,Walk 3m19s ~ 3rd Ave W & W Mcgraw St(41300) ~ BUS 4 10:03:41 10:11:02 ~ Taylor Ave N & Prospect St(4020) ~ Walk 6s ~ volunteer:area_873(area_873) ~ BUS null 10:13:08 10:41:17 +91,0,18m7s,1754,92,10:00:00,10:18:07,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,Walk 3s ~ volunteer:area_873(area_873) ~ BUS null 10:00:03 10:16:54 ~ Walk 1m13s +91,0,18m7s,1754,92,10:00:00,10:18:07,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,Walk 3s ~ hopelink:area_1085(area_1085) ~ BUS null 10:00:03 10:16:54 ~ Walk 1m13s +91,0,18m7s,1754,92,10:00:00,10:18:07,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,Walk 3s ~ ccsww-kc:area_897(area_897) ~ BUS null 10:00:03 10:16:54 ~ Walk 1m13s +92,1,23m9s,2755,228,10:23:52,10:47:01,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|128,volunteer:area_873|kcm:31950|kcm:31970,Walk 3s ~ volunteer:area_873(area_873) ~ BUS null 10:23:55 10:40:44 ~ Walk 23s ~ California Ave SW & SW Hanford St(31950) ~ BUS 128 10:43:07 10:44:16 ~ California Ave SW & SW Spokane St(31970) ~ Walk 2m45s +92,1,23m4s,2775,267,10:27:12,10:50:16,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|128,volunteer:area_873|kcm:31850|kcm:31871,Walk 3s ~ volunteer:area_873(area_873) ~ BUS null 10:27:15 10:43:15 ~ Walk 25s ~ California Ave SW & SW Andover St(31850) ~ BUS 128 10:45:40 10:46:50 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m26s +94,1,1h10m9s,5518,160,10:06:05,11:16:14,Metro Transit|Volunteer Services: King County,BUS,2|Volunteer Services: King County,kcm:2570|kcm:102|ccsww-kc:area_1083,Walk 2m ~ W Mcgraw St & 6th Ave W(2570) ~ BUS 2 10:08:05 10:32 ~ Spring St & 4th Ave(102) ~ Walk 31s ~ ccsww-kc:area_897(area_897) ~ BUS null 10:34:31 11:16:14 +94,1,1h32m36s,7953,1650,10:03:09,11:35:45,Sound Generations: Volunteer Transportation|Sound Transit,BUS,Volunteer Transportation|578,volunteer:area_873|pierce:18728|pierce:10401,Walk 3s ~ volunteer:area_873(area_873) ~ BUS null 10:03:12 10:44:03 ~ Walk 57s ~ Auburn Station - Bay 4(18728) ~ BUS 578 10:47 11:14 ~ Puyallup Station - Bay 3(10401) ~ Walk 21m45s +94,1,1h15m,6040,460,10:30:55,11:45:55,Pierce Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|402,volunteer:area_873|pierce:30893|pierce:1332,Walk 3s ~ volunteer:area_873(area_873) ~ BUS null 10:30:58 11:06:51 ~ Walk 0s ~ 16th Ave S & S 344th St(30893) ~ BUS 402 11:08:51 11:39:31 ~ Meridian S & 9th Ave SW(1332) ~ Walk 6m24s +95,0,41m47s,3109,3,10:00:00,10:41:47,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,Walk 3s ~ volunteer:area_873(area_873) ~ BUS null 10:00:03 10:41:47 +95,0,41m47s,3109,3,10:00:00,10:41:47,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,Walk 3s ~ hopelink:area_1085(area_1085) ~ BUS null 10:00:03 10:41:47 +95,0,41m47s,3109,3,10:00:00,10:41:47,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,Walk 3s ~ ccsww-kc:area_897(area_897) ~ BUS null 10:00:03 10:41:47 +96,1,59m42s,5096,429,11:10:47,12:10:29,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|208,volunteer:area_873|kcm:64416|kcm:64399,Walk 3s ~ volunteer:area_873(area_873) ~ BUS null 11:10:50 11:40:52 ~ Walk 0s ~ I-90 & 270th Ave SE(64416) ~ BUS 208 11:42:52 12:04:49 ~ Railroad Ave SE & SE River St(64399) ~ Walk 5m40s +96,1,50m40s,4406,239,11:29:22,12:20:02,Metro Transit|Sound Generations: Volunteer Transportation,BUS,4|Volunteer Transportation,kcm:41300|kcm:4020|volunteer:area_873,Walk 3m19s ~ 3rd Ave W & W Mcgraw St(41300) ~ BUS 4 11:32:41 11:40:02 ~ Taylor Ave N & Prospect St(4020) ~ Walk 6s ~ volunteer:area_873(area_873) ~ BUS null 11:42:08 12:20:02 +97,0,15m48s,1550,3,10:00:00,10:15:48,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,Walk 3s ~ volunteer:area_873(area_873) ~ BUS null 10:00:03 10:15:48 +97,0,15m48s,1550,3,10:00:00,10:15:48,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,Walk 3s ~ hopelink:area_1085(area_1085) ~ BUS null 10:00:03 10:15:48 +97,0,15m48s,1550,3,10:00:00,10:15:48,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,Walk 3s ~ ccsww-kc:area_897(area_897) ~ BUS null 10:00:03 10:15:48 +98,1,19m44s,2465,118,10:23:22,10:43:06,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|36,volunteer:area_873|kcm:3800|kcm:3810,Walk 3s ~ volunteer:area_873(area_873) ~ BUS null 10:23:25 10:38 ~ Walk 0s ~ Beacon Ave S & S Bayview St(3800) ~ BUS 36 10:40 10:41 ~ Beacon Ave S & S Lander St(3810) ~ Walk 2m6s +98,1,47m1s,4184,242,10:06:05,10:53:06,Metro Transit,BUS,2|36,kcm:2570|kcm:430|kcm:3810,Walk 2m ~ W Mcgraw St & 6th Ave W(2570) ~ BUS 2 10:08:05 10:26:54 ~ 3rd Ave & Pine St(430) ~ BUS 36 10:30 10:51 ~ Beacon Ave S & S Lander St(3810) ~ Walk 2m6s +98,1,47m44s,4302,348,10:15:22,11:03:06,Metro Transit,BUS,4|36,kcm:41300|kcm:450|kcm:3810,Walk 3m19s ~ 3rd Ave W & W Mcgraw St(41300) ~ BUS 4 10:18:41 10:38 ~ 3rd Ave & Union St(450) ~ BUS 36 10:41:55 11:01 ~ Beacon Ave S & S Lander St(3810) ~ Walk 2m6s +99,0,25m40s,2140,0,10:00:00,10:25:40,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:25:40 +99,0,25m40s,2140,0,10:00:00,10:25:40,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:25:40 +99,0,25m40s,2140,0,10:00:00,10:25:40,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:25:40 +100,2,31m3s,3665,0,10:00:21,10:31:24,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|160|Volunteer Transportation,volunteer:area_873|kcm:57210|kcm:57220|volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00:21 10:23 ~ Walk 0s ~ 108th Ave SE & SE 208th St(57210) ~ BUS 160 10:25 10:25:35 ~ 108th Ave SE & SE 204th St(57220) ~ Walk 0s ~ volunteer:area_873(area_873) ~ BUS null 10:27:35 10:31:24 +100,1,30m4s,3096,138,10:43:54,11:13:58,Metro Transit|Sound Generations: Volunteer Transportation,BUS,107|Volunteer Transportation,kcm:3810|kcm:42070|volunteer:area_873,Walk 2m6s ~ Beacon Ave S & S Lander St(3810) ~ BUS 107 10:46 10:48:10 ~ 15th Ave S & S Spokane St(42070) ~ Walk 28s ~ volunteer:area_873(area_873) ~ BUS null 10:50:38 11:13:58 +101,0,20m45s,1845,0,10:00:00,10:20:45,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:20:45 +101,0,20m45s,1845,0,10:00:00,10:20:45,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:20:45 +101,0,20m45s,1845,0,10:00:00,10:20:45,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:20:45 +102,1,28m53s,3026,136,10:13:54,10:42:47,Metro Transit|Sound Generations: Volunteer Transportation,BUS,107|Volunteer Transportation,kcm:3810|kcm:41740|volunteer:area_873,Walk 2m6s ~ Beacon Ave S & S Lander St(3810) ~ BUS 107 10:16 10:25 ~ 13th Ave S & S Bailey St(41740) ~ Walk 17s ~ volunteer:area_873(area_873) ~ BUS null 10:27:17 10:42:47 +103,0,22m50s,1970,0,10:00:00,10:22:50,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:22:50 +103,0,22m50s,1970,0,10:00:00,10:22:50,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:22:50 +103,0,22m50s,1970,0,10:00:00,10:22:50,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:22:50 +104,1,27m14s,2926,138,10:28:54,10:56:08,Metro Transit|Sound Generations: Volunteer Transportation,BUS,107|Volunteer Transportation,kcm:3810|kcm:42070|volunteer:area_873,Walk 2m6s ~ Beacon Ave S & S Lander St(3810) ~ BUS 107 10:31 10:33:10 ~ 15th Ave S & S Spokane St(42070) ~ Walk 28s ~ volunteer:area_873(area_873) ~ BUS null 10:35:38 10:56:08 +105,0,12m56s,1440,89,10:00:00,10:12:56,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:11:43 ~ Walk 1m13s +105,0,12m56s,1440,89,10:00:00,10:12:56,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:11:43 ~ Walk 1m13s +105,0,12m56s,1440,89,10:00:00,10:12:56,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:11:43 ~ Walk 1m13s +106,1,18m17s,2454,227,10:04:54,10:23:11,Metro Transit|Sound Generations: Volunteer Transportation,BUS,60|Volunteer Transportation,kcm:3810|kcm:42070|volunteer:area_873,Walk 2m6s ~ Beacon Ave S & S Lander St(3810) ~ BUS 60 10:07 10:10:05 ~ 15th Ave S & S Spokane St(42070) ~ Walk 28s ~ volunteer:area_873(area_873) ~ BUS null 10:12:33 10:21:58 ~ Walk 1m13s +106,1,17m22s,2399,227,10:28:54,10:46:16,Metro Transit|Sound Generations: Volunteer Transportation,BUS,107|Volunteer Transportation,kcm:3810|kcm:42070|volunteer:area_873,Walk 2m6s ~ Beacon Ave S & S Lander St(3810) ~ BUS 107 10:31 10:33:10 ~ 15th Ave S & S Spokane St(42070) ~ Walk 28s ~ volunteer:area_873(area_873) ~ BUS null 10:35:38 10:45:03 ~ Walk 1m13s +106,1,42m7s,4071,492,10:13:54,10:56:01,Metro Transit,BUS,107|50,kcm:3810|kcm:42070|kcm:30530|kcm:31871,Walk 2m6s ~ Beacon Ave S & S Lander St(3810) ~ BUS 107 10:16 10:18:10 ~ 15th Ave S & S Spokane St(42070) ~ Walk 2m19s ~ S Columbian Way & S Spokane St(30530) ~ BUS 50 10:25:43 10:52:35 ~ California Ave SW & SW Spokane St(31871) ~ Walk 3m26s +107,0,41m29s,3089,0,10:00:00,10:41:29,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_1083,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:41:29 +107,0,41m29s,3089,0,07:00:00,07:41:29,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_1083,ccsww-kc:area_897(area_897) ~ BUS null 7:00 7:41:29 +108,1,57m14s,5274,878,10:06:00,11:03:14,Pierce Transit|Volunteer Services: King County,BUS,Volunteer Services: King County|400,ccsww-kc:area_1083|pierce:12970|pierce:8058,ccsww-kc:area_897(area_897) ~ BUS null 10:06 10:47:31 ~ Walk 17s ~ 5th St SW & Pioneer Ave W(12970) ~ BUS 400 10:49:48 10:51:06 ~ 5th St SW & 9th Ave SW - Red Lot(8058) ~ Walk 12m8s +108,1,51m4s,4664,558,10:29:05,11:20:09,Metro Transit|Volunteer Services: King County,BUS,107|Volunteer Services: King County,kcm:41870|kcm:41880|ccsww-kc:area_1083,Walk 7m34s ~ 15th Ave S & S Hanford St(41870) ~ BUS 107 10:36:39 10:37:12 ~ 15th Ave S & S Stevens St(41880) ~ Walk 27s ~ ccsww-kc:area_897(area_897) ~ BUS null 10:39:39 11:20:09 +108,1,1h23m34s,7408,1647,10:12:11,11:35:45,Sound Generations: Volunteer Transportation|Sound Transit,BUS,Volunteer Transportation|578,volunteer:area_873|pierce:18728|pierce:10401,volunteer:area_873(area_873) ~ BUS null 10:12:11 10:44:03 ~ Walk 57s ~ Auburn Station - Bay 4(18728) ~ BUS 578 10:47 11:14 ~ Puyallup Station - Bay 3(10401) ~ Walk 21m45s +109,0,33m12s,2592,0,10:00:00,10:33:12,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:33:12 +109,0,33m12s,2592,0,10:00:00,10:33:12,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:33:12 +109,0,33m12s,2592,0,10:00:00,10:33:12,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:33:12 +110,1,39m12s,3767,294,10:00:22,10:39:34,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|208,volunteer:area_873|kcm:85386|kcm:82425,volunteer:area_873(area_873) ~ BUS null 10:00:22 10:31:55 ~ Walk 0s ~ Railroad Ave SE & Meadowbrook Way SE(85386) ~ BUS 208 10:33:55 10:35:35 ~ Railroad Ave S & SE King St(82425) ~ Walk 3m59s +110,1,38m33s,3621,172,10:35:43,11:14:16,Metro Transit|Sound Generations: Volunteer Transportation,BUS,36|Volunteer Transportation,kcm:3460|kcm:3470|volunteer:area_873,Walk 2m42s ~ Beacon Ave S & S Stevens St(3460) ~ BUS 36 10:38:25 10:39 ~ Beacon Ave S & S Lander St(3470) ~ Walk 18s ~ volunteer:area_873(area_873) ~ BUS null 10:41:18 11:14:16 +110,1,51m7s,4578,426,11:19:22,12:10:29,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|208,volunteer:area_873|kcm:64416|kcm:64399,volunteer:area_873(area_873) ~ BUS null 11:19:22 11:40:52 ~ Walk 0s ~ I-90 & 270th Ave SE(64416) ~ BUS 208 11:42:52 12:04:49 ~ Railroad Ave SE & SE River St(64399) ~ Walk 5m40s +111,0,16m18s,1580,3,10:00:00,10:16:18,Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation,volunteer:area_873,volunteer:area_873(area_873) ~ BUS null 10:00 10:16:15 ~ Walk 3s +111,0,16m18s,1580,3,10:00:00,10:16:18,Hopelink Transportation,BUS,Medicaid Transportation,hopelink:area_1085,hopelink:area_1085(area_1085) ~ BUS null 10:00 10:16:15 ~ Walk 3s +111,0,16m18s,1580,3,10:00:00,10:16:18,Volunteer Services: King County,BUS,Volunteer Services: King County,ccsww-kc:area_897,ccsww-kc:area_897(area_897) ~ BUS null 10:00 10:16:15 ~ Walk 3s +112,1,22m10s,2703,253,10:02:23,10:24:33,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|13,volunteer:area_873|kcm:41290|kcm:41300,volunteer:area_873(area_873) ~ BUS null 10:02:23 10:18:37 ~ Walk 22s ~ 3rd Ave W & W Smith St(41290) ~ BUS 13 10:20:59 10:21:14 ~ 3rd Ave W & W Mcgraw St(41300) ~ Walk 3m19s +112,1,26m38s,2970,248,10:20:28,10:47:06,Metro Transit|Sound Generations: Volunteer Transportation,BUS,Volunteer Transportation|4,volunteer:area_873|kcm:4280|kcm:41350,volunteer:area_873(area_873) ~ BUS null 10:20:28 10:33:22 ~ Walk 6s ~ Taylor Ave N & Lee St(4280) ~ BUS 4 10:35:28 10:43:35 ~ W Mcgraw St & 3rd Ave W(41350) ~ Walk 3m31s +112,1,21m10s,2565,141,10:28:54,10:50:04,Metro Transit|Sound Generations: Volunteer Transportation,BUS,107|Volunteer Transportation,kcm:3810|kcm:42070|volunteer:area_873,Walk 2m6s ~ Beacon Ave S & S Lander St(3810) ~ BUS 107 10:31 10:33:10 ~ 15th Ave S & S Spokane St(42070) ~ Walk 28s ~ volunteer:area_873(area_873) ~ BUS null 10:35:38 10:50:01 ~ Walk 3s From 0c98d93aabaa99c2d706c19f30104a277df10b56 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 17 Oct 2024 16:02:26 +0200 Subject: [PATCH 074/213] Revert "Activate washington-state on branch" This reverts commit d1b26d080e165042c763024700c07fc247dccf89. --- .github/workflows/performance-test.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/performance-test.yml b/.github/workflows/performance-test.yml index c7f788b7144..7be4ab3c503 100644 --- a/.github/workflows/performance-test.yml +++ b/.github/workflows/performance-test.yml @@ -4,7 +4,6 @@ on: push: branches: - dev-2.x - - flex-transit-speed-test jobs: perf-test: @@ -26,17 +25,17 @@ jobs: - location: germany # all of Germany (500k stops, 200k patterns) but no OSM iterations: 1 jfr-delay: "50s" - profile: extended + profile: core - location: norway iterations: 4 jfr-delay: "35s" - profile: extended + profile: core - location: skanetrafiken iterations: 1 jfr-delay: "50s" - profile: extended + profile: core # extended locations that are run only after merging to dev-2.x @@ -58,7 +57,7 @@ jobs: - location: washington-state iterations: 1 jfr-delay: "20s" - profile: core + profile: extended steps: - uses: actions/checkout@v4 From f9ea04499d9aafdff224426198b23148ff716281 Mon Sep 17 00:00:00 2001 From: OTP Bot Date: Thu, 17 Oct 2024 14:15:59 +0000 Subject: [PATCH 075/213] Upgrade debug client to version 2024/10/2024-10-17T14:15 --- application/src/client/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/src/client/index.html b/application/src/client/index.html index e463c510830..7854303d26c 100644 --- a/application/src/client/index.html +++ b/application/src/client/index.html @@ -5,8 +5,8 @@ OTP Debug Client - - + +
    From 786805ad0dc6c0745568b87ea96f5fceec89feeb Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 17 Oct 2024 16:27:12 +0200 Subject: [PATCH 076/213] Remove extra step --- .github/workflows/performance-test.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/performance-test.yml b/.github/workflows/performance-test.yml index 7be4ab3c503..b185ed260f9 100644 --- a/.github/workflows/performance-test.yml +++ b/.github/workflows/performance-test.yml @@ -101,8 +101,6 @@ jobs: run: | mvn exec:java -Dexec.mainClass="org.opentripplanner.transit.speed_test.SpeedTest" -Dexec.classpathScope=test -Dexec.args="--dir=../test/performance/${{ matrix.location }} -p md -n ${{ matrix.iterations }} -i 3 -0" -P prettierSkip - - run: find . -name *.jfr - - name: Archive travel results file if: matrix.profile == 'core' || github.ref == 'refs/heads/dev-2.x' uses: actions/upload-artifact@v4 From 52baf4dedbe093b50d1238ce9ec4d6029c54194a Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Thu, 17 Oct 2024 15:52:53 +0100 Subject: [PATCH 077/213] revert changes to the classic debug client it is no longer maintained --- application/src/client/classic-debug/i18n/ca_ES.po | 2 +- application/src/client/classic-debug/i18n/de.po | 2 +- application/src/client/classic-debug/i18n/en.po | 4 ++-- application/src/client/classic-debug/i18n/es.po | 2 +- application/src/client/classic-debug/i18n/fr.po | 2 +- application/src/client/classic-debug/i18n/hu.po | 2 +- application/src/client/classic-debug/i18n/it.po | 2 +- application/src/client/classic-debug/i18n/messages.pot | 2 +- application/src/client/classic-debug/i18n/no.po | 2 +- application/src/client/classic-debug/i18n/pl.po | 2 +- application/src/client/classic-debug/i18n/pt.po | 2 +- application/src/client/classic-debug/i18n/sl.po | 2 +- .../src/client/classic-debug/js/otp/locale/ca_ES.json | 2 +- application/src/client/classic-debug/js/otp/locale/de.json | 2 +- application/src/client/classic-debug/js/otp/locale/en.json | 2 +- application/src/client/classic-debug/js/otp/locale/es.json | 2 +- application/src/client/classic-debug/js/otp/locale/fr.json | 2 +- application/src/client/classic-debug/js/otp/locale/hu.json | 2 +- application/src/client/classic-debug/js/otp/locale/it.json | 2 +- application/src/client/classic-debug/js/otp/locale/no.json | 2 +- application/src/client/classic-debug/js/otp/locale/pl.json | 2 +- application/src/client/classic-debug/js/otp/locale/pt.json | 2 +- application/src/client/classic-debug/js/otp/locale/sl.json | 2 +- application/src/client/classic-debug/js/otp/util/Itin.js | 5 +++-- 24 files changed, 27 insertions(+), 26 deletions(-) diff --git a/application/src/client/classic-debug/i18n/ca_ES.po b/application/src/client/classic-debug/i18n/ca_ES.po index 8c31603fba4..8dd8b1db1eb 100644 --- a/application/src/client/classic-debug/i18n/ca_ES.po +++ b/application/src/client/classic-debug/i18n/ca_ES.po @@ -931,7 +931,7 @@ msgstr "" #. beneath the car. #: src/client/js/otp/util/Itin.js:226 #, fuzzy -msgid "Cable Tram" +msgid "Cable Car" msgstr "PONT PENJANT" #. Any rail system designed for steep inclines. diff --git a/application/src/client/classic-debug/i18n/de.po b/application/src/client/classic-debug/i18n/de.po index 49ac31f1777..0585855e247 100644 --- a/application/src/client/classic-debug/i18n/de.po +++ b/application/src/client/classic-debug/i18n/de.po @@ -919,7 +919,7 @@ msgstr "" #. Used for street-level cable cars where the cable runs #. beneath the car. #: src/client/js/otp/util/Itin.js:226 -msgid "Cable Tram" +msgid "Cable Car" msgstr "Standseilbahn" #. Any rail system designed for steep inclines. diff --git a/application/src/client/classic-debug/i18n/en.po b/application/src/client/classic-debug/i18n/en.po index 94ae67f6431..4727ffef677 100644 --- a/application/src/client/classic-debug/i18n/en.po +++ b/application/src/client/classic-debug/i18n/en.po @@ -930,8 +930,8 @@ msgstr "Light Rail" #. Used for street-level cable cars where the cable runs #. beneath the car. #: src/client/js/otp/util/Itin.js:226 -msgid "Cable Tram" -msgstr "Cable Tram" +msgid "Cable Car" +msgstr "Cable Car" #. Any rail system designed for steep inclines. #: src/client/js/otp/util/Itin.js:228 diff --git a/application/src/client/classic-debug/i18n/es.po b/application/src/client/classic-debug/i18n/es.po index 0799258ab92..b54e2510417 100644 --- a/application/src/client/classic-debug/i18n/es.po +++ b/application/src/client/classic-debug/i18n/es.po @@ -924,7 +924,7 @@ msgstr "Tranvía" #. Used for street-level cable cars where the cable runs #. beneath the car. #: src/client/js/otp/util/Itin.js:226 -msgid "Cable Tram" +msgid "Cable Car" msgstr "Bus Tranvía" #. Any rail system designed for steep inclines. diff --git a/application/src/client/classic-debug/i18n/fr.po b/application/src/client/classic-debug/i18n/fr.po index 1c5e0f69b18..705b313786c 100644 --- a/application/src/client/classic-debug/i18n/fr.po +++ b/application/src/client/classic-debug/i18n/fr.po @@ -932,7 +932,7 @@ msgstr "Tram ou Trolley" #. Used for street-level cable cars where the cable runs #. beneath the car. #: src/client/js/otp/util/Itin.js:226 -msgid "Cable Tram" +msgid "Cable Car" msgstr "Tramway funiculaire" #. Any rail system designed for steep inclines. diff --git a/application/src/client/classic-debug/i18n/hu.po b/application/src/client/classic-debug/i18n/hu.po index 02242925841..25411b79e58 100644 --- a/application/src/client/classic-debug/i18n/hu.po +++ b/application/src/client/classic-debug/i18n/hu.po @@ -937,7 +937,7 @@ msgstr "Villamos, könnyűvasút" #. Used for street-level cable cars where the cable runs #. beneath the car. #: src/client/js/otp/util/Itin.js:226 -msgid "Cable Tram" +msgid "Cable Car" msgstr "" #. Any rail system designed for steep inclines. diff --git a/application/src/client/classic-debug/i18n/it.po b/application/src/client/classic-debug/i18n/it.po index eeb4442ef7c..4d0abe553f3 100644 --- a/application/src/client/classic-debug/i18n/it.po +++ b/application/src/client/classic-debug/i18n/it.po @@ -976,7 +976,7 @@ msgstr "tram" #. beneath the car. #: src/client/js/otp/util/Itin.js:226 #, fuzzy -msgid "Cable Tram" +msgid "Cable Car" msgstr "tram" #. Any rail system designed for steep inclines. diff --git a/application/src/client/classic-debug/i18n/messages.pot b/application/src/client/classic-debug/i18n/messages.pot index 425b5c9bb43..ca5d59b1cc3 100644 --- a/application/src/client/classic-debug/i18n/messages.pot +++ b/application/src/client/classic-debug/i18n/messages.pot @@ -896,7 +896,7 @@ msgstr "" #. Used for street-level cable cars where the cable runs #. beneath the car. #: src/client/js/otp/util/Itin.js:226 -msgid "Cable Tram" +msgid "Cable Car" msgstr "" #. Any rail system designed for steep inclines. diff --git a/application/src/client/classic-debug/i18n/no.po b/application/src/client/classic-debug/i18n/no.po index 8963f038601..9a1d5c9103d 100644 --- a/application/src/client/classic-debug/i18n/no.po +++ b/application/src/client/classic-debug/i18n/no.po @@ -926,7 +926,7 @@ msgstr "Trikk" #. Used for street-level cable cars where the cable runs #. beneath the car. #: src/client/js/otp/util/Itin.js:226 -msgid "Cable Tram" +msgid "Cable Car" msgstr "Cable Car" #. Any rail system designed for steep inclines. diff --git a/application/src/client/classic-debug/i18n/pl.po b/application/src/client/classic-debug/i18n/pl.po index 8f08e8de7de..b8a728e9495 100644 --- a/application/src/client/classic-debug/i18n/pl.po +++ b/application/src/client/classic-debug/i18n/pl.po @@ -947,7 +947,7 @@ msgstr "Light Rail" #. Used for street-level cable cars where the cable runs #. beneath the car. #: src/client/js/otp/util/Itin.js:226 -msgid "Cable Tram" +msgid "Cable Car" msgstr "Kolejka linowa" #. Any rail system designed for steep inclines. diff --git a/application/src/client/classic-debug/i18n/pt.po b/application/src/client/classic-debug/i18n/pt.po index 42fa0d978aa..83ed08f3df1 100644 --- a/application/src/client/classic-debug/i18n/pt.po +++ b/application/src/client/classic-debug/i18n/pt.po @@ -925,7 +925,7 @@ msgstr "Ferroviário leve" #. Used for street-level cable cars where the cable runs #. beneath the car. #: src/client/js/otp/util/Itin.js:226 -msgid "Cable Tram" +msgid "Cable Car" msgstr "Eléctrico" #. Any rail system designed for steep inclines. diff --git a/application/src/client/classic-debug/i18n/sl.po b/application/src/client/classic-debug/i18n/sl.po index 23066db159c..93839344f76 100644 --- a/application/src/client/classic-debug/i18n/sl.po +++ b/application/src/client/classic-debug/i18n/sl.po @@ -931,7 +931,7 @@ msgstr "Tramvaj" #. Used for street-level cable cars where the cable runs #. beneath the car. #: src/client/js/otp/util/Itin.js:226 -msgid "Cable Tram" +msgid "Cable Car" msgstr "" #. Any rail system designed for steep inclines. diff --git a/application/src/client/classic-debug/js/otp/locale/ca_ES.json b/application/src/client/classic-debug/js/otp/locale/ca_ES.json index 4ba89dde02d..e0bc0c5e3ba 100644 --- a/application/src/client/classic-debug/js/otp/locale/ca_ES.json +++ b/application/src/client/classic-debug/js/otp/locale/ca_ES.json @@ -155,7 +155,7 @@ "Train": "Tren", "Ferry": "BOT", "Light Rail": "", - "Cable Tram": "PONT PENJANT", + "Cable Car": "PONT PENJANT", "Funicular": "FUNICULAR", "Aerial Tram": "", "Airplane": "", diff --git a/application/src/client/classic-debug/js/otp/locale/de.json b/application/src/client/classic-debug/js/otp/locale/de.json index 79514b84b1a..5a0aa5316f4 100644 --- a/application/src/client/classic-debug/js/otp/locale/de.json +++ b/application/src/client/classic-debug/js/otp/locale/de.json @@ -155,7 +155,7 @@ "Train": "Bahn", "Ferry": "Fähre", "Light Rail": "", - "Cable Tram": "Standseilbahn", + "Cable Car": "Standseilbahn", "Funicular": "Seilbahn", "Aerial Tram": "", "Airplane": "", diff --git a/application/src/client/classic-debug/js/otp/locale/en.json b/application/src/client/classic-debug/js/otp/locale/en.json index f7ae611e458..51e5565997c 100644 --- a/application/src/client/classic-debug/js/otp/locale/en.json +++ b/application/src/client/classic-debug/js/otp/locale/en.json @@ -155,7 +155,7 @@ "Train": "Train", "Ferry": "Ferry", "Light Rail": "Light Rail", - "Cable Tram": "Cable Tram", + "Cable Car": "Cable Car", "Funicular": "Funicular", "Aerial Tram": "Aerial Tram", "Airplane": "", diff --git a/application/src/client/classic-debug/js/otp/locale/es.json b/application/src/client/classic-debug/js/otp/locale/es.json index 67db91d87b9..fca9c112411 100644 --- a/application/src/client/classic-debug/js/otp/locale/es.json +++ b/application/src/client/classic-debug/js/otp/locale/es.json @@ -155,7 +155,7 @@ "Train": "Tren", "Ferry": "Barco", "Light Rail": "Tranvía", - "Cable Tram": "Bus Tranvía", + "Cable Car": "Bus Tranvía", "Funicular": "Funicular", "Aerial Tram": "Funicular", "Airplane": "", diff --git a/application/src/client/classic-debug/js/otp/locale/fr.json b/application/src/client/classic-debug/js/otp/locale/fr.json index 76306ba7fe1..53b4d78be17 100644 --- a/application/src/client/classic-debug/js/otp/locale/fr.json +++ b/application/src/client/classic-debug/js/otp/locale/fr.json @@ -155,7 +155,7 @@ "Train": "Train", "Ferry": "Ferry", "Light Rail": "Tram ou Trolley", - "Cable Tram": "Tramway funiculaire", + "Cable Car": "Tramway funiculaire", "Funicular": "Funiculaire", "Aerial Tram": "Téléphérique", "Airplane": "", diff --git a/application/src/client/classic-debug/js/otp/locale/hu.json b/application/src/client/classic-debug/js/otp/locale/hu.json index 022666bc938..1e1e666e19e 100644 --- a/application/src/client/classic-debug/js/otp/locale/hu.json +++ b/application/src/client/classic-debug/js/otp/locale/hu.json @@ -155,7 +155,7 @@ "Train": "Vonat", "Ferry": "Komp", "Light Rail": "Villamos, könnyűvasút", - "Cable Tram": "", + "Cable Car": "", "Funicular": "Sikló", "Aerial Tram": "Libegő", "Airplane": "Repülőgép", diff --git a/application/src/client/classic-debug/js/otp/locale/it.json b/application/src/client/classic-debug/js/otp/locale/it.json index f1de09c1985..0876aba1ef8 100644 --- a/application/src/client/classic-debug/js/otp/locale/it.json +++ b/application/src/client/classic-debug/js/otp/locale/it.json @@ -155,7 +155,7 @@ "Train": "treno", "Ferry": "Ferry", "Light Rail": "tram", - "Cable Tram": "tram", + "Cable Car": "tram", "Funicular": "funivia", "Aerial Tram": "tram", "Airplane": "", diff --git a/application/src/client/classic-debug/js/otp/locale/no.json b/application/src/client/classic-debug/js/otp/locale/no.json index 91013646c2c..5a64e60d2a6 100644 --- a/application/src/client/classic-debug/js/otp/locale/no.json +++ b/application/src/client/classic-debug/js/otp/locale/no.json @@ -155,7 +155,7 @@ "Train": "Tog", "Ferry": "Ferje", "Light Rail": "Trikk", - "Cable Tram": "Cable Car", + "Cable Car": "Cable Car", "Funicular": "Kabelbane", "Aerial Tram": "Tau bane", "Airplane": "Fly", diff --git a/application/src/client/classic-debug/js/otp/locale/pl.json b/application/src/client/classic-debug/js/otp/locale/pl.json index a8bbd03a0b9..5cf5a9c71b5 100644 --- a/application/src/client/classic-debug/js/otp/locale/pl.json +++ b/application/src/client/classic-debug/js/otp/locale/pl.json @@ -161,7 +161,7 @@ "Train": "Pociąg", "Ferry": "Prom", "Light Rail": "Light Rail", - "Cable Tram": "Kolejka linowa", + "Cable Car": "Kolejka linowa", "Funicular": "Kolej linowo-terenowa", "Aerial Tram": "Kolej linowa", "Airplane": "", diff --git a/application/src/client/classic-debug/js/otp/locale/pt.json b/application/src/client/classic-debug/js/otp/locale/pt.json index a4a5e9f6599..9d15e4afe1a 100644 --- a/application/src/client/classic-debug/js/otp/locale/pt.json +++ b/application/src/client/classic-debug/js/otp/locale/pt.json @@ -155,7 +155,7 @@ "Train": "Comboio", "Ferry": "Ferry", "Light Rail": "Ferroviário leve", - "Cable Tram": "Eléctrico", + "Cable Car": "Eléctrico", "Funicular": "Teleférico", "Aerial Tram": "Teleférico", "Airplane": "", diff --git a/application/src/client/classic-debug/js/otp/locale/sl.json b/application/src/client/classic-debug/js/otp/locale/sl.json index 6019f19e228..c99ad81f704 100644 --- a/application/src/client/classic-debug/js/otp/locale/sl.json +++ b/application/src/client/classic-debug/js/otp/locale/sl.json @@ -167,7 +167,7 @@ "Train": "Vlak", "Ferry": "", "Light Rail": "Tramvaj", - "Cable Tram": "", + "Cable Car": "", "Funicular": "", "Aerial Tram": "Gondola", "Airplane": "", diff --git a/application/src/client/classic-debug/js/otp/util/Itin.js b/application/src/client/classic-debug/js/otp/util/Itin.js index af8ce3a162b..03555b1b3df 100644 --- a/application/src/client/classic-debug/js/otp/util/Itin.js +++ b/application/src/client/classic-debug/js/otp/util/Itin.js @@ -221,8 +221,9 @@ otp.util.Itin = { //TRANSLATORS: Tram, Streetcar, Light rail. Any light rail or street //level system within a metropolitan area. 'TRAM' : _tr('Light Rail'), - //TRANSLATORS: Used for street-level rail cars where the cable runs beneath the vehicle. - 'CABLE_CAR': _tr('Cable Tram'), + //TRANSLATORS: Used for street-level cable cars where the cable runs + //beneath the car. + 'CABLE_CAR': _tr('Cable Car'), //TRANSLATORS: Any rail system designed for steep inclines. 'FUNICULAR': _tr('Funicular'), //TRANSLATORS: Gondola, Suspended cable car. Typically used for aerial From 87cbb0524286cf6506f5d63fb4f8a10225ddc8be Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Thu, 17 Oct 2024 17:04:43 +0200 Subject: [PATCH 078/213] Apply suggestions from code review Co-authored-by: Henrik Abrahamsson <127481124+habrahamsson-skanetrafiken@users.noreply.github.com> --- .../java/org/opentripplanner/raptor/configure/RaptorConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java b/application/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java index e481435c6c4..380f9fe3ba5 100644 --- a/application/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java +++ b/application/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java @@ -25,7 +25,7 @@ /** * This class is responsible for creating a new search and holding application scoped Raptor state. *

    - * This class should have APPLICATION scope. It keeps a reference to the environment ant the + * This class should have APPLICATION scope. It keeps a reference to the environment and the * tuning parameters. The environment has a thread-pool, which should be APPLICATION scope. * * @param The TripSchedule type defined by the user of the raptor API. From 15ba54a12f202a9a422d547de4e1c6fbb6960b4e Mon Sep 17 00:00:00 2001 From: OTP Bot Date: Thu, 17 Oct 2024 19:27:47 +0000 Subject: [PATCH 079/213] Upgrade debug client to version 2024/10/2024-10-17T19:27 --- application/src/client/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/src/client/index.html b/application/src/client/index.html index 7854303d26c..caeb0a726dd 100644 --- a/application/src/client/index.html +++ b/application/src/client/index.html @@ -5,8 +5,8 @@ OTP Debug Client - - + +

    From 561be765445aefc35c0a337aadbf3a8c75704a77 Mon Sep 17 00:00:00 2001 From: Zsombor Welker Date: Mon, 21 Nov 2022 08:22:15 +0100 Subject: [PATCH 080/213] Allow bike walking through bicycle no thru traffic areas --- .../street/model/edge/StreetEdge.java | 15 ++++ .../street/integration/BikeWalkingTest.java | 69 +++++++++++++++++++ 2 files changed, 84 insertions(+) diff --git a/application/src/main/java/org/opentripplanner/street/model/edge/StreetEdge.java b/application/src/main/java/org/opentripplanner/street/model/edge/StreetEdge.java index 92244fe2af2..505d2a95a3a 100644 --- a/application/src/main/java/org/opentripplanner/street/model/edge/StreetEdge.java +++ b/application/src/main/java/org/opentripplanner/street/model/edge/StreetEdge.java @@ -381,6 +381,21 @@ else if (s0.currentMode() == TraverseMode.BICYCLE) { State state = editor != null ? editor.makeState() : null; + // Add an explicit bike-walking state for no-thru-traffic edges, so that dismounting and walking + // is an option to avoid the restriction + if ( + s0.getBackMode() == TraverseMode.BICYCLE && + canTraverse(TraverseMode.BICYCLE) && + isBicycleNoThruTraffic() && + !s0.hasEnteredNoThruTrafficArea() + ) { + var bikeWalk = doTraverse(s0, TraverseMode.WALK, true); + if (bikeWalk != null) { + State forkState = bikeWalk.makeState(); + return State.ofNullable(forkState, state); + } + } + // we are transitioning into a no-drop-off zone therefore we add a second state for dropping // off the vehicle and walking if (state != null && !fromv.rentalDropOffBanned(s0) && tov.rentalDropOffBanned(s0)) { diff --git a/application/src/test/java/org/opentripplanner/street/integration/BikeWalkingTest.java b/application/src/test/java/org/opentripplanner/street/integration/BikeWalkingTest.java index 41ec677b3bb..1d4ec2f3f79 100644 --- a/application/src/test/java/org/opentripplanner/street/integration/BikeWalkingTest.java +++ b/application/src/test/java/org/opentripplanner/street/integration/BikeWalkingTest.java @@ -295,6 +295,75 @@ public void testElevatorBiking() { ); } + @Test + public void testBicycleBicycleNoThruTrafficStart() { + CD.setBicycleNoThruTraffic(true); + + assertPath( + C, + F, + StreetMode.BIKE, + List.of( + "null - 0 / 0.0 - null", + "BICYCLE - 5 / 10.0 - CD street", + "BICYCLE - 5 / 10.0 - DE street", + "BICYCLE - 5 / 10.0 - EF street" + ), + List.of( + "null - 0 / 0.0 - null", + "BICYCLE - 5 / 10.0 - CD street", + "BICYCLE - 5 / 10.0 - DE street", + "BICYCLE - 5 / 10.0 - EF street" + ) + ); + } + + @Test + public void testBicycleBicycleNoThruTrafficMiddle() { + DE.setBicycleNoThruTraffic(true); + + assertPath( + C, + F, + StreetMode.BIKE, + List.of( + "null - 0 / 0.0 - null", + "BICYCLE - 5 / 10.0 - CD street", + "🚲WALK - 120 / 1100.0 - DE street", + "BICYCLE - 105 / 1010.0 - EF street" + ), + List.of( + "null - 0 / 0.0 - null", + "BICYCLE - 105 / 1010.0 - CD street", + "🚲WALK - 120 / 1100.0 - DE street", + "BICYCLE - 5 / 10.0 - EF street" + ) + ); + } + + @Test + public void testBicycleBicycleNoThruTrafficEnd() { + EF.setBicycleNoThruTraffic(true); + + assertPath( + C, + F, + StreetMode.BIKE, + List.of( + "null - 0 / 0.0 - null", + "BICYCLE - 5 / 10.0 - CD street", + "BICYCLE - 5 / 10.0 - DE street", + "BICYCLE - 5 / 10.0 - EF street" + ), + List.of( + "null - 0 / 0.0 - null", + "BICYCLE - 5 / 10.0 - CD street", + "BICYCLE - 5 / 10.0 - DE street", + "BICYCLE - 5 / 10.0 - EF street" + ) + ); + } + @BeforeEach protected void setUp() throws Exception { // Generate a very simple graph From 9fe3c9c54dcead89e14fcbefb8e32d51c4285537 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Fri, 18 Oct 2024 14:16:37 +0000 Subject: [PATCH 081/213] Add changelog entry for #6141 [ci skip] --- doc/user/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/user/Changelog.md b/doc/user/Changelog.md index aa5a970afe4..51c8a854b8b 100644 --- a/doc/user/Changelog.md +++ b/doc/user/Changelog.md @@ -17,6 +17,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Fix GTFS-Flex duration offset and factor parsing when only one of them is set [#6138](https://github.com/opentripplanner/OpenTripPlanner/pull/6138) - Fix arrive by filtering for on-street/flex itineraries [#6050](https://github.com/opentripplanner/OpenTripPlanner/pull/6050) - Rename TransitModel to TransitRepository [#6148](https://github.com/opentripplanner/OpenTripPlanner/pull/6148) +- Clear added patterns in TimetableSnapshot [#6141](https://github.com/opentripplanner/OpenTripPlanner/pull/6141) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.6.0 (2024-09-18) From 30216e9cbcd0f70fbbf440cf5baafe0ebd54aaf1 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Fri, 18 Oct 2024 18:56:06 +0200 Subject: [PATCH 082/213] Update broken links in ARCHITECTURE.md --- ARCHITECTURE.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 4bd313c7a06..cf3efcd84a3 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -40,22 +40,22 @@ examples. The Transit model is more complex than the VehiclePosition model. Below is a list of documented components in OTP. Not every component is documented at a high level, but this is a start and we would like to expand this list in the future. -### [OTP Configuration design](src/main/java/org/opentripplanner/standalone/config/package.md) +### [OTP Configuration design](application/src/main/java/org/opentripplanner/standalone/config/package.md) The Configuration module is responsible for loading and parsing OTP configuration files and map them into Plan Old Java Objects (POJOs). These POJOs are injected into the other components. -### [GTFS import module](src/main/java/org/opentripplanner/gtfs/package.md) +### [GTFS import module](application/src/main/java/org/opentripplanner/gtfs/package.md) Used to import GTFS transit data files. -### [NeTEx import module](src/main/java/org/opentripplanner/netex/package.md) +### [NeTEx import module](application/src/main/java/org/opentripplanner/netex/package.md) Used to import NeTEx transit data files. ### Transit Routing -#### [Raptor transit routing](src/main/java/org/opentripplanner/raptor/package.md) +#### [Raptor transit routing](application/src/main/java/org/opentripplanner/raptor/package.md) This is the OTP2 new transit routing engine implemented using the Raptor algorithm. It explains how Raptor works, the important concepts and the design. It might be worth reading even if you are not a @@ -68,35 +68,35 @@ dependencies from Raptor to other parts of OTP code, only to utility classes not Also, the code follows a stricter object-oriented design, than most other parts of OTP. The Raptor implementation is highly critical code, hence we set the bar higher with respect to code quality. -OTP provides transit data to Raptor by implementing the _raptor/api/transit_ model. The -[RoutingService](src/main/java/org/opentripplanner/routing/RoutingService.java) +OTP provides transit data to Raptor by implementing the _raptor/spi_. The +[RoutingService](application/src/main/java/org/opentripplanner/routing/service/DefaultRoutingService.java) is responsible for mapping from the OTP context to a -[RaptorRequest](src/main/java/org/opentripplanner/raptor/api/request/RaptorRequest.java) +[RaptorRequest](application/src/main/java/org/opentripplanner/raptor/api/request/RaptorRequest.java) and then map the -result, [Raptor Path](src/main/java/org/opentripplanner/raptor/api/path/Path.java), back to +result, [Raptor Path](application/src/main/java/org/opentripplanner/raptor/api/path/RaptorPath.java), back to the OTP internal domain. This might seem like a lot of unnecessary mapping, but mapping is simple - routing is not. The performance of Raptor is important, and we care about every millisecond. All changes to the existing Raptor coded should be tested with the -[SpeedTest](src/test/java/org/opentripplanner/transit/raptor/speed_test/package.md) and compared +[SpeedTest](application/src/test/java/org/opentripplanner/transit/speed_test/package.md) and compared with an earlier version of the code to make sure the performance is NOT degraded. -#### [Transfer path optimization](src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/package.md) +#### [Transfer path optimization](application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/package.md) Describes the transfer functionality, the design and the implementation. The logic for finding the best transfer is distributed to the Raptor and -the [OptimizeTransferService](src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/OptimizeTransferService.java) +the [OptimizeTransferService](application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/OptimizeTransferService.java) . -#### [Itinerary list filter chain](src/main/java/org/opentripplanner/routing/algorithm/filterchain/package.md) +#### [Itinerary list filter chain](application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/package.md) Describes the itinerary list filter chain, used to post-process the itineraries returned from the -routers in [RoutingWorker](src/main/java/org/opentripplanner/routing/algorithm/RoutingWorker.java), +routers in [RoutingWorker](application/src/main/java/org/opentripplanner/routing/algorithm/RoutingWorker.java), in order to sort and reduce the number of returned itineraries. It can also be used to decorate the returned itineraries, especially if it requires more complex calculations, which would be unfeasible to do during the routing process. -### [Service](src/main/java/org/opentripplanner/service/package.md) +### [Service](application/src/main/java/org/opentripplanner/service/package.md) The service package contains small services usually specific to one or a few use-cases. In contrast -to a domain model they may use one or many domain models and other services. \ No newline at end of file +to a domain model they may use one or many domain models and other services. From 5f980acc9f6ba5724bf16f8460201c03b65056c5 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Sun, 20 Oct 2024 18:50:16 +0200 Subject: [PATCH 083/213] refactor:Rename 'transit' to 'transitData' in SearchContext (Raptor) --- .../raptor/configure/RaptorConfig.java | 4 ++-- .../rangeraptor/context/SearchContext.java | 20 +++++++++---------- .../path/configure/PathConfig.java | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java b/application/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java index cc488448304..e5c9d90a586 100644 --- a/application/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java +++ b/application/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java @@ -146,7 +146,7 @@ private RangeRaptorWorker createWorker( return new DefaultRangeRaptorWorker<>( workerState, routingStrategy, - ctx.transit(), + ctx.transitData(), ctx.slackProvider(), ctxLeg.accessPaths(), ctx.calculator(), @@ -159,7 +159,7 @@ private RangeRaptorWorker createWorker( private RangeRaptor createRangeRaptor(SearchContext ctx, RangeRaptorWorker worker) { return new RangeRaptor<>( worker, - ctx.transit(), + ctx.transitData(), ctx.legs().getFirst().accessPaths(), ctx.roundTracker(), ctx.calculator(), diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/context/SearchContext.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/context/SearchContext.java index e322881d786..e197bad8461 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/context/SearchContext.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/context/SearchContext.java @@ -59,7 +59,7 @@ public class SearchContext { /** * the transit data role needed for routing */ - protected final RaptorTransitDataProvider transit; + protected final RaptorTransitDataProvider transitData; private final RaptorTransitCalculator calculator; private final RaptorTuningParameters tuningParameters; @@ -75,10 +75,10 @@ public class SearchContext { /** Lazy initialized */ private RaptorCostCalculator costCalculator = null; - public SearchContext( + SearchContext( RaptorRequest request, RaptorTuningParameters tuningParameters, - RaptorTransitDataProvider transit, + RaptorTransitDataProvider transitData, AccessPaths accessPaths, List viaConnections, EgressPaths egressPaths, @@ -86,7 +86,7 @@ public SearchContext( ) { this.request = request; this.tuningParameters = tuningParameters; - this.transit = transit; + this.transitData = transitData; this.calculator = createCalculator(request, tuningParameters); this.roundTracker = @@ -133,8 +133,8 @@ public MultiCriteriaRequest multiCriteria() { return request.multiCriteria(); } - public RaptorTransitDataProvider transit() { - return transit; + public RaptorTransitDataProvider transitData() { + return transitData; } public RaptorTransitCalculator calculator() { @@ -150,7 +150,7 @@ public SlackProvider slackProvider() { } public RaptorSlackProvider raptorSlackProvider() { - return transit.slackProvider(); + return transitData.slackProvider(); } /** @@ -167,7 +167,7 @@ public ToIntFunction boardSlackProvider() { @Nullable public RaptorCostCalculator costCalculator() { if (costCalculator == null) { - this.costCalculator = transit.multiCriteriaCostCalculator(); + this.costCalculator = transitData.multiCriteriaCostCalculator(); } return costCalculator; } @@ -187,7 +187,7 @@ public IntPredicate acceptC2AtDestination() { /** Number of stops in transit graph. */ public int nStops() { - return transit.numberOfStops(); + return transitData.numberOfStops(); } /** Calculate the maximum number of rounds to perform. */ @@ -224,7 +224,7 @@ public boolean useConstrainedTransfers() { /* private methods */ public RaptorStopNameResolver stopNameResolver() { - return transit.stopNameResolver(); + return transitData.stopNameResolver(); } public TimeBasedBoardingSupport createTimeBasedBoardingSupport() { diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/path/configure/PathConfig.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/path/configure/PathConfig.java index 43d504ced7d..24c4d8a3bed 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/path/configure/PathConfig.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/path/configure/PathConfig.java @@ -102,7 +102,7 @@ private PathMapper createPathMapper(boolean includeCost) { ctx.raptorSlackProvider(), includeCost ? ctx.costCalculator() : null, ctx.stopNameResolver(), - ctx.transit().transferConstraintsSearch(), + ctx.transitData().transferConstraintsSearch(), ctx.lifeCycle() ); } From 191aec2a91d703a16999875913d1dfc9208ae600 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Mon, 21 Oct 2024 09:46:23 +0100 Subject: [PATCH 084/213] do not use wildcard import --- .../gtfs/mapping/TransitModeMapperTest.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/application/src/test/java/org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java b/application/src/test/java/org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java index 86c98b02be4..a872b1456f4 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java @@ -1,7 +1,19 @@ package org.opentripplanner.gtfs.mapping; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.transit.model.basic.TransitMode.*; +import static org.opentripplanner.transit.model.basic.TransitMode.AIRPLANE; +import static org.opentripplanner.transit.model.basic.TransitMode.BUS; +import static org.opentripplanner.transit.model.basic.TransitMode.CABLE_CAR; +import static org.opentripplanner.transit.model.basic.TransitMode.CARPOOL; +import static org.opentripplanner.transit.model.basic.TransitMode.FERRY; +import static org.opentripplanner.transit.model.basic.TransitMode.FUNICULAR; +import static org.opentripplanner.transit.model.basic.TransitMode.GONDOLA; +import static org.opentripplanner.transit.model.basic.TransitMode.MONORAIL; +import static org.opentripplanner.transit.model.basic.TransitMode.RAIL; +import static org.opentripplanner.transit.model.basic.TransitMode.SUBWAY; +import static org.opentripplanner.transit.model.basic.TransitMode.TAXI; +import static org.opentripplanner.transit.model.basic.TransitMode.TRAM; +import static org.opentripplanner.transit.model.basic.TransitMode.TROLLEYBUS; import java.util.stream.Stream; import org.junit.jupiter.params.ParameterizedTest; From 029d96c77c9c1dadaa7848f28071f0ceef862428 Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Mon, 21 Oct 2024 11:17:34 +0200 Subject: [PATCH 085/213] Rename STOP_MODEL to SITE_REPOSITORY --- .../ext/fares/impl/FareModelForTest.java | 14 +++++++------- .../ext/flex/AreaStopsToVerticesMapperTest.java | 4 ++-- .../ext/geocoder/StopClusterMapperTest.java | 4 ++-- .../gtfs/mapping/TransferMapperTest.java | 8 ++++---- .../updater/siri/AddedTripBuilderTest.java | 4 ++-- .../updater/trip/RealtimeTestConstants.java | 2 +- .../trip/RealtimeTestEnvironmentBuilder.java | 2 +- 7 files changed, 19 insertions(+), 19 deletions(-) diff --git a/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/FareModelForTest.java b/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/FareModelForTest.java index 303ac9560a3..ccd2303f366 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/FareModelForTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/FareModelForTest.java @@ -25,40 +25,40 @@ public class FareModelForTest { .of(FeedScopedId.ofNullable("F2", "other-feed-zone")) .build(); - private static final SiteRepositoryBuilder STOP_MODEL_BUILDER = SiteRepository.of(); + private static final SiteRepositoryBuilder SITE_REPOSITORY_BUILDER = SiteRepository.of(); - static final RegularStop AIRPORT_STOP = STOP_MODEL_BUILDER + static final RegularStop AIRPORT_STOP = SITE_REPOSITORY_BUILDER .regularStop(id("airport")) .withCoordinate(new WgsCoordinate(1, 1)) .addFareZones(AIRPORT_ZONE) .withName(I18NString.of("Airport")) .build(); - static final RegularStop CITY_CENTER_A_STOP = STOP_MODEL_BUILDER + static final RegularStop CITY_CENTER_A_STOP = SITE_REPOSITORY_BUILDER .regularStop(id("city-center-a")) .withCoordinate(new WgsCoordinate(1, 2)) .addFareZones(CITY_CENTER_ZONE) .withName(I18NString.of("City center: stop A")) .build(); - static final RegularStop CITY_CENTER_B_STOP = STOP_MODEL_BUILDER + static final RegularStop CITY_CENTER_B_STOP = SITE_REPOSITORY_BUILDER .regularStop(id("city-center-b")) .withCoordinate(new WgsCoordinate(1, 3)) .addFareZones(CITY_CENTER_ZONE) .withName(I18NString.of("City center: stop B")) .build(); - static final RegularStop CITY_CENTER_C_STOP = STOP_MODEL_BUILDER + static final RegularStop CITY_CENTER_C_STOP = SITE_REPOSITORY_BUILDER .regularStop(id("city-center-c")) .withCoordinate(new WgsCoordinate(1, 4)) .addFareZones(CITY_CENTER_ZONE) .withName(I18NString.of("City center: stop C")) .build(); - static final RegularStop SUBURB_STOP = STOP_MODEL_BUILDER + static final RegularStop SUBURB_STOP = SITE_REPOSITORY_BUILDER .regularStop(id("suburb")) .withCoordinate(new WgsCoordinate(1, 4)) .withName(I18NString.of("Suburb")) .build(); - static final RegularStop OTHER_FEED_STOP = STOP_MODEL_BUILDER + static final RegularStop OTHER_FEED_STOP = SITE_REPOSITORY_BUILDER .regularStop(FeedScopedId.ofNullable("F2", "other-feed-stop")) .withCoordinate(new WgsCoordinate(1, 5)) .withName(I18NString.of("Other feed stop")) diff --git a/application/src/ext-test/java/org/opentripplanner/ext/flex/AreaStopsToVerticesMapperTest.java b/application/src/ext-test/java/org/opentripplanner/ext/flex/AreaStopsToVerticesMapperTest.java index a60ee79cc9b..979db157268 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/flex/AreaStopsToVerticesMapperTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/flex/AreaStopsToVerticesMapperTest.java @@ -33,13 +33,13 @@ class AreaStopsToVerticesMapperTest { .areaStop("berlin") .withGeometry(Polygons.BERLIN) .build(); - public static final SiteRepository STOP_MODEL = TEST_MODEL + public static final SiteRepository SITE_REPOSITORY = TEST_MODEL .siteRepositoryBuilder() .withAreaStop(AreaStopsToVerticesMapperTest.BERLIN_AREA_STOP) .build(); public static final TimetableRepository TRANSIT_MODEL = new TimetableRepository( - STOP_MODEL, + SITE_REPOSITORY, new Deduplicator() ); diff --git a/application/src/ext-test/java/org/opentripplanner/ext/geocoder/StopClusterMapperTest.java b/application/src/ext-test/java/org/opentripplanner/ext/geocoder/StopClusterMapperTest.java index d8c7caf90a8..fdff7787fb5 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/geocoder/StopClusterMapperTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/geocoder/StopClusterMapperTest.java @@ -22,12 +22,12 @@ class StopClusterMapperTest { private static final RegularStop STOP_B = TEST_MODEL.stop("B").build(); private static final RegularStop STOP_C = TEST_MODEL.stop("C").build(); private static final List STOPS = List.of(STOP_A, STOP_B, STOP_C); - private static final SiteRepository STOP_MODEL = TEST_MODEL + private static final SiteRepository SITE_REPOSITORY = TEST_MODEL .siteRepositoryBuilder() .withRegularStops(STOPS) .build(); private static final TimetableRepository TRANSIT_MODEL = new TimetableRepository( - STOP_MODEL, + SITE_REPOSITORY, new Deduplicator() ); private static final List LOCATIONS = STOPS diff --git a/application/src/test/java/org/opentripplanner/gtfs/mapping/TransferMapperTest.java b/application/src/test/java/org/opentripplanner/gtfs/mapping/TransferMapperTest.java index 4d1d1c65fbd..0273c3055b9 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/mapping/TransferMapperTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/mapping/TransferMapperTest.java @@ -37,24 +37,24 @@ public class TransferMapperTest { private static StationMapper STATION_MAPPER; - private static final SiteRepositoryBuilder STOP_MODEL_BUILDER = SiteRepository.of(); + private static final SiteRepositoryBuilder SITE_REPOSITORY_BUILDER = SiteRepository.of(); private static final StopMapper STOP_MAPPER = new StopMapper( TRANSLATION_HELPER, stationId -> null, - STOP_MODEL_BUILDER + SITE_REPOSITORY_BUILDER ); private static final BookingRuleMapper BOOKING_RULE_MAPPER = new BookingRuleMapper(); private static final LocationMapper LOCATION_MAPPER = new LocationMapper( - STOP_MODEL_BUILDER, + SITE_REPOSITORY_BUILDER, ISSUE_STORE ); private static final LocationGroupMapper LOCATION_GROUP_MAPPER = new LocationGroupMapper( STOP_MAPPER, LOCATION_MAPPER, - STOP_MODEL_BUILDER + SITE_REPOSITORY_BUILDER ); private static StopTimeMapper STOP_TIME_MAPPER; diff --git a/application/src/test/java/org/opentripplanner/updater/siri/AddedTripBuilderTest.java b/application/src/test/java/org/opentripplanner/updater/siri/AddedTripBuilderTest.java index 5ce5b3a5784..0c01e847148 100644 --- a/application/src/test/java/org/opentripplanner/updater/siri/AddedTripBuilderTest.java +++ b/application/src/test/java/org/opentripplanner/updater/siri/AddedTripBuilderTest.java @@ -68,7 +68,7 @@ class AddedTripBuilderTest { private static final RegularStop STOP_B = MODEL_TEST.stop("B").build(); private static final RegularStop STOP_C = MODEL_TEST.stop("C").build(); private static final RegularStop STOP_D = MODEL_TEST.stop("D").build(); - private final SiteRepository STOP_MODEL = MODEL_TEST + private final SiteRepository SITE_REPOSITORY = MODEL_TEST .siteRepositoryBuilder() .withRegularStop(STOP_A) .withRegularStop(STOP_B) @@ -78,7 +78,7 @@ class AddedTripBuilderTest { private final Deduplicator DEDUPLICATOR = new Deduplicator(); private final TimetableRepository TRANSIT_MODEL = new TimetableRepository( - STOP_MODEL, + SITE_REPOSITORY, DEDUPLICATOR ); private TransitEditorService transitService; diff --git a/application/src/test/java/org/opentripplanner/updater/trip/RealtimeTestConstants.java b/application/src/test/java/org/opentripplanner/updater/trip/RealtimeTestConstants.java index 57603ad6893..87a9da83911 100644 --- a/application/src/test/java/org/opentripplanner/updater/trip/RealtimeTestConstants.java +++ b/application/src/test/java/org/opentripplanner/updater/trip/RealtimeTestConstants.java @@ -35,7 +35,7 @@ public interface RealtimeTestConstants { RegularStop STOP_B2 = TEST_MODEL.stop("B2").withParentStation(STATION_B).build(); RegularStop STOP_C1 = TEST_MODEL.stop(STOP_C1_ID).withParentStation(STATION_C).build(); RegularStop STOP_D1 = TEST_MODEL.stop("D1").withParentStation(STATION_D).build(); - SiteRepository STOP_MODEL = TEST_MODEL + SiteRepository SITE_REPOSITORY = TEST_MODEL .siteRepositoryBuilder() .withRegularStop(STOP_A1) .withRegularStop(STOP_B1) diff --git a/application/src/test/java/org/opentripplanner/updater/trip/RealtimeTestEnvironmentBuilder.java b/application/src/test/java/org/opentripplanner/updater/trip/RealtimeTestEnvironmentBuilder.java index 99be7a86a43..eb31a555e1d 100644 --- a/application/src/test/java/org/opentripplanner/updater/trip/RealtimeTestEnvironmentBuilder.java +++ b/application/src/test/java/org/opentripplanner/updater/trip/RealtimeTestEnvironmentBuilder.java @@ -23,7 +23,7 @@ public class RealtimeTestEnvironmentBuilder implements RealtimeTestConstants { private RealtimeTestEnvironment.SourceType sourceType; private final TimetableRepository timetableRepository = new TimetableRepository( - STOP_MODEL, + SITE_REPOSITORY, new Deduplicator() ); From ff070c2b48db95f5d785441f34c07973de587a06 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Mon, 21 Oct 2024 11:44:18 +0200 Subject: [PATCH 086/213] refactor: Delete unused class ViaRangeRaptorDynamicSearch --- .../service/ViaRangeRaptorDynamicSearch.java | 298 ------------------ 1 file changed, 298 deletions(-) delete mode 100644 application/src/main/java/org/opentripplanner/raptor/service/ViaRangeRaptorDynamicSearch.java diff --git a/application/src/main/java/org/opentripplanner/raptor/service/ViaRangeRaptorDynamicSearch.java b/application/src/main/java/org/opentripplanner/raptor/service/ViaRangeRaptorDynamicSearch.java deleted file mode 100644 index 4476e40464f..00000000000 --- a/application/src/main/java/org/opentripplanner/raptor/service/ViaRangeRaptorDynamicSearch.java +++ /dev/null @@ -1,298 +0,0 @@ -package org.opentripplanner.raptor.service; - -import static org.opentripplanner.raptor.api.model.SearchDirection.FORWARD; -import static org.opentripplanner.raptor.api.model.SearchDirection.REVERSE; -import static org.opentripplanner.raptor.api.request.RaptorProfile.MULTI_CRITERIA; -import static org.opentripplanner.raptor.service.HeuristicToRunResolver.resolveHeuristicToRunBasedOnOptimizationsAndSearchParameters; - -import java.util.Collections; -import java.util.List; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; -import java.util.stream.Collectors; -import javax.annotation.Nullable; -import org.opentripplanner.framework.application.OTPRequestTimeoutException; -import org.opentripplanner.raptor.RaptorService; -import org.opentripplanner.raptor.api.model.RaptorTripSchedule; -import org.opentripplanner.raptor.api.request.RaptorRequest; -import org.opentripplanner.raptor.api.request.SearchParams; -import org.opentripplanner.raptor.api.request.SearchParamsBuilder; -import org.opentripplanner.raptor.api.response.RaptorResponse; -import org.opentripplanner.raptor.configure.RaptorConfig; -import org.opentripplanner.raptor.rangeraptor.RangeRaptor; -import org.opentripplanner.raptor.rangeraptor.internalapi.Heuristics; -import org.opentripplanner.raptor.rangeraptor.transit.RaptorSearchWindowCalculator; -import org.opentripplanner.raptor.spi.RaptorTransitDataProvider; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * This search helps the {@link RaptorService} to configure - * heuristics and set dynamic search parameters like EDT, LAT and raptor-search-window. - *

    - * If possible the forward and reverse heuristics will be run in parallel. - *

    - * Depending on which optimization is enabled and which search parameters are set a forward and/or a - * reverse "single-iteration" raptor search is performed and heuristics are collected. This is used - * to configure the "main" multi-iteration RangeRaptor search. - */ -public class ViaRangeRaptorDynamicSearch { - - private static final Logger LOG = LoggerFactory.getLogger(ViaRangeRaptorDynamicSearch.class); - - private final RaptorConfig config; - private final RaptorTransitDataProvider transitData; - private final RaptorRequest originalRequest; - private final RaptorSearchWindowCalculator dynamicSearchWindowCalculator; - - private final HeuristicSearchTask fwdHeuristics; - private final HeuristicSearchTask revHeuristics; - - public ViaRangeRaptorDynamicSearch( - RaptorConfig config, - RaptorTransitDataProvider transitData, - RaptorRequest originalRequest - ) { - this.config = config; - this.transitData = transitData; - this.originalRequest = originalRequest; - this.dynamicSearchWindowCalculator = - config.searchWindowCalculator().withSearchParams(originalRequest.searchParams()); - - this.fwdHeuristics = new HeuristicSearchTask<>(FORWARD, "Forward", config, transitData); - this.revHeuristics = new HeuristicSearchTask<>(REVERSE, "Reverse", config, transitData); - } - - public RaptorResponse route() { - try { - enableHeuristicSearchBasedOnOptimizationsAndSearchParameters(); - - // Run heuristics, if no destination is reached - runHeuristics(); - - // Set search-window and other dynamic calculated parameters - var dynamicRequest = requestWithDynamicSearchParams(originalRequest); - - return createAndRunDynamicRRWorker(dynamicRequest); - } catch (DestinationNotReachedException e) { - return new RaptorResponse<>( - Collections.emptyList(), - null, - // If a trip exists(forward heuristics succeed), but is outside the calculated - // search-window, then set the search-window params as if the request was - // performed. This enables the client to page to the next window - requestWithDynamicSearchParams(originalRequest), - false - ); - } - } - - /** - * Only exposed for testing purposes - */ - @Nullable - public Heuristics getDestinationHeuristics() { - if (!originalRequest.useDestinationPruning()) { - return null; - } - LOG.debug("RangeRaptor - Destination pruning enabled."); - return revHeuristics.result(); - } - - /** - * Create and prepare heuristic search (both FORWARD and REVERSE) based on optimizations and input - * search parameters. This is done for Standard and Multi-criteria profiles only. - */ - private void enableHeuristicSearchBasedOnOptimizationsAndSearchParameters() { - // We delegate this to a static method to be able to write unit test on this logic - resolveHeuristicToRunBasedOnOptimizationsAndSearchParameters( - originalRequest, - fwdHeuristics::enable, - revHeuristics::enable - ); - } - - /** - * Run standard "singe-iteration" raptor search to calculate heuristics - this should be really - * fast to run compared with a (multi-criteria) range-raptor search. - * - * @throws DestinationNotReachedException if destination is not reached. - */ - private void runHeuristics() { - if (isItPossibleToRunHeuristicsInParallel()) { - runHeuristicsInParallel(); - } else { - runHeuristicsSequentially(); - } - fwdHeuristics.debugCompareResult(revHeuristics); - } - - private RaptorResponse createAndRunDynamicRRWorker(RaptorRequest request) { - LOG.debug("Main request: {}", request); - RangeRaptor rangeRaptorRouter; - - // Create worker - if (request.profile().is(MULTI_CRITERIA)) { - rangeRaptorRouter = - config.createRangeRaptorWithMcWorker(transitData, request, getDestinationHeuristics()); - } else { - rangeRaptorRouter = config.createRangeRaptorWithStdWorker(transitData, request); - } - - // Route - var result = rangeRaptorRouter.route(); - - // create and return response - return new RaptorResponse<>( - result.extractPaths(), - new DefaultStopArrivals(result), - request, - // This method is not run unless the heuristic reached the destination - true - ); - } - - private boolean isItPossibleToRunHeuristicsInParallel() { - SearchParams s = originalRequest.searchParams(); - return ( - config.isMultiThreaded() && - originalRequest.runInParallel() && - s.isEarliestDepartureTimeSet() && - s.isLatestArrivalTimeSet() && - fwdHeuristics.isEnabled() && - revHeuristics.isEnabled() - ); - } - - /** - * @throws DestinationNotReachedException if destination is not reached - */ - private void runHeuristicsInParallel() { - fwdHeuristics.withRequest(originalRequest); - revHeuristics.withRequest(originalRequest); - Future asyncResult = null; - try { - asyncResult = config.threadPool().submit(fwdHeuristics::run); - revHeuristics.run(); - asyncResult.get(); - LOG.debug( - "Route using RangeRaptor - " + "REVERSE and FORWARD heuristic search performed in parallel." - ); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - // propagate interruption to the running task. - asyncResult.cancel(true); - throw new OTPRequestTimeoutException(); - } catch (ExecutionException e) { - if (e.getCause() instanceof DestinationNotReachedException) { - throw new DestinationNotReachedException(); - } - LOG.error(e.getMessage() + ". Request: " + originalRequest, e); - throw new IllegalStateException( - "Failed to run FORWARD/REVERSE heuristic search in parallel. Details: " + e.getMessage() - ); - } - } - - /** - * @throws DestinationNotReachedException if destination is not reached - */ - private void runHeuristicsSequentially() { - List> tasks = listTasksInOrder(); - - if (tasks.isEmpty()) { - return; - } - - // Run the first heuristic search - Heuristics result = runHeuristicSearchTask(tasks.get(0)); - calculateDynamicSearchParametersFromHeuristics(result); - - if (tasks.size() == 1) { - return; - } - - // Run the second heuristic search - runHeuristicSearchTask(tasks.get(1)); - } - - private Heuristics runHeuristicSearchTask(HeuristicSearchTask task) { - RaptorRequest request = task.getDirection().isForward() - ? requestForForwardHeurSearchWithDynamicSearchParams() - : requestForReverseHeurSearchWithDynamicSearchParams(); - - task.withRequest(request).run(); - - return task.result(); - } - - /** - * If the earliest-departure-time(EDT) is set, the task order should be: - *

      - *
    1. {@code FORWARD}
    2. - *
    3. {@code REVERSE}
    4. - *
    - * If no EDT is set, the latest-arrival-time is set, and the order should be the opposite, - * with {@code REVERSE} first - */ - private List> listTasksInOrder() { - boolean performForwardFirst = originalRequest.searchParams().isEarliestDepartureTimeSet(); - - List> list = performForwardFirst - ? List.of(fwdHeuristics, revHeuristics) - : List.of(revHeuristics, fwdHeuristics); - - return list.stream().filter(HeuristicSearchTask::isEnabled).collect(Collectors.toList()); - } - - private RaptorRequest requestForForwardHeurSearchWithDynamicSearchParams() { - if (originalRequest.searchParams().isEarliestDepartureTimeSet()) { - return originalRequest; - } - return originalRequest - .mutate() - .searchParams() - .earliestDepartureTime(transitData.getValidTransitDataStartTime()) - .build(); - } - - private RaptorRequest requestForReverseHeurSearchWithDynamicSearchParams() { - if (originalRequest.searchParams().isLatestArrivalTimeSet()) { - return originalRequest; - } - return originalRequest - .mutate() - .searchParams() - .latestArrivalTime( - transitData.getValidTransitDataEndTime() + - originalRequest.searchParams().accessEgressMaxDurationSeconds() - ) - .build(); - } - - private RaptorRequest requestWithDynamicSearchParams(RaptorRequest request) { - SearchParamsBuilder builder = request.mutate().searchParams(); - - if (!request.searchParams().isEarliestDepartureTimeSet()) { - builder.earliestDepartureTime(dynamicSearchWindowCalculator.getEarliestDepartureTime()); - } - if (!request.searchParams().isSearchWindowSet()) { - builder.searchWindowInSeconds(dynamicSearchWindowCalculator.getSearchWindowSeconds()); - } - // We do not set the latest-arrival-time, because we do not want to limit the forward - // multi-criteria search, it does not have much effect on the performance - we only risk - // losing optimal results. - return builder.build(); - } - - private void calculateDynamicSearchParametersFromHeuristics(@Nullable Heuristics heuristics) { - if (heuristics != null) { - dynamicSearchWindowCalculator - .withHeuristics( - heuristics.bestOverallJourneyTravelDuration(), - heuristics.minWaitTimeForJourneysReachingDestination() - ) - .calculate(); - } - } -} From a00003b225daf972a3875205bf2262ce59398ed6 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Mon, 21 Oct 2024 11:46:10 +0200 Subject: [PATCH 087/213] refactor: Small cleanup in Raptor --- .../raptor/configure/RaptorConfig.java | 17 ++++++++++------- .../raptor/service/HeuristicSearchTask.java | 3 ++- .../service/RangeRaptorDynamicSearch.java | 10 +++++----- .../raptor/RaptorArchitectureTest.java | 2 +- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java b/application/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java index e5c9d90a586..84ab67e4959 100644 --- a/application/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java +++ b/application/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java @@ -15,6 +15,7 @@ import org.opentripplanner.raptor.rangeraptor.internalapi.Heuristics; import org.opentripplanner.raptor.rangeraptor.internalapi.PassThroughPointsService; import org.opentripplanner.raptor.rangeraptor.internalapi.RangeRaptorWorker; +import org.opentripplanner.raptor.rangeraptor.internalapi.RaptorRouter; import org.opentripplanner.raptor.rangeraptor.internalapi.RaptorRouterResult; import org.opentripplanner.raptor.rangeraptor.internalapi.RaptorWorkerState; import org.opentripplanner.raptor.rangeraptor.internalapi.RoutingStrategy; @@ -27,14 +28,16 @@ /** * This class is responsible for creating a new search and holding application scoped Raptor state. *

    - * This class should have APPLICATION scope. It manage a threadPool, and hold a reference to the - * application tuning parameters. + * This class should have APPLICATION scope. It keep a reference to the threadPool used by Raptor, + * and holds a reference to the application tuning parameters. * * @param The TripSchedule type defined by the user of the raptor API. */ public class RaptorConfig { + @Nullable private final ExecutorService threadPool; + private final RaptorTuningParameters tuningParameters; /** The service is not final, because it depends on the request. */ @@ -58,7 +61,7 @@ public SearchContext context(RaptorTransitDataProvider transit, RaptorRequ return SearchContext.of(request, tuningParameters, transit, acceptC2AtDestination).build(); } - public RangeRaptor createRangeRaptorWithStdWorker( + public RaptorRouter createRangeRaptorWithStdWorker( RaptorTransitDataProvider transitData, RaptorRequest request ) { @@ -70,7 +73,7 @@ public RangeRaptor createRangeRaptorWithStdWorker( ); } - public RangeRaptor createRangeRaptorWithMcWorker( + public RaptorRouter createRangeRaptorWithMcWorker( RaptorTransitDataProvider transitData, RaptorRequest request, Heuristics heuristics @@ -93,11 +96,10 @@ public RangeRaptor createRangeRaptorWithMcWorker( var c = new McRangeRaptorConfig<>(leg, passThroughPointsService).withHeuristics(heuristics); worker = createWorker(leg, c.state(), c.strategy()); } - return createRangeRaptor(context, worker); } - public RangeRaptor createRangeRaptorWithHeuristicSearch( + public RaptorRouter createRangeRaptorWithHeuristicSearch( RaptorTransitDataProvider transitData, RaptorRequest request ) { @@ -117,6 +119,7 @@ public boolean isMultiThreaded() { return threadPool != null; } + @Nullable public ExecutorService threadPool() { return threadPool; } @@ -156,7 +159,7 @@ private RangeRaptorWorker createWorker( ); } - private RangeRaptor createRangeRaptor(SearchContext ctx, RangeRaptorWorker worker) { + private RaptorRouter createRangeRaptor(SearchContext ctx, RangeRaptorWorker worker) { return new RangeRaptor<>( worker, ctx.transitData(), diff --git a/application/src/main/java/org/opentripplanner/raptor/service/HeuristicSearchTask.java b/application/src/main/java/org/opentripplanner/raptor/service/HeuristicSearchTask.java index 7c0158d2192..0de84283af8 100644 --- a/application/src/main/java/org/opentripplanner/raptor/service/HeuristicSearchTask.java +++ b/application/src/main/java/org/opentripplanner/raptor/service/HeuristicSearchTask.java @@ -10,6 +10,7 @@ import org.opentripplanner.raptor.configure.RaptorConfig; import org.opentripplanner.raptor.rangeraptor.RangeRaptor; import org.opentripplanner.raptor.rangeraptor.internalapi.Heuristics; +import org.opentripplanner.raptor.rangeraptor.internalapi.RaptorRouter; import org.opentripplanner.raptor.rangeraptor.internalapi.RaptorRouterResult; import org.opentripplanner.raptor.spi.RaptorTransitDataProvider; import org.slf4j.Logger; @@ -33,7 +34,7 @@ public class HeuristicSearchTask { private final RaptorTransitDataProvider transitData; private boolean run = false; - private RangeRaptor search = null; + private RaptorRouter search = null; private RaptorRequest originalRequest; private RaptorRequest heuristicRequest; private RaptorRouterResult result = null; diff --git a/application/src/main/java/org/opentripplanner/raptor/service/RangeRaptorDynamicSearch.java b/application/src/main/java/org/opentripplanner/raptor/service/RangeRaptorDynamicSearch.java index 5353804f414..3af049a55ec 100644 --- a/application/src/main/java/org/opentripplanner/raptor/service/RangeRaptorDynamicSearch.java +++ b/application/src/main/java/org/opentripplanner/raptor/service/RangeRaptorDynamicSearch.java @@ -19,8 +19,8 @@ import org.opentripplanner.raptor.api.request.SearchParamsBuilder; import org.opentripplanner.raptor.api.response.RaptorResponse; import org.opentripplanner.raptor.configure.RaptorConfig; -import org.opentripplanner.raptor.rangeraptor.RangeRaptor; import org.opentripplanner.raptor.rangeraptor.internalapi.Heuristics; +import org.opentripplanner.raptor.rangeraptor.internalapi.RaptorRouter; import org.opentripplanner.raptor.rangeraptor.transit.RaptorSearchWindowCalculator; import org.opentripplanner.raptor.spi.RaptorTransitDataProvider; import org.slf4j.Logger; @@ -129,18 +129,18 @@ private void runHeuristics() { private RaptorResponse createAndRunDynamicRRWorker(RaptorRequest request) { LOG.debug("Main request: {}", request); - RangeRaptor rangeRaptorRouter; + RaptorRouter raptorRouter; // Create worker if (request.profile().is(MULTI_CRITERIA)) { - rangeRaptorRouter = + raptorRouter = config.createRangeRaptorWithMcWorker(transitData, request, getDestinationHeuristics()); } else { - rangeRaptorRouter = config.createRangeRaptorWithStdWorker(transitData, request); + raptorRouter = config.createRangeRaptorWithStdWorker(transitData, request); } // Route - var result = rangeRaptorRouter.route(); + var result = raptorRouter.route(); // create and return response return new RaptorResponse<>( diff --git a/application/src/test/java/org/opentripplanner/raptor/RaptorArchitectureTest.java b/application/src/test/java/org/opentripplanner/raptor/RaptorArchitectureTest.java index 657e060c30b..13f341279f7 100644 --- a/application/src/test/java/org/opentripplanner/raptor/RaptorArchitectureTest.java +++ b/application/src/test/java/org/opentripplanner/raptor/RaptorArchitectureTest.java @@ -77,7 +77,7 @@ void enforcePackageDependenciesRaptorAPI() { @Test void enforcePackageDependenciesRaptorSPI() { - RAPTOR.subPackage("spi").dependsOn(FRAMEWORK_UTILS, API_MODEL, API_PATH).verify(); + RAPTOR_SPI.dependsOn(FRAMEWORK_UTILS, API_MODEL, API_PATH).verify(); } @Test From fc5e85b164ca0b3fa61ac7fbf042a6d9069108e2 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Mon, 21 Oct 2024 11:54:52 +0200 Subject: [PATCH 088/213] feature: Extend Raptor with the possibility to run an extra multi-criteria search. --- .../opentripplanner/raptor/RaptorService.java | 15 +++- .../raptor/configure/RaptorConfig.java | 32 +++++++-- .../raptor/rangeraptor/CompositeResult.java | 71 +++++++++++++++++++ .../ConcurrentCompositeRaptorRouter.java | 64 +++++++++++++++++ .../service/RangeRaptorDynamicSearch.java | 13 +++- .../raptor/spi/ExtraMcRouterSearch.java | 35 +++++++++ .../raptor/moduletests/I01_HeuristicTest.java | 4 +- 7 files changed, 225 insertions(+), 9 deletions(-) create mode 100644 application/src/main/java/org/opentripplanner/raptor/rangeraptor/CompositeResult.java create mode 100644 application/src/main/java/org/opentripplanner/raptor/rangeraptor/ConcurrentCompositeRaptorRouter.java create mode 100644 application/src/main/java/org/opentripplanner/raptor/spi/ExtraMcRouterSearch.java diff --git a/application/src/main/java/org/opentripplanner/raptor/RaptorService.java b/application/src/main/java/org/opentripplanner/raptor/RaptorService.java index 70156cbbfbe..599a4104414 100644 --- a/application/src/main/java/org/opentripplanner/raptor/RaptorService.java +++ b/application/src/main/java/org/opentripplanner/raptor/RaptorService.java @@ -1,6 +1,7 @@ package org.opentripplanner.raptor; import java.util.stream.Collectors; +import javax.annotation.Nullable; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.api.request.RaptorRequest; import org.opentripplanner.raptor.api.response.RaptorResponse; @@ -8,6 +9,7 @@ import org.opentripplanner.raptor.service.DefaultStopArrivals; import org.opentripplanner.raptor.service.HeuristicSearchTask; import org.opentripplanner.raptor.service.RangeRaptorDynamicSearch; +import org.opentripplanner.raptor.spi.ExtraMcRouterSearch; import org.opentripplanner.raptor.spi.RaptorTransitDataProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -23,8 +25,16 @@ public class RaptorService { private final RaptorConfig config; - public RaptorService(RaptorConfig config) { + @Nullable + private final ExtraMcRouterSearch extraMcSearch; + + public RaptorService(RaptorConfig config, @Nullable ExtraMcRouterSearch extraMcSearch) { this.config = config; + this.extraMcSearch = extraMcSearch; + } + + public RaptorService(RaptorConfig config) { + this(config, null); } public RaptorResponse route( @@ -35,7 +45,8 @@ public RaptorResponse route( RaptorResponse response; if (request.isDynamicSearch()) { - response = new RangeRaptorDynamicSearch<>(config, transitData, request).route(); + response = + new RangeRaptorDynamicSearch<>(config, transitData, extraMcSearch, request).route(); } else { response = routeUsingStdWorker(transitData, request); } diff --git a/application/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java b/application/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java index 84ab67e4959..6c86cfca4b0 100644 --- a/application/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java +++ b/application/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java @@ -7,6 +7,7 @@ import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.api.request.RaptorRequest; import org.opentripplanner.raptor.api.request.RaptorTuningParameters; +import org.opentripplanner.raptor.rangeraptor.ConcurrentCompositeRaptorRouter; import org.opentripplanner.raptor.rangeraptor.DefaultRangeRaptorWorker; import org.opentripplanner.raptor.rangeraptor.RangeRaptor; import org.opentripplanner.raptor.rangeraptor.RangeRaptorWorkerComposite; @@ -23,6 +24,7 @@ import org.opentripplanner.raptor.rangeraptor.multicriteria.configure.McRangeRaptorConfig; import org.opentripplanner.raptor.rangeraptor.standard.configure.StdRangeRaptorConfig; import org.opentripplanner.raptor.rangeraptor.transit.RaptorSearchWindowCalculator; +import org.opentripplanner.raptor.spi.ExtraMcRouterSearch; import org.opentripplanner.raptor.spi.RaptorTransitDataProvider; /** @@ -67,13 +69,35 @@ public RaptorRouter createRangeRaptorWithStdWorker( ) { var context = context(transitData, request); var stdConfig = new StdRangeRaptorConfig<>(context); - return createRangeRaptor( - context, - createWorker(context.legs().getFirst(), stdConfig.state(), stdConfig.strategy()) - ); + var worker = createWorker(context.legs().getFirst(), stdConfig.state(), stdConfig.strategy()); + return createRangeRaptor(context, worker); } public RaptorRouter createRangeRaptorWithMcWorker( + RaptorTransitDataProvider transitData, + RaptorRequest request, + Heuristics heuristics, + @Nullable ExtraMcRouterSearch extraMcSearch + ) { + var mainSearch = createRangeRaptorWithMcWorker(transitData, request, heuristics); + + if (extraMcSearch == null) { + return mainSearch; + } + var alternativeSearch = createRangeRaptorWithMcWorker( + extraMcSearch.createTransitDataAlternativeSearch(transitData), + request, + heuristics + ); + return new ConcurrentCompositeRaptorRouter<>( + mainSearch, + alternativeSearch, + extraMcSearch.merger(), + threadPool() + ); + } + + private RaptorRouter createRangeRaptorWithMcWorker( RaptorTransitDataProvider transitData, RaptorRequest request, Heuristics heuristics diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/CompositeResult.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/CompositeResult.java new file mode 100644 index 00000000000..d92f0df79bb --- /dev/null +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/CompositeResult.java @@ -0,0 +1,71 @@ +package org.opentripplanner.raptor.rangeraptor; + +import java.util.Collection; +import java.util.function.BiFunction; +import org.opentripplanner.raptor.api.model.RaptorTripSchedule; +import org.opentripplanner.raptor.api.path.RaptorPath; +import org.opentripplanner.raptor.rangeraptor.internalapi.RaptorRouterResult; +import org.opentripplanner.raptor.rangeraptor.internalapi.SingleCriteriaStopArrivals; + +/** + * Join two results together. + *

      + *
    • Everything from the first result is added
    • + *
    • The result is merged with the injected merge strategy.
    • + *
    • Some of the methods ONLY return the result of the main search!
    • + *
    + */ +class CompositeResult implements RaptorRouterResult { + + private final RaptorRouterResult mainResult; + private final Collection> result; + + CompositeResult( + RaptorRouterResult mainResult, + RaptorRouterResult alternativeResult, + BiFunction>, Collection>, Collection>> merger + ) { + this.mainResult = mainResult; + this.result = merger.apply(mainResult.extractPaths(), alternativeResult.extractPaths()); + } + + /** + * Return the merged result. + */ + @Override + public Collection> extractPaths() { + return result; + } + + /** + * Return the main result only. + */ + @Override + public SingleCriteriaStopArrivals extractBestOverallArrivals() { + return mainResult.extractBestOverallArrivals(); + } + + /** + * Return the main result only. + */ + @Override + public SingleCriteriaStopArrivals extractBestTransitArrivals() { + return mainResult.extractBestTransitArrivals(); + } + + /** + * Return the main result only. + */ + @Override + public SingleCriteriaStopArrivals extractBestNumberOfTransfers() { + return mainResult.extractBestNumberOfTransfers(); + } + + /** + * Return true if either the main or the alternative search has reached the destination. + */ + @Override + public boolean isDestinationReached() { + return !result.isEmpty(); + } +} diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/ConcurrentCompositeRaptorRouter.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/ConcurrentCompositeRaptorRouter.java new file mode 100644 index 00000000000..dbf0c2d89c7 --- /dev/null +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/ConcurrentCompositeRaptorRouter.java @@ -0,0 +1,64 @@ +package org.opentripplanner.raptor.rangeraptor; + +import java.util.Collection; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.function.BiFunction; +import org.opentripplanner.framework.application.OTPRequestTimeoutException; +import org.opentripplanner.raptor.api.model.RaptorTripSchedule; +import org.opentripplanner.raptor.api.path.RaptorPath; +import org.opentripplanner.raptor.rangeraptor.internalapi.RaptorRouter; +import org.opentripplanner.raptor.rangeraptor.internalapi.RaptorRouterResult; + +/** + * Run two Raptor routers and join the result. The two searches are run concurrent if an + * {@link ExecutorService} is provided. + * @see CompositeResult for joining results. + */ +public class ConcurrentCompositeRaptorRouter + implements RaptorRouter { + + private final RaptorRouter mainWorker; + private final RaptorRouter alternativeWorker; + private final BiFunction>, Collection>, Collection>> merger; + private final ExecutorService executorService; + + public ConcurrentCompositeRaptorRouter( + RaptorRouter mainWorker, + RaptorRouter alternativeWorker, + BiFunction>, Collection>, Collection>> merger, + ExecutorService executorService + ) { + this.mainWorker = mainWorker; + this.alternativeWorker = alternativeWorker; + this.merger = merger; + this.executorService = executorService; + } + + @Override + public RaptorRouterResult route() { + if (executorService == null) { + var mainResult = mainWorker.route(); + var alternativeResult = alternativeWorker.route(); + return new CompositeResult<>(mainResult, alternativeResult, merger); + } + + var mainResultFuture = executorService.submit(mainWorker::route); + var alternativeResultFuture = executorService.submit(alternativeWorker::route); + + try { + var mainResult = mainResultFuture.get(); + var alternativeResult = alternativeResultFuture.get(); + return new CompositeResult<>(mainResult, alternativeResult, merger); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + // propagate interruption to the running task. + + mainResultFuture.cancel(true); + alternativeResultFuture.cancel(true); + throw new OTPRequestTimeoutException(); + } catch (ExecutionException e) { + throw (e.getCause() instanceof RuntimeException re) ? re : new RuntimeException(e); + } + } +} diff --git a/application/src/main/java/org/opentripplanner/raptor/service/RangeRaptorDynamicSearch.java b/application/src/main/java/org/opentripplanner/raptor/service/RangeRaptorDynamicSearch.java index 3af049a55ec..cba79f3a115 100644 --- a/application/src/main/java/org/opentripplanner/raptor/service/RangeRaptorDynamicSearch.java +++ b/application/src/main/java/org/opentripplanner/raptor/service/RangeRaptorDynamicSearch.java @@ -22,6 +22,7 @@ import org.opentripplanner.raptor.rangeraptor.internalapi.Heuristics; import org.opentripplanner.raptor.rangeraptor.internalapi.RaptorRouter; import org.opentripplanner.raptor.rangeraptor.transit.RaptorSearchWindowCalculator; +import org.opentripplanner.raptor.spi.ExtraMcRouterSearch; import org.opentripplanner.raptor.spi.RaptorTransitDataProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,12 +46,16 @@ public class RangeRaptorDynamicSearch { private final RaptorRequest originalRequest; private final RaptorSearchWindowCalculator dynamicSearchWindowCalculator; + @Nullable + private final ExtraMcRouterSearch extraMcSearch; + private final HeuristicSearchTask fwdHeuristics; private final HeuristicSearchTask revHeuristics; public RangeRaptorDynamicSearch( RaptorConfig config, RaptorTransitDataProvider transitData, + @Nullable ExtraMcRouterSearch extraMcSearch, RaptorRequest originalRequest ) { this.config = config; @@ -58,6 +63,7 @@ public RangeRaptorDynamicSearch( this.originalRequest = originalRequest; this.dynamicSearchWindowCalculator = config.searchWindowCalculator().withSearchParams(originalRequest.searchParams()); + this.extraMcSearch = extraMcSearch; this.fwdHeuristics = new HeuristicSearchTask<>(FORWARD, "Forward", config, transitData); this.revHeuristics = new HeuristicSearchTask<>(REVERSE, "Reverse", config, transitData); @@ -134,7 +140,12 @@ private RaptorResponse createAndRunDynamicRRWorker(RaptorRequest request) // Create worker if (request.profile().is(MULTI_CRITERIA)) { raptorRouter = - config.createRangeRaptorWithMcWorker(transitData, request, getDestinationHeuristics()); + config.createRangeRaptorWithMcWorker( + transitData, + request, + getDestinationHeuristics(), + extraMcSearch + ); } else { raptorRouter = config.createRangeRaptorWithStdWorker(transitData, request); } diff --git a/application/src/main/java/org/opentripplanner/raptor/spi/ExtraMcRouterSearch.java b/application/src/main/java/org/opentripplanner/raptor/spi/ExtraMcRouterSearch.java new file mode 100644 index 00000000000..afebc107832 --- /dev/null +++ b/application/src/main/java/org/opentripplanner/raptor/spi/ExtraMcRouterSearch.java @@ -0,0 +1,35 @@ +package org.opentripplanner.raptor.spi; + +import java.util.Collection; +import java.util.function.BiFunction; +import org.opentripplanner.raptor.api.model.RaptorTripSchedule; +import org.opentripplanner.raptor.api.path.RaptorPath; + +/** + * This interface is used to run two mulit-criteria searches and merging the result. Raptor will + * run the heuristics as normal. Then create two multi-criteria searches, the main search and the + * alternative search. The caller must provide a {@code merger} and + * {@link RaptorTransitDataProvider}. The transit data is used for the alternative search. This + * allows the caller to filter the transit data or change the cost-calculator. + *

    + * When changing the transit data, you may also invalidate the heuristics created by Raptor. If this + * is the case, you need to turn off the {@link org.opentripplanner.raptor.api.request.Optimization#PARETO_CHECK_AGAINST_DESTINATION}. + * For the heuristics to work, you may add extra cost or filter away data. + *

    + * @param The TripSchedule type defined by the user of the raptor API. + */ +public interface ExtraMcRouterSearch { + /** + * The returned transit-data is used in the ALTERNATIVE search. The given transit data is used in + * the main search. It is the same data passed into Raptor. + */ + RaptorTransitDataProvider createTransitDataAlternativeSearch( + RaptorTransitDataProvider transitDataMainSearch + ); + + /** + * You must provide a merge strategy to merge the main result (first argument) with the + * alternative result(second argument). Make sure the end result does not have any duplicates. + */ + BiFunction>, Collection>, Collection>> merger(); +} diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/I01_HeuristicTest.java b/application/src/test/java/org/opentripplanner/raptor/moduletests/I01_HeuristicTest.java index 7fe9cfa2c15..1e2f79cce44 100644 --- a/application/src/test/java/org/opentripplanner/raptor/moduletests/I01_HeuristicTest.java +++ b/application/src/test/java/org/opentripplanner/raptor/moduletests/I01_HeuristicTest.java @@ -90,7 +90,7 @@ public void setup() { public void regular() { var request = requestBuilder.build(); - var search = new RangeRaptorDynamicSearch<>(config, data, request); + var search = new RangeRaptorDynamicSearch<>(config, data, null, request); search.route(); @@ -105,7 +105,7 @@ public void withConstrainedTransfers() { var request = requestBuilder.build(); - var search = new RangeRaptorDynamicSearch<>(config, data, request); + var search = new RangeRaptorDynamicSearch<>(config, data, null, request); search.route(); From a20988a2c3f9648717d1bd6306af7a1366f5949b Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Mon, 21 Oct 2024 12:09:02 +0200 Subject: [PATCH 089/213] feature: Add method to calculate distance to WgsCoordinate. --- .../framework/geometry/WgsCoordinate.java | 14 ++++++++++++++ .../framework/geometry/WgsCoordinateTest.java | 10 ++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/framework/geometry/WgsCoordinate.java b/application/src/main/java/org/opentripplanner/framework/geometry/WgsCoordinate.java index 6c3dbf0f9d3..136bb4264c0 100644 --- a/application/src/main/java/org/opentripplanner/framework/geometry/WgsCoordinate.java +++ b/application/src/main/java/org/opentripplanner/framework/geometry/WgsCoordinate.java @@ -163,6 +163,20 @@ public WgsCoordinate roundToApproximate100m() { return new WgsCoordinate(lat, lng); } + /** + * Compute a farly accurate distance between two coordinates. Use the fast version in + * {@link SphericalDistanceLibrary} if many computations are needed. Return the distance in + * meters between the two coordinates. + */ + public double distanceTo(WgsCoordinate other) { + return SphericalDistanceLibrary.distance( + this.latitude, + this.longitude, + other.latitude, + other.longitude + ); + } + /** * Return a new coordinate that is moved an approximate number of meters east. */ diff --git a/application/src/test/java/org/opentripplanner/framework/geometry/WgsCoordinateTest.java b/application/src/test/java/org/opentripplanner/framework/geometry/WgsCoordinateTest.java index 5cd7ac66123..4bb27fa6d36 100644 --- a/application/src/test/java/org/opentripplanner/framework/geometry/WgsCoordinateTest.java +++ b/application/src/test/java/org/opentripplanner/framework/geometry/WgsCoordinateTest.java @@ -5,6 +5,7 @@ import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.opentripplanner.framework.geometry.WgsCoordinate.GREENWICH; import java.util.List; import org.junit.jupiter.api.Test; @@ -101,8 +102,8 @@ void add() { @Test void testGreenwich() { - assertEquals(51.48d, WgsCoordinate.GREENWICH.latitude()); - assertEquals(0d, WgsCoordinate.GREENWICH.longitude()); + assertEquals(51.48d, GREENWICH.latitude()); + assertEquals(0d, GREENWICH.longitude()); } @Test @@ -120,4 +121,9 @@ void roundingTo100m() { assertEquals(10, rounded.longitude()); assertEquals(53.557, rounded.latitude()); } + + @Test + void testDistanceTo() { + assertEquals(131_394, (int) GREENWICH.distanceTo(GREENWICH.add(-1.0, 1.0))); + } } From e416a175d897be05961697b2985359db6996fa88 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Mon, 21 Oct 2024 12:34:50 +0200 Subject: [PATCH 090/213] feature: Add sandbox feature Sorlandsbanen. --- .../sorlandsbanen/CoachCostCalculator.java | 79 ++++++++++++++ .../EnturSorlandsbanenService.java | 103 ++++++++++++++++++ .../ext/sorlandsbanen/MergePaths.java | 52 +++++++++ .../ext/sorlandsbanen/PathKey.java | 58 ++++++++++ .../configure/EnturSorlandsbanenModule.java | 17 +++ .../framework/application/OTPFeature.java | 5 + .../raptoradapter/router/TransitRouter.java | 24 +++- .../RaptorRoutingRequestTransitData.java | 17 +++ .../api/OtpServerRequestContext.java | 18 ++- .../ConstructApplicationFactory.java | 6 + .../configure/ConstructApplicationModule.java | 3 + .../server/DefaultServerRequestContext.java | 20 +++- .../opentripplanner/TestServerContext.java | 1 + .../mapping/TripRequestMapperTest.java | 1 + .../transit/speed_test/SpeedTest.java | 1 + doc/user/Configuration.md | 1 + doc/user/sandbox/Sorlandsbanen.md | 44 ++++++++ mkdocs.yml | 1 + 18 files changed, 441 insertions(+), 10 deletions(-) create mode 100644 application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/CoachCostCalculator.java create mode 100644 application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/EnturSorlandsbanenService.java create mode 100644 application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/MergePaths.java create mode 100644 application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/PathKey.java create mode 100644 application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/configure/EnturSorlandsbanenModule.java create mode 100644 doc/user/sandbox/Sorlandsbanen.md diff --git a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/CoachCostCalculator.java b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/CoachCostCalculator.java new file mode 100644 index 00000000000..b7ce446d430 --- /dev/null +++ b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/CoachCostCalculator.java @@ -0,0 +1,79 @@ +package org.opentripplanner.ext.sorlandsbanen; + +import org.opentripplanner.raptor.api.model.RaptorAccessEgress; +import org.opentripplanner.raptor.api.model.RaptorTransferConstraint; +import org.opentripplanner.raptor.spi.RaptorCostCalculator; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.TripSchedule; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter; +import org.opentripplanner.transit.model.basic.TransitMode; + + +/** + * This cost calculator increases the cost on mode coach by adding an extra reluctance. The + * reluctance is hardcoded in this class and cannot be configured. + */ +class CoachCostCalculator implements RaptorCostCalculator { + + private static final int EXTRA_RELUCTANCE_ON_COACH = RaptorCostConverter.toRaptorCost(0.6); + + private final RaptorCostCalculator delegate; + + CoachCostCalculator(RaptorCostCalculator delegate) { + this.delegate = delegate; + } + + @Override + public int boardingCost( + boolean firstBoarding, + int prevArrivalTime, + int boardStop, + int boardTime, + T trip, + RaptorTransferConstraint transferConstraints + ) { + return delegate.boardingCost( + firstBoarding, + prevArrivalTime, + boardStop, + boardTime, + trip, + transferConstraints + ); + } + + @Override + public int onTripRelativeRidingCost(int boardTime, T tripScheduledBoarded) { + return delegate.onTripRelativeRidingCost(boardTime, tripScheduledBoarded); + } + + @Override + public int transitArrivalCost( + int boardCost, + int alightSlack, + int transitTime, + T trip, + int toStop + ) { + int cost = delegate.transitArrivalCost(boardCost, alightSlack, transitTime, trip, toStop); + if(trip.transitReluctanceFactorIndex() == TransitMode.COACH.ordinal()) { + cost += transitTime * EXTRA_RELUCTANCE_ON_COACH; + } + return cost; + } + + @Override + public int waitCost(int waitTimeInSeconds) { + return delegate.waitCost(waitTimeInSeconds); + } + + @Override + public int calculateRemainingMinCost(int minTravelTime, int minNumTransfers, int fromStop) { + return delegate.calculateRemainingMinCost(minTravelTime, minNumTransfers, fromStop); + } + + @Override + public int costEgress(RaptorAccessEgress egress) { + return delegate.costEgress(egress); + } + +} diff --git a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/EnturSorlandsbanenService.java b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/EnturSorlandsbanenService.java new file mode 100644 index 00000000000..a973617f257 --- /dev/null +++ b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/EnturSorlandsbanenService.java @@ -0,0 +1,103 @@ +package org.opentripplanner.ext.sorlandsbanen; + +import java.util.Collection; +import java.util.function.BiFunction; +import org.opentripplanner.framework.geometry.WgsCoordinate; +import org.opentripplanner.model.GenericLocation; +import org.opentripplanner.raptor.api.path.RaptorPath; +import org.opentripplanner.raptor.spi.ExtraMcRouterSearch; +import org.opentripplanner.raptor.spi.RaptorTransitDataProvider; +import org.opentripplanner.routing.algorithm.raptoradapter.router.street.AccessEgresses; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.RoutingAccessEgress; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.TransitLayer; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.TripSchedule; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.request.RaptorRoutingRequestTransitData; +import org.opentripplanner.routing.api.request.RouteRequest; +import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.transit.model.site.StopLocation; + +/** + * This is basically a big hack to produce results containing "Sørlandsbanen" in Norway. This + * railroad line is slow and goes inland fare from where people live. Despite this, people and the + * operator want to show it in the results for log travel along the southern part of Norway where + * ii is an option. Tuning the search has proven to be challenging. It is solved here by doing + * two searches. One normal search and one where the rail is given a big cost advantage over coach. + * If train results are found in the second search, then it is added to the results of the first + * search. Everything found in the first search is always returned. + */ +public class EnturSorlandsbanenService { + + private static final double SOUTH_BOARDER_LIMIT = 59.1; + private static final int MIN_DISTANCE_LIMIT = 120_000; + + + public ExtraMcRouterSearch createMcRouterFactory(RouteRequest request, AccessEgresses accessEgresses, TransitLayer transitLayer) { + WgsCoordinate from = findStopCoordinate( + request.from(), + accessEgresses.getAccesses(), + transitLayer + ); + WgsCoordinate to = findStopCoordinate(request.to(), accessEgresses.getEgresses(), transitLayer); + + if (from.latitude() > SOUTH_BOARDER_LIMIT && to.latitude() > SOUTH_BOARDER_LIMIT) { + return null; + } + + double distance = from.distanceTo(to); + if (distance < MIN_DISTANCE_LIMIT) { + return null; + } + + return new ExtraMcRouterSearch<>() { + @Override + public RaptorTransitDataProvider createTransitDataAlternativeSearch(RaptorTransitDataProvider transitDataMainSearch) { + return new RaptorRoutingRequestTransitData( + (RaptorRoutingRequestTransitData)transitDataMainSearch, + new CoachCostCalculator<>(transitDataMainSearch.multiCriteriaCostCalculator()) + ); + } + + @Override + public BiFunction>, Collection>, Collection>> merger() { + return new MergePaths<>(); + } + }; + } + + /** + * Find a coordinate matching the given location, in order: + * - First return the coordinate of the location if it exists. + * - Then loop through the access/egress stops and try to find the + * stop or station given by the location id, return the stop/station coordinate. + * - Return the fist stop in the access/egress list coordinate. + */ + @SuppressWarnings("ConstantConditions") + private static WgsCoordinate findStopCoordinate( + GenericLocation location, + Collection accessEgress, + TransitLayer transitLayer + ) { + if (location.lat != null) { + return new WgsCoordinate(location.lat, location.lng); + } + + StopLocation firstStop = null; + for (RoutingAccessEgress it : accessEgress) { + StopLocation stop = transitLayer.getStopByIndex(it.stop()); + if (stop.getId().equals(location.stopId)) { + return stop.getCoordinate(); + } + if (idIsParentStation(stop, location.stopId)) { + return stop.getParentStation().getCoordinate(); + } + if (firstStop == null) { + firstStop = stop; + } + } + return firstStop.getCoordinate(); + } + + private static boolean idIsParentStation(StopLocation stop, FeedScopedId pId) { + return stop.getParentStation() != null && stop.getParentStation().getId().equals(pId); + } +} diff --git a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/MergePaths.java b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/MergePaths.java new file mode 100644 index 00000000000..b5f94019b72 --- /dev/null +++ b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/MergePaths.java @@ -0,0 +1,52 @@ +package org.opentripplanner.ext.sorlandsbanen; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.function.BiFunction; +import org.opentripplanner.raptor.api.model.RaptorTripSchedule; +import org.opentripplanner.raptor.api.path.PathLeg; +import org.opentripplanner.raptor.api.path.RaptorPath; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.request.TripScheduleWithOffset; +import org.opentripplanner.transit.model.basic.TransitMode; + +/** + * Strategy for merging the main results and the extra rail results from Sorlandsbanen. + * Everything from the main result is kept, and any additional rail results from the alternative + * search are added. + */ +class MergePaths implements BiFunction>, Collection>, Collection>> { + + @Override + public Collection> apply(Collection> main, Collection> railAlternatives) { + Map> result = new HashMap<>(); + addAllToMap(result, main); + addRailToMap(result, railAlternatives); + return result.values(); + } + + private void addAllToMap(Map> map, Collection> paths) { + for (var it : paths) { + map.put(new PathKey(it), it); + } + } + + private void addRailToMap(Map> map, Collection> paths) { + for (var it : paths) { + if (hasRail(it)) { + map.put(new PathKey(it), it); + } + } + } + + private static boolean hasRail(RaptorPath path) { + return path + .legStream() + .filter(PathLeg::isTransitLeg) + .anyMatch(leg -> { + var trip = (TripScheduleWithOffset) leg.asTransitLeg().trip(); + var mode = trip.getOriginalTripPattern().getMode(); + return mode == TransitMode.RAIL; + }); + } +} diff --git a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/PathKey.java b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/PathKey.java new file mode 100644 index 00000000000..28c1b1eac25 --- /dev/null +++ b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/PathKey.java @@ -0,0 +1,58 @@ +package org.opentripplanner.ext.sorlandsbanen; + +import org.opentripplanner.raptor.api.path.PathLeg; +import org.opentripplanner.raptor.api.path.RaptorPath; + + +/** + * Uses a hash to create a key for access, egress and transit legs in a path. Transfers + * are not included. The key is used to exclude duplicates. This approach may drop valid results + * when there is a hash collision, but this whole sandbox feature is a hack - so we can tolerate + * this here. + */ +final class PathKey { + + private final int hash; + + PathKey(RaptorPath path) { + this.hash = hash(path); + } + + private static int hash(RaptorPath path) { + if (path == null) { + return 0; + } + int result = 1; + + PathLeg leg = path.accessLeg(); + + while (!leg.isEgressLeg()) { + result = 31 * result + leg.toStop(); + result = 31 * result + leg.toTime(); + + if (leg.isTransitLeg()) { + result = 31 * result + leg.asTransitLeg().trip().pattern().debugInfo().hashCode(); + } + leg = leg.nextLeg(); + } + result = 31 * result + leg.toTime(); + + return result; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o.getClass() != PathKey.class) { + return false; + } + return hash == ((PathKey) o).hash; + } + + @Override + public int hashCode() { + return hash; + } +} diff --git a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/configure/EnturSorlandsbanenModule.java b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/configure/EnturSorlandsbanenModule.java new file mode 100644 index 00000000000..b1208f2c68b --- /dev/null +++ b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/configure/EnturSorlandsbanenModule.java @@ -0,0 +1,17 @@ +package org.opentripplanner.ext.sorlandsbanen.configure; + +import dagger.Module; +import dagger.Provides; +import javax.annotation.Nullable; +import org.opentripplanner.ext.sorlandsbanen.EnturSorlandsbanenService; +import org.opentripplanner.framework.application.OTPFeature; + +@Module +public class EnturSorlandsbanenModule { + + @Provides + @Nullable + EnturSorlandsbanenService providesEnturSorlandsbanenService() { + return OTPFeature.Sorlandsbanen.isOn() ? new EnturSorlandsbanenService() : null; + } +} diff --git a/application/src/main/java/org/opentripplanner/framework/application/OTPFeature.java b/application/src/main/java/org/opentripplanner/framework/application/OTPFeature.java index 324f5397673..c4cb86ebfb9 100644 --- a/application/src/main/java/org/opentripplanner/framework/application/OTPFeature.java +++ b/application/src/main/java/org/opentripplanner/framework/application/OTPFeature.java @@ -118,6 +118,11 @@ public enum OTPFeature { SandboxAPIGeocoder(false, true, "Enable the Geocoder API."), SandboxAPIMapboxVectorTilesApi(false, true, "Enable Mapbox vector tiles API."), SandboxAPIParkAndRideApi(false, true, "Enable park-and-ride endpoint."), + Sorlandsbanen( + false, + true, + "Include train Sørlandsbanen in results when searchig in south of Norway. Only relevant in Norway." + ), TransferAnalyzer(false, true, "Analyze transfers during graph build."); private static final Object TEST_LOCK = new Object(); diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java index e72d8ee1427..d6c03c4d773 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java @@ -12,12 +12,14 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionException; import java.util.stream.IntStream; +import javax.annotation.Nullable; import org.opentripplanner.ext.ridehailing.RideHailingAccessShifter; import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.raptor.RaptorService; import org.opentripplanner.raptor.api.path.RaptorPath; import org.opentripplanner.raptor.api.response.RaptorResponse; +import org.opentripplanner.raptor.spi.ExtraMcRouterSearch; import org.opentripplanner.routing.algorithm.mapping.RaptorPathToItineraryMapper; import org.opentripplanner.routing.algorithm.raptoradapter.router.street.AccessEgressPenaltyDecorator; import org.opentripplanner.routing.algorithm.raptoradapter.router.street.AccessEgressRouter; @@ -142,7 +144,10 @@ private TransitRouterResult route() { ); // Route transit - var raptorService = new RaptorService<>(serverContext.raptorConfig()); + var raptorService = new RaptorService<>( + serverContext.raptorConfig(), + createMcRouterFactory(accessEgresses, transitLayer) + ); var transitResponse = raptorService.route(raptorRequest, requestTransitDataProvider); checkIfTransitConnectionExists(transitResponse); @@ -387,4 +392,21 @@ private IntStream listStopIndexes(FeedScopedId stopLocationId) { } return stops.stream().mapToInt(StopLocation::getIndex); } + + /** + * An optional factory for creating a decorator around the multi-criteria RangeRaptor instance. + */ + @Nullable + private ExtraMcRouterSearch createMcRouterFactory( + AccessEgresses accessEgresses, + TransitLayer transitLayer + ) { + if (OTPFeature.Sorlandsbanen.isOff()) { + return null; + } + var service = serverContext.enturSorlandsbanenService(); + return service == null + ? null + : service.createMcRouterFactory(request, accessEgresses, transitLayer); + } } diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitData.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitData.java index 0182598ca35..f1b462e031a 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitData.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitData.java @@ -128,6 +128,23 @@ public RaptorRoutingRequestTransitData( ); } + public RaptorRoutingRequestTransitData( + RaptorRoutingRequestTransitData original, + RaptorCostCalculator newCostCalculator + ) { + this.transitLayer = original.transitLayer; + this.transitSearchTimeZero = original.transitSearchTimeZero; + this.activeTripPatternsPerStop = original.activeTripPatternsPerStop; + this.patternIndex = original.patternIndex; + this.transferIndex = original.transferIndex; + this.transferService = original.transferService; + this.constrainedTransfers = original.constrainedTransfers; + this.validTransitDataStartTime = original.validTransitDataStartTime; + this.validTransitDataEndTime = original.validTransitDataEndTime; + this.generalizedCostCalculator = newCostCalculator; + this.slackProvider = original.slackProvider(); + } + @Override public Iterator getTransfersFromStop(int stopIndex) { return transferIndex.getForwardTransfers(stopIndex).iterator(); diff --git a/application/src/main/java/org/opentripplanner/standalone/api/OtpServerRequestContext.java b/application/src/main/java/org/opentripplanner/standalone/api/OtpServerRequestContext.java index 7ec71e589c7..765262840ee 100644 --- a/application/src/main/java/org/opentripplanner/standalone/api/OtpServerRequestContext.java +++ b/application/src/main/java/org/opentripplanner/standalone/api/OtpServerRequestContext.java @@ -10,6 +10,7 @@ import org.opentripplanner.ext.flex.FlexParameters; import org.opentripplanner.ext.geocoder.LuceneIndex; import org.opentripplanner.ext.ridehailing.RideHailingService; +import org.opentripplanner.ext.sorlandsbanen.EnturSorlandsbanenService; import org.opentripplanner.ext.stopconsolidation.StopConsolidationService; import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.inspector.raster.TileRendererManager; @@ -101,16 +102,10 @@ public interface OtpServerRequestContext { List rideHailingServices(); - @Nullable - StopConsolidationService stopConsolidationService(); - StreetLimitationParametersService streetLimitationParametersService(); MeterRegistry meterRegistry(); - @Nullable - EmissionsService emissionsService(); - /** Inspector/debug services */ TileRendererManager tileRendererManager(); @@ -129,6 +124,8 @@ default GraphFinder graphFinder() { VectorTileConfig vectorTileConfig(); + /* Sandbox modules */ + @Nullable default DataOverlayContext dataOverlayContext(RouteRequest request) { return OTPFeature.DataOverlay.isOnElseNull(() -> @@ -139,6 +136,15 @@ default DataOverlayContext dataOverlayContext(RouteRequest request) { ); } + @Nullable + EmissionsService emissionsService(); + @Nullable LuceneIndex lucenceIndex(); + + @Nullable + StopConsolidationService stopConsolidationService(); + + @Nullable + EnturSorlandsbanenService enturSorlandsbanenService(); } diff --git a/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationFactory.java b/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationFactory.java index b307776ef52..c76595a3eed 100644 --- a/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationFactory.java +++ b/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationFactory.java @@ -10,6 +10,8 @@ import org.opentripplanner.ext.geocoder.configure.GeocoderModule; import org.opentripplanner.ext.interactivelauncher.configuration.InteractiveLauncherModule; import org.opentripplanner.ext.ridehailing.configure.RideHailingServicesModule; +import org.opentripplanner.ext.sorlandsbanen.EnturSorlandsbanenService; +import org.opentripplanner.ext.sorlandsbanen.configure.EnturSorlandsbanenModule; import org.opentripplanner.ext.stopconsolidation.StopConsolidationRepository; import org.opentripplanner.ext.stopconsolidation.configure.StopConsolidationServiceModule; import org.opentripplanner.graph_builder.issue.api.DataImportIssueSummary; @@ -55,6 +57,7 @@ ConstructApplicationModule.class, RideHailingServicesModule.class, EmissionsServiceModule.class, + EnturSorlandsbanenModule.class, StopConsolidationServiceModule.class, InteractiveLauncherModule.class, StreetLimitationParametersServiceModule.class, @@ -90,6 +93,9 @@ public interface ConstructApplicationFactory { StreetLimitationParameters streetLimitationParameters(); + @Nullable + EnturSorlandsbanenService enturSorlandsbanenService(); + @Nullable LuceneIndex luceneIndex(); diff --git a/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationModule.java b/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationModule.java index 6c830054c49..75e2d0940a3 100644 --- a/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationModule.java +++ b/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationModule.java @@ -10,6 +10,7 @@ import org.opentripplanner.ext.geocoder.LuceneIndex; import org.opentripplanner.ext.interactivelauncher.api.LauncherRequestDecorator; import org.opentripplanner.ext.ridehailing.RideHailingService; +import org.opentripplanner.ext.sorlandsbanen.EnturSorlandsbanenService; import org.opentripplanner.ext.stopconsolidation.StopConsolidationService; import org.opentripplanner.raptor.configure.RaptorConfig; import org.opentripplanner.routing.algorithm.raptoradapter.transit.TripSchedule; @@ -41,6 +42,7 @@ OtpServerRequestContext providesServerContext( StreetLimitationParametersService streetLimitationParametersService, @Nullable TraverseVisitor traverseVisitor, EmissionsService emissionsService, + @Nullable EnturSorlandsbanenService enturSorlandsbanenService, LauncherRequestDecorator launcherRequestDecorator, @Nullable LuceneIndex luceneIndex ) { @@ -58,6 +60,7 @@ OtpServerRequestContext providesServerContext( realtimeVehicleService, vehicleRentalService, emissionsService, + enturSorlandsbanenService, routerConfig.flexParameters(), rideHailingServices, stopConsolidationService, diff --git a/application/src/main/java/org/opentripplanner/standalone/server/DefaultServerRequestContext.java b/application/src/main/java/org/opentripplanner/standalone/server/DefaultServerRequestContext.java index 0e81193d787..2c35dfe6263 100644 --- a/application/src/main/java/org/opentripplanner/standalone/server/DefaultServerRequestContext.java +++ b/application/src/main/java/org/opentripplanner/standalone/server/DefaultServerRequestContext.java @@ -9,6 +9,7 @@ import org.opentripplanner.ext.flex.FlexParameters; import org.opentripplanner.ext.geocoder.LuceneIndex; import org.opentripplanner.ext.ridehailing.RideHailingService; +import org.opentripplanner.ext.sorlandsbanen.EnturSorlandsbanenService; import org.opentripplanner.ext.stopconsolidation.StopConsolidationService; import org.opentripplanner.inspector.raster.TileRendererManager; import org.opentripplanner.raptor.api.request.RaptorTuningParameters; @@ -48,6 +49,10 @@ public class DefaultServerRequestContext implements OtpServerRequestContext { private final RealtimeVehicleService realtimeVehicleService; private final VehicleRentalService vehicleRentalService; private final EmissionsService emissionsService; + + @Nullable + private final EnturSorlandsbanenService enturSorlandsbanenService; + private final StopConsolidationService stopConsolidationService; private final StreetLimitationParametersService streetLimitationParametersService; private final LuceneIndex luceneIndex; @@ -67,12 +72,13 @@ private DefaultServerRequestContext( WorldEnvelopeService worldEnvelopeService, RealtimeVehicleService realtimeVehicleService, VehicleRentalService vehicleRentalService, - EmissionsService emissionsService, + @Nullable EmissionsService emissionsService, + @Nullable EnturSorlandsbanenService enturSorlandsbanenService, List rideHailingServices, - StopConsolidationService stopConsolidationService, + @Nullable StopConsolidationService stopConsolidationService, StreetLimitationParametersService streetLimitationParametersService, FlexParameters flexParameters, - TraverseVisitor traverseVisitor, + @Nullable TraverseVisitor traverseVisitor, @Nullable LuceneIndex luceneIndex ) { this.graph = graph; @@ -90,6 +96,7 @@ private DefaultServerRequestContext( this.realtimeVehicleService = realtimeVehicleService; this.rideHailingServices = rideHailingServices; this.emissionsService = emissionsService; + this.enturSorlandsbanenService = enturSorlandsbanenService; this.stopConsolidationService = stopConsolidationService; this.streetLimitationParametersService = streetLimitationParametersService; this.luceneIndex = luceneIndex; @@ -110,6 +117,7 @@ public static DefaultServerRequestContext create( RealtimeVehicleService realtimeVehicleService, VehicleRentalService vehicleRentalService, @Nullable EmissionsService emissionsService, + @Nullable EnturSorlandsbanenService enturSorlandsbanenService, FlexParameters flexParameters, List rideHailingServices, @Nullable StopConsolidationService stopConsolidationService, @@ -130,6 +138,7 @@ public static DefaultServerRequestContext create( realtimeVehicleService, vehicleRentalService, emissionsService, + enturSorlandsbanenService, rideHailingServices, stopConsolidationService, streetLimitationParametersService, @@ -251,4 +260,9 @@ public LuceneIndex lucenceIndex() { public EmissionsService emissionsService() { return emissionsService; } + + @Nullable + public EnturSorlandsbanenService enturSorlandsbanenService() { + return enturSorlandsbanenService; + } } diff --git a/application/src/test/java/org/opentripplanner/TestServerContext.java b/application/src/test/java/org/opentripplanner/TestServerContext.java index 90dca6ff840..b403e9432fe 100644 --- a/application/src/test/java/org/opentripplanner/TestServerContext.java +++ b/application/src/test/java/org/opentripplanner/TestServerContext.java @@ -51,6 +51,7 @@ public static OtpServerRequestContext createServerContext( createRealtimeVehicleService(transitService), createVehicleRentalService(), createEmissionsService(), + null, routerConfig.flexParameters(), List.of(), null, diff --git a/application/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java b/application/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java index 38a411ac1cf..d71a11aad68 100644 --- a/application/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java +++ b/application/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java @@ -141,6 +141,7 @@ void setup() { new DefaultRealtimeVehicleService(transitService), new DefaultVehicleRentalService(), new DefaultEmissionsService(new EmissionsDataModel()), + null, RouterConfig.DEFAULT.flexParameters(), List.of(), null, diff --git a/application/src/test/java/org/opentripplanner/transit/speed_test/SpeedTest.java b/application/src/test/java/org/opentripplanner/transit/speed_test/SpeedTest.java index 85a33281f81..087843644b1 100644 --- a/application/src/test/java/org/opentripplanner/transit/speed_test/SpeedTest.java +++ b/application/src/test/java/org/opentripplanner/transit/speed_test/SpeedTest.java @@ -117,6 +117,7 @@ public SpeedTest( TestServerContext.createRealtimeVehicleService(transitService), TestServerContext.createVehicleRentalService(), TestServerContext.createEmissionsService(), + null, config.flexConfig, List.of(), null, diff --git a/doc/user/Configuration.md b/doc/user/Configuration.md index bca974f8617..a45e4253a06 100644 --- a/doc/user/Configuration.md +++ b/doc/user/Configuration.md @@ -250,6 +250,7 @@ Here is a list of all features which can be toggled on/off and their default val | `SandboxAPIGeocoder` | Enable the Geocoder API. | | ✓️ | | `SandboxAPIMapboxVectorTilesApi` | Enable Mapbox vector tiles API. | | ✓️ | | `SandboxAPIParkAndRideApi` | Enable park-and-ride endpoint. | | ✓️ | +| `Sorlandsbanen` | Include train Sørlandsbanen in results when searchig in south of Norway. Only relevant in Norway. | | ✓️ | | `TransferAnalyzer` | Analyze transfers during graph build. | | ✓️ | diff --git a/doc/user/sandbox/Sorlandsbanen.md b/doc/user/sandbox/Sorlandsbanen.md new file mode 100644 index 00000000000..4898a29af37 --- /dev/null +++ b/doc/user/sandbox/Sorlandsbanen.md @@ -0,0 +1,44 @@ +# Sørlandsbanen - The southern railroad in Norway + +**This sandbox module is only working in Norway**, in particular only in the south of Norway. The +feature flag to turn it *on* should only be enabled if you are routing using the norwegian data set. + +The railroad in southern Norway is very slow and does not go by the cost where most people live. It +is easily beaten by coaches in the area. Despite this, we need to include it in results where it is +relevant. + +When the feature flag is enabled, two Raptor searches are performed. The first is the regular +search - unmodified, as requested by the user. The second search is modified to include train +results with Sørlandsbanen. This is achieved by setting a high COACH reluctance. We then take any +rail results(if they exist) from the second search and add it two to the results from the first +search. The new set of results will contain everything we found in the first search, plus the train +results in the second results. + +Note! This is a hack and the logic to enable this look at the origin and destination coordinates +in addition to the feature flag. + + +## Contact Info + +- Entur, Norway + +## Changelog + +- 2024-10-14: We have used this feature for som time, but now want it in the Sandbox so we do not + need to merge it everytime we create a new entur release. + + +### Configuration + +This is turned _off_ by default. To turn it on enable the `Sorlandsbanen` feature. + +```json +// otp-config.json +{ + "otpFeatures": { + "Sorlandsbanen": true + } +} +``` + + diff --git a/mkdocs.yml b/mkdocs.yml index 1364be7be1f..7d1c25bd45d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -122,3 +122,4 @@ nav: - Ride Hailing: 'sandbox/RideHailing.md' - Emissions: 'sandbox/Emissions.md' - Stop Consolidation: 'sandbox/StopConsolidation.md' + - Sørlandsbanen: 'sandbox/Sorlandsbanen.md' From 1460c114fa19b4b1625b086a9158ce558d3791f1 Mon Sep 17 00:00:00 2001 From: Teemu Kalvas Date: Mon, 21 Oct 2024 14:41:47 +0300 Subject: [PATCH 091/213] Remove branding url from Agency and ApiLeg --- .../ext/restapi/mapping/AgencyMapper.java | 1 - .../opentripplanner/ext/restapi/mapping/LegMapper.java | 1 - .../opentripplanner/ext/restapi/model/ApiAgency.java | 1 - .../org/opentripplanner/ext/restapi/model/ApiLeg.java | 2 -- .../org/opentripplanner/gtfs/mapping/AgencyMapper.java | 1 - .../transit/model/organization/Agency.java | 10 +--------- .../transit/model/organization/AgencyBuilder.java | 10 ---------- .../opentripplanner/gtfs/mapping/AgencyMapperTest.java | 4 ---- .../netex/NetexEpipBundleSmokeTest.java | 1 - .../netex/NetexNordicBundleSmokeTest.java | 1 - .../transit/model/organization/AgencyTest.java | 4 ---- 11 files changed, 1 insertion(+), 35 deletions(-) diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/AgencyMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/AgencyMapper.java index 4ea3ebb5209..5a86968153a 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/AgencyMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/AgencyMapper.java @@ -28,7 +28,6 @@ public static ApiAgency mapToApi(Agency domain) { api.lang = domain.getLang(); api.phone = domain.getPhone(); api.fareUrl = domain.getFareUrl(); - api.brandingUrl = domain.getBrandingUrl(); return api; } diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java index b642426cd6d..ce9ceeb7f46 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java @@ -100,7 +100,6 @@ public ApiLeg mapLeg( api.agencyId = FeedScopedIdMapper.mapToApi(agency.getId()); api.agencyName = agency.getName(); api.agencyUrl = agency.getUrl(); - api.agencyBrandingUrl = agency.getBrandingUrl(); api.mode = ModeMapper.mapToApi(trLeg.getMode()); var route = domain.getRoute(); diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiAgency.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiAgency.java index ada6739a795..d1c15b7f6f6 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiAgency.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiAgency.java @@ -12,7 +12,6 @@ public class ApiAgency implements Serializable { public String lang; public String phone; public String fareUrl; - public String brandingUrl; @Override public int hashCode() { diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiLeg.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiLeg.java index 7bbd83f7c2d..b020df10a91 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiLeg.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiLeg.java @@ -87,8 +87,6 @@ public class ApiLeg { public String agencyUrl; - public String agencyBrandingUrl; - public int agencyTimeZoneOffset; /** diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/AgencyMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/AgencyMapper.java index f57a9db8684..e72b3ae584b 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/AgencyMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/AgencyMapper.java @@ -36,7 +36,6 @@ private Agency doMap(org.onebusaway.gtfs.model.Agency rhs) { .withLang(rhs.getLang()) .withPhone(rhs.getPhone()) .withFareUrl(rhs.getFareUrl()) - .withBrandingUrl(rhs.getBrandingUrl()) .build(); } } diff --git a/application/src/main/java/org/opentripplanner/transit/model/organization/Agency.java b/application/src/main/java/org/opentripplanner/transit/model/organization/Agency.java index 4d82ab05e57..0953f65559d 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/organization/Agency.java +++ b/application/src/main/java/org/opentripplanner/transit/model/organization/Agency.java @@ -21,7 +21,6 @@ public final class Agency extends AbstractTransitEntity i private final String lang; private final String phone; private final String fareUrl; - private final String brandingUrl; Agency(AgencyBuilder builder) { super(builder.getId()); @@ -43,7 +42,6 @@ public final class Agency extends AbstractTransitEntity i this.lang = builder.getLang(); this.phone = builder.getPhone(); this.fareUrl = builder.getFareUrl(); - this.brandingUrl = builder.getBrandingUrl(); } public static AgencyBuilder of(FeedScopedId id) { @@ -78,11 +76,6 @@ public String getFareUrl() { return fareUrl; } - @Nullable - public String getBrandingUrl() { - return brandingUrl; - } - @Override public AgencyBuilder copy() { return new AgencyBuilder(this); @@ -102,8 +95,7 @@ public boolean sameAs(Agency other) { Objects.equals(url, other.url) && Objects.equals(lang, other.lang) && Objects.equals(phone, other.phone) && - Objects.equals(fareUrl, other.fareUrl) && - Objects.equals(brandingUrl, other.brandingUrl) + Objects.equals(fareUrl, other.fareUrl) ); } } diff --git a/application/src/main/java/org/opentripplanner/transit/model/organization/AgencyBuilder.java b/application/src/main/java/org/opentripplanner/transit/model/organization/AgencyBuilder.java index 3cf24523c5d..a0958b1d8a4 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/organization/AgencyBuilder.java +++ b/application/src/main/java/org/opentripplanner/transit/model/organization/AgencyBuilder.java @@ -25,7 +25,6 @@ public class AgencyBuilder extends AbstractEntityBuilder this.lang = original.getLang(); this.phone = original.getPhone(); this.fareUrl = original.getFareUrl(); - this.brandingUrl = original.getBrandingUrl(); } public String getName() { @@ -82,15 +81,6 @@ public AgencyBuilder withFareUrl(String fareUrl) { return this; } - public String getBrandingUrl() { - return brandingUrl; - } - - public AgencyBuilder withBrandingUrl(String brandingUrl) { - this.brandingUrl = brandingUrl; - return this; - } - @Override protected Agency buildFromValues() { return new Agency(this); diff --git a/application/src/test/java/org/opentripplanner/gtfs/mapping/AgencyMapperTest.java b/application/src/test/java/org/opentripplanner/gtfs/mapping/AgencyMapperTest.java index e0390fee6b2..789b94991b0 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/mapping/AgencyMapperTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/mapping/AgencyMapperTest.java @@ -31,7 +31,6 @@ public class AgencyMapperTest { private static final String FARE_URL = "www.url.com/fare"; - private static final String BRANDING_URL = "www.url.com/brand"; private final AgencyMapper subject = new AgencyMapper(TimetableRepositoryForTest.FEED_ID); static { @@ -42,7 +41,6 @@ public class AgencyMapperTest { AGENCY.setTimezone(TIMEZONE); AGENCY.setUrl(URL); AGENCY.setFareUrl(FARE_URL); - AGENCY.setBrandingUrl(BRANDING_URL); } @Test @@ -66,7 +64,6 @@ public void testMap() throws Exception { assertEquals(TIMEZONE, result.getTimezone().getId()); assertEquals(URL, result.getUrl()); assertEquals(FARE_URL, result.getFareUrl()); - assertEquals(BRANDING_URL, result.getBrandingUrl()); } @Test @@ -88,7 +85,6 @@ public void testMapWithNulls() throws Exception { assertNull(result.getLang()); assertNull(result.getPhone()); assertNull(result.getFareUrl()); - assertNull(result.getBrandingUrl()); } /** Mapping the same object twice, should return the the same instance. */ diff --git a/application/src/test/java/org/opentripplanner/netex/NetexEpipBundleSmokeTest.java b/application/src/test/java/org/opentripplanner/netex/NetexEpipBundleSmokeTest.java index 72e750c055f..c0214ad7998 100644 --- a/application/src/test/java/org/opentripplanner/netex/NetexEpipBundleSmokeTest.java +++ b/application/src/test/java/org/opentripplanner/netex/NetexEpipBundleSmokeTest.java @@ -92,7 +92,6 @@ private void assertAgencies(Collection agencies) { assertNull(a.getLang()); assertNull(a.getPhone()); assertNull(a.getFareUrl()); - assertNull(a.getBrandingUrl()); } private void assertOperators(Collection operators) { diff --git a/application/src/test/java/org/opentripplanner/netex/NetexNordicBundleSmokeTest.java b/application/src/test/java/org/opentripplanner/netex/NetexNordicBundleSmokeTest.java index 6b5e9b60098..4ddd07e814b 100644 --- a/application/src/test/java/org/opentripplanner/netex/NetexNordicBundleSmokeTest.java +++ b/application/src/test/java/org/opentripplanner/netex/NetexNordicBundleSmokeTest.java @@ -104,7 +104,6 @@ private void assertAgencies(Collection agencies) { assertNull(a.getLang()); assertNull(a.getPhone()); assertNull(a.getFareUrl()); - assertNull(a.getBrandingUrl()); } private void assertMultiModalStations(Collection multiModalStations) { diff --git a/application/src/test/java/org/opentripplanner/transit/model/organization/AgencyTest.java b/application/src/test/java/org/opentripplanner/transit/model/organization/AgencyTest.java index d5b0bff33a3..2eff9b5d112 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/organization/AgencyTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/organization/AgencyTest.java @@ -12,7 +12,6 @@ class AgencyTest { private static final String ID = "1"; - private static final String BRANDING_URL = "http://branding.aaa.com"; private static final String NAME = "name"; private static final String URL = "http://info.aaa.com"; private static final String TIMEZONE = "Europe/Oslo"; @@ -26,7 +25,6 @@ class AgencyTest { .withUrl(URL) .withTimezone(TIMEZONE) .withPhone(PHONE) - .withBrandingUrl(BRANDING_URL) .withFareUrl(FARE_URL) .withLang(LANG) .build(); @@ -52,7 +50,6 @@ void copy() { assertEquals(URL, copy.getUrl()); assertEquals(TIMEZONE, copy.getTimezone().getId()); assertEquals(PHONE, copy.getPhone()); - assertEquals(BRANDING_URL, copy.getBrandingUrl()); assertEquals(FARE_URL, copy.getFareUrl()); assertEquals(LANG, copy.getLang()); } @@ -65,7 +62,6 @@ void sameAs() { assertFalse(subject.sameAs(subject.copy().withUrl("X").build())); assertFalse(subject.sameAs(subject.copy().withTimezone("CET").build())); assertFalse(subject.sameAs(subject.copy().withPhone("X").build())); - assertFalse(subject.sameAs(subject.copy().withBrandingUrl("X").build())); assertFalse(subject.sameAs(subject.copy().withFareUrl("X").build())); assertFalse(subject.sameAs(subject.copy().withLang("X").build())); } From d562a5261e9fe9eb92035d564e23f00196b37c31 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Tue, 22 Oct 2024 00:30:48 +0200 Subject: [PATCH 092/213] Generate GTFS Realtime protobuf files in separate Maven module --- application/pom.xml | 8 ++++ gtfs-realtime-protobuf/pom.xml | 44 +++++++++++++++++++ .../src/main/proto/gtfs-realtime.proto | 0 .../main/proto/mfdz-realtime-extensions.proto | 0 pom.xml | 22 +--------- 5 files changed, 53 insertions(+), 21 deletions(-) create mode 100644 gtfs-realtime-protobuf/pom.xml rename {application => gtfs-realtime-protobuf}/src/main/proto/gtfs-realtime.proto (100%) rename {application => gtfs-realtime-protobuf}/src/main/proto/mfdz-realtime-extensions.proto (100%) diff --git a/application/pom.xml b/application/pom.xml index 49c738a251e..5a838ff85d8 100644 --- a/application/pom.xml +++ b/application/pom.xml @@ -12,6 +12,14 @@ OpenTripPlanner - Application + + + ${project.groupId} + gtfs-realtime-protobuf + ${project.version} + + + net.sf.trove4j trove4j diff --git a/gtfs-realtime-protobuf/pom.xml b/gtfs-realtime-protobuf/pom.xml new file mode 100644 index 00000000000..5d814e2ac42 --- /dev/null +++ b/gtfs-realtime-protobuf/pom.xml @@ -0,0 +1,44 @@ + + + 4.0.0 + + org.opentripplanner + otp-root + 2.7.0-SNAPSHOT + + gtfs-realtime-protobuf + OpenTripPlanner - GTFS Realtime (protobuf) + + + + com.google.protobuf + protobuf-java + + + + + + + org.xolstice.maven.plugins + protobuf-maven-plugin + 0.6.1 + + + + compile + test-compile + + + + + com.google.protobuf:protoc:3.22.0:exe:${os.detected.classifier} + + + + + \ No newline at end of file diff --git a/application/src/main/proto/gtfs-realtime.proto b/gtfs-realtime-protobuf/src/main/proto/gtfs-realtime.proto similarity index 100% rename from application/src/main/proto/gtfs-realtime.proto rename to gtfs-realtime-protobuf/src/main/proto/gtfs-realtime.proto diff --git a/application/src/main/proto/mfdz-realtime-extensions.proto b/gtfs-realtime-protobuf/src/main/proto/mfdz-realtime-extensions.proto similarity index 100% rename from application/src/main/proto/mfdz-realtime-extensions.proto rename to gtfs-realtime-protobuf/src/main/proto/mfdz-realtime-extensions.proto diff --git a/pom.xml b/pom.xml index 0b4dd2ea10c..247ddfe5a83 100644 --- a/pom.xml +++ b/pom.xml @@ -95,6 +95,7 @@ application + gtfs-realtime-protobuf @@ -357,27 +358,6 @@ - - - - org.xolstice.maven.plugins - protobuf-maven-plugin - 0.6.1 - - - - compile - test-compile - - - - - com.google.protobuf:protoc:3.22.0:exe:${os.detected.classifier} - - From 3b47a0990244253bbd994b1af3f89d4acd13fba2 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Tue, 22 Oct 2024 08:16:36 +0000 Subject: [PATCH 093/213] Add changelog entry for #6165 [ci skip] --- doc/user/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/user/Changelog.md b/doc/user/Changelog.md index 51c8a854b8b..e72cc790c17 100644 --- a/doc/user/Changelog.md +++ b/doc/user/Changelog.md @@ -18,6 +18,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Fix arrive by filtering for on-street/flex itineraries [#6050](https://github.com/opentripplanner/OpenTripPlanner/pull/6050) - Rename TransitModel to TransitRepository [#6148](https://github.com/opentripplanner/OpenTripPlanner/pull/6148) - Clear added patterns in TimetableSnapshot [#6141](https://github.com/opentripplanner/OpenTripPlanner/pull/6141) +- Rename StopModel to SiteRepository [#6165](https://github.com/opentripplanner/OpenTripPlanner/pull/6165) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.6.0 (2024-09-18) From d9b413cfc2b082c16ddab6f425df851ac868d138 Mon Sep 17 00:00:00 2001 From: OTP Serialization Version Bot Date: Tue, 22 Oct 2024 08:17:01 +0000 Subject: [PATCH 094/213] Bump serialization version id for #6165 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0b4dd2ea10c..346d5baa3fc 100644 --- a/pom.xml +++ b/pom.xml @@ -58,7 +58,7 @@ - 165 + 166 32.0 2.52 From 1b56f26d2dd866c63766b5cded894a08d28d4000 Mon Sep 17 00:00:00 2001 From: OTP Serialization Version Bot Date: Tue, 22 Oct 2024 09:18:53 +0000 Subject: [PATCH 095/213] Bump serialization version id for #6174 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 346d5baa3fc..1ecfe27230b 100644 --- a/pom.xml +++ b/pom.xml @@ -58,7 +58,7 @@ - 166 + 167 32.0 2.52 From d34f27face49aa33301b81d4e807cf9293dcd516 Mon Sep 17 00:00:00 2001 From: "Johan Torin (extern)" Date: Fri, 18 Oct 2024 08:07:29 +0000 Subject: [PATCH 096/213] Make the test itinerary instance non-static as it's modified in some tests. Specifically, an itinerary can be flagged for deletion in one test, which affects the assertions in the next test. Without this, tests may fail if they are executed in a certain order. This may be because LC_COLLATE is not set in the environment. --- .../filterchain/ItineraryListFilterChainTest.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/ItineraryListFilterChainTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/ItineraryListFilterChainTest.java index 1cd19823f17..4ccb7ac9793 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/ItineraryListFilterChainTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/ItineraryListFilterChainTest.java @@ -305,12 +305,12 @@ void testPostProcessorWithMaxItinerariesFilterSetToOneArriveBy() { @Nested class FlexSearchWindow { - private static final Itinerary FLEX = newItinerary(A, T11_00) + private final Itinerary flex = newItinerary(A, T11_00) .flex(T11_00, T11_30, B) .withIsSearchWindowAware(false) .build(); - private static final Instant EARLIEST_DEPARTURE = FLEX.startTime().plusMinutes(10).toInstant(); - private static final Duration SEARCH_WINDOW = Duration.ofHours(7); + private final Instant earliestDeparture = flex.startTime().plusMinutes(10).toInstant(); + private final Duration searchWindow = Duration.ofHours(7); /** * When the filtering of direct flex by the transit search window is deactivated, the direct @@ -320,18 +320,18 @@ class FlexSearchWindow { void keepDirectFlexWhenFilteringByEarliestDepartureIsDisabled() { ItineraryListFilterChain chain = createBuilder(true, false, 10) .withFilterDirectFlexBySearchWindow(false) - .withSearchWindow(EARLIEST_DEPARTURE, SEARCH_WINDOW) + .withSearchWindow(earliestDeparture, searchWindow) .build(); - assertEquals(toStr(List.of(FLEX)), toStr(chain.filter(List.of(FLEX)))); + assertEquals(toStr(List.of(flex)), toStr(chain.filter(List.of(flex)))); } @Test void removeDirectFlexWhenFilteringByEarliestDepartureIsEnabled() { ItineraryListFilterChain chain = createBuilder(true, false, 10) .withFilterDirectFlexBySearchWindow(true) - .withSearchWindow(EARLIEST_DEPARTURE, SEARCH_WINDOW) + .withSearchWindow(earliestDeparture, searchWindow) .build(); - assertEquals(toStr(List.of()), toStr(chain.filter(List.of(FLEX)))); + assertEquals(toStr(List.of()), toStr(chain.filter(List.of(flex)))); } } From cee960fc71fe22b1bd4fd8a28559883c18a25981 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 23 Oct 2024 02:02:20 +0000 Subject: [PATCH 097/213] Update Maven plugins --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 1ecfe27230b..2e9dea389fe 100644 --- a/pom.xml +++ b/pom.xml @@ -308,7 +308,7 @@ com.google.cloud.tools jib-maven-plugin - 3.4.3 + 3.4.4 org.opentripplanner.standalone.OTPMain @@ -564,7 +564,7 @@ org.apache.maven.plugins maven-gpg-plugin - 3.2.6 + 3.2.7 sign-artifacts From eca2528621f37738ab944b2227443b1b3fd0a2c0 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Wed, 23 Oct 2024 11:07:32 +0200 Subject: [PATCH 098/213] Fix max search-window when paging The PagingService was initialized with the dynamic max-search-window value, and not the request max search-window. This commit also updates the Transmodel API doc. --- .../apis/transmodel/TransmodelAPI.java | 11 ++- .../transmodel/TransmodelGraphQLSchema.java | 20 ++++- .../apis/transmodel/model/plan/TripQuery.java | 79 ++++++++++++------- .../mapping/PagingServiceFactory.java | 4 +- .../routing/api/request/RouteRequest.java | 20 ++++- .../standalone/config/RouterConfig.java | 2 +- .../routerconfig/TransitRoutingConfig.java | 2 +- .../configure/ConstructApplication.java | 3 +- .../server/DefaultServerRequestContext.java | 9 ++- .../apis/transmodel/schema.graphql | 37 +++++++-- .../TransmodelGraphQLSchemaTest.java | 7 +- .../routing/core/RouteRequestTest.java | 2 +- 12 files changed, 147 insertions(+), 49 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/TransmodelAPI.java b/application/src/main/java/org/opentripplanner/apis/transmodel/TransmodelAPI.java index 7d982e77885..fe73e8b9887 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/TransmodelAPI.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/TransmodelAPI.java @@ -22,6 +22,7 @@ import org.opentripplanner.apis.transmodel.mapping.TransitIdMapper; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.standalone.api.OtpServerRequestContext; +import org.opentripplanner.standalone.config.routerconfig.TransitRoutingConfig; import org.opentripplanner.transit.service.TimetableRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -67,14 +68,20 @@ public TransmodelAPIOldPath( public static void setUp( TransmodelAPIParameters config, TimetableRepository timetableRepository, - RouteRequest defaultRouteRequest + RouteRequest defaultRouteRequest, + TransitRoutingConfig transitRoutingConfig ) { if (config.hideFeedId()) { TransitIdMapper.setupFixedFeedId(timetableRepository.getAgencies()); } tracingHeaderTags = config.tracingHeaderTags(); maxNumberOfResultFields = config.maxNumberOfResultFields(); - schema = TransmodelGraphQLSchema.create(defaultRouteRequest, timetableRepository.getTimeZone()); + schema = + TransmodelGraphQLSchema.create( + defaultRouteRequest, + timetableRepository.getTimeZone(), + transitRoutingConfig + ); } @POST diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java b/application/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java index 5a9fa4cfb59..2ffb9941bc6 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java @@ -107,6 +107,7 @@ import org.opentripplanner.model.plan.legreference.LegReference; import org.opentripplanner.model.plan.legreference.LegReferenceSerializer; import org.opentripplanner.routing.alertpatch.TransitAlert; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.TransitTuningParameters; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.error.RoutingValidationException; import org.opentripplanner.routing.graphfinder.NearbyStop; @@ -133,17 +134,29 @@ public class TransmodelGraphQLSchema { private final DefaultRouteRequestType routing; + private final TransitTuningParameters transitTuningParameters; + private final ZoneId timeZoneId; private final Relay relay = new Relay(); - private TransmodelGraphQLSchema(RouteRequest defaultRequest, ZoneId timeZoneId) { + private TransmodelGraphQLSchema( + RouteRequest defaultRequest, + ZoneId timeZoneId, + TransitTuningParameters transitTuningParameters + ) { this.timeZoneId = timeZoneId; this.routing = new DefaultRouteRequestType(defaultRequest); + this.transitTuningParameters = transitTuningParameters; } - public static GraphQLSchema create(RouteRequest defaultRequest, ZoneId timeZoneId) { - return new TransmodelGraphQLSchema(defaultRequest, timeZoneId).create(); + public static GraphQLSchema create( + RouteRequest defaultRequest, + ZoneId timeZoneId, + TransitTuningParameters transitTuningParameters + ) { + return new TransmodelGraphQLSchema(defaultRequest, timeZoneId, transitTuningParameters) + .create(); } @SuppressWarnings("unchecked") @@ -340,6 +353,7 @@ private GraphQLSchema create() { GraphQLFieldDefinition tripQuery = TripQuery.create( routing, + transitTuningParameters, tripType, durationPerStreetModeInput, penaltyForStreetMode, diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java index 5b1bbd84373..c46b8b36082 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java @@ -12,6 +12,7 @@ import graphql.schema.GraphQLNonNull; import graphql.schema.GraphQLOutputType; import graphql.schema.GraphQLScalarType; +import java.time.Duration; import org.opentripplanner.apis.transmodel.TransmodelGraphQLPlanner; import org.opentripplanner.apis.transmodel.model.DefaultRouteRequestType; import org.opentripplanner.apis.transmodel.model.EnumTypes; @@ -20,6 +21,7 @@ import org.opentripplanner.apis.transmodel.model.framework.PassThroughPointInputType; import org.opentripplanner.apis.transmodel.model.framework.PenaltyForStreetModeType; import org.opentripplanner.apis.transmodel.model.framework.TransmodelDirectives; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.TransitTuningParameters; import org.opentripplanner.routing.api.request.preference.RoutingPreferences; import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; @@ -37,6 +39,7 @@ public class TripQuery { public static GraphQLFieldDefinition create( DefaultRouteRequestType routing, + TransitTuningParameters transitTuningParameters, GraphQLOutputType tripType, GraphQLInputObjectType durationPerStreetModeType, GraphQLInputObjectType penaltyForStreetMode, @@ -87,30 +90,42 @@ Normally this is when the search is performed (now), plus a small grace period t .newArgument() .name("searchWindow") .description( - "The length of the search-window in minutes. This parameter is optional." + - "\n\n" + - "The search-window is defined as the duration between the earliest-departure-time(EDT) and " + - "the latest-departure-time(LDT). OTP will search for all itineraries in this departure " + - "window. If `arriveBy=true` the `dateTime` parameter is the latest-arrival-time, so OTP " + - "will dynamically calculate the EDT. Using a short search-window is faster than using a " + - "longer one, but the search duration is not linear. Using a \"too\" short search-window will " + - "waste resources server side, while using a search-window that is too long will be slow." + - "\n\n" + - "OTP will dynamically calculate a reasonable value for the search-window, if not provided. The " + - "calculation comes with a significant overhead (10-20% extra). Whether you should use the " + - "dynamic calculated value or pass in a value depends on your use-case. For a travel planner " + - "in a small geographical area, with a dense network of public transportation, a fixed value " + - "between 40 minutes and 2 hours makes sense. To find the appropriate search-window, adjust it " + - "so that the number of itineraries on average is around the wanted `numItineraries`. Make " + - "sure you set the `numItineraries` to a high number while testing. For a country wide area like " + - "Norway, using the dynamic search-window is the best." + - "\n\n" + - "When paginating, the search-window is calculated using the `numItineraries` in the original " + - "search together with statistics from the search for the last page. This behaviour is " + - "configured server side, and can not be overridden from the client." + - "\n\n" + - "The search-window used is returned to the response metadata as `searchWindowUsed` for " + - "debugging purposes." + """ + The length of the search-window in minutes. This parameter is optional. + + The search-window is defined as the duration between the earliest-departure-time(EDT) and + the latest-departure-time(LDT). OTP will search for all itineraries in this departure + window. If `arriveBy=true` the `dateTime` parameter is the latest-arrival-time, so OTP + will dynamically calculate the EDT. Using a short search-window is faster than using a + longer one, but the search duration is not linear. Using a \"too\" short search-window will + waste resources server side, while using a search-window that is too long will be slow. + + OTP will dynamically calculate a reasonable value for the search-window, if not provided. The + calculation comes with a significant overhead (10-20% extra). Whether you should use the + dynamic calculated value or pass in a value depends on your use-case. For a travel planner + in a small geographical area, with a dense network of public transportation, a fixed value + between 40 minutes and 2 hours makes sense. To find the appropriate search-window, adjust it + so that the number of itineraries on average is around the wanted `numTripPatterns`. Make + sure you set the `numTripPatterns` to a high number while testing. For a country wide area like + Norway, using the dynamic search-window is the best. + + When paginating, the search-window is calculated using the `numTripPatterns` in the original + search together with statistics from the search for the last page. This behaviour is + configured server side, and can not be overridden from the client. The paging may even + exceed the maximum value. + + The search-window used is returned to the response metadata as `searchWindowUsed`. + This can be used by the client to calculate the when the next page start/end. + + Note! In some cases you may have to page many times to get all the results you want. + This is intended. Increasing the search-window beyond the max value is NOT going to be + much faster. Instead the client can inform the user about the progress. + + Maximum value: {max-search-window} + """.replace( + "{max-search-window}", + durationInMinutesToString(transitTuningParameters.maxSearchWindow()) + ) ) .type(Scalars.GraphQLInt) .build() @@ -120,9 +135,12 @@ Normally this is when the search is performed (now), plus a small grace period t .newArgument() .name("pageCursor") .description( - "Use the cursor to go to the next \"page\" of itineraries. Copy the cursor from " + - "the last response and keep the original request as is. This will enable you to " + - "search for itineraries in the next or previous time-window." + """ + Use the cursor to go to the next \"page\" of itineraries. Copy the cursor from the last + response and keep the original request as is. This will enable you to search for + itineraries in the next or previous search-window. The paging will automatically scale + up/down the search-window to fit the `numTripPatterns`. + """ ) .type(Scalars.GraphQLString) .build() @@ -646,4 +664,11 @@ private static String enumValAsString(GraphQLEnumType enumType, Enum otpVal) .get() .getName(); } + + /** + * Format and return: "2440 minute (48h)" + */ + private static String durationInMinutesToString(Duration value) { + return "%d minutes (%s)".formatted(value.toMinutes(), value.toHours() + "h"); + } } diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/mapping/PagingServiceFactory.java b/application/src/main/java/org/opentripplanner/routing/algorithm/mapping/PagingServiceFactory.java index ec58d444914..97dbda4bb68 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/mapping/PagingServiceFactory.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/mapping/PagingServiceFactory.java @@ -24,8 +24,10 @@ public static PagingService createPagingService( ) { return new PagingService( transitTuningParameters.pagingSearchWindowAdjustments(), + // The dynamic search-window is not the same as requested search-window, but in lack + // of a something else we use the raptor dynamic min here. raptorTuningParameters.dynamicSearchWindowCoefficients().minWindow(), - raptorTuningParameters.dynamicSearchWindowCoefficients().maxWindow(), + transitTuningParameters.maxSearchWindow(), searchWindowOf(raptorSearchParamsUsed), edt(searchStartTime, raptorSearchParamsUsed), lat(searchStartTime, raptorSearchParamsUsed), diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/RouteRequest.java b/application/src/main/java/org/opentripplanner/routing/api/request/RouteRequest.java index 56ba39d8431..27ecc777050 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/RouteRequest.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/RouteRequest.java @@ -11,9 +11,11 @@ import java.util.Collections; import java.util.List; import java.util.Locale; +import java.util.Objects; import java.util.function.Consumer; import javax.annotation.Nullable; import org.opentripplanner.framework.collection.ListSection; +import org.opentripplanner.framework.lang.ObjectUtils; import org.opentripplanner.framework.time.DateUtils; import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.GenericLocation; @@ -26,6 +28,7 @@ import org.opentripplanner.routing.api.response.RoutingError; import org.opentripplanner.routing.api.response.RoutingErrorCode; import org.opentripplanner.routing.error.RoutingValidationException; +import org.opentripplanner.standalone.config.routerconfig.TransitRoutingConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -332,12 +335,25 @@ private boolean hasMaxSearchWindow() { return maxSearchWindow != null; } + /** + * For testing only. Use {@link TransitRoutingConfig#maxSearchWindow()} instead. + * @see #initMaxSearchWindow(Duration) + */ public Duration maxSearchWindow() { return maxSearchWindow; } - public void setMaxSearchWindow(@Nullable Duration maxSearchWindow) { - this.maxSearchWindow = maxSearchWindow; + /** + * Initialize the maxSearchWindow from the transit config. This is necessary because the + * default route request is configured before the {@link TransitRoutingConfig}. + */ + public void initMaxSearchWindow(Duration maxSearchWindow) { + this.maxSearchWindow = + ObjectUtils.requireNotInitialized( + "maxSearchWindow", + this.maxSearchWindow, + Objects.requireNonNull(maxSearchWindow) + ); } public Locale locale() { diff --git a/application/src/main/java/org/opentripplanner/standalone/config/RouterConfig.java b/application/src/main/java/org/opentripplanner/standalone/config/RouterConfig.java index 55128af5659..cb00428284b 100644 --- a/application/src/main/java/org/opentripplanner/standalone/config/RouterConfig.java +++ b/application/src/main/java/org/opentripplanner/standalone/config/RouterConfig.java @@ -69,7 +69,7 @@ public RouterConfig(JsonNode node, String source, boolean logUnusedParams) { this.transmodelApi = new TransmodelAPIConfig("transmodelApi", root); this.routingRequestDefaults = mapDefaultRouteRequest("routingDefaults", root); this.transitConfig = new TransitRoutingConfig("transit", root, routingRequestDefaults); - this.routingRequestDefaults.setMaxSearchWindow(transitConfig.maxSearchWindow()); + this.routingRequestDefaults.initMaxSearchWindow(transitConfig.maxSearchWindow()); this.updatersParameters = new UpdatersConfig(root); this.rideHailingConfig = new RideHailingServicesConfig(root); this.vectorTileConfig = VectorTileConfig.mapVectorTilesParameters(root, "vectorTiles"); diff --git a/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/TransitRoutingConfig.java b/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/TransitRoutingConfig.java index 74dbfd4bab9..8ef190e2f08 100644 --- a/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/TransitRoutingConfig.java +++ b/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/TransitRoutingConfig.java @@ -366,7 +366,7 @@ heuristics perform a Raptor search (one-iteration) to find a trip which we use t .summary("Upper limit for the search-window calculation.") .description( """ -Long search windows consumes a lot of resources and may take a long time. Use this parameter to +Long search windows consumes a lot of resources and may take a long time. Use this parameter to tune the desired maximum search time. This is the parameter that affects the response time most, the downside is that a search is only diff --git a/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplication.java b/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplication.java index 560f234187a..979467299cd 100644 --- a/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplication.java +++ b/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplication.java @@ -175,7 +175,8 @@ private void setupTransitRoutingServer() { TransmodelAPI.setUp( routerConfig().transmodelApi(), timetableRepository(), - routerConfig().routingRequestDefaults() + routerConfig().routingRequestDefaults(), + routerConfig().transitTuningConfig() ); } diff --git a/application/src/main/java/org/opentripplanner/standalone/server/DefaultServerRequestContext.java b/application/src/main/java/org/opentripplanner/standalone/server/DefaultServerRequestContext.java index 0e81193d787..6dc3d27ce69 100644 --- a/application/src/main/java/org/opentripplanner/standalone/server/DefaultServerRequestContext.java +++ b/application/src/main/java/org/opentripplanner/standalone/server/DefaultServerRequestContext.java @@ -33,7 +33,6 @@ public class DefaultServerRequestContext implements OtpServerRequestContext { private final List rideHailingServices; - private RouteRequest routeRequest = null; private final Graph graph; private final TransitService transitService; private final TransitRoutingConfig transitRoutingConfig; @@ -52,6 +51,8 @@ public class DefaultServerRequestContext implements OtpServerRequestContext { private final StreetLimitationParametersService streetLimitationParametersService; private final LuceneIndex luceneIndex; + private RouteRequest defaultRouteRequestWithTimeSet = null; + /** * Make sure all mutable components are copied/cloned before calling this constructor. */ @@ -142,10 +143,10 @@ public static DefaultServerRequestContext create( @Override public RouteRequest defaultRouteRequest() { // Lazy initialize request-scoped request to avoid doing this when not needed - if (routeRequest == null) { - routeRequest = routeRequestDefaults.copyWithDateTimeNow(); + if (defaultRouteRequestWithTimeSet == null) { + defaultRouteRequestWithTimeSet = routeRequestDefaults.copyWithDateTimeNow(); } - return routeRequest; + return defaultRouteRequestWithTimeSet; } /** diff --git a/application/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql b/application/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql index 2f3aef2d9a2..6985ae1d654 100644 --- a/application/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/application/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -831,7 +831,12 @@ type QueryType { modes: Modes, "The maximum number of trip patterns to return. Note! This reduce the number of trip patterns AFTER the OTP travel search is done in a post-filtering process. There is little/no performance gain in reducing the number of trip patterns returned. See also the trip meta-data on how to implement paging." numTripPatterns: Int = 50, - "Use the cursor to go to the next \"page\" of itineraries. Copy the cursor from the last response and keep the original request as is. This will enable you to search for itineraries in the next or previous time-window." + """ + Use the cursor to go to the next "page" of itineraries. Copy the cursor from the last + response and keep the original request as is. This will enable you to search for + itineraries in the next or previous search-window. The paging will automatically scale + up/down the search-window to fit the `numTripPatterns`. + """ pageCursor: String, "The list of points the journey is required to pass through." passThroughPoints: [PassThroughPoint!] @deprecated(reason : "Use via instead"), @@ -868,13 +873,35 @@ type QueryType { """ The length of the search-window in minutes. This parameter is optional. - The search-window is defined as the duration between the earliest-departure-time(EDT) and the latest-departure-time(LDT). OTP will search for all itineraries in this departure window. If `arriveBy=true` the `dateTime` parameter is the latest-arrival-time, so OTP will dynamically calculate the EDT. Using a short search-window is faster than using a longer one, but the search duration is not linear. Using a "too" short search-window will waste resources server side, while using a search-window that is too long will be slow. + The search-window is defined as the duration between the earliest-departure-time(EDT) and + the latest-departure-time(LDT). OTP will search for all itineraries in this departure + window. If `arriveBy=true` the `dateTime` parameter is the latest-arrival-time, so OTP + will dynamically calculate the EDT. Using a short search-window is faster than using a + longer one, but the search duration is not linear. Using a "too" short search-window will + waste resources server side, while using a search-window that is too long will be slow. - OTP will dynamically calculate a reasonable value for the search-window, if not provided. The calculation comes with a significant overhead (10-20% extra). Whether you should use the dynamic calculated value or pass in a value depends on your use-case. For a travel planner in a small geographical area, with a dense network of public transportation, a fixed value between 40 minutes and 2 hours makes sense. To find the appropriate search-window, adjust it so that the number of itineraries on average is around the wanted `numItineraries`. Make sure you set the `numItineraries` to a high number while testing. For a country wide area like Norway, using the dynamic search-window is the best. + OTP will dynamically calculate a reasonable value for the search-window, if not provided. The + calculation comes with a significant overhead (10-20% extra). Whether you should use the + dynamic calculated value or pass in a value depends on your use-case. For a travel planner + in a small geographical area, with a dense network of public transportation, a fixed value + between 40 minutes and 2 hours makes sense. To find the appropriate search-window, adjust it + so that the number of itineraries on average is around the wanted `numTripPatterns`. Make + sure you set the `numTripPatterns` to a high number while testing. For a country wide area like + Norway, using the dynamic search-window is the best. - When paginating, the search-window is calculated using the `numItineraries` in the original search together with statistics from the search for the last page. This behaviour is configured server side, and can not be overridden from the client. + When paginating, the search-window is calculated using the `numTripPatterns` in the original + search together with statistics from the search for the last page. This behaviour is + configured server side, and can not be overridden from the client. The paging may even + exceed the maximum value. - The search-window used is returned to the response metadata as `searchWindowUsed` for debugging purposes. + The search-window used is returned to the response metadata as `searchWindowUsed`. + This can be used by the client to calculate the when the next page start/end. + + Note! In some cases you may have to page many times to get all the results you want. + This is intended. Increasing the search-window beyond the max value is NOT going to be + much faster. Instead the client can inform the user about the progress. + + Maximum value: 1440 minutes (24h) """ searchWindow: Int, """ diff --git a/application/src/test/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchemaTest.java b/application/src/test/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchemaTest.java index bfbaedfabbf..4cdb0586aa7 100644 --- a/application/src/test/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchemaTest.java +++ b/application/src/test/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchemaTest.java @@ -9,6 +9,7 @@ import java.io.File; import org.junit.jupiter.api.Test; import org.opentripplanner._support.time.ZoneIds; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.TransitTuningParameters; import org.opentripplanner.routing.api.request.RouteRequest; class TransmodelGraphQLSchemaTest { @@ -19,7 +20,11 @@ class TransmodelGraphQLSchemaTest { @Test void testSchemaBuild() { - var schema = TransmodelGraphQLSchema.create(new RouteRequest(), ZoneIds.OSLO); + var schema = TransmodelGraphQLSchema.create( + new RouteRequest(), + ZoneIds.OSLO, + TransitTuningParameters.FOR_TEST + ); assertNotNull(schema); String original = readFile(SCHEMA_FILE); diff --git a/application/src/test/java/org/opentripplanner/routing/core/RouteRequestTest.java b/application/src/test/java/org/opentripplanner/routing/core/RouteRequestTest.java index b18c12e0485..15960c44122 100644 --- a/application/src/test/java/org/opentripplanner/routing/core/RouteRequestTest.java +++ b/application/src/test/java/org/opentripplanner/routing/core/RouteRequestTest.java @@ -133,7 +133,7 @@ void testZeroSearchWindow() { @Test void testTooLongSearchWindow() { RouteRequest request = new RouteRequest(); - request.setMaxSearchWindow(DURATION_24_HOURS); + request.initMaxSearchWindow(DURATION_24_HOURS); assertThrows( IllegalArgumentException.class, () -> request.setSearchWindow(DURATION_24_HOURS_AND_ONE_MINUTE) From 685ea174064064abd3112c519fb35c87f6742774 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Wed, 23 Oct 2024 15:30:12 +0200 Subject: [PATCH 099/213] review: Apply review fixes. --- .../apis/transmodel/model/plan/TripQuery.java | 10 ++++---- .../DynamicSearchWindowCoefficients.java | 5 ++-- .../routerconfig/TransitRoutingConfig.java | 24 +++++++++---------- doc/user/RouterConfiguration.md | 2 +- 4 files changed, 20 insertions(+), 21 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java index c46b8b36082..09ae8a593b5 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java @@ -101,7 +101,7 @@ Normally this is when the search is performed (now), plus a small grace period t waste resources server side, while using a search-window that is too long will be slow. OTP will dynamically calculate a reasonable value for the search-window, if not provided. The - calculation comes with a significant overhead (10-20% extra). Whether you should use the + calculation comes with a significant overhead (10-20%% extra). Whether you should use the dynamic calculated value or pass in a value depends on your use-case. For a travel planner in a small geographical area, with a dense network of public transportation, a fixed value between 40 minutes and 2 hours makes sense. To find the appropriate search-window, adjust it @@ -121,10 +121,10 @@ calculation comes with a significant overhead (10-20% extra). Whether you should This is intended. Increasing the search-window beyond the max value is NOT going to be much faster. Instead the client can inform the user about the progress. - Maximum value: {max-search-window} - """.replace( - "{max-search-window}", - durationInMinutesToString(transitTuningParameters.maxSearchWindow()) + Maximum value: %d minutes (%dh) + """.formatted( + transitTuningParameters.maxSearchWindow().toMinutes(), + transitTuningParameters.maxSearchWindow().toHours() ) ) .type(Scalars.GraphQLInt) diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/DynamicSearchWindowCoefficients.java b/application/src/main/java/org/opentripplanner/raptor/api/request/DynamicSearchWindowCoefficients.java index 27ebb62c870..4cc74c34c66 100644 --- a/application/src/main/java/org/opentripplanner/raptor/api/request/DynamicSearchWindowCoefficients.java +++ b/application/src/main/java/org/opentripplanner/raptor/api/request/DynamicSearchWindowCoefficients.java @@ -60,11 +60,10 @@ default Duration minWindow() { /** * Set an upper limit to the calculation of the dynamic search window to prevent exceptionable - * cases to cause very long search windows. Long search windows consumes a lot of resources and + * cases to cause very long search windows. Long search windows consume a lot of resources and * may take a long time. Use this parameter to tune the desired maximum search time. *

    - * This is the parameter that affect the response time most, the downside is that a search is only - * guaranteed to be pareto-optimal within a search-window. + * This is the parameter that affects the response time the most. *

    * The default is 3 hours. The unit is minutes. */ diff --git a/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/TransitRoutingConfig.java b/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/TransitRoutingConfig.java index 8ef190e2f08..de67cf03817 100644 --- a/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/TransitRoutingConfig.java +++ b/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/TransitRoutingConfig.java @@ -62,8 +62,8 @@ public TransitRoutingConfig( .summary("This parameter is used to allocate enough memory space for Raptor.") .description( """ -Set it to the maximum number of transfers for any given itinerary expected to be found within the -entire transit network. The memory overhead of setting this higher than the maximum number of +Set it to the maximum number of transfers for any given itinerary expected to be found within the +entire transit network. The memory overhead of setting this higher than the maximum number of transfers is very little so it is better to set it too high than to low. """ ) @@ -78,8 +78,8 @@ public TransitRoutingConfig( .description( """ This reduce the number of trips departure time lookups and comparisons. When testing with data from -Entur and all of Norway as a Graph, the optimal value was about 50. If you calculate the departure -time every time or want to fine tune the performance, changing this may improve the performance a +Entur and all of Norway as a Graph, the optimal value was about 50. If you calculate the departure +time every time or want to fine tune the performance, changing this may improve the performance a few percents. """ ) @@ -108,7 +108,7 @@ public TransitRoutingConfig( .description( """ Use this parameter to set the total number of executable threads available across all searches. -Multiple searches can run in parallel - this parameter have no effect with regard to that. If 0, +Multiple searches can run in parallel - this parameter have no effect with regard to that. If 0, no extra threads are started and the search is done in one thread. """ ) @@ -142,7 +142,7 @@ public TransitRoutingConfig( | `recommended` | Use a small cost penalty like `60`. | int | | `preferred` | The best place to do transfers. Should be set to `0`(zero). | int | -Use values in a range from `0` to `100 000`. **All key/value pairs are required if the +Use values in a range from `0` to `100 000`. **All key/value pairs are required if the `stopBoardAlightDuringTransferCost` is listed.** """ ) @@ -166,7 +166,7 @@ public TransitRoutingConfig( .summary("Routing requests to use for pre-filling the stop-to-stop transfer cache.") .description( """ -If not set, the default behavior is to cache stop-to-stop transfers using the default route request +If not set, the default behavior is to cache stop-to-stop transfers using the default route request (`routingDefaults`). Use this to change the default or specify more than one `RouteRequest`. **Example** @@ -175,7 +175,7 @@ public TransitRoutingConfig( // router-config.json { "transit": { - "transferCacheRequests": [ + "transferCacheRequests": [ { "modes": "WALK" }, { "modes": "WALK", "wheelchairAccessibility": { "enabled": true } } ] @@ -201,7 +201,7 @@ public TransitRoutingConfig( """ The search window is expanded when the current page return few options. If ZERO result is returned the first duration in the list is used, if ONE result is returned then the second duration is used -and so on. The duration is added to the existing search-window and inserted into the next and +and so on. The duration is added to the existing search-window and inserted into the next and previous page cursor. See JavaDoc for [TransitTuningParameters#pagingSearchWindowAdjustments](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/src/main/java/org/opentripplanner/routing/algorithm/raptor/transit/TransitTuningParameters.java)" + for more info." """ @@ -366,7 +366,7 @@ heuristics perform a Raptor search (one-iteration) to find a trip which we use t .summary("Upper limit for the search-window calculation.") .description( """ -Long search windows consumes a lot of resources and may take a long time. Use this parameter to +Long search windows consume a lot of resources and may take a long time. Use this parameter to tune the desired maximum search time. This is the parameter that affects the response time most, the downside is that a search is only @@ -381,12 +381,12 @@ heuristics perform a Raptor search (one-iteration) to find a trip which we use t .summary("Used to set the steps the search-window is rounded to.") .description( """ -The search window is rounded off to the closest multiplication of `stepMinutes`. If `stepMinutes` = +The search window is rounded off to the closest multiplication of `stepMinutes`. If `stepMinutes` = 10 minutes, the search-window can be 10, 20, 30 ... minutes. It the computed search-window is 5 minutes and 17 seconds it will be rounded up to 10 minutes. -Use a value between `1` and `60`. This should be less than the `min-raptor-search-window` +Use a value between `1` and `60`. This should be less than the `min-raptor-search-window` coefficient. """ ) diff --git a/doc/user/RouterConfiguration.md b/doc/user/RouterConfiguration.md index 766ad0de4ef..425ab92373e 100644 --- a/doc/user/RouterConfiguration.md +++ b/doc/user/RouterConfiguration.md @@ -295,7 +295,7 @@ In addition there is an upper bound on the calculation of the search window: Upper limit for the search-window calculation. -Long search windows consumes a lot of resources and may take a long time. Use this parameter to +Long search windows consume a lot of resources and may take a long time. Use this parameter to tune the desired maximum search time. This is the parameter that affects the response time most, the downside is that a search is only From 4d3fff12ce3bafe80f2b865a5c9db0071c52e317 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Thu, 24 Oct 2024 10:56:25 +0200 Subject: [PATCH 100/213] review: Apply review fixes. --- .../apis/transmodel/model/plan/TripQuery.java | 8 -------- .../config/routerconfig/TransitRoutingConfig.java | 2 +- doc/user/RouterConfiguration.md | 2 +- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java index 09ae8a593b5..ac496131954 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java @@ -12,7 +12,6 @@ import graphql.schema.GraphQLNonNull; import graphql.schema.GraphQLOutputType; import graphql.schema.GraphQLScalarType; -import java.time.Duration; import org.opentripplanner.apis.transmodel.TransmodelGraphQLPlanner; import org.opentripplanner.apis.transmodel.model.DefaultRouteRequestType; import org.opentripplanner.apis.transmodel.model.EnumTypes; @@ -664,11 +663,4 @@ private static String enumValAsString(GraphQLEnumType enumType, Enum otpVal) .get() .getName(); } - - /** - * Format and return: "2440 minute (48h)" - */ - private static String durationInMinutesToString(Duration value) { - return "%d minutes (%s)".formatted(value.toMinutes(), value.toHours() + "h"); - } } diff --git a/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/TransitRoutingConfig.java b/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/TransitRoutingConfig.java index de67cf03817..e6602a188f4 100644 --- a/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/TransitRoutingConfig.java +++ b/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/TransitRoutingConfig.java @@ -108,7 +108,7 @@ public TransitRoutingConfig( .description( """ Use this parameter to set the total number of executable threads available across all searches. -Multiple searches can run in parallel - this parameter have no effect with regard to that. If 0, +Multiple searches can run in parallel - this parameter has no effect with regard to that. If 0, no extra threads are started and the search is done in one thread. """ ) diff --git a/doc/user/RouterConfiguration.md b/doc/user/RouterConfiguration.md index 425ab92373e..6dbd1174397 100644 --- a/doc/user/RouterConfiguration.md +++ b/doc/user/RouterConfiguration.md @@ -237,7 +237,7 @@ few percents. Split a travel search in smaller jobs and run them in parallel to improve performance. Use this parameter to set the total number of executable threads available across all searches. -Multiple searches can run in parallel - this parameter have no effect with regard to that. If 0, +Multiple searches can run in parallel - this parameter has no effect with regard to that. If 0, no extra threads are started and the search is done in one thread. From 79cf391d21aae808e7764bbd464fb92182535c9a Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Thu, 24 Oct 2024 11:03:42 +0200 Subject: [PATCH 101/213] review: Move build extension for protobuf to sub-module(gtfs-realtime-protobuf) --- gtfs-realtime-protobuf/pom.xml | 10 ++++++++++ pom.xml | 10 ---------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/gtfs-realtime-protobuf/pom.xml b/gtfs-realtime-protobuf/pom.xml index 5d814e2ac42..e4465a4d366 100644 --- a/gtfs-realtime-protobuf/pom.xml +++ b/gtfs-realtime-protobuf/pom.xml @@ -18,6 +18,16 @@ + + + + kr.motd.maven + os-maven-plugin + 1.7.1 + + - - kr.motd.maven - os-maven-plugin - 1.7.1 - - org.apache.maven.plugins From 48399ccb0fbd7737f88c7a0a875bcf794c84d757 Mon Sep 17 00:00:00 2001 From: Johan Torin Date: Thu, 24 Oct 2024 13:49:59 +0200 Subject: [PATCH 102/213] Avoid making a copy of the underlying collection when checking if the Itinerary is flagged for deletion. --- .../src/main/java/org/opentripplanner/model/plan/Itinerary.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/src/main/java/org/opentripplanner/model/plan/Itinerary.java b/application/src/main/java/org/opentripplanner/model/plan/Itinerary.java index c3d8513c2f1..18055690b6e 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/Itinerary.java +++ b/application/src/main/java/org/opentripplanner/model/plan/Itinerary.java @@ -232,7 +232,7 @@ public void removeDeletionFlags(Set removeTags) { } public boolean isFlaggedForDeletion() { - return !getSystemNotices().isEmpty(); + return !systemNotices.isEmpty(); } /** From c895a9ef32c06c2ebc406eca985aad3e4c46cc65 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Thu, 24 Oct 2024 14:12:48 +0200 Subject: [PATCH 103/213] review/refactor: Reanme EnturSorlandsbanen to SorlandsbanenNorway --- ...ice.java => SorlandsbanenNorwayService.java} | 2 +- .../configure/EnturSorlandsbanenModule.java | 17 ----------------- .../configure/SorlandsbanenNorwayModule.java | 17 +++++++++++++++++ .../raptoradapter/router/TransitRouter.java | 2 +- .../standalone/api/OtpServerRequestContext.java | 4 ++-- .../configure/ConstructApplicationFactory.java | 8 ++++---- .../configure/ConstructApplicationModule.java | 6 +++--- .../server/DefaultServerRequestContext.java | 16 ++++++++-------- 8 files changed, 36 insertions(+), 36 deletions(-) rename application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/{EnturSorlandsbanenService.java => SorlandsbanenNorwayService.java} (99%) delete mode 100644 application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/configure/EnturSorlandsbanenModule.java create mode 100644 application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/configure/SorlandsbanenNorwayModule.java diff --git a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/EnturSorlandsbanenService.java b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/SorlandsbanenNorwayService.java similarity index 99% rename from application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/EnturSorlandsbanenService.java rename to application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/SorlandsbanenNorwayService.java index a973617f257..f08c0fc4f6b 100644 --- a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/EnturSorlandsbanenService.java +++ b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/SorlandsbanenNorwayService.java @@ -25,7 +25,7 @@ * If train results are found in the second search, then it is added to the results of the first * search. Everything found in the first search is always returned. */ -public class EnturSorlandsbanenService { +public class SorlandsbanenNorwayService { private static final double SOUTH_BOARDER_LIMIT = 59.1; private static final int MIN_DISTANCE_LIMIT = 120_000; diff --git a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/configure/EnturSorlandsbanenModule.java b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/configure/EnturSorlandsbanenModule.java deleted file mode 100644 index b1208f2c68b..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/configure/EnturSorlandsbanenModule.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.opentripplanner.ext.sorlandsbanen.configure; - -import dagger.Module; -import dagger.Provides; -import javax.annotation.Nullable; -import org.opentripplanner.ext.sorlandsbanen.EnturSorlandsbanenService; -import org.opentripplanner.framework.application.OTPFeature; - -@Module -public class EnturSorlandsbanenModule { - - @Provides - @Nullable - EnturSorlandsbanenService providesEnturSorlandsbanenService() { - return OTPFeature.Sorlandsbanen.isOn() ? new EnturSorlandsbanenService() : null; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/configure/SorlandsbanenNorwayModule.java b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/configure/SorlandsbanenNorwayModule.java new file mode 100644 index 00000000000..d0b177ac767 --- /dev/null +++ b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/configure/SorlandsbanenNorwayModule.java @@ -0,0 +1,17 @@ +package org.opentripplanner.ext.sorlandsbanen.configure; + +import dagger.Module; +import dagger.Provides; +import javax.annotation.Nullable; +import org.opentripplanner.ext.sorlandsbanen.SorlandsbanenNorwayService; +import org.opentripplanner.framework.application.OTPFeature; + +@Module +public class SorlandsbanenNorwayModule { + + @Provides + @Nullable + SorlandsbanenNorwayService providesSorlandsbanenNorwayService() { + return OTPFeature.Sorlandsbanen.isOn() ? new SorlandsbanenNorwayService() : null; + } +} diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java index cb52d5bd6a4..f77711136e8 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java @@ -403,7 +403,7 @@ private ExtraMcRouterSearch createMcRouterFactory( if (OTPFeature.Sorlandsbanen.isOff()) { return null; } - var service = serverContext.enturSorlandsbanenService(); + var service = serverContext.sorlandsbanenService(); return service == null ? null : service.createMcRouterFactory(request, accessEgresses, transitLayer); diff --git a/application/src/main/java/org/opentripplanner/standalone/api/OtpServerRequestContext.java b/application/src/main/java/org/opentripplanner/standalone/api/OtpServerRequestContext.java index 765262840ee..49b43856011 100644 --- a/application/src/main/java/org/opentripplanner/standalone/api/OtpServerRequestContext.java +++ b/application/src/main/java/org/opentripplanner/standalone/api/OtpServerRequestContext.java @@ -10,7 +10,7 @@ import org.opentripplanner.ext.flex.FlexParameters; import org.opentripplanner.ext.geocoder.LuceneIndex; import org.opentripplanner.ext.ridehailing.RideHailingService; -import org.opentripplanner.ext.sorlandsbanen.EnturSorlandsbanenService; +import org.opentripplanner.ext.sorlandsbanen.SorlandsbanenNorwayService; import org.opentripplanner.ext.stopconsolidation.StopConsolidationService; import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.inspector.raster.TileRendererManager; @@ -146,5 +146,5 @@ default DataOverlayContext dataOverlayContext(RouteRequest request) { StopConsolidationService stopConsolidationService(); @Nullable - EnturSorlandsbanenService enturSorlandsbanenService(); + SorlandsbanenNorwayService sorlandsbanenService(); } diff --git a/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationFactory.java b/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationFactory.java index c93cca4887d..7191b82e814 100644 --- a/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationFactory.java +++ b/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationFactory.java @@ -10,8 +10,8 @@ import org.opentripplanner.ext.geocoder.configure.GeocoderModule; import org.opentripplanner.ext.interactivelauncher.configuration.InteractiveLauncherModule; import org.opentripplanner.ext.ridehailing.configure.RideHailingServicesModule; -import org.opentripplanner.ext.sorlandsbanen.EnturSorlandsbanenService; -import org.opentripplanner.ext.sorlandsbanen.configure.EnturSorlandsbanenModule; +import org.opentripplanner.ext.sorlandsbanen.SorlandsbanenNorwayService; +import org.opentripplanner.ext.sorlandsbanen.configure.SorlandsbanenNorwayModule; import org.opentripplanner.ext.stopconsolidation.StopConsolidationRepository; import org.opentripplanner.ext.stopconsolidation.configure.StopConsolidationServiceModule; import org.opentripplanner.graph_builder.issue.api.DataImportIssueSummary; @@ -57,7 +57,7 @@ ConstructApplicationModule.class, RideHailingServicesModule.class, EmissionsServiceModule.class, - EnturSorlandsbanenModule.class, + SorlandsbanenNorwayModule.class, StopConsolidationServiceModule.class, InteractiveLauncherModule.class, StreetLimitationParametersServiceModule.class, @@ -94,7 +94,7 @@ public interface ConstructApplicationFactory { StreetLimitationParameters streetLimitationParameters(); @Nullable - EnturSorlandsbanenService enturSorlandsbanenService(); + SorlandsbanenNorwayService enturSorlandsbanenService(); @Nullable LuceneIndex luceneIndex(); diff --git a/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationModule.java b/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationModule.java index 75e2d0940a3..ab0f242f834 100644 --- a/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationModule.java +++ b/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationModule.java @@ -10,7 +10,7 @@ import org.opentripplanner.ext.geocoder.LuceneIndex; import org.opentripplanner.ext.interactivelauncher.api.LauncherRequestDecorator; import org.opentripplanner.ext.ridehailing.RideHailingService; -import org.opentripplanner.ext.sorlandsbanen.EnturSorlandsbanenService; +import org.opentripplanner.ext.sorlandsbanen.SorlandsbanenNorwayService; import org.opentripplanner.ext.stopconsolidation.StopConsolidationService; import org.opentripplanner.raptor.configure.RaptorConfig; import org.opentripplanner.routing.algorithm.raptoradapter.transit.TripSchedule; @@ -42,7 +42,7 @@ OtpServerRequestContext providesServerContext( StreetLimitationParametersService streetLimitationParametersService, @Nullable TraverseVisitor traverseVisitor, EmissionsService emissionsService, - @Nullable EnturSorlandsbanenService enturSorlandsbanenService, + @Nullable SorlandsbanenNorwayService sorlandsbanenService, LauncherRequestDecorator launcherRequestDecorator, @Nullable LuceneIndex luceneIndex ) { @@ -60,7 +60,7 @@ OtpServerRequestContext providesServerContext( realtimeVehicleService, vehicleRentalService, emissionsService, - enturSorlandsbanenService, + sorlandsbanenService, routerConfig.flexParameters(), rideHailingServices, stopConsolidationService, diff --git a/application/src/main/java/org/opentripplanner/standalone/server/DefaultServerRequestContext.java b/application/src/main/java/org/opentripplanner/standalone/server/DefaultServerRequestContext.java index 2c35dfe6263..c6d388ffd0e 100644 --- a/application/src/main/java/org/opentripplanner/standalone/server/DefaultServerRequestContext.java +++ b/application/src/main/java/org/opentripplanner/standalone/server/DefaultServerRequestContext.java @@ -9,7 +9,7 @@ import org.opentripplanner.ext.flex.FlexParameters; import org.opentripplanner.ext.geocoder.LuceneIndex; import org.opentripplanner.ext.ridehailing.RideHailingService; -import org.opentripplanner.ext.sorlandsbanen.EnturSorlandsbanenService; +import org.opentripplanner.ext.sorlandsbanen.SorlandsbanenNorwayService; import org.opentripplanner.ext.stopconsolidation.StopConsolidationService; import org.opentripplanner.inspector.raster.TileRendererManager; import org.opentripplanner.raptor.api.request.RaptorTuningParameters; @@ -51,7 +51,7 @@ public class DefaultServerRequestContext implements OtpServerRequestContext { private final EmissionsService emissionsService; @Nullable - private final EnturSorlandsbanenService enturSorlandsbanenService; + private final SorlandsbanenNorwayService sorlandsbanenService; private final StopConsolidationService stopConsolidationService; private final StreetLimitationParametersService streetLimitationParametersService; @@ -73,7 +73,7 @@ private DefaultServerRequestContext( RealtimeVehicleService realtimeVehicleService, VehicleRentalService vehicleRentalService, @Nullable EmissionsService emissionsService, - @Nullable EnturSorlandsbanenService enturSorlandsbanenService, + @Nullable SorlandsbanenNorwayService sorlandsbanenService, List rideHailingServices, @Nullable StopConsolidationService stopConsolidationService, StreetLimitationParametersService streetLimitationParametersService, @@ -96,7 +96,7 @@ private DefaultServerRequestContext( this.realtimeVehicleService = realtimeVehicleService; this.rideHailingServices = rideHailingServices; this.emissionsService = emissionsService; - this.enturSorlandsbanenService = enturSorlandsbanenService; + this.sorlandsbanenService = sorlandsbanenService; this.stopConsolidationService = stopConsolidationService; this.streetLimitationParametersService = streetLimitationParametersService; this.luceneIndex = luceneIndex; @@ -117,7 +117,7 @@ public static DefaultServerRequestContext create( RealtimeVehicleService realtimeVehicleService, VehicleRentalService vehicleRentalService, @Nullable EmissionsService emissionsService, - @Nullable EnturSorlandsbanenService enturSorlandsbanenService, + @Nullable SorlandsbanenNorwayService sorlandsbanenService, FlexParameters flexParameters, List rideHailingServices, @Nullable StopConsolidationService stopConsolidationService, @@ -138,7 +138,7 @@ public static DefaultServerRequestContext create( realtimeVehicleService, vehicleRentalService, emissionsService, - enturSorlandsbanenService, + sorlandsbanenService, rideHailingServices, stopConsolidationService, streetLimitationParametersService, @@ -262,7 +262,7 @@ public EmissionsService emissionsService() { } @Nullable - public EnturSorlandsbanenService enturSorlandsbanenService() { - return enturSorlandsbanenService; + public SorlandsbanenNorwayService sorlandsbanenService() { + return sorlandsbanenService; } } From b2f6fafed8bb9923443932cc459754785f736ff0 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Thu, 24 Oct 2024 14:29:12 +0200 Subject: [PATCH 104/213] doc: Update JavaDoc in sandbox sorlandsbanen --- .../ext/sorlandsbanen/CoachCostCalculator.java | 3 +++ .../sorlandsbanen/SorlandsbanenNorwayService.java | 15 ++++++++------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/CoachCostCalculator.java b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/CoachCostCalculator.java index b7ce446d430..204878072d5 100644 --- a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/CoachCostCalculator.java +++ b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/CoachCostCalculator.java @@ -55,6 +55,9 @@ public int transitArrivalCost( int toStop ) { int cost = delegate.transitArrivalCost(boardCost, alightSlack, transitTime, trip, toStop); + + // This is a bit ugly, since it relays on the fact that the 'transitReluctanceFactorIndex' + // returns the 'route.getMode().ordinal()' if(trip.transitReluctanceFactorIndex() == TransitMode.COACH.ordinal()) { cost += transitTime * EXTRA_RELUCTANCE_ON_COACH; } diff --git a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/SorlandsbanenNorwayService.java b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/SorlandsbanenNorwayService.java index f08c0fc4f6b..5acffe65788 100644 --- a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/SorlandsbanenNorwayService.java +++ b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/SorlandsbanenNorwayService.java @@ -17,13 +17,14 @@ import org.opentripplanner.transit.model.site.StopLocation; /** - * This is basically a big hack to produce results containing "Sørlandsbanen" in Norway. This - * railroad line is slow and goes inland fare from where people live. Despite this, people and the - * operator want to show it in the results for log travel along the southern part of Norway where - * ii is an option. Tuning the search has proven to be challenging. It is solved here by doing - * two searches. One normal search and one where the rail is given a big cost advantage over coach. - * If train results are found in the second search, then it is added to the results of the first - * search. Everything found in the first search is always returned. + * This service is responsible for producing results with rail for the south of Norway. The rail + * line is called "Sørlandsbanen". This rail line is slow and goes inland fare from where people + * live. Despite this, people and the operator want to show it in the results for log travel along + * the southern part of Norway where ii is an option. Tuning the search has proven to be + * challenging. It is solved here by doing two searches. One normal search and one where the rail + * is given a big cost advantage over coach. If train results are found in the second search, then + * it is added to the results of the first search. Everything found in the first search is always + * returned. */ public class SorlandsbanenNorwayService { From 9f2f507cf9d5eb32bf2f4574bc1657e051dc258b Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Thu, 24 Oct 2024 14:07:44 +0200 Subject: [PATCH 105/213] feature: Add 'isNorthOf(lat)' to WgsCoordinate --- .../opentripplanner/framework/geometry/WgsCoordinate.java | 4 ++++ .../framework/geometry/WgsCoordinateTest.java | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/application/src/main/java/org/opentripplanner/framework/geometry/WgsCoordinate.java b/application/src/main/java/org/opentripplanner/framework/geometry/WgsCoordinate.java index 136bb4264c0..3a5d4b23e73 100644 --- a/application/src/main/java/org/opentripplanner/framework/geometry/WgsCoordinate.java +++ b/application/src/main/java/org/opentripplanner/framework/geometry/WgsCoordinate.java @@ -177,6 +177,10 @@ public double distanceTo(WgsCoordinate other) { ); } + public boolean isNorthOf(double latitudeBorder) { + return latitude > latitudeBorder; + } + /** * Return a new coordinate that is moved an approximate number of meters east. */ diff --git a/application/src/test/java/org/opentripplanner/framework/geometry/WgsCoordinateTest.java b/application/src/test/java/org/opentripplanner/framework/geometry/WgsCoordinateTest.java index 4bb27fa6d36..d9da08044a5 100644 --- a/application/src/test/java/org/opentripplanner/framework/geometry/WgsCoordinateTest.java +++ b/application/src/test/java/org/opentripplanner/framework/geometry/WgsCoordinateTest.java @@ -100,6 +100,13 @@ void add() { assertEquals(new WgsCoordinate(12d, 5d), new WgsCoordinate(9d, 1d).add(3d, 4d)); } + @Test + void testIsNorthOf() { + var c = new WgsCoordinate(10.0, 30.0); + assertTrue(c.isNorthOf(9.9)); + assertFalse(c.isNorthOf(10.1)); + } + @Test void testGreenwich() { assertEquals(51.48d, GREENWICH.latitude()); From 1d52e7bccdc9c48e0e5bea79e023d7428c07b1fa Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Thu, 24 Oct 2024 14:31:37 +0200 Subject: [PATCH 106/213] refactor: MAke code more readable --- .../org/opentripplanner/ext/sorlandsbanen/MergePaths.java | 4 ++-- .../ext/sorlandsbanen/SorlandsbanenNorwayService.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/MergePaths.java b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/MergePaths.java index b5f94019b72..830ec4574ea 100644 --- a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/MergePaths.java +++ b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/MergePaths.java @@ -18,10 +18,10 @@ class MergePaths implements BiFunction>, Collection>, Collection>> { @Override - public Collection> apply(Collection> main, Collection> railAlternatives) { + public Collection> apply(Collection> main, Collection> alternatives) { Map> result = new HashMap<>(); addAllToMap(result, main); - addRailToMap(result, railAlternatives); + addRailToMap(result, alternatives); return result.values(); } diff --git a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/SorlandsbanenNorwayService.java b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/SorlandsbanenNorwayService.java index 5acffe65788..783f6dc1200 100644 --- a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/SorlandsbanenNorwayService.java +++ b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/SorlandsbanenNorwayService.java @@ -40,7 +40,7 @@ public ExtraMcRouterSearch createMcRouterFactory(RouteRequest requ ); WgsCoordinate to = findStopCoordinate(request.to(), accessEgresses.getEgresses(), transitLayer); - if (from.latitude() > SOUTH_BOARDER_LIMIT && to.latitude() > SOUTH_BOARDER_LIMIT) { + if (from.isNorthOf(SOUTH_BOARDER_LIMIT) && to.isNorthOf(SOUTH_BOARDER_LIMIT)) { return null; } From 8a0dfc70b66662aee097da8e4caaf2e259e58feb Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Thu, 24 Oct 2024 14:36:03 +0200 Subject: [PATCH 107/213] feature: Avoid replacing existing paths in the result for Sorlandsbanen --- .../org/opentripplanner/ext/sorlandsbanen/MergePaths.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/MergePaths.java b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/MergePaths.java index 830ec4574ea..8abf35ffa4c 100644 --- a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/MergePaths.java +++ b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/MergePaths.java @@ -34,7 +34,9 @@ private void addAllToMap(Map> map, Collection> map, Collection> paths) { for (var it : paths) { if (hasRail(it)) { - map.put(new PathKey(it), it); + // Avoid replacing an existing value if it exists, there might be minor differences in the + // path, in witch case we want to keep the main result. + map.computeIfAbsent(new PathKey(it), k -> it); } } } From 5a685861c58d880b76e29072e276d9604cc81417 Mon Sep 17 00:00:00 2001 From: Teemu Kalvas Date: Thu, 24 Oct 2024 15:54:59 +0300 Subject: [PATCH 108/213] remove orphaned field AgencyBuilder.brandingUrl --- .../transit/model/organization/AgencyBuilder.java | 1 - 1 file changed, 1 deletion(-) diff --git a/application/src/main/java/org/opentripplanner/transit/model/organization/AgencyBuilder.java b/application/src/main/java/org/opentripplanner/transit/model/organization/AgencyBuilder.java index a0958b1d8a4..f985a953d9e 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/organization/AgencyBuilder.java +++ b/application/src/main/java/org/opentripplanner/transit/model/organization/AgencyBuilder.java @@ -11,7 +11,6 @@ public class AgencyBuilder extends AbstractEntityBuilder private String lang; private String phone; private String fareUrl; - private String brandingUrl; AgencyBuilder(FeedScopedId id) { super(id); From 2e0a034ed8f93f744999110c7b43dc610501b0c5 Mon Sep 17 00:00:00 2001 From: Johan Torin Date: Thu, 24 Oct 2024 11:10:58 +0200 Subject: [PATCH 109/213] Disable protocol upgrades for the HTTP client by default. This avoids problems where a connection could be blocked by an intermediate proxy that disallows upgrades. If wanted, it could be enabled on an individual case with a configuration API on the OTP HTTP client --- .../java/org/opentripplanner/framework/io/OtpHttpClient.java | 1 + .../org/opentripplanner/framework/io/OtpHttpClientFactory.java | 1 + 2 files changed, 2 insertions(+) diff --git a/application/src/main/java/org/opentripplanner/framework/io/OtpHttpClient.java b/application/src/main/java/org/opentripplanner/framework/io/OtpHttpClient.java index ebfeb3ff496..ccb88c3c74b 100644 --- a/application/src/main/java/org/opentripplanner/framework/io/OtpHttpClient.java +++ b/application/src/main/java/org/opentripplanner/framework/io/OtpHttpClient.java @@ -378,6 +378,7 @@ private static RequestConfig requestConfig(Duration timeout) { .custom() .setResponseTimeout(Timeout.of(timeout)) .setConnectionRequestTimeout(Timeout.of(timeout)) + .setProtocolUpgradeEnabled(false) .build(); } diff --git a/application/src/main/java/org/opentripplanner/framework/io/OtpHttpClientFactory.java b/application/src/main/java/org/opentripplanner/framework/io/OtpHttpClientFactory.java index a6436168541..8f7256f642f 100644 --- a/application/src/main/java/org/opentripplanner/framework/io/OtpHttpClientFactory.java +++ b/application/src/main/java/org/opentripplanner/framework/io/OtpHttpClientFactory.java @@ -132,6 +132,7 @@ private static RequestConfig requestConfig(Duration timeout) { .custom() .setResponseTimeout(Timeout.of(timeout)) .setConnectionRequestTimeout(Timeout.of(timeout)) + .setProtocolUpgradeEnabled(false) .build(); } } From 06aeadbd582690c2522559a490553d51f78e3b5a Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Thu, 24 Oct 2024 14:24:40 +0000 Subject: [PATCH 110/213] Add changelog entry for #6179 [ci skip] --- doc/user/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/user/Changelog.md b/doc/user/Changelog.md index e72cc790c17..98fb53825c9 100644 --- a/doc/user/Changelog.md +++ b/doc/user/Changelog.md @@ -19,6 +19,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Rename TransitModel to TransitRepository [#6148](https://github.com/opentripplanner/OpenTripPlanner/pull/6148) - Clear added patterns in TimetableSnapshot [#6141](https://github.com/opentripplanner/OpenTripPlanner/pull/6141) - Rename StopModel to SiteRepository [#6165](https://github.com/opentripplanner/OpenTripPlanner/pull/6165) +- Allow bike walking through bicycle no thru traffic areas [#6179](https://github.com/opentripplanner/OpenTripPlanner/pull/6179) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.6.0 (2024-09-18) From 0d826d7ae96c5508a966aa5878c03c9864a6d9c4 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Thu, 24 Oct 2024 15:44:27 +0100 Subject: [PATCH 111/213] only enable pedestrian indoor routing in the UK --- .../osm/tagmapping/DefaultMapper.java | 2 -- .../osm/tagmapping/UKMapper.java | 6 +++++ .../osm/tagmapping/DefaultMapperTest.java | 8 ------ .../osm/tagmapping/UKMapperTest.java | 26 +++++++++++++++++++ doc/user/osm/Default.md | 2 -- doc/user/osm/Finland.md | 2 -- doc/user/osm/Germany.md | 2 -- doc/user/osm/UK.md | 4 +-- 8 files changed, 34 insertions(+), 18 deletions(-) create mode 100644 application/src/test/java/org/opentripplanner/osm/tagmapping/UKMapperTest.java diff --git a/application/src/main/java/org/opentripplanner/osm/tagmapping/DefaultMapper.java b/application/src/main/java/org/opentripplanner/osm/tagmapping/DefaultMapper.java index 532b2569d45..faa666c750a 100644 --- a/application/src/main/java/org/opentripplanner/osm/tagmapping/DefaultMapper.java +++ b/application/src/main/java/org/opentripplanner/osm/tagmapping/DefaultMapper.java @@ -67,8 +67,6 @@ public void populateProperties(WayPropertySet props) { props.setProperties("public_transport=platform", pedestrianWayProperties); props.setProperties("railway=platform", pedestrianWayProperties); props.setProperties("footway=sidewalk;highway=footway", pedestrianWayProperties); - props.setProperties("indoor=area", pedestrianWayProperties); - props.setProperties("indoor=corridor", pedestrianWayProperties); props.setProperties("mtb:scale=1", pedestrianWayProperties); props.setProperties("mtb:scale=2", pedestrianWayProperties); diff --git a/application/src/main/java/org/opentripplanner/osm/tagmapping/UKMapper.java b/application/src/main/java/org/opentripplanner/osm/tagmapping/UKMapper.java index bef0be4101b..08531ce051d 100644 --- a/application/src/main/java/org/opentripplanner/osm/tagmapping/UKMapper.java +++ b/application/src/main/java/org/opentripplanner/osm/tagmapping/UKMapper.java @@ -2,7 +2,9 @@ import static org.opentripplanner.osm.wayproperty.WayPropertiesBuilder.withModes; import static org.opentripplanner.street.model.StreetTraversalPermission.ALL; +import static org.opentripplanner.street.model.StreetTraversalPermission.PEDESTRIAN; +import org.opentripplanner.osm.wayproperty.WayProperties; import org.opentripplanner.osm.wayproperty.WayPropertySet; /** @@ -73,6 +75,10 @@ public void populateProperties(WayPropertySet props) { props.setCarSpeed("highway=secondary_link", 13.4f); // ~= 30mph props.setCarSpeed("highway=tertiary", 15.7f); // ~= 35mph + WayProperties pedestrianWayProperties = withModes(PEDESTRIAN).build(); + props.setProperties("indoor=area", pedestrianWayProperties); + props.setProperties("indoor=corridor", pedestrianWayProperties); + // Read the rest from the default set new DefaultMapper().populateProperties(props); } diff --git a/application/src/test/java/org/opentripplanner/osm/tagmapping/DefaultMapperTest.java b/application/src/test/java/org/opentripplanner/osm/tagmapping/DefaultMapperTest.java index 31073f87e92..87e23acbf12 100644 --- a/application/src/test/java/org/opentripplanner/osm/tagmapping/DefaultMapperTest.java +++ b/application/src/test/java/org/opentripplanner/osm/tagmapping/DefaultMapperTest.java @@ -122,14 +122,6 @@ void stairs() { assertEquals(PEDESTRIAN, props.getPermission()); } - @Test - void indoor() { - var corridor = wps.getDataForWay(WayTestData.indoor("corridor")); - assertEquals(PEDESTRIAN, corridor.getPermission()); - var area = wps.getDataForWay(WayTestData.indoor("area")); - assertEquals(PEDESTRIAN, area.getPermission()); - } - @Test void footDiscouraged() { var regular = WayTestData.pedestrianTunnel(); diff --git a/application/src/test/java/org/opentripplanner/osm/tagmapping/UKMapperTest.java b/application/src/test/java/org/opentripplanner/osm/tagmapping/UKMapperTest.java new file mode 100644 index 00000000000..3e9e46618fd --- /dev/null +++ b/application/src/test/java/org/opentripplanner/osm/tagmapping/UKMapperTest.java @@ -0,0 +1,26 @@ +package org.opentripplanner.osm.tagmapping; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.opentripplanner.street.model.StreetTraversalPermission.PEDESTRIAN; + +import org.junit.jupiter.api.Test; +import org.opentripplanner.osm.wayproperty.WayPropertySet; +import org.opentripplanner.osm.wayproperty.specifier.WayTestData; + +public class UKMapperTest { + + static WayPropertySet wps = new WayPropertySet(); + + static { + var source = new UKMapper(); + source.populateProperties(wps); + } + + @Test + void indoor() { + var corridor = wps.getDataForWay(WayTestData.indoor("corridor")); + assertEquals(PEDESTRIAN, corridor.getPermission()); + var area = wps.getDataForWay(WayTestData.indoor("area")); + assertEquals(PEDESTRIAN, area.getPermission()); + } +} diff --git a/doc/user/osm/Default.md b/doc/user/osm/Default.md index 1373b499579..814420b791f 100644 --- a/doc/user/osm/Default.md +++ b/doc/user/osm/Default.md @@ -35,8 +35,6 @@ Lower safety values make an OSM way more desirable and higher values less desira | `public_transport=platform` | `PEDESTRIAN` | | | | `railway=platform` | `PEDESTRIAN` | | | | `footway=sidewalk; highway=footway` | `PEDESTRIAN` | | | -| `indoor=area` | `PEDESTRIAN` | | | -| `indoor=corridor` | `PEDESTRIAN` | | | | `mtb:scale=1` | `PEDESTRIAN` | | | | `mtb:scale=2` | `PEDESTRIAN` | | | | `mtb:scale=0` | `PEDESTRIAN_AND_BICYCLE` | | | diff --git a/doc/user/osm/Finland.md b/doc/user/osm/Finland.md index 820e47c46e0..8a60b5f0b13 100644 --- a/doc/user/osm/Finland.md +++ b/doc/user/osm/Finland.md @@ -79,8 +79,6 @@ Lower safety values make an OSM way more desirable and higher values less desira | `public_transport=platform` | `PEDESTRIAN` | | | | `railway=platform` | `PEDESTRIAN` | | | | `footway=sidewalk; highway=footway` | `PEDESTRIAN` | | | -| `indoor=area` | `PEDESTRIAN` | | | -| `indoor=corridor` | `PEDESTRIAN` | | | | `mtb:scale=1` | `PEDESTRIAN` | | | | `mtb:scale=2` | `PEDESTRIAN` | | | | `mtb:scale=0` | `PEDESTRIAN_AND_BICYCLE` | | | diff --git a/doc/user/osm/Germany.md b/doc/user/osm/Germany.md index f422022d4f2..922aa3af836 100644 --- a/doc/user/osm/Germany.md +++ b/doc/user/osm/Germany.md @@ -44,8 +44,6 @@ Lower safety values make an OSM way more desirable and higher values less desira | `public_transport=platform` | `PEDESTRIAN` | | | | `railway=platform` | `PEDESTRIAN` | | | | `footway=sidewalk; highway=footway` | `PEDESTRIAN` | | | -| `indoor=area` | `PEDESTRIAN` | | | -| `indoor=corridor` | `PEDESTRIAN` | | | | `mtb:scale=1` | `PEDESTRIAN` | | | | `mtb:scale=2` | `PEDESTRIAN` | | | | `mtb:scale=0` | `PEDESTRIAN_AND_BICYCLE` | | | diff --git a/doc/user/osm/UK.md b/doc/user/osm/UK.md index d5e401e40cc..34c4d1c1778 100644 --- a/doc/user/osm/UK.md +++ b/doc/user/osm/UK.md @@ -38,6 +38,8 @@ Lower safety values make an OSM way more desirable and higher values less desira | `highway=trunk_link; cycleway=opposite_track` | `ALL` | forward: 2.06
    back: 0.85 | | | `highway=trunk; bicycle=designated` | `ALL` | 7.25 | | | `highway=trunk_link; bicycle=designated` | `ALL` | 2.0 | | +| `indoor=area` | `PEDESTRIAN` | | | +| `indoor=corridor` | `PEDESTRIAN` | | | | `mtb:scale=3` | `NONE` | | | | `mtb:scale=4` | `NONE` | | | | `mtb:scale=5` | `NONE` | | | @@ -49,8 +51,6 @@ Lower safety values make an OSM way more desirable and higher values less desira | `public_transport=platform` | `PEDESTRIAN` | | | | `railway=platform` | `PEDESTRIAN` | | | | `footway=sidewalk; highway=footway` | `PEDESTRIAN` | | | -| `indoor=area` | `PEDESTRIAN` | | | -| `indoor=corridor` | `PEDESTRIAN` | | | | `mtb:scale=1` | `PEDESTRIAN` | | | | `mtb:scale=2` | `PEDESTRIAN` | | | | `mtb:scale=0` | `PEDESTRIAN_AND_BICYCLE` | | | From 36ffbb7d24954a49f4693cc56fd19285b1314588 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Thu, 24 Oct 2024 15:44:22 +0000 Subject: [PATCH 112/213] Add changelog entry for #6173 [ci skip] --- doc/user/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/user/Changelog.md b/doc/user/Changelog.md index 98fb53825c9..5e38357a814 100644 --- a/doc/user/Changelog.md +++ b/doc/user/Changelog.md @@ -20,6 +20,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Clear added patterns in TimetableSnapshot [#6141](https://github.com/opentripplanner/OpenTripPlanner/pull/6141) - Rename StopModel to SiteRepository [#6165](https://github.com/opentripplanner/OpenTripPlanner/pull/6165) - Allow bike walking through bicycle no thru traffic areas [#6179](https://github.com/opentripplanner/OpenTripPlanner/pull/6179) +- update the description of mode to cable tram. [#6173](https://github.com/opentripplanner/OpenTripPlanner/pull/6173) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.6.0 (2024-09-18) From aafd8798c7ae26b7345039811e58f7d6cd42576c Mon Sep 17 00:00:00 2001 From: Sam Kim <21956685+sam-k@users.noreply.github.com> Date: Thu, 24 Oct 2024 13:31:46 -0700 Subject: [PATCH 113/213] docs --- doc/dev/decisionrecords/Codestyle.md | 160 ++++++++---------- doc/dev/decisionrecords/NamingConventions.md | 105 ++++++------ .../decisionrecords/RecordsPOJOsBuilders.md | 45 +++-- doc/dev/decisionrecords/UseDecisionRecords.md | 33 ++-- doc/dev/decisionrecords/_TEMPLATE.md | 14 +- doc/dev/onboarding-checklist.md | 1 + 6 files changed, 176 insertions(+), 182 deletions(-) diff --git a/doc/dev/decisionrecords/Codestyle.md b/doc/dev/decisionrecords/Codestyle.md index 46e2062f41c..2476b9ecc4c 100644 --- a/doc/dev/decisionrecords/Codestyle.md +++ b/doc/dev/decisionrecords/Codestyle.md @@ -1,96 +1,96 @@ -# Codestyle +# Code Style We use the following code conventions for [Java](#Java) and [JavaScript](#JavaScript). ## Java The OpenTripPlanner Java code style is revised in OTP v2.2. We use the -[Prettier Java](https://github.com/jhipster/prettier-java) as is. Maven is setup to +[Prettier Java](https://github.com/jhipster/prettier-java) as is. Maven is set up to run `prettier-maven-plugin`. A check is run in the CI build, which fails the build preventing -merging a PR if the code-style is incorrect. +merging a PR if the code style is incorrect. -There is two ways to format the code before checkin it in. You may run a normal build with maven - -it takes a bit of time, but reformat the entire codebase. Only code you have changed should be -formatted, since the existing code is already formatted. The second way is to set up prettier and +There are two ways to format the code before checking it in. You may run a normal build with +Maven—it takes a bit of time, but reformat the entire codebase. Only code you have changed should be +formatted, since the existing code is already formatted. The second way is to set up Prettier and run it manually or hick it into your IDE, so it runs every time a file is changed. -### How to run Prettier with Maven +### How to Run Prettier with Maven -Prettier will automatically format all code in the Maven "validate" phase, which runs before the test, package, and install phases. So formatting will happen for example when you run: +Prettier will automatically format all code in the Maven "validate" phase, which runs before the +test, package, and install phases. So formatting will happen for example when you run: -``` +```shell % mvn test ``` You can manually run _only_ the formatting process with: -``` +```shell % mvn prettier:write - ``` -To skip the prettier formating use profile `prettierSkip`: +To skip the Prettier formating, use the profile `prettierSkip`: -``` +```shell % mvn test -P prettierSkip ``` -The check for formatting errors use profile `prettierCheck`: +To check for formatting errors, use the profile `prettierCheck`: -``` +```shell % mvn test -P prettierCheck ``` The check is run by the CI server and will fail the build if the code is incorrectly formatted. -### IntellJ and Code Style Formatting +### IntelliJ and Code Style Formatting -You should use the prettier Maven plugin to reformat the code or run prettier with Node(faster). +You should use the Prettier Maven plugin to reformat the code or run Prettier with Node (faster). -The prettier does NOT format the doc and markdown files, only Java code. So, for other files you should -use the _project_ code-style. It is automatically imported when you first open the project. But, if -you have set a custom code-style in your settings (as we used until OTP v2.1), then you need to -change to the _Project_ Code Style. Open the `Preferences` from the menu and select _ -Editor > Code Style_. Then select **Project** in the \_Scheme drop down. +Prettier does _not_ format the doc and Markdown files—only Java code. So, for other files, you +should use the _project_ code style. It is automatically imported when you first open the project. +But, if you have set a custom code style in your settings (as we used until OTP v2.1), then you need +to change to the _Project_ code style. Open the `Preferences` from the menu and select _Editor > +Code Style_. Then select **Project** in the \_Scheme drop down. #### Run Prettier Maven Plugin as an external tool in IntelliJ You can run the Prettier Maven plugin as an external tool in IntelliJ. Set it up as an -`External tool` and assign a key-shortcut to the tool execution. +`External tool` and assign a keyboard shortcut to the tool execution. ![External Tool Dialog](../images/ExternalToolDialog.png) -``` +```text Name: Prettier Format Current File Program: mvn Arguments: prettier:write -Dprettier.inputGlobs=$FilePathRelativeToProjectRoot$ Working Directory: $ProjectFileDir$ ``` -> **Tip!** Add a unused key shortcut to execute the external tool, then you can use the old -> short-cut to format other file types. - +> **Tip!** Add an unused key shortcut to execute the external tool. Then you can use the old +> shortcut to format other file types. #### Install File Watchers Plugin in IntelliJ -You can also configure IntelliJ to run the prettier every time IntelliJ save a Java file. But, -if you are editing the file at the same time you will get a warning that the file in memory and the -file on disk both changed - and asked to select one of them. +You can also configure IntelliJ to run Prettier every time IntelliJ saves a Java file. But if you +are editing the file at the same time, you will get a warning that the file in memory and the file +on disk both changed, and asked to select one of them. -1. In the menyopen _Prefernces..._ and select _Plugins_. -2. Search for "File Watchers" in Marketplace -3. Run _Install_ +1. In the menu, open _Preferences..._ and select _Plugins_. +2. Search for "File Watchers" in the Marketplace. +3. Run _Install_. -##### Configure File Watcher +##### Configure File Watchers -You can run Prettier on every file save in Intellij using the File Watcher plugin. There is several -ways to set it up. Below is hwo to configure it using Maven to run the formatter. The Maven way work -without any installation of other components, but might be a bit slow. So, you might want to install -[prettier-java](https://github.com/jhipster/prettier-java/) in your shell and run it instead. +You can run Prettier upon every file save in IntelliJ using the File Watchers plugin. There are +several ways to set it up. Below is how to configure it using Maven to run the formatter. The Maven +way works without any installation of other components but might be a bit slow. So you might want to +install [prettier-java](https://github.com/jhipster/prettier-java/) in your shell and run it +instead. -``` +```text Name: Format files with Prettier -File type: Java +File Type: Java Scope: Project Files Program: mvn Arguments: prettier:write -Dprettier.inputGlobs=$FilePathRelativeToProjectRoot$ @@ -99,43 +99,44 @@ Working Directory: $ProjectFileDir$ ### Other IDEs -We do not have support for other IDEs at the moment. If you use another editor and make one please +We do not have support for other IDEs at the moment. If you use another editor and make one, please feel free to share it. ### Sorting Class Members -Some of the classes in OTP have a lot of fields and methods. Keeping members sorted reduce the merge +Some of the classes in OTP have a lot of fields and methods. Keeping members sorted reduces merge conflicts. Adding fields and methods to the end of the list will cause merge conflicts more often -than inserting methods and fields in an ordered list. Fields and methods can be sorted in "feature" -sections or alphabetically, but stick to it and respect it when adding new methods and fields. +than will inserting methods and fields in an ordered list. Fields and methods can be sorted in +"feature" sections or alphabetically, but stick to it and respect it when adding new methods and +fields. The provided formatter will group class members in this order: -1. Getter and Setter methods are kept together -2. Overridden methods are kept together -3. Dependent methods are sorted in a breadth-first order. +1. Getter and setter methods are kept together. +2. Overridden methods are kept together. +3. Dependent methods are sorted in breadth-first order. 4. Members are sorted like this: - 1. `static` `final` fields (constants) + 1. `static final` fields (constants) 2. `static` fields (avoid) - 3. instance fields - 4. static initializer - 5. class initializer - 6. constructor + 3. Instance fields + 4. Static initializers + 5. Class initializers + 6. Constructors 7. `static` factory methods 8. `public` methods - 9. getter and setters - 8. `private`/package methods - 10. `private` enums (avoid `public`) - 11. interfaces - 12. `private static` classes (avoid `public`) - 13. instance classes (avoid) + 9. Getter and setters + 10. `private`/package methods + 11. `private` enums (avoid `public`) + 12. Interfaces + 13. `private static` classes (avoid `public`) + 14. Instance classes (avoid) -### JavaDoc Guidlines +### Javadoc Guidelines As a matter of [policy](http://github.com/opentripplanner/OpenTripPlanner/issues/93), all new methods, classes, and fields should include comments explaining what they are for and any other pertinent information. For Java code, the comments should follow industry standards. It is best to -provide comments that not only explain *what* you did but also *why you did it* while providing some +provide comments that explain not only *what* you did but also *why you did it* while providing some context. Please avoid including trivial Javadoc or the empty Javadoc stubs added by IDEs, such as `@param` annotations with no description. @@ -144,41 +145,28 @@ context. Please avoid including trivial Javadoc or the empty Javadoc stubs added - Contract of the method - Input domain for which the logic is designed - Range of outputs produced from valid inputs - - Is behavior undefined or will fail when conditions are not met - - Are null values allowed as inputs - - Will null values occur as outputs (what do they mean) + - Is behavior undefined or will the method fail when conditions are not met? + - Are null values allowed as inputs? + - Will null values occur as outputs (and what do they mean)? - Invariants that hold if the preconditions are met - Concurrency - - Is method thread-safe + - Is the method thread-safe? - Usage constraints for multi-threaded use - On classes: - Initialization and teardown process - - Can instance be reused for multiple operations, or should it be discarded - - Is it immutable or should anything be treated as immutable - - Is it a utility class of static methods that should not be instantiated - -### Annotations - -- On methods: - - Method should be marked as `@Nullable` if they can return null values - - Method parameters should be marked as `@Nullable` if they can take null values. -- On fields: - - Fields should be marked as `@Nullable` if they are nullable. - -Use of `@Nonnull` annotation is not allowed. It should be assumed methods/parameters/fields -are non-null if they are not marked as `@Nullable`. However, there are places where the -`@Nullable` annotation is missing even if it should have been used. Those can be updated -to use the `@Nullable` annotation. + - Can an instance be reused for multiple operations, or should it be discarded? + - Is it immutable, or should anything be treated as immutable? + - Is it a utility class of static methods that should not be instantiated? ## JavaScript -As of #206, we -follow [Crockford's JavaScript code conventions](http://javascript.crockford.com/code.html). Further +As of [#206](https://github.com/opentripplanner/OpenTripPlanner/issues/206), we follow +[Crockford's JavaScript code conventions](http://javascript.crockford.com/code.html). Further guidelines include: * All .js source files should contain one class only -* Capitalize the class name, as well as the source file name (a la Java) -* Include the namespace definition in each and every file: `otp.namespace("otp.configure");` +* Capitalize the class name, as well as the source file name (a la Java). +* Include the namespace definition in each and every file: `otp.namespace("otp.configure");`. * Include a class comment. For example, ```javascript @@ -187,8 +175,8 @@ guidelines include: * * Purpose is to allow a generic configuration object to be read via AJAX/JSON, and inserted into an * Ext Store - * The implementation is TriMet route map specific...but replacing ConfigureStore object (or member - * variables) with another implementation, will give this widget flexibility for other uses beyond + * The implementation is TriMet route map-specific...but replacing ConfigureStore object (or member + * variables) with another implementation will give this widget flexibility for other uses beyond * the iMap. * * @class diff --git a/doc/dev/decisionrecords/NamingConventions.md b/doc/dev/decisionrecords/NamingConventions.md index ed6175f4f4c..e0f5000e97c 100644 --- a/doc/dev/decisionrecords/NamingConventions.md +++ b/doc/dev/decisionrecords/NamingConventions.md @@ -1,74 +1,71 @@ # Naming Conventions -In general, we use American English. We use the GTFS terminology inside OTP as the transit domain -specific language. In cases where GTFS does not provide an alternative we use NeTEx. The naming -should follow the Java standard naming conventions. For example a "real-time updater" class -is named `RealTimeUpdater`. If in doubt check the Oxford Dictionary(American). - +In general, we use American English. We use the GTFS terminology inside OTP as the transit +domain-specific language. In cases where GTFS does not provide an alternative, we use NeTEx. The +naming should follow the Java standard naming conventions. For example, a "real-time updater" class +is named `RealTimeUpdater`. If in doubt, check the Oxford Dictionary (American). ## Packages Try to arrange code by domain functionality, not technology. The main structure of a package should be `org.opentripplanner...`. -| Package | Description | -| ------------------------------- |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `o.o.` | At the top level we should divide OTP into "domain"s like `apis`, `framework`, `transit`, `street`, `astar`, `raptor`, `feeds`, `updaters`, and `application`. | -| `component` and `sub-component` | A group of packages/classes which naturally belong together, think aggregate as in Domain Driven Design. | -| `component.api` | Used for components to define the programing interface for the component. If present, (see Raptor) all outside dependencies to the component should be through the `api`. | -| `component.model` | Used to create a model of a Entites, ValueObjects, ++. If exposed outside the component you should include an entry point like `xyz.model.XyzModel` and/or a Service (in api or component root package). | -| `component.service` | Implementation of the service like `DefaultTransitService`, may also contain use-case specific code. Note, the Service interface goes into the component root or `api`, not in the service package. | -| `component.configure` | Component creation/orchestration. Put Dependency Injection code here, like the Dagger Module. | -| `support` | Sometimes domain logic get complicated, then extracting/isolating it helps. `support` is used internally in a component, not outside. | -| `framework` | (Abstract) building blocks internal to a domain/parent package. In some cases accessed outside the component, e.g. `OptAppException`, `TransitEntity`. | -| `mapping` | Map between two domains/components. | -| `util` | General "util" functionality, often characterized by `static` methods. Dependencies to other OTP packages is NOT allowed, only 3rd party utils libs. | -| `o.o.apis` | OTP external endpoints. Note! Many apis are in the Sandbox where they are in the `o.o.ext` package. | - -> **Note!** The above is the goal, the current package structure needs cleanup. - -> **Note!** Util methods depending on an OTP type/component should go into that type/component, not in the -utils class. E.g. static factory methods. Warning the "pure" utilities right now are placed into -sub-packages of `o.o.util`, the root package needs cleanup. - +| Package | Description | +| ------------------------------- |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `o.o.` | At the top level, we should divide OTP into "domains" like `apis`, `framework`, `transit`, `street`, `astar`, `raptor`, `feeds`, `updaters`, and `application`. | +| `component` and `sub-component` | A group of packages/classes that naturally belong together; think aggregate as in Domain-Driven Design. | +| `component.api` | Used for components to define the programing interface for the component. If present, (see Raptor) all outside dependencies to the component should be through the `api`. | +| `component.model` | Used to create a model of Entities, ValueObjects, etc. If exposed outside the component, you should include an entry point like `xyz.model.XyzModel` and/or a Service (in `api` or component root package). | +| `component.service` | Implementation of a service like `DefaultTransitService`; may also contain use case-specific code. Note: The Service interface goes into the component root or `api`, not in the service package. | +| `component.configure` | Component creation/orchestration. Put dependency injection code here, like the Dagger module. | +| `support` | Sometimes domain logic gets complicated; then extracting/isolating it helps. `support` is used internally in a component, not outside. | +| `framework` | (Abstract) building blocks internal to a domain/parent package. In some cases accessed outside the component; e.g., `OptAppException`, `TransitEntity`. | +| `mapping` | Map between two domains/components. | +| `util` | General "util" functionality, often characterized by `static` methods. Dependencies to other OTP packages are NOT allowed; only third-party utils libraries. | +| `o.o.apis` | OTP external endpoints. Note! Many APIs are in the Sandbox where they are in the `o.o.ext` package. | + +> **Note!** The above is the goal. The current package structure needs cleanup. + +> **Note!** Util methods depending on an OTP type/component should go into that type/component, not +> in the utils class; e.g., static factory methods. Warning: The "pure" utilities right now are +> placed into subpackages of `o.o.util`. The root package needs cleanup. ## Methods -Here are a list of common prefixes used, and what to expect. - -| Good method prefixes | Description | -|-------------------------------------------------------|-----------------------------------------------------------------------------| -| `stop() : Stop` | Field accessor, equivalent to `getStop` as in the Java Bean standard | -| `getStop(ID id) : Stop` | Get Stop by ID, throws exception if not found | -| `getStops(Collection id) : List/Collection` | Get ALL Stops by set of IDs, throws exception if not found | -| `findStop(Criteria criteria) : Optional` | Find one or zero stops, return `Optional` | -| `findStops(Criteria criteria) : List/Stream` | Find 0, 1 or many stops, return a collection or stream(List is preferred) | -| `listStops() : List/Stream` | List ALL stops in context, return a collection or stream(List is preferred) | -| `withStop(Stop stop) : Builder` | Set stop in builder, replacing existing value and return `this` builder | -| `initStop(Stop stop) : void` | Set property ONCE, a second call throws an exception | -| `addStop(Stop stop) : void/Builder` | Add a stop to a collection of stops. | -| `addStops(Collection stops) : void/Builder` | Add set of stops to existing set. | -| `withBike(Consumer body) : Builder` | For nested builders use lambdas. | - -These prefixes are also "allowed", but not preferred - they have some kind of negative "force" to them. - -| Ok method prefixes, but ... | Description | -| ------------------------------------------- | ----------------------------------------------------------------------------------------------------- | -| `withStops(Collection stops) : this`) | Replace all stops in builder with new set, consider using `addStops(...)` instead | -| `setStop(Stop stop)` | Set a mutable stop reference. Avoid if not part of natural lifecycle. Use `initStop(...)` if possible | -| `getStop() : Stop` | Old style accessor, use the shorter form `stop() : Stop` | - -## Service, Model and Repository +Here is a list of common prefixes used and what to expect. + +| Good method prefixes | Description | +|-------------------------------------------------------|-------------------------------------------------------------------------------| +| `stop() : Stop` | Field accessor, equivalent to `getStop` as in the Java Bean standard. | +| `getStop(ID id) : Stop` | Get Stop by ID; throws exception if not found. | +| `getStops(Collection id) : List/Collection` | Get _all_ Stops by set of IDs; throws exception if not found. | +| `findStop(Criteria criteria) : Optional` | Find one or zero stops; return `Optional`. | +| `findStops(Criteria criteria) : List/Stream` | Find 0, 1, or many stops; return a Collection or Stream (List is preferred). | +| `listStops() : List/Stream` | List ALL stops in context; return a Collection or Stream (List is preferred). | +| `withStop(Stop stop) : Builder` | Set Stop in builder, replacing existing value; return `this` builder. | +| `initStop(Stop stop) : void` | Set property _once_; a second call throws an exception. | +| `addStop(Stop stop) : void/Builder` | Add a Stop to a collection of Stops. | +| `addStops(Collection stops) : void/Builder` | Add set of Stops to existing set. | +| `withBike(Consumer body) : Builder` | For nested builders, use lambdas. | + +These prefixes are also "allowed" but not preferred; they have some kind of negative "force" to +them. + +| Okay method prefixes, but ... | Description | +|---------------------------------------------|--------------------------------------------------------------------------------------------------------| +| `withStops(Collection stops) : this`) | Replace all Stops in builder with new set. Consider using `addStops(...)` instead. | +| `setStop(Stop stop)` | Set a mutable Stop reference. Avoid if not part of natural lifecycle. Use `initStop(...)` if possible. | +| `getStop() : Stop` | Old style accessor. Use the shorter form `stop() : Stop`. | + +## Service, Model, and Repository ![MainModelOverview](../images/ServiceModelOverview.png) - - Naming convention for builders with and without a context. -#### Graph Build and tests run without a context +#### Graph Build and Tests Run Without a Context -```Java +```java // Create a new Stop trip = Trip.of(id).withName("The Express").build(); diff --git a/doc/dev/decisionrecords/RecordsPOJOsBuilders.md b/doc/dev/decisionrecords/RecordsPOJOsBuilders.md index e0752fc70b0..3112760cbe7 100644 --- a/doc/dev/decisionrecords/RecordsPOJOsBuilders.md +++ b/doc/dev/decisionrecords/RecordsPOJOsBuilders.md @@ -1,8 +1,8 @@ ## Records, POJOs and Builders -We prefer immutable typesafe types over flexibility and "short" class definitions. This makes -the code more robust and less error-prone. References to other entities might need to be mutable, -if so try to init them once, and throw an exception if set again. Example: +We prefer immutable typesafe types over flexibility and "short" class definitions. This makes the +code more robust and less error-prone. References to other entities might need to be mutable; if so, +try to init them once and throw an exception if set again. Example: ```java Builder initStop(Stop stop) { @@ -10,37 +10,46 @@ Builder initStop(Stop stop) { } ``` - ### Records -You may use records, but avoid using records if you cannot encapsulate them properly. Generally, records are considered appropriate and useful for throw-away compound types private to an implementation, such as hash table keys or compound values in a temporary list or set. On the other hand, records are generally not appropriate in the domain model where we insist on full encapsulation, which records cannot readily provide. Be especially -aware of array fields (which can not be protected) and collections (remember to make a defensive copy). Consider overriding `toString`. But if you need to override `equals` and `hashCode`, then it is probably not worth using a record. The implicit `equals()` and `hashCode()` implementations for records behave as if they call `equals` and `hashCode` on each field of the record, so their behavior will depend heavily on the types of these fields. +You may use records, but avoid using records if you cannot encapsulate them properly. Generally, +records are considered appropriate and useful for throwaway compound types private to an +implementation, such as hash table keys or compound values in a temporary list or set. On the other +hand, records are generally not appropriate in the domain model where we insist on full +encapsulation, which records cannot readily provide. Be especially aware of array fields (which +cannot be protected) and collections (remember to make a defensive copy). Consider overriding +`toString`. But if you need to override `equals` and `hashCode`, then it is probably not worth using +a record. The implicit `equals` and `hashCode` implementations for records behave as if they call +`equals` and `hashCode` on each field of the record, so their behavior will depend heavily on the +types of these fields. ### Builders OTP used a simple builder pattern in many places, especially when creating immutable types. #### Builder conventions -- Use factory methods to create builder, either `of()` or `copyOf()`. The _copyOf_ uses an existing - instance as its base. The `of()` creates a builder with all default values set. All constructors - should be private (or package local) to enforce the use of the factory methods. -- If the class has more than 5 fields, then avoid using an inner class builder, instead create a + +- Use factory methods to create builder—either `of` or `copyOf`. The `copyOf` uses an existing + instance as its base. The `of` creates a builder with all default values set. All constructors + should be private (or package-local) to enforce use of the factory methods. +- If the class has more than 5 fields, then avoid using an inner class builder. Instead, create a builder in the same package. - Make all fields in the main class final to enforce immutability. - Consider using utility methods for parameter checking, like `Objects#requireNonNull` and - `ObjectUtils.ifNotNull`. -- Validate all fields in the main type constructor(i.e. not in the builder), especially null checks. - Prefer default values over null-checks. All business logic using the type can rely on its validity. + `ObjectUtils#ifNotNull`. +- Validate all fields in the main type constructor (i.e., not in the builder), especially null + checks. Prefer default values over null checks. All business logic using the type can rely on its + validity. - You may keep the original instance in the builder to avoid creating a new object if nothing - changed. This prevents polluting the heap for long-lived objects and make comparison very fast. -- There is no need to provide all get accessors in the Builder if not needed. + changed. This prevents polluting the heap for long-lived objects and makes comparison very fast. +- There is no need to provide all get accessors in the builder if not needed. - Unit-test builders and verify all fields are copied over. -- For nested builders see the field `nested` in the example. +- For nested builders, see the field `nested` in the example.

    - Builder example + Builder example -```Java +```java /** * THIS CLASS IS IMMUTABLE AND THREAD-SAFE */ diff --git a/doc/dev/decisionrecords/UseDecisionRecords.md b/doc/dev/decisionrecords/UseDecisionRecords.md index a3520ea5133..0c07f89fd12 100644 --- a/doc/dev/decisionrecords/UseDecisionRecords.md +++ b/doc/dev/decisionrecords/UseDecisionRecords.md @@ -1,37 +1,36 @@ # Decision Records -An OTP Decision Record is a justified software design choice that addresses a significant -functional or non-functional requirement. [Architectural Decision Records](https://adr.github.io/) is a similar -concept, but we have widened the scope to include any relevant decision about OTP development. - +An OTP Decision Record is a justified software design choice that addresses a significant +functional or non-functional requirement. [Architectural Decision Records](https://adr.github.io/) +is a similar concept, but we have widened the scope to include any relevant decision about OTP +development. ## Process Decisions we make in the developer meetings are recorded in the [Developer Decision Records](/DEVELOPMENT_DECISION_RECORDS.md) -list. If the decision is small and uncontroversial, but yet important and can be expressed in +list. If the decision is small and uncontroversial, yet is important and can be expressed in maximum 2 sentences, we will list it here without any more documentation. If the decision requires -a bit more discussion and explanations, then we will create a PR with a document for it. - -Use the **[template](/doc/dev/decisionrecords/_TEMPLATE.md) as a starting point for documenting -the decision. +a bit more discussion and explanation, then we will create a PR with a document for it. +Use the [template](/doc/dev/decisionrecords/_TEMPLATE.md) as a starting point for documenting the +decision. ### How to discuss and document a Decision Record -- Create a new pull-request and describe the decision record by adding a document to the +- Create a new pull request and describe the decision record by adding a document to the `/doc/dev/decisionrecords` folder. Use the [template](/doc/dev/decisionrecords/_TEMPLATE.md). - template. -- Present the decision record in a developer meeting. Make sure to update the main description - based on the feedback/discussion and decisions in the developer meeting. -- The final approval is done in the developer meeting, at least 3 developers representing 3 +- Present the decision record in a developer meeting. Make sure to update the main description based + on the feedback/discussion and decisions in the developer meeting. +- The final approval is done in the developer meeting. At least 3 developers representing 3 different organisations should approve it. No vote against the proposal. If the developers are not able to agree, the PLC can decide. - References to Development Decision Records in reviews can be done by linking or just typing. - For example `Use-Dependency-Injection` or [Use-Dependency-Injection](../../../DEVELOPMENT_DECISION_RECORDS.md#use-dependency-injection) + For example, `Use-Dependency-Injection` or [Use-Dependency-Injection](../../../DEVELOPMENT_DECISION_RECORDS.md#use-dependency-injection). ### Checklist + - [ ] Give it a meaningful title that quickly lets the reader understand what it is all about. - [ ] Get it approved in a developer meeting with 3 votes in favor (3 organisations). -- [ ] Add the name and description to the list in the [Development Decision Records](../../../DEVELOPMENT_DECISION_RECORDS.md) list. - Maximum two sentences should be used. Try to keep it as short as possible. +- [ ] Add the name and description to the list in the [Development Decision Records](../../../DEVELOPMENT_DECISION_RECORDS.md) + list. Maximum two sentences should be used. Try to keep it as short as possible. - [ ] Remember to link to the PR. diff --git a/doc/dev/decisionrecords/_TEMPLATE.md b/doc/dev/decisionrecords/_TEMPLATE.md index 45bb3b11d34..b628d74c6a7 100644 --- a/doc/dev/decisionrecords/_TEMPLATE.md +++ b/doc/dev/decisionrecords/_TEMPLATE.md @@ -2,8 +2,8 @@ {DESCRIPTION} Original pull-request: {#NNNN} @@ -12,13 +12,13 @@ Original pull-request: {#NNNN} ### Context and Problem Statement ### Other options - - +- ### Decision & Consequences @@ -26,8 +26,8 @@ Original pull-request: {#NNNN} #### Positive Consequences - - +- #### Negative Consequences - - +- diff --git a/doc/dev/onboarding-checklist.md b/doc/dev/onboarding-checklist.md index 201238a7fd4..4e39e887175 100644 --- a/doc/dev/onboarding-checklist.md +++ b/doc/dev/onboarding-checklist.md @@ -1,4 +1,5 @@ # Onboarding Checklist + * What is OTP? * [Website](https://www.opentripplanner.org/) * History From c42d8ce71bf2b06d1708dc520918f3dfa08b7f8d Mon Sep 17 00:00:00 2001 From: Sam Kim <21956685+sam-k@users.noreply.github.com> Date: Thu, 24 Oct 2024 13:46:33 -0700 Subject: [PATCH 114/213] misc --- doc/dev/decisionrecords/Codestyle.md | 2 +- doc/dev/decisionrecords/NamingConventions.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/dev/decisionrecords/Codestyle.md b/doc/dev/decisionrecords/Codestyle.md index 2476b9ecc4c..a57d748051c 100644 --- a/doc/dev/decisionrecords/Codestyle.md +++ b/doc/dev/decisionrecords/Codestyle.md @@ -70,7 +70,7 @@ Working Directory: $ProjectFileDir$ > **Tip!** Add an unused key shortcut to execute the external tool. Then you can use the old > shortcut to format other file types. -#### Install File Watchers Plugin in IntelliJ +#### Install File Watchers plugin in IntelliJ You can also configure IntelliJ to run Prettier every time IntelliJ saves a Java file. But if you are editing the file at the same time, you will get a warning that the file in memory and the file diff --git a/doc/dev/decisionrecords/NamingConventions.md b/doc/dev/decisionrecords/NamingConventions.md index e0f5000e97c..37010430bec 100644 --- a/doc/dev/decisionrecords/NamingConventions.md +++ b/doc/dev/decisionrecords/NamingConventions.md @@ -63,7 +63,7 @@ them. Naming convention for builders with and without a context. -#### Graph Build and Tests Run Without a Context +#### Graph builds and tests run without a context ```java // Create a new Stop From 179c26a4e0bd1ce2517ec6330750efd1645d8c72 Mon Sep 17 00:00:00 2001 From: Sam Kim <21956685+sam-k@users.noreply.github.com> Date: Thu, 24 Oct 2024 14:20:13 -0700 Subject: [PATCH 115/213] merged contents --- doc/dev/decisionrecords/Codestyle.md | 13 +++++++++++++ doc/dev/decisionrecords/NamingConventions.md | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/doc/dev/decisionrecords/Codestyle.md b/doc/dev/decisionrecords/Codestyle.md index a57d748051c..72db4796291 100644 --- a/doc/dev/decisionrecords/Codestyle.md +++ b/doc/dev/decisionrecords/Codestyle.md @@ -158,6 +158,19 @@ context. Please avoid including trivial Javadoc or the empty Javadoc stubs added - Is it immutable, or should anything be treated as immutable? - Is it a utility class of static methods that should not be instantiated? +### Annotations + +- On methods: + - Method should be marked as `@Nullable` if they can return null values. + - Method parameters should be marked as `@Nullable` if they can take null values. +- On fields: + - Fields should be marked as `@Nullable` if they are nullable. + +Use of `@NonNull` annotation is not allowed. It should be assumed methods/parameters/fields are +non-null if they are not marked as `@Nullable`. However, there are places where the `@Nullable` +annotation is missing even if it should have been used. Those can be updated to use the `@Nullable` +annotation. + ## JavaScript As of [#206](https://github.com/opentripplanner/OpenTripPlanner/issues/206), we follow diff --git a/doc/dev/decisionrecords/NamingConventions.md b/doc/dev/decisionrecords/NamingConventions.md index 37010430bec..0c7cd201d7d 100644 --- a/doc/dev/decisionrecords/NamingConventions.md +++ b/doc/dev/decisionrecords/NamingConventions.md @@ -57,7 +57,7 @@ them. | `setStop(Stop stop)` | Set a mutable Stop reference. Avoid if not part of natural lifecycle. Use `initStop(...)` if possible. | | `getStop() : Stop` | Old style accessor. Use the shorter form `stop() : Stop`. | -## Service, Model, and Repository +## Service, Model and Repository ![MainModelOverview](../images/ServiceModelOverview.png) From 2e2be55036512d933f16b516bf3de1ed08b671d2 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Fri, 25 Oct 2024 10:52:26 +0200 Subject: [PATCH 116/213] review: Cleanup CompositeResult --- .../raptor/rangeraptor/CompositeResult.java | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/CompositeResult.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/CompositeResult.java index d92f0df79bb..b547493a7df 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/CompositeResult.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/CompositeResult.java @@ -17,7 +17,8 @@ */ class CompositeResult implements RaptorRouterResult { - private final RaptorRouterResult mainResult; + public static final String UNSOPORTED_OPERATION = + "Merging all stop arrivals will be a complicated and memory intensive process, unless we need this this should not be done."; private final Collection> result; CompositeResult( @@ -25,7 +26,6 @@ class CompositeResult implements RaptorRouterResul RaptorRouterResult alternativeResult, BiFunction>, Collection>, Collection>> merger ) { - this.mainResult = mainResult; this.result = merger.apply(mainResult.extractPaths(), alternativeResult.extractPaths()); } @@ -37,28 +37,19 @@ public Collection> extractPaths() { return result; } - /** - * Return the main result only. - */ @Override public SingleCriteriaStopArrivals extractBestOverallArrivals() { - return mainResult.extractBestOverallArrivals(); + throw new UnsupportedOperationException(UNSOPORTED_OPERATION); } - /** - * Return the main result only. - */ @Override public SingleCriteriaStopArrivals extractBestTransitArrivals() { - return mainResult.extractBestTransitArrivals(); + throw new UnsupportedOperationException(UNSOPORTED_OPERATION); } - /** - * Return the main result only. - */ @Override public SingleCriteriaStopArrivals extractBestNumberOfTransfers() { - return mainResult.extractBestNumberOfTransfers(); + throw new UnsupportedOperationException(UNSOPORTED_OPERATION); } /** From d67d4d064581a21313d961fd7bd5fa13dde9b437 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Fri, 25 Oct 2024 10:52:58 +0200 Subject: [PATCH 117/213] review: Cleanup PathKey --- .../java/org/opentripplanner/ext/sorlandsbanen/PathKey.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/PathKey.java b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/PathKey.java index 28c1b1eac25..9d0d1a14936 100644 --- a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/PathKey.java +++ b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/PathKey.java @@ -19,9 +19,6 @@ final class PathKey { } private static int hash(RaptorPath path) { - if (path == null) { - return 0; - } int result = 1; PathLeg leg = path.accessLeg(); From 1cb96d66f0df91672ded08b10bcd9f9647be62c3 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Fri, 25 Oct 2024 10:53:49 +0200 Subject: [PATCH 118/213] review: Add more doc to ExtraMcRouterSearch --- .../org/opentripplanner/raptor/spi/ExtraMcRouterSearch.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/application/src/main/java/org/opentripplanner/raptor/spi/ExtraMcRouterSearch.java b/application/src/main/java/org/opentripplanner/raptor/spi/ExtraMcRouterSearch.java index afebc107832..deb22107036 100644 --- a/application/src/main/java/org/opentripplanner/raptor/spi/ExtraMcRouterSearch.java +++ b/application/src/main/java/org/opentripplanner/raptor/spi/ExtraMcRouterSearch.java @@ -14,7 +14,11 @@ *

    * When changing the transit data, you may also invalidate the heuristics created by Raptor. If this * is the case, you need to turn off the {@link org.opentripplanner.raptor.api.request.Optimization#PARETO_CHECK_AGAINST_DESTINATION}. - * For the heuristics to work, you may add extra cost or filter away data. + * For the heuristics to work, you may add extra cost or filter away data. But you cannot decrease + * the cost, add transfer or add new trips. + *

    + * This will alter the multi-criteria search, if only a sadard search is requested any extra + * multi-criteria search is ignored. *

    * @param The TripSchedule type defined by the user of the raptor API. */ From af4121d8d93b85881a9994116af6039098e185c1 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Fri, 25 Oct 2024 10:54:51 +0200 Subject: [PATCH 119/213] review: Rename 'createMcRouterFactory' to 'createExtraMcRouterSearch' --- .../ext/sorlandsbanen/SorlandsbanenNorwayService.java | 8 +++++--- .../algorithm/raptoradapter/router/TransitRouter.java | 6 +++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/SorlandsbanenNorwayService.java b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/SorlandsbanenNorwayService.java index 783f6dc1200..9314400c649 100644 --- a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/SorlandsbanenNorwayService.java +++ b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/SorlandsbanenNorwayService.java @@ -2,6 +2,7 @@ import java.util.Collection; import java.util.function.BiFunction; +import javax.annotation.Nullable; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.model.GenericLocation; import org.opentripplanner.raptor.api.path.RaptorPath; @@ -28,11 +29,12 @@ */ public class SorlandsbanenNorwayService { - private static final double SOUTH_BOARDER_LIMIT = 59.1; + private static final double SOUTH_BORDER_LIMIT = 59.1; private static final int MIN_DISTANCE_LIMIT = 120_000; - public ExtraMcRouterSearch createMcRouterFactory(RouteRequest request, AccessEgresses accessEgresses, TransitLayer transitLayer) { + @Nullable + public ExtraMcRouterSearch createExtraMcRouterSearch(RouteRequest request, AccessEgresses accessEgresses, TransitLayer transitLayer) { WgsCoordinate from = findStopCoordinate( request.from(), accessEgresses.getAccesses(), @@ -40,7 +42,7 @@ public ExtraMcRouterSearch createMcRouterFactory(RouteRequest requ ); WgsCoordinate to = findStopCoordinate(request.to(), accessEgresses.getEgresses(), transitLayer); - if (from.isNorthOf(SOUTH_BOARDER_LIMIT) && to.isNorthOf(SOUTH_BOARDER_LIMIT)) { + if (from.isNorthOf(SOUTH_BORDER_LIMIT) && to.isNorthOf(SOUTH_BORDER_LIMIT)) { return null; } diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java index f77711136e8..2b9c0136e07 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java @@ -146,7 +146,7 @@ private TransitRouterResult route() { // Route transit var raptorService = new RaptorService<>( serverContext.raptorConfig(), - createMcRouterFactory(accessEgresses, transitLayer) + createExtraMcRouterSearch(accessEgresses, transitLayer) ); var transitResponse = raptorService.route(raptorRequest, requestTransitDataProvider); @@ -396,7 +396,7 @@ private IntStream listStopIndexes(FeedScopedId stopLocationId) { * An optional factory for creating a decorator around the multi-criteria RangeRaptor instance. */ @Nullable - private ExtraMcRouterSearch createMcRouterFactory( + private ExtraMcRouterSearch createExtraMcRouterSearch( AccessEgresses accessEgresses, TransitLayer transitLayer ) { @@ -406,6 +406,6 @@ private ExtraMcRouterSearch createMcRouterFactory( var service = serverContext.sorlandsbanenService(); return service == null ? null - : service.createMcRouterFactory(request, accessEgresses, transitLayer); + : service.createExtraMcRouterSearch(request, accessEgresses, transitLayer); } } From 736daffe10406150ea3724bca4dbfc1e76030315 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Fri, 25 Oct 2024 11:05:06 +0200 Subject: [PATCH 120/213] review: Add @Nullable to 'executorService' in ConcurrentCompositeRaptorRouter --- .../raptor/rangeraptor/ConcurrentCompositeRaptorRouter.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/ConcurrentCompositeRaptorRouter.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/ConcurrentCompositeRaptorRouter.java index dbf0c2d89c7..5cc0b7f2189 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/ConcurrentCompositeRaptorRouter.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/ConcurrentCompositeRaptorRouter.java @@ -4,6 +4,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.function.BiFunction; +import javax.annotation.Nullable; import org.opentripplanner.framework.application.OTPRequestTimeoutException; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.api.path.RaptorPath; @@ -21,13 +22,15 @@ public class ConcurrentCompositeRaptorRouter private final RaptorRouter mainWorker; private final RaptorRouter alternativeWorker; private final BiFunction>, Collection>, Collection>> merger; + + @Nullable private final ExecutorService executorService; public ConcurrentCompositeRaptorRouter( RaptorRouter mainWorker, RaptorRouter alternativeWorker, BiFunction>, Collection>, Collection>> merger, - ExecutorService executorService + @Nullable ExecutorService executorService ) { this.mainWorker = mainWorker; this.alternativeWorker = alternativeWorker; From 372e4f0e2f161f8c891acff2957534fc82a52d60 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Fri, 25 Oct 2024 10:57:22 +0100 Subject: [PATCH 121/213] add failing test for #6072 --- .../model/network/TripPatternTest.java | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/application/src/test/java/org/opentripplanner/transit/model/network/TripPatternTest.java b/application/src/test/java/org/opentripplanner/transit/model/network/TripPatternTest.java index bb0ec765331..32563545694 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/network/TripPatternTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/network/TripPatternTest.java @@ -24,7 +24,9 @@ class TripPatternTest { private static final Route ROUTE = TimetableRepositoryForTest.route("routeId").build(); public static final RegularStop STOP_A = TEST_MODEL.stop("A").build(); + public static final RegularStop STOP_X = TEST_MODEL.stop("X").build(); public static final RegularStop STOP_B = TEST_MODEL.stop("B").build(); + public static final RegularStop STOP_Y = TEST_MODEL.stop("Y").build(); public static final RegularStop STOP_C = TEST_MODEL.stop("C").build(); private static final StopPattern STOP_PATTERN = TimetableRepositoryForTest.stopPattern( STOP_A, @@ -33,8 +35,8 @@ class TripPatternTest { ); private static final List HOP_GEOMETRIES = List.of( - makeLineString(STOP_A.getCoordinate(), STOP_B.getCoordinate()), - makeLineString(STOP_B.getCoordinate(), STOP_C.getCoordinate()) + makeLineString(STOP_A.getCoordinate(), STOP_X.getCoordinate(), STOP_B.getCoordinate()), + makeLineString(STOP_B.getCoordinate(), STOP_Y.getCoordinate(), STOP_C.getCoordinate()) ); private static final TripPattern subject = TripPattern @@ -70,6 +72,27 @@ void copy() { assertEquals(HOP_GEOMETRIES.get(1), copy.getHopGeometry(1)); } + @Test + void hopGeometryForReplacementPattern() { + var pattern = TripPattern + .of(id("replacement")) + .withName("replacement") + .withRoute(ROUTE) + .withStopPattern(TimetableRepositoryForTest.stopPattern(STOP_A, STOP_B, STOP_X, STOP_Y)) + .withOriginalTripPattern(subject) + .build(); + + assertEquals(HOP_GEOMETRIES.get(0), pattern.getHopGeometry(0)); + assertEquals( + makeLineString(STOP_B.getCoordinate(), STOP_X.getCoordinate()), + pattern.getHopGeometry(1) + ); + assertEquals( + makeLineString(STOP_X.getCoordinate(), STOP_Y.getCoordinate()), + pattern.getHopGeometry(2) + ); + } + @Test void sameAs() { assertTrue(subject.sameAs(subject.copy().build())); From 8753f82cd160304a978fb195108b05b7e7de6876 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Fri, 25 Oct 2024 11:03:25 +0100 Subject: [PATCH 122/213] fix failing test --- .../transit/model/network/TripPatternBuilder.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/transit/model/network/TripPatternBuilder.java b/application/src/main/java/org/opentripplanner/transit/model/network/TripPatternBuilder.java index ec2451ea66d..5f9be0da455 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/network/TripPatternBuilder.java +++ b/application/src/main/java/org/opentripplanner/transit/model/network/TripPatternBuilder.java @@ -219,15 +219,12 @@ private List generateHopGeometriesFromOriginalTripPattern() { // being replaced having a different number of stops. In that case the geometry will be // preserved up until the first mismatching stop, and a straight line will be used for // all segments after that. - int sizeOfShortestPattern = Math.min( - stopPattern.getSize(), - originalTripPattern.numberOfStops() - ); - List hopGeometries = new ArrayList<>(); - for (int i = 0; i < sizeOfShortestPattern - 1; i++) { - LineString hopGeometry = originalTripPattern.getHopGeometry(i); + for (int i = 0; i < stopPattern.getSize() - 1; i++) { + LineString hopGeometry = i < originalTripPattern.numberOfStops() - 1 + ? originalTripPattern.getHopGeometry(i) + : null; if (hopGeometry != null && stopPattern.sameStops(originalTripPattern.getStopPattern(), i)) { // Copy hop geometry from previous pattern From c6801aeba2bedad8873b052685d3f29d5d556da5 Mon Sep 17 00:00:00 2001 From: Teemu Kalvas Date: Fri, 25 Oct 2024 16:03:17 +0300 Subject: [PATCH 123/213] no longer read unstandard brandingUrl for GTFS routes --- .../gtfs/mapping/BrandingMapper.java | 26 ------------------- .../gtfs/mapping/RouteMapper.java | 3 --- .../gtfs/mapping/RouteMapperTest.java | 4 +-- 3 files changed, 2 insertions(+), 31 deletions(-) delete mode 100644 application/src/main/java/org/opentripplanner/gtfs/mapping/BrandingMapper.java diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/BrandingMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/BrandingMapper.java deleted file mode 100644 index 5e370335d4e..00000000000 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/BrandingMapper.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.opentripplanner.gtfs.mapping; - -import javax.annotation.Nullable; -import org.onebusaway.gtfs.model.Route; -import org.opentripplanner.transit.model.framework.FeedScopedId; -import org.opentripplanner.transit.model.organization.Branding; - -/** Responsible for mapping GTFS Route into the OTP Branding model. */ -public class BrandingMapper { - - /** - * Convert GTFS Route entity into OTP Branding model. - * - * @param route GTFS Route entity - * @return OTP branding model. Null if route branding url is not present. - */ - @Nullable - public Branding map(Route route) { - if (route.getBrandingUrl() == null) { - return null; - } - // Make an id from the url, the id is required - var id = new FeedScopedId(route.getId().getAgencyId(), route.getBrandingUrl()); - return Branding.of(id).withUrl(route.getBrandingUrl()).build(); - } -} diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/RouteMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/RouteMapper.java index 0c668f64b92..776a829f6b7 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/RouteMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/RouteMapper.java @@ -15,7 +15,6 @@ class RouteMapper { private final AgencyMapper agencyMapper; - private final BrandingMapper brandingMapper; private final DataImportIssueStore issueStore; @@ -30,7 +29,6 @@ class RouteMapper { ) { this.agencyMapper = agencyMapper; this.issueStore = issueStore; - this.brandingMapper = new BrandingMapper(); this.translationHelper = helper; } @@ -82,7 +80,6 @@ private Route doMap(org.onebusaway.gtfs.model.Route rhs) { lhs.withColor(rhs.getColor()); lhs.withTextColor(rhs.getTextColor()); lhs.withBikesAllowed(BikeAccessMapper.mapForRoute(rhs)); - lhs.withBranding(brandingMapper.map(rhs)); if (rhs.getNetworkId() != null) { var networkId = GroupOfRoutes .of(new FeedScopedId(rhs.getId().getAgencyId(), rhs.getNetworkId())) diff --git a/application/src/test/java/org/opentripplanner/gtfs/mapping/RouteMapperTest.java b/application/src/test/java/org/opentripplanner/gtfs/mapping/RouteMapperTest.java index 2119c7299d0..d245227aad6 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/mapping/RouteMapperTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/mapping/RouteMapperTest.java @@ -95,9 +95,9 @@ public void testMap() throws Exception { assertEquals(BikeAccess.ALLOWED, result.getBikesAllowed()); assertEquals(SORT_ORDER, result.getGtfsSortOrder()); + // We no longer read the non-standard brandingUrl from gtfs, but if it is supplied, it will not cause an error. Branding branding = result.getBranding(); - assertNotNull(branding); - assertEquals(BRANDING_URL, branding.getUrl()); + assertNull(branding); } @Test From 91cf755cbf9d4d1f2c309b9be2ec82ddd34fce7e Mon Sep 17 00:00:00 2001 From: Eivind Morris Bakke Date: Mon, 28 Oct 2024 08:58:55 +0100 Subject: [PATCH 124/213] Change GraphQL tooltip for searchWindowUsed to say minutes, instead of seconds (#6185) * Changes GraphQL tooltip for searchWindowUsed to say minutes, instead of seconds. * Updates autogenerated graphql schema. --- .../apis/transmodel/model/timetable/TripMetadataType.java | 2 +- .../org/opentripplanner/apis/transmodel/schema.graphql | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/timetable/TripMetadataType.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/timetable/TripMetadataType.java index fabae563047..4301b0721c2 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/timetable/TripMetadataType.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/timetable/TripMetadataType.java @@ -26,7 +26,7 @@ public static GraphQLObjectType create(GraphQLScalarType dateTimeScalar) { "override the value if it is too small or too large. When paging OTP adjusts " + "it to the appropriate size, depending on the number of itineraries found in " + "the current search window. The scaling of the search window ensures faster " + - "paging and limits resource usage. The unit is seconds." + "paging and limits resource usage. The unit is minutes." ) .type(new GraphQLNonNull(Scalars.GraphQLInt)) .dataFetcher(e -> ((TripSearchMetadata) e.getSource()).searchWindowUsed.toMinutes()) diff --git a/application/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql b/application/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql index 2f3aef2d9a2..1ef883b4038 100644 --- a/application/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/application/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -1382,7 +1382,7 @@ type TripSearchData { nextDateTime: DateTime @deprecated(reason : "Use pageCursor instead") "This is the suggested search time for the \"previous page\" or time-window. Insert it together with the 'searchWindowUsed' in the request to get a new set of trips preceding in the time-window BEFORE the current search." prevDateTime: DateTime @deprecated(reason : "Use pageCursor instead") - "This is the time window used by the raptor search. The input searchWindow is an optional parameter and is dynamically assigned if not set. OTP might override the value if it is too small or too large. When paging OTP adjusts it to the appropriate size, depending on the number of itineraries found in the current search window. The scaling of the search window ensures faster paging and limits resource usage. The unit is seconds." + "This is the time window used by the raptor search. The input searchWindow is an optional parameter and is dynamically assigned if not set. OTP might override the value if it is too small or too large. When paging OTP adjusts it to the appropriate size, depending on the number of itineraries found in the current search window. The scaling of the search window ensures faster paging and limits resource usage. The unit is minutes." searchWindowUsed: Int! } From 76e05c185a6bd302acc3aa7cb35eb30d5b3b073d Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Mon, 28 Oct 2024 07:59:09 +0000 Subject: [PATCH 125/213] Add changelog entry for #6185 [ci skip] --- doc/user/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/user/Changelog.md b/doc/user/Changelog.md index 5e38357a814..228251b34dd 100644 --- a/doc/user/Changelog.md +++ b/doc/user/Changelog.md @@ -21,6 +21,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Rename StopModel to SiteRepository [#6165](https://github.com/opentripplanner/OpenTripPlanner/pull/6165) - Allow bike walking through bicycle no thru traffic areas [#6179](https://github.com/opentripplanner/OpenTripPlanner/pull/6179) - update the description of mode to cable tram. [#6173](https://github.com/opentripplanner/OpenTripPlanner/pull/6173) +- Change GraphQL tooltip for searchWindowUsed to say minutes, instead of seconds [#6185](https://github.com/opentripplanner/OpenTripPlanner/pull/6185) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.6.0 (2024-09-18) From 3d604570931b04d160721145bf35ce2fadb1b6f8 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Mon, 28 Oct 2024 09:11:49 +0000 Subject: [PATCH 126/213] Add changelog entry for #6170 [ci skip] --- doc/user/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/user/Changelog.md b/doc/user/Changelog.md index 228251b34dd..c7a89a14922 100644 --- a/doc/user/Changelog.md +++ b/doc/user/Changelog.md @@ -22,6 +22,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Allow bike walking through bicycle no thru traffic areas [#6179](https://github.com/opentripplanner/OpenTripPlanner/pull/6179) - update the description of mode to cable tram. [#6173](https://github.com/opentripplanner/OpenTripPlanner/pull/6173) - Change GraphQL tooltip for searchWindowUsed to say minutes, instead of seconds [#6185](https://github.com/opentripplanner/OpenTripPlanner/pull/6185) +- Interpret GTFS extended route types 801-899 also as trolleybus service [#6170](https://github.com/opentripplanner/OpenTripPlanner/pull/6170) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.6.0 (2024-09-18) From 785ac677328eeb2563e63b87695025ce4bdb734c Mon Sep 17 00:00:00 2001 From: Teemu Kalvas Date: Mon, 28 Oct 2024 11:25:46 +0200 Subject: [PATCH 127/213] remove route.setBrandingUrl from test, so test won't break if onebusaway removes it as nonstandard --- .../java/org/opentripplanner/gtfs/mapping/RouteMapperTest.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/application/src/test/java/org/opentripplanner/gtfs/mapping/RouteMapperTest.java b/application/src/test/java/org/opentripplanner/gtfs/mapping/RouteMapperTest.java index d245227aad6..56b760a1fd8 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/mapping/RouteMapperTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/mapping/RouteMapperTest.java @@ -47,8 +47,6 @@ public class RouteMapperTest { private static final Integer SORT_ORDER = 1; - private static final String BRANDING_URL = "www.url.me/brand"; - private static final Route ROUTE = new Route(); private final RouteMapper subject = new RouteMapper( new AgencyMapper(TimetableRepositoryForTest.FEED_ID), @@ -68,7 +66,6 @@ public class RouteMapperTest { ROUTE.setTextColor(TEXT_COLOR); ROUTE.setBikesAllowed(BIKES_ALLOWED); ROUTE.setSortOrder(SORT_ORDER); - ROUTE.setBrandingUrl(BRANDING_URL); } @Test From beba7f200d4251870793a89d9f2c44fe36f81b69 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Mon, 28 Oct 2024 14:46:54 +0200 Subject: [PATCH 128/213] Attempt to fix speed tests --- .github/workflows/performance-test.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/performance-test.yml b/.github/workflows/performance-test.yml index b185ed260f9..45ea9413d36 100644 --- a/.github/workflows/performance-test.yml +++ b/.github/workflows/performance-test.yml @@ -93,13 +93,12 @@ jobs: - name: Run speed test if: matrix.profile == 'core' || github.ref == 'refs/heads/dev-2.x' - working-directory: application env: PERFORMANCE_INFLUX_DB_PASSWORD: ${{ secrets.PERFORMANCE_INFLUX_DB_PASSWORD }} SPEEDTEST_LOCATION: ${{ matrix.location }} MAVEN_OPTS: "-Xmx50g -XX:StartFlightRecording=delay=${{ matrix.jfr-delay }},duration=30m,filename=${{ matrix.location}}-speed-test.jfr -Dmaven.repo.local=/home/lenni/.m2/repository/" run: | - mvn exec:java -Dexec.mainClass="org.opentripplanner.transit.speed_test.SpeedTest" -Dexec.classpathScope=test -Dexec.args="--dir=../test/performance/${{ matrix.location }} -p md -n ${{ matrix.iterations }} -i 3 -0" -P prettierSkip + mvn exec:java -Dexec.mainClass="org.opentripplanner.transit.speed_test.SpeedTest" -Dexec.classpathScope=test -Dexec.args="--dir=test/performance/${{ matrix.location }} -p md -n ${{ matrix.iterations }} -i 3 -0" -P prettierSkip -pl application -am - name: Archive travel results file if: matrix.profile == 'core' || github.ref == 'refs/heads/dev-2.x' From 8f5af3a0567e5dc4dc41bd75baf798430b7644af Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Mon, 28 Oct 2024 14:35:53 +0000 Subject: [PATCH 129/213] Add changelog entry for #6194 [ci skip] --- doc/user/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/user/Changelog.md b/doc/user/Changelog.md index c7a89a14922..37646716f66 100644 --- a/doc/user/Changelog.md +++ b/doc/user/Changelog.md @@ -23,6 +23,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - update the description of mode to cable tram. [#6173](https://github.com/opentripplanner/OpenTripPlanner/pull/6173) - Change GraphQL tooltip for searchWindowUsed to say minutes, instead of seconds [#6185](https://github.com/opentripplanner/OpenTripPlanner/pull/6185) - Interpret GTFS extended route types 801-899 also as trolleybus service [#6170](https://github.com/opentripplanner/OpenTripPlanner/pull/6170) +- Disable protocol upgrades for the HTTP client by default. [#6194](https://github.com/opentripplanner/OpenTripPlanner/pull/6194) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.6.0 (2024-09-18) From 833e5e33d86c10736874f8ec968ffe850f8ca561 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 20:11:01 +0000 Subject: [PATCH 130/213] fix(deps): update dependency org.apache.httpcomponents.client5:httpclient5 to v5.4.1 --- application/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/pom.xml b/application/pom.xml index b13806e6a0a..4a7afe8747b 100644 --- a/application/pom.xml +++ b/application/pom.xml @@ -325,7 +325,7 @@ org.apache.httpcomponents.client5 httpclient5 - 5.4 + 5.4.1 commons-cli From 6fdfef894c579e859571b155de234246e56d9d4b Mon Sep 17 00:00:00 2001 From: Sam Kim <21956685+sam-k@users.noreply.github.com> Date: Mon, 28 Oct 2024 15:50:20 -0700 Subject: [PATCH 131/213] Address PR comments --- doc/dev/decisionrecords/Codestyle.md | 11 +++++------ doc/dev/decisionrecords/NamingConventions.md | 2 +- doc/dev/decisionrecords/RecordsPOJOsBuilders.md | 4 ++-- doc/dev/decisionrecords/UseDecisionRecords.md | 2 +- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/doc/dev/decisionrecords/Codestyle.md b/doc/dev/decisionrecords/Codestyle.md index 72db4796291..170c592f437 100644 --- a/doc/dev/decisionrecords/Codestyle.md +++ b/doc/dev/decisionrecords/Codestyle.md @@ -53,7 +53,7 @@ But, if you have set a custom code style in your settings (as we used until OTP to change to the _Project_ code style. Open the `Preferences` from the menu and select _Editor > Code Style_. Then select **Project** in the \_Scheme drop down. -#### Run Prettier Maven Plugin as an external tool in IntelliJ +#### Run Prettier Maven Plugin as an External Tool in IntelliJ You can run the Prettier Maven plugin as an external tool in IntelliJ. Set it up as an `External tool` and assign a keyboard shortcut to the tool execution. @@ -70,7 +70,7 @@ Working Directory: $ProjectFileDir$ > **Tip!** Add an unused key shortcut to execute the external tool. Then you can use the old > shortcut to format other file types. -#### Install File Watchers plugin in IntelliJ +#### Install File Watchers Plugin in IntelliJ You can also configure IntelliJ to run Prettier every time IntelliJ saves a Java file. But if you are editing the file at the same time, you will get a warning that the file in memory and the file @@ -106,9 +106,8 @@ feel free to share it. Some of the classes in OTP have a lot of fields and methods. Keeping members sorted reduces merge conflicts. Adding fields and methods to the end of the list will cause merge conflicts more often -than will inserting methods and fields in an ordered list. Fields and methods can be sorted in -"feature" sections or alphabetically, but stick to it and respect it when adding new methods and -fields. +than inserting methods and fields in an ordered list. Fields and methods can be sorted in "feature" +sections or alphabetically, but stick to it and respect it when adding new methods and fields. The provided formatter will group class members in this order: @@ -166,7 +165,7 @@ context. Please avoid including trivial Javadoc or the empty Javadoc stubs added - On fields: - Fields should be marked as `@Nullable` if they are nullable. -Use of `@NonNull` annotation is not allowed. It should be assumed methods/parameters/fields are +Use of `@Nonnull` annotation is not allowed. It should be assumed methods/parameters/fields are non-null if they are not marked as `@Nullable`. However, there are places where the `@Nullable` annotation is missing even if it should have been used. Those can be updated to use the `@Nullable` annotation. diff --git a/doc/dev/decisionrecords/NamingConventions.md b/doc/dev/decisionrecords/NamingConventions.md index 0c7cd201d7d..53c783950d9 100644 --- a/doc/dev/decisionrecords/NamingConventions.md +++ b/doc/dev/decisionrecords/NamingConventions.md @@ -63,7 +63,7 @@ them. Naming convention for builders with and without a context. -#### Graph builds and tests run without a context +#### Graph Builds and Tests Run Without a Context ```java // Create a new Stop diff --git a/doc/dev/decisionrecords/RecordsPOJOsBuilders.md b/doc/dev/decisionrecords/RecordsPOJOsBuilders.md index 3112760cbe7..d34fd3ab6b7 100644 --- a/doc/dev/decisionrecords/RecordsPOJOsBuilders.md +++ b/doc/dev/decisionrecords/RecordsPOJOsBuilders.md @@ -27,7 +27,7 @@ types of these fields. OTP used a simple builder pattern in many places, especially when creating immutable types. -#### Builder conventions +#### Builder Conventions - Use factory methods to create builder—either `of` or `copyOf`. The `copyOf` uses an existing instance as its base. The `of` creates a builder with all default values set. All constructors @@ -47,7 +47,7 @@ OTP used a simple builder pattern in many places, especially when creating immut - For nested builders, see the field `nested` in the example.

    - Builder example + Builder Example ```java /** diff --git a/doc/dev/decisionrecords/UseDecisionRecords.md b/doc/dev/decisionrecords/UseDecisionRecords.md index 0c07f89fd12..9635c36fe88 100644 --- a/doc/dev/decisionrecords/UseDecisionRecords.md +++ b/doc/dev/decisionrecords/UseDecisionRecords.md @@ -15,7 +15,7 @@ a bit more discussion and explanation, then we will create a PR with a document Use the [template](/doc/dev/decisionrecords/_TEMPLATE.md) as a starting point for documenting the decision. -### How to discuss and document a Decision Record +### How to Discuss and Document a Decision Record - Create a new pull request and describe the decision record by adding a document to the `/doc/dev/decisionrecords` folder. Use the [template](/doc/dev/decisionrecords/_TEMPLATE.md). From 7d4bdf271add54801810dcf1cbe9185923ab4a48 Mon Sep 17 00:00:00 2001 From: Sam Kim <21956685+sam-k@users.noreply.github.com> Date: Mon, 28 Oct 2024 15:54:49 -0700 Subject: [PATCH 132/213] Minor edits --- doc/dev/decisionrecords/UseDecisionRecords.md | 2 +- doc/dev/decisionrecords/_TEMPLATE.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/dev/decisionrecords/UseDecisionRecords.md b/doc/dev/decisionrecords/UseDecisionRecords.md index 9635c36fe88..0cdca42e16d 100644 --- a/doc/dev/decisionrecords/UseDecisionRecords.md +++ b/doc/dev/decisionrecords/UseDecisionRecords.md @@ -2,7 +2,7 @@ An OTP Decision Record is a justified software design choice that addresses a significant functional or non-functional requirement. [Architectural Decision Records](https://adr.github.io/) -is a similar concept, but we have widened the scope to include any relevant decision about OTP +is a similar concept, but we have widened the scope to include any relevant decision about OTP development. ## Process diff --git a/doc/dev/decisionrecords/_TEMPLATE.md b/doc/dev/decisionrecords/_TEMPLATE.md index b628d74c6a7..88c492ca2df 100644 --- a/doc/dev/decisionrecords/_TEMPLATE.md +++ b/doc/dev/decisionrecords/_TEMPLATE.md @@ -6,7 +6,7 @@ document later. --> -Original pull-request: {#NNNN} +Original pull request: {#NNNN} ### Context and Problem Statement @@ -20,7 +20,7 @@ Original pull-request: {#NNNN} - -### Decision & Consequences +### Decision and Consequences From 7b55ee03e3c0642f80c0335ec4fda892fc5aa1d6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 29 Oct 2024 02:24:54 +0000 Subject: [PATCH 133/213] fix(deps): update jackson.version to v2.18.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e590501e6c4..57539cd8144 100644 --- a/pom.xml +++ b/pom.xml @@ -62,7 +62,7 @@ 32.0 2.52 - 2.18.0 + 2.18.1 3.1.9 5.11.2 1.13.5 From 59b31ad1d7c0a1730bb52816635478943ff109ea Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Tue, 29 Oct 2024 17:19:48 +0100 Subject: [PATCH 134/213] Update performance-test.yml Fix and run performance tests with Multi-module Mavan --- .github/workflows/performance-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/performance-test.yml b/.github/workflows/performance-test.yml index 45ea9413d36..79d61098f5c 100644 --- a/.github/workflows/performance-test.yml +++ b/.github/workflows/performance-test.yml @@ -98,7 +98,7 @@ jobs: SPEEDTEST_LOCATION: ${{ matrix.location }} MAVEN_OPTS: "-Xmx50g -XX:StartFlightRecording=delay=${{ matrix.jfr-delay }},duration=30m,filename=${{ matrix.location}}-speed-test.jfr -Dmaven.repo.local=/home/lenni/.m2/repository/" run: | - mvn exec:java -Dexec.mainClass="org.opentripplanner.transit.speed_test.SpeedTest" -Dexec.classpathScope=test -Dexec.args="--dir=test/performance/${{ matrix.location }} -p md -n ${{ matrix.iterations }} -i 3 -0" -P prettierSkip -pl application -am + mvn --projects application exec:java -Dexec.mainClass="org.opentripplanner.transit.speed_test.SpeedTest" -Dexec.classpathScope=test -Dexec.args="--dir=test/performance/${{ matrix.location }} -p md -n ${{ matrix.iterations }} -i 3 -0" - name: Archive travel results file if: matrix.profile == 'core' || github.ref == 'refs/heads/dev-2.x' From 447adcfcd82bac22203cdd04ff3af84fd69f9ecd Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Tue, 29 Oct 2024 17:39:12 +0100 Subject: [PATCH 135/213] Fix and run performance tests - install jars to make them available in sub-modules --- .github/workflows/performance-test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/performance-test.yml b/.github/workflows/performance-test.yml index 79d61098f5c..1e470d2f83c 100644 --- a/.github/workflows/performance-test.yml +++ b/.github/workflows/performance-test.yml @@ -83,7 +83,7 @@ jobs: if: matrix.profile == 'core' || github.ref == 'refs/heads/dev-2.x' env: MAVEN_OPTS: "-Dmaven.repo.local=/home/lenni/.m2/repository/" - run: mvn -DskipTests --batch-mode package -P prettierSkip + run: mvn -DskipTests --batch-mode install -P prettierSkip - name: Build graph if: matrix.profile == 'core' || github.ref == 'refs/heads/dev-2.x' @@ -98,7 +98,7 @@ jobs: SPEEDTEST_LOCATION: ${{ matrix.location }} MAVEN_OPTS: "-Xmx50g -XX:StartFlightRecording=delay=${{ matrix.jfr-delay }},duration=30m,filename=${{ matrix.location}}-speed-test.jfr -Dmaven.repo.local=/home/lenni/.m2/repository/" run: | - mvn --projects application exec:java -Dexec.mainClass="org.opentripplanner.transit.speed_test.SpeedTest" -Dexec.classpathScope=test -Dexec.args="--dir=test/performance/${{ matrix.location }} -p md -n ${{ matrix.iterations }} -i 3 -0" + mvn exec:java -Dexec.mainClass="org.opentripplanner.transit.speed_test.SpeedTest" -Dexec.classpathScope=test -Dexec.args="--dir=test/performance/${{ matrix.location }} -p md -n ${{ matrix.iterations }} -i 3 -0" -P prettierSkip -pl application -am - name: Archive travel results file if: matrix.profile == 'core' || github.ref == 'refs/heads/dev-2.x' From 433acece5656666835fc92de6f2595408625183f Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Tue, 29 Oct 2024 17:52:37 +0100 Subject: [PATCH 136/213] Fix and run performance tests - run SpeedTest with the application aggregator --- .github/workflows/performance-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/performance-test.yml b/.github/workflows/performance-test.yml index 1e470d2f83c..ad3b843dd12 100644 --- a/.github/workflows/performance-test.yml +++ b/.github/workflows/performance-test.yml @@ -98,7 +98,7 @@ jobs: SPEEDTEST_LOCATION: ${{ matrix.location }} MAVEN_OPTS: "-Xmx50g -XX:StartFlightRecording=delay=${{ matrix.jfr-delay }},duration=30m,filename=${{ matrix.location}}-speed-test.jfr -Dmaven.repo.local=/home/lenni/.m2/repository/" run: | - mvn exec:java -Dexec.mainClass="org.opentripplanner.transit.speed_test.SpeedTest" -Dexec.classpathScope=test -Dexec.args="--dir=test/performance/${{ matrix.location }} -p md -n ${{ matrix.iterations }} -i 3 -0" -P prettierSkip -pl application -am + mvn --projects application exec:java -Dexec.mainClass="org.opentripplanner.transit.speed_test.SpeedTest" -Dexec.classpathScope=test -Dexec.args="--dir=test/performance/${{ matrix.location }} -p md -n ${{ matrix.iterations }} -i 3 -0" - name: Archive travel results file if: matrix.profile == 'core' || github.ref == 'refs/heads/dev-2.x' From 17de4e571e0e3e6854ecfcbb27e43f8fcd017d30 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Tue, 29 Oct 2024 19:49:35 +0000 Subject: [PATCH 137/213] Add changelog entry for #6189 [ci skip] --- doc/user/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/user/Changelog.md b/doc/user/Changelog.md index 37646716f66..a38cce53676 100644 --- a/doc/user/Changelog.md +++ b/doc/user/Changelog.md @@ -24,6 +24,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Change GraphQL tooltip for searchWindowUsed to say minutes, instead of seconds [#6185](https://github.com/opentripplanner/OpenTripPlanner/pull/6185) - Interpret GTFS extended route types 801-899 also as trolleybus service [#6170](https://github.com/opentripplanner/OpenTripPlanner/pull/6170) - Disable protocol upgrades for the HTTP client by default. [#6194](https://github.com/opentripplanner/OpenTripPlanner/pull/6194) +- Fix max search-window when paging [#6189](https://github.com/opentripplanner/OpenTripPlanner/pull/6189) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.6.0 (2024-09-18) From aa0c69cde738a9fa75bcb6be630f6c3252b0efd9 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Tue, 29 Oct 2024 21:03:46 +0100 Subject: [PATCH 138/213] Apply suggestions from code review Co-authored-by: Vincent Paturet <46598384+vpaturet@users.noreply.github.com> Co-authored-by: Henrik Abrahamsson <127481124+habrahamsson-skanetrafiken@users.noreply.github.com> --- .../ext/sorlandsbanen/CoachCostCalculator.java | 2 +- .../org/opentripplanner/ext/sorlandsbanen/MergePaths.java | 2 +- .../ext/sorlandsbanen/SorlandsbanenNorwayService.java | 6 +++--- .../opentripplanner/framework/application/OTPFeature.java | 2 +- .../opentripplanner/framework/geometry/WgsCoordinate.java | 2 +- .../raptor/rangeraptor/CompositeResult.java | 8 ++++---- .../rangeraptor/ConcurrentCompositeRaptorRouter.java | 2 +- .../opentripplanner/raptor/spi/ExtraMcRouterSearch.java | 4 ++-- doc/user/sandbox/Sorlandsbanen.md | 6 +++--- 9 files changed, 17 insertions(+), 17 deletions(-) diff --git a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/CoachCostCalculator.java b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/CoachCostCalculator.java index 204878072d5..89a3071f975 100644 --- a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/CoachCostCalculator.java +++ b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/CoachCostCalculator.java @@ -56,7 +56,7 @@ public int transitArrivalCost( ) { int cost = delegate.transitArrivalCost(boardCost, alightSlack, transitTime, trip, toStop); - // This is a bit ugly, since it relays on the fact that the 'transitReluctanceFactorIndex' + // This is a bit ugly, since it relies on the fact that the 'transitReluctanceFactorIndex' // returns the 'route.getMode().ordinal()' if(trip.transitReluctanceFactorIndex() == TransitMode.COACH.ordinal()) { cost += transitTime * EXTRA_RELUCTANCE_ON_COACH; diff --git a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/MergePaths.java b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/MergePaths.java index 8abf35ffa4c..2f7b38a7a08 100644 --- a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/MergePaths.java +++ b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/MergePaths.java @@ -35,7 +35,7 @@ private void addRailToMap(Map> map, Collection it); } } diff --git a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/SorlandsbanenNorwayService.java b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/SorlandsbanenNorwayService.java index 9314400c649..ecccb5d2370 100644 --- a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/SorlandsbanenNorwayService.java +++ b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/SorlandsbanenNorwayService.java @@ -19,9 +19,9 @@ /** * This service is responsible for producing results with rail for the south of Norway. The rail - * line is called "Sørlandsbanen". This rail line is slow and goes inland fare from where people + * line is called "Sørlandsbanen". This rail line is slow and goes inland far from where people * live. Despite this, people and the operator want to show it in the results for log travel along - * the southern part of Norway where ii is an option. Tuning the search has proven to be + * the southern part of Norway where it is an option. Tuning the search has proven to be * challenging. It is solved here by doing two searches. One normal search and one where the rail * is given a big cost advantage over coach. If train results are found in the second search, then * it is added to the results of the first search. Everything found in the first search is always @@ -72,7 +72,7 @@ public BiFunction>, Collection implements RaptorRouterResult { - public static final String UNSOPORTED_OPERATION = + private static final String UNSUPPORTED_OPERATION = "Merging all stop arrivals will be a complicated and memory intensive process, unless we need this this should not be done."; private final Collection> result; @@ -39,17 +39,17 @@ public Collection> extractPaths() { @Override public SingleCriteriaStopArrivals extractBestOverallArrivals() { - throw new UnsupportedOperationException(UNSOPORTED_OPERATION); + throw new UnsupportedOperationException(UNSUPPORTED_OPERATION); } @Override public SingleCriteriaStopArrivals extractBestTransitArrivals() { - throw new UnsupportedOperationException(UNSOPORTED_OPERATION); + throw new UnsupportedOperationException(UNSUPPORTED_OPERATION); } @Override public SingleCriteriaStopArrivals extractBestNumberOfTransfers() { - throw new UnsupportedOperationException(UNSOPORTED_OPERATION); + throw new UnsupportedOperationException(UNSUPPORTED_OPERATION); } /** diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/ConcurrentCompositeRaptorRouter.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/ConcurrentCompositeRaptorRouter.java index 5cc0b7f2189..a4ddf36347f 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/ConcurrentCompositeRaptorRouter.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/ConcurrentCompositeRaptorRouter.java @@ -12,7 +12,7 @@ import org.opentripplanner.raptor.rangeraptor.internalapi.RaptorRouterResult; /** - * Run two Raptor routers and join the result. The two searches are run concurrent if an + * Run two Raptor routers and join the result. The two searches are run concurrently if an * {@link ExecutorService} is provided. * @see CompositeResult for joining results. */ diff --git a/application/src/main/java/org/opentripplanner/raptor/spi/ExtraMcRouterSearch.java b/application/src/main/java/org/opentripplanner/raptor/spi/ExtraMcRouterSearch.java index deb22107036..e6fdc4fd0d0 100644 --- a/application/src/main/java/org/opentripplanner/raptor/spi/ExtraMcRouterSearch.java +++ b/application/src/main/java/org/opentripplanner/raptor/spi/ExtraMcRouterSearch.java @@ -6,7 +6,7 @@ import org.opentripplanner.raptor.api.path.RaptorPath; /** - * This interface is used to run two mulit-criteria searches and merging the result. Raptor will + * This interface is used to run two multi-criteria searches and merging the result. Raptor will * run the heuristics as normal. Then create two multi-criteria searches, the main search and the * alternative search. The caller must provide a {@code merger} and * {@link RaptorTransitDataProvider}. The transit data is used for the alternative search. This @@ -17,7 +17,7 @@ * For the heuristics to work, you may add extra cost or filter away data. But you cannot decrease * the cost, add transfer or add new trips. *

    - * This will alter the multi-criteria search, if only a sadard search is requested any extra + * This will alter the multi-criteria search, if only a standard search is requested any extra * multi-criteria search is ignored. *

    * @param The TripSchedule type defined by the user of the raptor API. diff --git a/doc/user/sandbox/Sorlandsbanen.md b/doc/user/sandbox/Sorlandsbanen.md index 4898a29af37..b9846da0f37 100644 --- a/doc/user/sandbox/Sorlandsbanen.md +++ b/doc/user/sandbox/Sorlandsbanen.md @@ -3,7 +3,7 @@ **This sandbox module is only working in Norway**, in particular only in the south of Norway. The feature flag to turn it *on* should only be enabled if you are routing using the norwegian data set. -The railroad in southern Norway is very slow and does not go by the cost where most people live. It +The railroad in southern Norway is very slow and does not go by the coast where most people live. It is easily beaten by coaches in the area. Despite this, we need to include it in results where it is relevant. @@ -24,8 +24,8 @@ in addition to the feature flag. ## Changelog -- 2024-10-14: We have used this feature for som time, but now want it in the Sandbox so we do not - need to merge it everytime we create a new entur release. +- 2024-10-14: We have used this feature for some time, but now want it in the Sandbox so we do not + need to merge it everytime we create a new Entur release. ### Configuration From d5527761c13a68e12593ea5d0bf9a0fee26bbd70 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Tue, 29 Oct 2024 21:24:16 +0100 Subject: [PATCH 139/213] review: Update JavaDoc for PathKey --- .../opentripplanner/ext/sorlandsbanen/PathKey.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/PathKey.java b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/PathKey.java index 9d0d1a14936..e4504b3ed14 100644 --- a/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/PathKey.java +++ b/application/src/ext/java/org/opentripplanner/ext/sorlandsbanen/PathKey.java @@ -5,10 +5,15 @@ /** - * Uses a hash to create a key for access, egress and transit legs in a path. Transfers - * are not included. The key is used to exclude duplicates. This approach may drop valid results - * when there is a hash collision, but this whole sandbox feature is a hack - so we can tolerate - * this here. + * The purpose of this class is to create a key to be able to compare paths so duplicate results + * can be ignored. + *

    + * Creating a good key for a path is not easy. For example, should a small variation in the street + * routing for an access/egress leg count as a significant difference? The solution here is + * straightforward. It creates a hash of the access-, egress- and transit-legs in the path, + * ignoring transfer legs. This approach may drop valid results if there are hash collisions, + * but since this is a Sandbox module and the investment in this code is minimal, we will accept + * the risk. */ final class PathKey { From a3548650878377c8b0a60ca018196c2090b95486 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Tue, 29 Oct 2024 21:24:49 +0100 Subject: [PATCH 140/213] review: Generate updated doc --- doc/user/Configuration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/user/Configuration.md b/doc/user/Configuration.md index a45e4253a06..8d94e332e40 100644 --- a/doc/user/Configuration.md +++ b/doc/user/Configuration.md @@ -250,7 +250,7 @@ Here is a list of all features which can be toggled on/off and their default val | `SandboxAPIGeocoder` | Enable the Geocoder API. | | ✓️ | | `SandboxAPIMapboxVectorTilesApi` | Enable Mapbox vector tiles API. | | ✓️ | | `SandboxAPIParkAndRideApi` | Enable park-and-ride endpoint. | | ✓️ | -| `Sorlandsbanen` | Include train Sørlandsbanen in results when searchig in south of Norway. Only relevant in Norway. | | ✓️ | +| `Sorlandsbanen` | Include train Sørlandsbanen in results when searching in south of Norway. Only relevant in Norway. | | ✓️ | | `TransferAnalyzer` | Analyze transfers during graph build. | | ✓️ | From eb5588750fffa03d3414a3983c9e2f0f938e6ba8 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Tue, 29 Oct 2024 21:42:24 +0100 Subject: [PATCH 141/213] review: Improve Sandbox documentation --- doc/user/sandbox/Sorlandsbanen.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/doc/user/sandbox/Sorlandsbanen.md b/doc/user/sandbox/Sorlandsbanen.md index b9846da0f37..13bc9163456 100644 --- a/doc/user/sandbox/Sorlandsbanen.md +++ b/doc/user/sandbox/Sorlandsbanen.md @@ -14,8 +14,11 @@ rail results(if they exist) from the second search and add it two to the results search. The new set of results will contain everything we found in the first search, plus the train results in the second results. -Note! This is a hack and the logic to enable this look at the origin and destination coordinates -in addition to the feature flag. +Note! This looks at origin and destination coordinates in addition to the feature flag to enable +the second search. It is automatically enabled if: + - the `OTPFeature.Sorlandsbanen` is on. + - the origin and/or destination is in the south of Norway. + - the search is a long-distance search, origin and destination are fare apart from each other. ## Contact Info From d49c4a6850b48147ee827a5b46bef5212d575200 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Tue, 29 Oct 2024 21:37:14 +0000 Subject: [PATCH 142/213] Add changelog entry for #5966 [ci skip] --- doc/user/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/user/Changelog.md b/doc/user/Changelog.md index a38cce53676..4ed08a6fafe 100644 --- a/doc/user/Changelog.md +++ b/doc/user/Changelog.md @@ -25,6 +25,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Interpret GTFS extended route types 801-899 also as trolleybus service [#6170](https://github.com/opentripplanner/OpenTripPlanner/pull/6170) - Disable protocol upgrades for the HTTP client by default. [#6194](https://github.com/opentripplanner/OpenTripPlanner/pull/6194) - Fix max search-window when paging [#6189](https://github.com/opentripplanner/OpenTripPlanner/pull/6189) +- Add car ferry functionality [#5966](https://github.com/opentripplanner/OpenTripPlanner/pull/5966) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.6.0 (2024-09-18) From 53a2132fe4d6e50778d8fe46d27b6978eb189a73 Mon Sep 17 00:00:00 2001 From: OTP Serialization Version Bot Date: Tue, 29 Oct 2024 21:37:37 +0000 Subject: [PATCH 143/213] Bump serialization version id for #5966 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e590501e6c4..9b19d252bd9 100644 --- a/pom.xml +++ b/pom.xml @@ -58,7 +58,7 @@ - 167 + 168 32.0 2.52 From cfc2b412eb8f0091d10994c0d17e8658d4f90537 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Tue, 22 Oct 2024 23:20:08 +0200 Subject: [PATCH 144/213] Create OTP framework module for "extended" programming language features. --- application/pom.xml | 5 +++ .../framework/collection/ToveUtils.java | 17 ++++++++ .../graph_builder/module/osm/DisjointSet.java | 4 +- .../graph_builder/module/osm/OsmDatabase.java | 6 +-- framework/pom.xml | 41 +++++++++++++++++++ .../framework/collection/CollectionUtils.java | 0 .../framework/collection/CollectionsView.java | 0 .../collection/CompositeComparator.java | 0 .../framework/collection/ListSection.java | 0 .../framework/collection/ListUtils.java | 0 .../framework/collection/MapUtils.java | 12 ------ .../framework/collection/SetUtils.java | 0 .../framework/lang/ArrayUtils.java | 0 .../framework/lang/BitSetUtils.java | 0 .../opentripplanner/framework/lang/Box.java | 0 .../framework/lang/DoubleUtils.java | 0 .../framework/lang/IntBox.java | 0 .../framework/lang/IntRange.java | 0 .../framework/lang/IntUtils.java | 0 .../lang/MemEfficientArrayBuilder.java | 0 .../framework/lang/ObjectUtils.java | 0 .../framework/lang/OtpNumberFormat.java | 0 .../framework/lang/Sandbox.java | 0 .../framework/lang/StringUtils.java | 0 .../framework/logging/ProgressTracker.java | 0 .../logging/ProgressTrackerInputStream.java | 0 .../logging/ProgressTrackerOutputStream.java | 0 .../framework/logging/Throttle.java | 0 .../text/CharacterEscapeFormatter.java | 0 .../text/FileSizeToTextConverter.java | 0 .../framework/text/HexString.java | 0 .../framework/text/MarkdownFormatter.java | 0 .../opentripplanner/framework/text/Table.java | 0 .../framework/text/TableBuilder.java | 0 .../framework/text/TableRowFormatter.java | 0 .../framework/time/CountdownTimer.java | 0 .../framework/time/DateUtils.java | 0 .../framework/time/DurationUtils.java | 0 .../framework/time/LocalDateUtils.java | 0 .../framework/time/OffsetDateTimeParser.java | 0 .../framework/time/RelativeTime.java | 0 .../framework/time/ServiceDateUtils.java | 0 .../framework/time/TimeUtils.java | 0 .../tostring/MultiLineToStringBuilder.java | 0 .../framework/tostring/ToStringBuilder.java | 0 .../tostring/ValueObjectToStringBuilder.java | 0 .../collection/CollectionUtilsTest.java | 2 +- .../collection/CollectionsViewTest.java | 0 .../collection/CompositeComparatorTest.java | 0 .../framework/collection/ListSectionTest.java | 0 .../framework/collection/ListUtilsTest.java | 0 .../framework/collection/MapUtilsTest.java | 0 .../framework/collection/SetUtilsTest.java | 0 .../framework/lang/ArrayUtilsTest.java | 0 .../framework/lang/BitSetUtilsTest.java | 0 .../framework/lang/BoxTest.java | 0 .../framework/lang/DoubleUtilsTest.java | 0 .../framework/lang/IntBoxTest.java | 0 .../framework/lang/IntRangeTest.java | 0 .../framework/lang/IntUtilsTest.java | 0 .../lang/MemEfficientArrayBuilderTest.java | 0 .../framework/lang/ObjectUtilsTest.java | 0 .../framework/lang/OtpNumberFormatTest.java | 0 .../framework/lang/StringUtilsTest.java | 0 .../logging/ProgressTrackerTest.java | 0 .../framework/logging/ThrottleTest.java | 0 .../text/CharacterEscapeFormatterTest.java | 0 .../text/FileSizeToTextConverterTest.java | 0 .../framework/text/HexStringTest.java | 0 .../framework/text/MarkdownFormatterTest.java | 0 .../framework/text/TableTest.java | 0 .../framework/time/CountdownTimerTest.java | 0 .../framework/time/DateUtilsTest.java | 1 - .../framework/time/DurationUtilsTest.java | 0 .../framework/time/LocalDateUtilsTest.java | 0 .../time/OffsetDateTimeParserTest.java | 0 .../framework/time/ServiceDateUtilsTest.java | 1 - .../framework/time/TimeUtilsTest.java | 1 - .../framework/time/ZoneIds.java | 11 +++++ .../MultiLineToStringBuilderTest.java | 0 .../tostring/ToStringBuilderTest.java | 2 +- .../ValueObjectToStringBuilderTest.java | 0 pom.xml | 1 + 83 files changed, 82 insertions(+), 22 deletions(-) create mode 100644 application/src/main/java/org/opentripplanner/framework/collection/ToveUtils.java create mode 100644 framework/pom.xml rename {application => framework}/src/main/java/org/opentripplanner/framework/collection/CollectionUtils.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/collection/CollectionsView.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/collection/CompositeComparator.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/collection/ListSection.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/collection/ListUtils.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/collection/MapUtils.java (77%) rename {application => framework}/src/main/java/org/opentripplanner/framework/collection/SetUtils.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/lang/ArrayUtils.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/lang/BitSetUtils.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/lang/Box.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/lang/DoubleUtils.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/lang/IntBox.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/lang/IntRange.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/lang/IntUtils.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/lang/MemEfficientArrayBuilder.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/lang/ObjectUtils.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/lang/OtpNumberFormat.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/lang/Sandbox.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/lang/StringUtils.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/logging/ProgressTracker.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/logging/ProgressTrackerInputStream.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/logging/ProgressTrackerOutputStream.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/logging/Throttle.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/text/CharacterEscapeFormatter.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/text/FileSizeToTextConverter.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/text/HexString.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/text/MarkdownFormatter.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/text/Table.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/text/TableBuilder.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/text/TableRowFormatter.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/time/CountdownTimer.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/time/DateUtils.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/time/DurationUtils.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/time/LocalDateUtils.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/time/OffsetDateTimeParser.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/time/RelativeTime.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/time/ServiceDateUtils.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/time/TimeUtils.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/tostring/MultiLineToStringBuilder.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/tostring/ToStringBuilder.java (100%) rename {application => framework}/src/main/java/org/opentripplanner/framework/tostring/ValueObjectToStringBuilder.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/collection/CollectionUtilsTest.java (98%) rename {application => framework}/src/test/java/org/opentripplanner/framework/collection/CollectionsViewTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/collection/CompositeComparatorTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/collection/ListSectionTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/collection/ListUtilsTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/collection/MapUtilsTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/collection/SetUtilsTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/lang/ArrayUtilsTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/lang/BitSetUtilsTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/lang/BoxTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/lang/DoubleUtilsTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/lang/IntBoxTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/lang/IntRangeTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/lang/IntUtilsTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/lang/MemEfficientArrayBuilderTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/lang/ObjectUtilsTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/lang/OtpNumberFormatTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/lang/StringUtilsTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/logging/ProgressTrackerTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/logging/ThrottleTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/text/CharacterEscapeFormatterTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/text/FileSizeToTextConverterTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/text/HexStringTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/text/MarkdownFormatterTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/text/TableTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/time/CountdownTimerTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/time/DateUtilsTest.java (98%) rename {application => framework}/src/test/java/org/opentripplanner/framework/time/DurationUtilsTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/time/LocalDateUtilsTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/time/OffsetDateTimeParserTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/time/ServiceDateUtilsTest.java (99%) rename {application => framework}/src/test/java/org/opentripplanner/framework/time/TimeUtilsTest.java (99%) create mode 100644 framework/src/test/java/org/opentripplanner/framework/time/ZoneIds.java rename {application => framework}/src/test/java/org/opentripplanner/framework/tostring/MultiLineToStringBuilderTest.java (100%) rename {application => framework}/src/test/java/org/opentripplanner/framework/tostring/ToStringBuilderTest.java (99%) rename {application => framework}/src/test/java/org/opentripplanner/framework/tostring/ValueObjectToStringBuilderTest.java (100%) diff --git a/application/pom.xml b/application/pom.xml index b13806e6a0a..60765797344 100644 --- a/application/pom.xml +++ b/application/pom.xml @@ -18,6 +18,11 @@ gtfs-realtime-protobuf ${project.version} + + ${project.groupId} + otp-framework + ${project.version} + diff --git a/application/src/main/java/org/opentripplanner/framework/collection/ToveUtils.java b/application/src/main/java/org/opentripplanner/framework/collection/ToveUtils.java new file mode 100644 index 00000000000..5958845e2b5 --- /dev/null +++ b/application/src/main/java/org/opentripplanner/framework/collection/ToveUtils.java @@ -0,0 +1,17 @@ +package org.opentripplanner.framework.collection; + +import gnu.trove.map.TLongObjectMap; +import java.util.HashSet; +import java.util.Set; + +public class ToveUtils { + + public static void addToMapSet(TLongObjectMap> mapSet, long key, U value) { + Set set = mapSet.get(key); + if (set == null) { + set = new HashSet<>(); + mapSet.put(key, set); + } + set.add(value); + } +} diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/osm/DisjointSet.java b/application/src/main/java/org/opentripplanner/graph_builder/module/osm/DisjointSet.java index 15bfc3605b5..369e5c20a14 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/osm/DisjointSet.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/osm/DisjointSet.java @@ -9,7 +9,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; -import org.opentripplanner.framework.collection.MapUtils; +import org.opentripplanner.framework.collection.ToveUtils; /** Basic union-find data structure with path compression */ class DisjointSet { @@ -62,7 +62,7 @@ public boolean exists(T element) { public List> sets() { TLongObjectMap> out = new TLongObjectHashMap<>(); setMapping.forEachEntry((k, v) -> { - MapUtils.addToMapSet(out, compact(v), k); + ToveUtils.addToMapSet(out, compact(v), k); return true; }); return new ArrayList<>(out.valueCollection()); diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java b/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java index 88b1fe9f7da..0fa3c4cbd3b 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java @@ -24,7 +24,7 @@ import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.LineString; import org.locationtech.jts.geom.Point; -import org.opentripplanner.framework.collection.MapUtils; +import org.opentripplanner.framework.collection.ToveUtils; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.framework.geometry.HashGridSpatialIndex; import org.opentripplanner.framework.lang.StringUtils; @@ -267,7 +267,7 @@ public void addWay(OsmWay way) { way .getNodeRefs() .forEach(node -> { - MapUtils.addToMapSet(areasForNode, node, way); + ToveUtils.addToMapSet(areasForNode, node, way); return true; }); } @@ -738,7 +738,7 @@ private void processMultipolygonRelations() { while (wayNodeIterator.hasNext()) { long nodeId = wayNodeIterator.next(); if (nodesById.containsKey(nodeId)) { - MapUtils.addToMapSet(areasForNode, nodeId, way); + ToveUtils.addToMapSet(areasForNode, nodeId, way); } else { // this area is missing some nodes, perhaps because it is on // the edge of the region, so we will simply not route on it. diff --git a/framework/pom.xml b/framework/pom.xml new file mode 100644 index 00000000000..bc210986a7e --- /dev/null +++ b/framework/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + + org.opentripplanner + otp-root + 2.7.0-SNAPSHOT + + + otp-framework + OpenTripPlanner - Framework + + + + + com.google.code.findbugs + jsr305 + + + + + org.slf4j + slf4j-api + + + + + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.jupiter + junit-jupiter-params + test + + + diff --git a/application/src/main/java/org/opentripplanner/framework/collection/CollectionUtils.java b/framework/src/main/java/org/opentripplanner/framework/collection/CollectionUtils.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/collection/CollectionUtils.java rename to framework/src/main/java/org/opentripplanner/framework/collection/CollectionUtils.java diff --git a/application/src/main/java/org/opentripplanner/framework/collection/CollectionsView.java b/framework/src/main/java/org/opentripplanner/framework/collection/CollectionsView.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/collection/CollectionsView.java rename to framework/src/main/java/org/opentripplanner/framework/collection/CollectionsView.java diff --git a/application/src/main/java/org/opentripplanner/framework/collection/CompositeComparator.java b/framework/src/main/java/org/opentripplanner/framework/collection/CompositeComparator.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/collection/CompositeComparator.java rename to framework/src/main/java/org/opentripplanner/framework/collection/CompositeComparator.java diff --git a/application/src/main/java/org/opentripplanner/framework/collection/ListSection.java b/framework/src/main/java/org/opentripplanner/framework/collection/ListSection.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/collection/ListSection.java rename to framework/src/main/java/org/opentripplanner/framework/collection/ListSection.java diff --git a/application/src/main/java/org/opentripplanner/framework/collection/ListUtils.java b/framework/src/main/java/org/opentripplanner/framework/collection/ListUtils.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/collection/ListUtils.java rename to framework/src/main/java/org/opentripplanner/framework/collection/ListUtils.java diff --git a/application/src/main/java/org/opentripplanner/framework/collection/MapUtils.java b/framework/src/main/java/org/opentripplanner/framework/collection/MapUtils.java similarity index 77% rename from application/src/main/java/org/opentripplanner/framework/collection/MapUtils.java rename to framework/src/main/java/org/opentripplanner/framework/collection/MapUtils.java index c68527b6d0e..afd1e87aec2 100644 --- a/application/src/main/java/org/opentripplanner/framework/collection/MapUtils.java +++ b/framework/src/main/java/org/opentripplanner/framework/collection/MapUtils.java @@ -1,27 +1,15 @@ package org.opentripplanner.framework.collection; -import gnu.trove.map.TLongObjectMap; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; public class MapUtils { - public static void addToMapSet(TLongObjectMap> mapSet, long key, U value) { - Set set = mapSet.get(key); - if (set == null) { - set = new HashSet<>(); - mapSet.put(key, set); - } - set.add(value); - } - /** * Map a collection of objects of type S to a list of type T using the provided * mapping function. diff --git a/application/src/main/java/org/opentripplanner/framework/collection/SetUtils.java b/framework/src/main/java/org/opentripplanner/framework/collection/SetUtils.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/collection/SetUtils.java rename to framework/src/main/java/org/opentripplanner/framework/collection/SetUtils.java diff --git a/application/src/main/java/org/opentripplanner/framework/lang/ArrayUtils.java b/framework/src/main/java/org/opentripplanner/framework/lang/ArrayUtils.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/lang/ArrayUtils.java rename to framework/src/main/java/org/opentripplanner/framework/lang/ArrayUtils.java diff --git a/application/src/main/java/org/opentripplanner/framework/lang/BitSetUtils.java b/framework/src/main/java/org/opentripplanner/framework/lang/BitSetUtils.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/lang/BitSetUtils.java rename to framework/src/main/java/org/opentripplanner/framework/lang/BitSetUtils.java diff --git a/application/src/main/java/org/opentripplanner/framework/lang/Box.java b/framework/src/main/java/org/opentripplanner/framework/lang/Box.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/lang/Box.java rename to framework/src/main/java/org/opentripplanner/framework/lang/Box.java diff --git a/application/src/main/java/org/opentripplanner/framework/lang/DoubleUtils.java b/framework/src/main/java/org/opentripplanner/framework/lang/DoubleUtils.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/lang/DoubleUtils.java rename to framework/src/main/java/org/opentripplanner/framework/lang/DoubleUtils.java diff --git a/application/src/main/java/org/opentripplanner/framework/lang/IntBox.java b/framework/src/main/java/org/opentripplanner/framework/lang/IntBox.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/lang/IntBox.java rename to framework/src/main/java/org/opentripplanner/framework/lang/IntBox.java diff --git a/application/src/main/java/org/opentripplanner/framework/lang/IntRange.java b/framework/src/main/java/org/opentripplanner/framework/lang/IntRange.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/lang/IntRange.java rename to framework/src/main/java/org/opentripplanner/framework/lang/IntRange.java diff --git a/application/src/main/java/org/opentripplanner/framework/lang/IntUtils.java b/framework/src/main/java/org/opentripplanner/framework/lang/IntUtils.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/lang/IntUtils.java rename to framework/src/main/java/org/opentripplanner/framework/lang/IntUtils.java diff --git a/application/src/main/java/org/opentripplanner/framework/lang/MemEfficientArrayBuilder.java b/framework/src/main/java/org/opentripplanner/framework/lang/MemEfficientArrayBuilder.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/lang/MemEfficientArrayBuilder.java rename to framework/src/main/java/org/opentripplanner/framework/lang/MemEfficientArrayBuilder.java diff --git a/application/src/main/java/org/opentripplanner/framework/lang/ObjectUtils.java b/framework/src/main/java/org/opentripplanner/framework/lang/ObjectUtils.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/lang/ObjectUtils.java rename to framework/src/main/java/org/opentripplanner/framework/lang/ObjectUtils.java diff --git a/application/src/main/java/org/opentripplanner/framework/lang/OtpNumberFormat.java b/framework/src/main/java/org/opentripplanner/framework/lang/OtpNumberFormat.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/lang/OtpNumberFormat.java rename to framework/src/main/java/org/opentripplanner/framework/lang/OtpNumberFormat.java diff --git a/application/src/main/java/org/opentripplanner/framework/lang/Sandbox.java b/framework/src/main/java/org/opentripplanner/framework/lang/Sandbox.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/lang/Sandbox.java rename to framework/src/main/java/org/opentripplanner/framework/lang/Sandbox.java diff --git a/application/src/main/java/org/opentripplanner/framework/lang/StringUtils.java b/framework/src/main/java/org/opentripplanner/framework/lang/StringUtils.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/lang/StringUtils.java rename to framework/src/main/java/org/opentripplanner/framework/lang/StringUtils.java diff --git a/application/src/main/java/org/opentripplanner/framework/logging/ProgressTracker.java b/framework/src/main/java/org/opentripplanner/framework/logging/ProgressTracker.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/logging/ProgressTracker.java rename to framework/src/main/java/org/opentripplanner/framework/logging/ProgressTracker.java diff --git a/application/src/main/java/org/opentripplanner/framework/logging/ProgressTrackerInputStream.java b/framework/src/main/java/org/opentripplanner/framework/logging/ProgressTrackerInputStream.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/logging/ProgressTrackerInputStream.java rename to framework/src/main/java/org/opentripplanner/framework/logging/ProgressTrackerInputStream.java diff --git a/application/src/main/java/org/opentripplanner/framework/logging/ProgressTrackerOutputStream.java b/framework/src/main/java/org/opentripplanner/framework/logging/ProgressTrackerOutputStream.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/logging/ProgressTrackerOutputStream.java rename to framework/src/main/java/org/opentripplanner/framework/logging/ProgressTrackerOutputStream.java diff --git a/application/src/main/java/org/opentripplanner/framework/logging/Throttle.java b/framework/src/main/java/org/opentripplanner/framework/logging/Throttle.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/logging/Throttle.java rename to framework/src/main/java/org/opentripplanner/framework/logging/Throttle.java diff --git a/application/src/main/java/org/opentripplanner/framework/text/CharacterEscapeFormatter.java b/framework/src/main/java/org/opentripplanner/framework/text/CharacterEscapeFormatter.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/text/CharacterEscapeFormatter.java rename to framework/src/main/java/org/opentripplanner/framework/text/CharacterEscapeFormatter.java diff --git a/application/src/main/java/org/opentripplanner/framework/text/FileSizeToTextConverter.java b/framework/src/main/java/org/opentripplanner/framework/text/FileSizeToTextConverter.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/text/FileSizeToTextConverter.java rename to framework/src/main/java/org/opentripplanner/framework/text/FileSizeToTextConverter.java diff --git a/application/src/main/java/org/opentripplanner/framework/text/HexString.java b/framework/src/main/java/org/opentripplanner/framework/text/HexString.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/text/HexString.java rename to framework/src/main/java/org/opentripplanner/framework/text/HexString.java diff --git a/application/src/main/java/org/opentripplanner/framework/text/MarkdownFormatter.java b/framework/src/main/java/org/opentripplanner/framework/text/MarkdownFormatter.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/text/MarkdownFormatter.java rename to framework/src/main/java/org/opentripplanner/framework/text/MarkdownFormatter.java diff --git a/application/src/main/java/org/opentripplanner/framework/text/Table.java b/framework/src/main/java/org/opentripplanner/framework/text/Table.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/text/Table.java rename to framework/src/main/java/org/opentripplanner/framework/text/Table.java diff --git a/application/src/main/java/org/opentripplanner/framework/text/TableBuilder.java b/framework/src/main/java/org/opentripplanner/framework/text/TableBuilder.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/text/TableBuilder.java rename to framework/src/main/java/org/opentripplanner/framework/text/TableBuilder.java diff --git a/application/src/main/java/org/opentripplanner/framework/text/TableRowFormatter.java b/framework/src/main/java/org/opentripplanner/framework/text/TableRowFormatter.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/text/TableRowFormatter.java rename to framework/src/main/java/org/opentripplanner/framework/text/TableRowFormatter.java diff --git a/application/src/main/java/org/opentripplanner/framework/time/CountdownTimer.java b/framework/src/main/java/org/opentripplanner/framework/time/CountdownTimer.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/time/CountdownTimer.java rename to framework/src/main/java/org/opentripplanner/framework/time/CountdownTimer.java diff --git a/application/src/main/java/org/opentripplanner/framework/time/DateUtils.java b/framework/src/main/java/org/opentripplanner/framework/time/DateUtils.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/time/DateUtils.java rename to framework/src/main/java/org/opentripplanner/framework/time/DateUtils.java diff --git a/application/src/main/java/org/opentripplanner/framework/time/DurationUtils.java b/framework/src/main/java/org/opentripplanner/framework/time/DurationUtils.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/time/DurationUtils.java rename to framework/src/main/java/org/opentripplanner/framework/time/DurationUtils.java diff --git a/application/src/main/java/org/opentripplanner/framework/time/LocalDateUtils.java b/framework/src/main/java/org/opentripplanner/framework/time/LocalDateUtils.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/time/LocalDateUtils.java rename to framework/src/main/java/org/opentripplanner/framework/time/LocalDateUtils.java diff --git a/application/src/main/java/org/opentripplanner/framework/time/OffsetDateTimeParser.java b/framework/src/main/java/org/opentripplanner/framework/time/OffsetDateTimeParser.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/time/OffsetDateTimeParser.java rename to framework/src/main/java/org/opentripplanner/framework/time/OffsetDateTimeParser.java diff --git a/application/src/main/java/org/opentripplanner/framework/time/RelativeTime.java b/framework/src/main/java/org/opentripplanner/framework/time/RelativeTime.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/time/RelativeTime.java rename to framework/src/main/java/org/opentripplanner/framework/time/RelativeTime.java diff --git a/application/src/main/java/org/opentripplanner/framework/time/ServiceDateUtils.java b/framework/src/main/java/org/opentripplanner/framework/time/ServiceDateUtils.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/time/ServiceDateUtils.java rename to framework/src/main/java/org/opentripplanner/framework/time/ServiceDateUtils.java diff --git a/application/src/main/java/org/opentripplanner/framework/time/TimeUtils.java b/framework/src/main/java/org/opentripplanner/framework/time/TimeUtils.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/time/TimeUtils.java rename to framework/src/main/java/org/opentripplanner/framework/time/TimeUtils.java diff --git a/application/src/main/java/org/opentripplanner/framework/tostring/MultiLineToStringBuilder.java b/framework/src/main/java/org/opentripplanner/framework/tostring/MultiLineToStringBuilder.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/tostring/MultiLineToStringBuilder.java rename to framework/src/main/java/org/opentripplanner/framework/tostring/MultiLineToStringBuilder.java diff --git a/application/src/main/java/org/opentripplanner/framework/tostring/ToStringBuilder.java b/framework/src/main/java/org/opentripplanner/framework/tostring/ToStringBuilder.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/tostring/ToStringBuilder.java rename to framework/src/main/java/org/opentripplanner/framework/tostring/ToStringBuilder.java diff --git a/application/src/main/java/org/opentripplanner/framework/tostring/ValueObjectToStringBuilder.java b/framework/src/main/java/org/opentripplanner/framework/tostring/ValueObjectToStringBuilder.java similarity index 100% rename from application/src/main/java/org/opentripplanner/framework/tostring/ValueObjectToStringBuilder.java rename to framework/src/main/java/org/opentripplanner/framework/tostring/ValueObjectToStringBuilder.java diff --git a/application/src/test/java/org/opentripplanner/framework/collection/CollectionUtilsTest.java b/framework/src/test/java/org/opentripplanner/framework/collection/CollectionUtilsTest.java similarity index 98% rename from application/src/test/java/org/opentripplanner/framework/collection/CollectionUtilsTest.java rename to framework/src/test/java/org/opentripplanner/framework/collection/CollectionUtilsTest.java index 6686ac8e0d9..9cfe118f984 100644 --- a/application/src/test/java/org/opentripplanner/framework/collection/CollectionUtilsTest.java +++ b/framework/src/test/java/org/opentripplanner/framework/collection/CollectionUtilsTest.java @@ -4,8 +4,8 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import com.google.type.Month; import java.time.Duration; +import java.time.Month; import java.util.ArrayList; import java.util.Collection; import java.util.EnumSet; diff --git a/application/src/test/java/org/opentripplanner/framework/collection/CollectionsViewTest.java b/framework/src/test/java/org/opentripplanner/framework/collection/CollectionsViewTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/collection/CollectionsViewTest.java rename to framework/src/test/java/org/opentripplanner/framework/collection/CollectionsViewTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/collection/CompositeComparatorTest.java b/framework/src/test/java/org/opentripplanner/framework/collection/CompositeComparatorTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/collection/CompositeComparatorTest.java rename to framework/src/test/java/org/opentripplanner/framework/collection/CompositeComparatorTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/collection/ListSectionTest.java b/framework/src/test/java/org/opentripplanner/framework/collection/ListSectionTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/collection/ListSectionTest.java rename to framework/src/test/java/org/opentripplanner/framework/collection/ListSectionTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/collection/ListUtilsTest.java b/framework/src/test/java/org/opentripplanner/framework/collection/ListUtilsTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/collection/ListUtilsTest.java rename to framework/src/test/java/org/opentripplanner/framework/collection/ListUtilsTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/collection/MapUtilsTest.java b/framework/src/test/java/org/opentripplanner/framework/collection/MapUtilsTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/collection/MapUtilsTest.java rename to framework/src/test/java/org/opentripplanner/framework/collection/MapUtilsTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/collection/SetUtilsTest.java b/framework/src/test/java/org/opentripplanner/framework/collection/SetUtilsTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/collection/SetUtilsTest.java rename to framework/src/test/java/org/opentripplanner/framework/collection/SetUtilsTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/lang/ArrayUtilsTest.java b/framework/src/test/java/org/opentripplanner/framework/lang/ArrayUtilsTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/lang/ArrayUtilsTest.java rename to framework/src/test/java/org/opentripplanner/framework/lang/ArrayUtilsTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/lang/BitSetUtilsTest.java b/framework/src/test/java/org/opentripplanner/framework/lang/BitSetUtilsTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/lang/BitSetUtilsTest.java rename to framework/src/test/java/org/opentripplanner/framework/lang/BitSetUtilsTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/lang/BoxTest.java b/framework/src/test/java/org/opentripplanner/framework/lang/BoxTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/lang/BoxTest.java rename to framework/src/test/java/org/opentripplanner/framework/lang/BoxTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/lang/DoubleUtilsTest.java b/framework/src/test/java/org/opentripplanner/framework/lang/DoubleUtilsTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/lang/DoubleUtilsTest.java rename to framework/src/test/java/org/opentripplanner/framework/lang/DoubleUtilsTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/lang/IntBoxTest.java b/framework/src/test/java/org/opentripplanner/framework/lang/IntBoxTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/lang/IntBoxTest.java rename to framework/src/test/java/org/opentripplanner/framework/lang/IntBoxTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/lang/IntRangeTest.java b/framework/src/test/java/org/opentripplanner/framework/lang/IntRangeTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/lang/IntRangeTest.java rename to framework/src/test/java/org/opentripplanner/framework/lang/IntRangeTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/lang/IntUtilsTest.java b/framework/src/test/java/org/opentripplanner/framework/lang/IntUtilsTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/lang/IntUtilsTest.java rename to framework/src/test/java/org/opentripplanner/framework/lang/IntUtilsTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/lang/MemEfficientArrayBuilderTest.java b/framework/src/test/java/org/opentripplanner/framework/lang/MemEfficientArrayBuilderTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/lang/MemEfficientArrayBuilderTest.java rename to framework/src/test/java/org/opentripplanner/framework/lang/MemEfficientArrayBuilderTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/lang/ObjectUtilsTest.java b/framework/src/test/java/org/opentripplanner/framework/lang/ObjectUtilsTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/lang/ObjectUtilsTest.java rename to framework/src/test/java/org/opentripplanner/framework/lang/ObjectUtilsTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/lang/OtpNumberFormatTest.java b/framework/src/test/java/org/opentripplanner/framework/lang/OtpNumberFormatTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/lang/OtpNumberFormatTest.java rename to framework/src/test/java/org/opentripplanner/framework/lang/OtpNumberFormatTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/lang/StringUtilsTest.java b/framework/src/test/java/org/opentripplanner/framework/lang/StringUtilsTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/lang/StringUtilsTest.java rename to framework/src/test/java/org/opentripplanner/framework/lang/StringUtilsTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/logging/ProgressTrackerTest.java b/framework/src/test/java/org/opentripplanner/framework/logging/ProgressTrackerTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/logging/ProgressTrackerTest.java rename to framework/src/test/java/org/opentripplanner/framework/logging/ProgressTrackerTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/logging/ThrottleTest.java b/framework/src/test/java/org/opentripplanner/framework/logging/ThrottleTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/logging/ThrottleTest.java rename to framework/src/test/java/org/opentripplanner/framework/logging/ThrottleTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/text/CharacterEscapeFormatterTest.java b/framework/src/test/java/org/opentripplanner/framework/text/CharacterEscapeFormatterTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/text/CharacterEscapeFormatterTest.java rename to framework/src/test/java/org/opentripplanner/framework/text/CharacterEscapeFormatterTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/text/FileSizeToTextConverterTest.java b/framework/src/test/java/org/opentripplanner/framework/text/FileSizeToTextConverterTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/text/FileSizeToTextConverterTest.java rename to framework/src/test/java/org/opentripplanner/framework/text/FileSizeToTextConverterTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/text/HexStringTest.java b/framework/src/test/java/org/opentripplanner/framework/text/HexStringTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/text/HexStringTest.java rename to framework/src/test/java/org/opentripplanner/framework/text/HexStringTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/text/MarkdownFormatterTest.java b/framework/src/test/java/org/opentripplanner/framework/text/MarkdownFormatterTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/text/MarkdownFormatterTest.java rename to framework/src/test/java/org/opentripplanner/framework/text/MarkdownFormatterTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/text/TableTest.java b/framework/src/test/java/org/opentripplanner/framework/text/TableTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/text/TableTest.java rename to framework/src/test/java/org/opentripplanner/framework/text/TableTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/time/CountdownTimerTest.java b/framework/src/test/java/org/opentripplanner/framework/time/CountdownTimerTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/time/CountdownTimerTest.java rename to framework/src/test/java/org/opentripplanner/framework/time/CountdownTimerTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/time/DateUtilsTest.java b/framework/src/test/java/org/opentripplanner/framework/time/DateUtilsTest.java similarity index 98% rename from application/src/test/java/org/opentripplanner/framework/time/DateUtilsTest.java rename to framework/src/test/java/org/opentripplanner/framework/time/DateUtilsTest.java index d89eea5d73b..6b2e493b735 100644 --- a/application/src/test/java/org/opentripplanner/framework/time/DateUtilsTest.java +++ b/framework/src/test/java/org/opentripplanner/framework/time/DateUtilsTest.java @@ -7,7 +7,6 @@ import java.time.ZoneId; import java.time.ZonedDateTime; import org.junit.jupiter.api.Test; -import org.opentripplanner._support.time.ZoneIds; public class DateUtilsTest { diff --git a/application/src/test/java/org/opentripplanner/framework/time/DurationUtilsTest.java b/framework/src/test/java/org/opentripplanner/framework/time/DurationUtilsTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/time/DurationUtilsTest.java rename to framework/src/test/java/org/opentripplanner/framework/time/DurationUtilsTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/time/LocalDateUtilsTest.java b/framework/src/test/java/org/opentripplanner/framework/time/LocalDateUtilsTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/time/LocalDateUtilsTest.java rename to framework/src/test/java/org/opentripplanner/framework/time/LocalDateUtilsTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/time/OffsetDateTimeParserTest.java b/framework/src/test/java/org/opentripplanner/framework/time/OffsetDateTimeParserTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/time/OffsetDateTimeParserTest.java rename to framework/src/test/java/org/opentripplanner/framework/time/OffsetDateTimeParserTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/time/ServiceDateUtilsTest.java b/framework/src/test/java/org/opentripplanner/framework/time/ServiceDateUtilsTest.java similarity index 99% rename from application/src/test/java/org/opentripplanner/framework/time/ServiceDateUtilsTest.java rename to framework/src/test/java/org/opentripplanner/framework/time/ServiceDateUtilsTest.java index 4c22b414537..92a67df9110 100644 --- a/application/src/test/java/org/opentripplanner/framework/time/ServiceDateUtilsTest.java +++ b/framework/src/test/java/org/opentripplanner/framework/time/ServiceDateUtilsTest.java @@ -17,7 +17,6 @@ import java.time.ZoneId; import java.time.ZonedDateTime; import org.junit.jupiter.api.Test; -import org.opentripplanner._support.time.ZoneIds; public class ServiceDateUtilsTest { diff --git a/application/src/test/java/org/opentripplanner/framework/time/TimeUtilsTest.java b/framework/src/test/java/org/opentripplanner/framework/time/TimeUtilsTest.java similarity index 99% rename from application/src/test/java/org/opentripplanner/framework/time/TimeUtilsTest.java rename to framework/src/test/java/org/opentripplanner/framework/time/TimeUtilsTest.java index c2eb828cc21..936102f3496 100644 --- a/application/src/test/java/org/opentripplanner/framework/time/TimeUtilsTest.java +++ b/framework/src/test/java/org/opentripplanner/framework/time/TimeUtilsTest.java @@ -11,7 +11,6 @@ import java.time.ZonedDateTime; import java.util.Arrays; import org.junit.jupiter.api.Test; -import org.opentripplanner._support.time.ZoneIds; public class TimeUtilsTest { diff --git a/framework/src/test/java/org/opentripplanner/framework/time/ZoneIds.java b/framework/src/test/java/org/opentripplanner/framework/time/ZoneIds.java new file mode 100644 index 00000000000..e42dc718790 --- /dev/null +++ b/framework/src/test/java/org/opentripplanner/framework/time/ZoneIds.java @@ -0,0 +1,11 @@ +package org.opentripplanner.framework.time; + +import java.time.ZoneId; + +public class ZoneIds { + + public static final ZoneId UTC = ZoneId.of("UTC"); + public static final ZoneId CET = ZoneId.of("CET"); + public static final ZoneId OSLO = ZoneId.of("Europe/Oslo"); + public static final ZoneId PARIS = ZoneId.of("Europe/Paris"); +} diff --git a/application/src/test/java/org/opentripplanner/framework/tostring/MultiLineToStringBuilderTest.java b/framework/src/test/java/org/opentripplanner/framework/tostring/MultiLineToStringBuilderTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/tostring/MultiLineToStringBuilderTest.java rename to framework/src/test/java/org/opentripplanner/framework/tostring/MultiLineToStringBuilderTest.java diff --git a/application/src/test/java/org/opentripplanner/framework/tostring/ToStringBuilderTest.java b/framework/src/test/java/org/opentripplanner/framework/tostring/ToStringBuilderTest.java similarity index 99% rename from application/src/test/java/org/opentripplanner/framework/tostring/ToStringBuilderTest.java rename to framework/src/test/java/org/opentripplanner/framework/tostring/ToStringBuilderTest.java index 90254c321a1..59d1eea4d0b 100644 --- a/application/src/test/java/org/opentripplanner/framework/tostring/ToStringBuilderTest.java +++ b/framework/src/test/java/org/opentripplanner/framework/tostring/ToStringBuilderTest.java @@ -13,8 +13,8 @@ import java.util.Objects; import java.util.function.Function; import org.junit.jupiter.api.Test; -import org.opentripplanner._support.time.ZoneIds; import org.opentripplanner.framework.time.TimeUtils; +import org.opentripplanner.framework.time.ZoneIds; public class ToStringBuilderTest { diff --git a/application/src/test/java/org/opentripplanner/framework/tostring/ValueObjectToStringBuilderTest.java b/framework/src/test/java/org/opentripplanner/framework/tostring/ValueObjectToStringBuilderTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/framework/tostring/ValueObjectToStringBuilderTest.java rename to framework/src/test/java/org/opentripplanner/framework/tostring/ValueObjectToStringBuilderTest.java diff --git a/pom.xml b/pom.xml index e590501e6c4..3b1ff48c427 100644 --- a/pom.xml +++ b/pom.xml @@ -96,6 +96,7 @@ application gtfs-realtime-protobuf + framework From 0f685399b9ca4fe6205b321775aefc0947363787 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Tue, 29 Oct 2024 22:08:10 +0100 Subject: [PATCH 145/213] Rename Maven module to utils --- pom.xml | 2 +- {framework => utils}/pom.xml | 4 ++-- .../opentripplanner/utils}/collection/CollectionUtils.java | 0 .../opentripplanner/utils}/collection/CollectionsView.java | 0 .../utils}/collection/CompositeComparator.java | 0 .../org/opentripplanner/utils}/collection/ListSection.java | 0 .../java/org/opentripplanner/utils}/collection/ListUtils.java | 0 .../java/org/opentripplanner/utils}/collection/MapUtils.java | 0 .../java/org/opentripplanner/utils}/collection/SetUtils.java | 0 .../main/java/org/opentripplanner/utils}/lang/ArrayUtils.java | 0 .../java/org/opentripplanner/utils}/lang/BitSetUtils.java | 0 .../src/main/java/org/opentripplanner/utils}/lang/Box.java | 0 .../java/org/opentripplanner/utils}/lang/DoubleUtils.java | 0 .../src/main/java/org/opentripplanner/utils}/lang/IntBox.java | 0 .../main/java/org/opentripplanner/utils}/lang/IntRange.java | 0 .../main/java/org/opentripplanner/utils}/lang/IntUtils.java | 0 .../opentripplanner/utils}/lang/MemEfficientArrayBuilder.java | 0 .../java/org/opentripplanner/utils}/lang/ObjectUtils.java | 0 .../java/org/opentripplanner/utils}/lang/OtpNumberFormat.java | 0 .../main/java/org/opentripplanner/utils}/lang/Sandbox.java | 0 .../java/org/opentripplanner/utils}/lang/StringUtils.java | 0 .../org/opentripplanner/utils}/logging/ProgressTracker.java | 0 .../utils}/logging/ProgressTrackerInputStream.java | 0 .../utils}/logging/ProgressTrackerOutputStream.java | 0 .../java/org/opentripplanner/utils}/logging/Throttle.java | 0 .../opentripplanner/utils}/text/CharacterEscapeFormatter.java | 0 .../opentripplanner/utils}/text/FileSizeToTextConverter.java | 0 .../main/java/org/opentripplanner/utils}/text/HexString.java | 0 .../org/opentripplanner/utils}/text/MarkdownFormatter.java | 0 .../src/main/java/org/opentripplanner/utils}/text/Table.java | 0 .../java/org/opentripplanner/utils}/text/TableBuilder.java | 0 .../org/opentripplanner/utils}/text/TableRowFormatter.java | 0 .../java/org/opentripplanner/utils}/time/CountdownTimer.java | 0 .../main/java/org/opentripplanner/utils}/time/DateUtils.java | 0 .../java/org/opentripplanner/utils}/time/DurationUtils.java | 0 .../java/org/opentripplanner/utils}/time/LocalDateUtils.java | 0 .../org/opentripplanner/utils}/time/OffsetDateTimeParser.java | 0 .../java/org/opentripplanner/utils}/time/RelativeTime.java | 0 .../org/opentripplanner/utils}/time/ServiceDateUtils.java | 0 .../main/java/org/opentripplanner/utils}/time/TimeUtils.java | 0 .../utils}/tostring/MultiLineToStringBuilder.java | 0 .../org/opentripplanner/utils}/tostring/ToStringBuilder.java | 0 .../utils}/tostring/ValueObjectToStringBuilder.java | 0 .../utils}/collection/CollectionUtilsTest.java | 0 .../utils}/collection/CollectionsViewTest.java | 0 .../utils}/collection/CompositeComparatorTest.java | 0 .../opentripplanner/utils}/collection/ListSectionTest.java | 0 .../org/opentripplanner/utils}/collection/ListUtilsTest.java | 0 .../org/opentripplanner/utils}/collection/MapUtilsTest.java | 0 .../org/opentripplanner/utils}/collection/SetUtilsTest.java | 0 .../java/org/opentripplanner/utils}/lang/ArrayUtilsTest.java | 0 .../java/org/opentripplanner/utils}/lang/BitSetUtilsTest.java | 0 .../test/java/org/opentripplanner/utils}/lang/BoxTest.java | 0 .../java/org/opentripplanner/utils}/lang/DoubleUtilsTest.java | 0 .../test/java/org/opentripplanner/utils}/lang/IntBoxTest.java | 0 .../java/org/opentripplanner/utils}/lang/IntRangeTest.java | 0 .../java/org/opentripplanner/utils}/lang/IntUtilsTest.java | 0 .../utils}/lang/MemEfficientArrayBuilderTest.java | 0 .../java/org/opentripplanner/utils}/lang/ObjectUtilsTest.java | 0 .../org/opentripplanner/utils}/lang/OtpNumberFormatTest.java | 0 .../java/org/opentripplanner/utils}/lang/StringUtilsTest.java | 0 .../opentripplanner/utils}/logging/ProgressTrackerTest.java | 0 .../java/org/opentripplanner/utils}/logging/ThrottleTest.java | 0 .../utils}/text/CharacterEscapeFormatterTest.java | 0 .../utils}/text/FileSizeToTextConverterTest.java | 0 .../java/org/opentripplanner/utils}/text/HexStringTest.java | 0 .../opentripplanner/utils}/text/MarkdownFormatterTest.java | 0 .../test/java/org/opentripplanner/utils}/text/TableTest.java | 0 .../org/opentripplanner/utils}/time/CountdownTimerTest.java | 0 .../java/org/opentripplanner/utils}/time/DateUtilsTest.java | 0 .../org/opentripplanner/utils}/time/DurationUtilsTest.java | 0 .../org/opentripplanner/utils}/time/LocalDateUtilsTest.java | 0 .../opentripplanner/utils}/time/OffsetDateTimeParserTest.java | 0 .../org/opentripplanner/utils}/time/ServiceDateUtilsTest.java | 0 .../java/org/opentripplanner/utils}/time/TimeUtilsTest.java | 0 .../test/java/org/opentripplanner/utils}/time/ZoneIds.java | 0 .../utils}/tostring/MultiLineToStringBuilderTest.java | 0 .../opentripplanner/utils}/tostring/ToStringBuilderTest.java | 0 .../utils}/tostring/ValueObjectToStringBuilderTest.java | 0 79 files changed, 3 insertions(+), 3 deletions(-) rename {framework => utils}/pom.xml (93%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/collection/CollectionUtils.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/collection/CollectionsView.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/collection/CompositeComparator.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/collection/ListSection.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/collection/ListUtils.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/collection/MapUtils.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/collection/SetUtils.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/lang/ArrayUtils.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/lang/BitSetUtils.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/lang/Box.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/lang/DoubleUtils.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/lang/IntBox.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/lang/IntRange.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/lang/IntUtils.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/lang/MemEfficientArrayBuilder.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/lang/ObjectUtils.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/lang/OtpNumberFormat.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/lang/Sandbox.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/lang/StringUtils.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/logging/ProgressTracker.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/logging/ProgressTrackerInputStream.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/logging/ProgressTrackerOutputStream.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/logging/Throttle.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/text/CharacterEscapeFormatter.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/text/FileSizeToTextConverter.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/text/HexString.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/text/MarkdownFormatter.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/text/Table.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/text/TableBuilder.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/text/TableRowFormatter.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/time/CountdownTimer.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/time/DateUtils.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/time/DurationUtils.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/time/LocalDateUtils.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/time/OffsetDateTimeParser.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/time/RelativeTime.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/time/ServiceDateUtils.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/time/TimeUtils.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/tostring/MultiLineToStringBuilder.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/tostring/ToStringBuilder.java (100%) rename {framework/src/main/java/org/opentripplanner/framework => utils/src/main/java/org/opentripplanner/utils}/tostring/ValueObjectToStringBuilder.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/collection/CollectionUtilsTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/collection/CollectionsViewTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/collection/CompositeComparatorTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/collection/ListSectionTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/collection/ListUtilsTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/collection/MapUtilsTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/collection/SetUtilsTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/lang/ArrayUtilsTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/lang/BitSetUtilsTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/lang/BoxTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/lang/DoubleUtilsTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/lang/IntBoxTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/lang/IntRangeTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/lang/IntUtilsTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/lang/MemEfficientArrayBuilderTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/lang/ObjectUtilsTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/lang/OtpNumberFormatTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/lang/StringUtilsTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/logging/ProgressTrackerTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/logging/ThrottleTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/text/CharacterEscapeFormatterTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/text/FileSizeToTextConverterTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/text/HexStringTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/text/MarkdownFormatterTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/text/TableTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/time/CountdownTimerTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/time/DateUtilsTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/time/DurationUtilsTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/time/LocalDateUtilsTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/time/OffsetDateTimeParserTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/time/ServiceDateUtilsTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/time/TimeUtilsTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/time/ZoneIds.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/tostring/MultiLineToStringBuilderTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/tostring/ToStringBuilderTest.java (100%) rename {framework/src/test/java/org/opentripplanner/framework => utils/src/test/java/org/opentripplanner/utils}/tostring/ValueObjectToStringBuilderTest.java (100%) diff --git a/pom.xml b/pom.xml index 3b1ff48c427..6aedbf90268 100644 --- a/pom.xml +++ b/pom.xml @@ -96,7 +96,7 @@ application gtfs-realtime-protobuf - framework + utils diff --git a/framework/pom.xml b/utils/pom.xml similarity index 93% rename from framework/pom.xml rename to utils/pom.xml index bc210986a7e..1cace007d00 100644 --- a/framework/pom.xml +++ b/utils/pom.xml @@ -9,8 +9,8 @@ 2.7.0-SNAPSHOT - otp-framework - OpenTripPlanner - Framework + otp-utils + OpenTripPlanner - Utils diff --git a/framework/src/main/java/org/opentripplanner/framework/collection/CollectionUtils.java b/utils/src/main/java/org/opentripplanner/utils/collection/CollectionUtils.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/collection/CollectionUtils.java rename to utils/src/main/java/org/opentripplanner/utils/collection/CollectionUtils.java diff --git a/framework/src/main/java/org/opentripplanner/framework/collection/CollectionsView.java b/utils/src/main/java/org/opentripplanner/utils/collection/CollectionsView.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/collection/CollectionsView.java rename to utils/src/main/java/org/opentripplanner/utils/collection/CollectionsView.java diff --git a/framework/src/main/java/org/opentripplanner/framework/collection/CompositeComparator.java b/utils/src/main/java/org/opentripplanner/utils/collection/CompositeComparator.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/collection/CompositeComparator.java rename to utils/src/main/java/org/opentripplanner/utils/collection/CompositeComparator.java diff --git a/framework/src/main/java/org/opentripplanner/framework/collection/ListSection.java b/utils/src/main/java/org/opentripplanner/utils/collection/ListSection.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/collection/ListSection.java rename to utils/src/main/java/org/opentripplanner/utils/collection/ListSection.java diff --git a/framework/src/main/java/org/opentripplanner/framework/collection/ListUtils.java b/utils/src/main/java/org/opentripplanner/utils/collection/ListUtils.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/collection/ListUtils.java rename to utils/src/main/java/org/opentripplanner/utils/collection/ListUtils.java diff --git a/framework/src/main/java/org/opentripplanner/framework/collection/MapUtils.java b/utils/src/main/java/org/opentripplanner/utils/collection/MapUtils.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/collection/MapUtils.java rename to utils/src/main/java/org/opentripplanner/utils/collection/MapUtils.java diff --git a/framework/src/main/java/org/opentripplanner/framework/collection/SetUtils.java b/utils/src/main/java/org/opentripplanner/utils/collection/SetUtils.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/collection/SetUtils.java rename to utils/src/main/java/org/opentripplanner/utils/collection/SetUtils.java diff --git a/framework/src/main/java/org/opentripplanner/framework/lang/ArrayUtils.java b/utils/src/main/java/org/opentripplanner/utils/lang/ArrayUtils.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/lang/ArrayUtils.java rename to utils/src/main/java/org/opentripplanner/utils/lang/ArrayUtils.java diff --git a/framework/src/main/java/org/opentripplanner/framework/lang/BitSetUtils.java b/utils/src/main/java/org/opentripplanner/utils/lang/BitSetUtils.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/lang/BitSetUtils.java rename to utils/src/main/java/org/opentripplanner/utils/lang/BitSetUtils.java diff --git a/framework/src/main/java/org/opentripplanner/framework/lang/Box.java b/utils/src/main/java/org/opentripplanner/utils/lang/Box.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/lang/Box.java rename to utils/src/main/java/org/opentripplanner/utils/lang/Box.java diff --git a/framework/src/main/java/org/opentripplanner/framework/lang/DoubleUtils.java b/utils/src/main/java/org/opentripplanner/utils/lang/DoubleUtils.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/lang/DoubleUtils.java rename to utils/src/main/java/org/opentripplanner/utils/lang/DoubleUtils.java diff --git a/framework/src/main/java/org/opentripplanner/framework/lang/IntBox.java b/utils/src/main/java/org/opentripplanner/utils/lang/IntBox.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/lang/IntBox.java rename to utils/src/main/java/org/opentripplanner/utils/lang/IntBox.java diff --git a/framework/src/main/java/org/opentripplanner/framework/lang/IntRange.java b/utils/src/main/java/org/opentripplanner/utils/lang/IntRange.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/lang/IntRange.java rename to utils/src/main/java/org/opentripplanner/utils/lang/IntRange.java diff --git a/framework/src/main/java/org/opentripplanner/framework/lang/IntUtils.java b/utils/src/main/java/org/opentripplanner/utils/lang/IntUtils.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/lang/IntUtils.java rename to utils/src/main/java/org/opentripplanner/utils/lang/IntUtils.java diff --git a/framework/src/main/java/org/opentripplanner/framework/lang/MemEfficientArrayBuilder.java b/utils/src/main/java/org/opentripplanner/utils/lang/MemEfficientArrayBuilder.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/lang/MemEfficientArrayBuilder.java rename to utils/src/main/java/org/opentripplanner/utils/lang/MemEfficientArrayBuilder.java diff --git a/framework/src/main/java/org/opentripplanner/framework/lang/ObjectUtils.java b/utils/src/main/java/org/opentripplanner/utils/lang/ObjectUtils.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/lang/ObjectUtils.java rename to utils/src/main/java/org/opentripplanner/utils/lang/ObjectUtils.java diff --git a/framework/src/main/java/org/opentripplanner/framework/lang/OtpNumberFormat.java b/utils/src/main/java/org/opentripplanner/utils/lang/OtpNumberFormat.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/lang/OtpNumberFormat.java rename to utils/src/main/java/org/opentripplanner/utils/lang/OtpNumberFormat.java diff --git a/framework/src/main/java/org/opentripplanner/framework/lang/Sandbox.java b/utils/src/main/java/org/opentripplanner/utils/lang/Sandbox.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/lang/Sandbox.java rename to utils/src/main/java/org/opentripplanner/utils/lang/Sandbox.java diff --git a/framework/src/main/java/org/opentripplanner/framework/lang/StringUtils.java b/utils/src/main/java/org/opentripplanner/utils/lang/StringUtils.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/lang/StringUtils.java rename to utils/src/main/java/org/opentripplanner/utils/lang/StringUtils.java diff --git a/framework/src/main/java/org/opentripplanner/framework/logging/ProgressTracker.java b/utils/src/main/java/org/opentripplanner/utils/logging/ProgressTracker.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/logging/ProgressTracker.java rename to utils/src/main/java/org/opentripplanner/utils/logging/ProgressTracker.java diff --git a/framework/src/main/java/org/opentripplanner/framework/logging/ProgressTrackerInputStream.java b/utils/src/main/java/org/opentripplanner/utils/logging/ProgressTrackerInputStream.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/logging/ProgressTrackerInputStream.java rename to utils/src/main/java/org/opentripplanner/utils/logging/ProgressTrackerInputStream.java diff --git a/framework/src/main/java/org/opentripplanner/framework/logging/ProgressTrackerOutputStream.java b/utils/src/main/java/org/opentripplanner/utils/logging/ProgressTrackerOutputStream.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/logging/ProgressTrackerOutputStream.java rename to utils/src/main/java/org/opentripplanner/utils/logging/ProgressTrackerOutputStream.java diff --git a/framework/src/main/java/org/opentripplanner/framework/logging/Throttle.java b/utils/src/main/java/org/opentripplanner/utils/logging/Throttle.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/logging/Throttle.java rename to utils/src/main/java/org/opentripplanner/utils/logging/Throttle.java diff --git a/framework/src/main/java/org/opentripplanner/framework/text/CharacterEscapeFormatter.java b/utils/src/main/java/org/opentripplanner/utils/text/CharacterEscapeFormatter.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/text/CharacterEscapeFormatter.java rename to utils/src/main/java/org/opentripplanner/utils/text/CharacterEscapeFormatter.java diff --git a/framework/src/main/java/org/opentripplanner/framework/text/FileSizeToTextConverter.java b/utils/src/main/java/org/opentripplanner/utils/text/FileSizeToTextConverter.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/text/FileSizeToTextConverter.java rename to utils/src/main/java/org/opentripplanner/utils/text/FileSizeToTextConverter.java diff --git a/framework/src/main/java/org/opentripplanner/framework/text/HexString.java b/utils/src/main/java/org/opentripplanner/utils/text/HexString.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/text/HexString.java rename to utils/src/main/java/org/opentripplanner/utils/text/HexString.java diff --git a/framework/src/main/java/org/opentripplanner/framework/text/MarkdownFormatter.java b/utils/src/main/java/org/opentripplanner/utils/text/MarkdownFormatter.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/text/MarkdownFormatter.java rename to utils/src/main/java/org/opentripplanner/utils/text/MarkdownFormatter.java diff --git a/framework/src/main/java/org/opentripplanner/framework/text/Table.java b/utils/src/main/java/org/opentripplanner/utils/text/Table.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/text/Table.java rename to utils/src/main/java/org/opentripplanner/utils/text/Table.java diff --git a/framework/src/main/java/org/opentripplanner/framework/text/TableBuilder.java b/utils/src/main/java/org/opentripplanner/utils/text/TableBuilder.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/text/TableBuilder.java rename to utils/src/main/java/org/opentripplanner/utils/text/TableBuilder.java diff --git a/framework/src/main/java/org/opentripplanner/framework/text/TableRowFormatter.java b/utils/src/main/java/org/opentripplanner/utils/text/TableRowFormatter.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/text/TableRowFormatter.java rename to utils/src/main/java/org/opentripplanner/utils/text/TableRowFormatter.java diff --git a/framework/src/main/java/org/opentripplanner/framework/time/CountdownTimer.java b/utils/src/main/java/org/opentripplanner/utils/time/CountdownTimer.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/time/CountdownTimer.java rename to utils/src/main/java/org/opentripplanner/utils/time/CountdownTimer.java diff --git a/framework/src/main/java/org/opentripplanner/framework/time/DateUtils.java b/utils/src/main/java/org/opentripplanner/utils/time/DateUtils.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/time/DateUtils.java rename to utils/src/main/java/org/opentripplanner/utils/time/DateUtils.java diff --git a/framework/src/main/java/org/opentripplanner/framework/time/DurationUtils.java b/utils/src/main/java/org/opentripplanner/utils/time/DurationUtils.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/time/DurationUtils.java rename to utils/src/main/java/org/opentripplanner/utils/time/DurationUtils.java diff --git a/framework/src/main/java/org/opentripplanner/framework/time/LocalDateUtils.java b/utils/src/main/java/org/opentripplanner/utils/time/LocalDateUtils.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/time/LocalDateUtils.java rename to utils/src/main/java/org/opentripplanner/utils/time/LocalDateUtils.java diff --git a/framework/src/main/java/org/opentripplanner/framework/time/OffsetDateTimeParser.java b/utils/src/main/java/org/opentripplanner/utils/time/OffsetDateTimeParser.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/time/OffsetDateTimeParser.java rename to utils/src/main/java/org/opentripplanner/utils/time/OffsetDateTimeParser.java diff --git a/framework/src/main/java/org/opentripplanner/framework/time/RelativeTime.java b/utils/src/main/java/org/opentripplanner/utils/time/RelativeTime.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/time/RelativeTime.java rename to utils/src/main/java/org/opentripplanner/utils/time/RelativeTime.java diff --git a/framework/src/main/java/org/opentripplanner/framework/time/ServiceDateUtils.java b/utils/src/main/java/org/opentripplanner/utils/time/ServiceDateUtils.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/time/ServiceDateUtils.java rename to utils/src/main/java/org/opentripplanner/utils/time/ServiceDateUtils.java diff --git a/framework/src/main/java/org/opentripplanner/framework/time/TimeUtils.java b/utils/src/main/java/org/opentripplanner/utils/time/TimeUtils.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/time/TimeUtils.java rename to utils/src/main/java/org/opentripplanner/utils/time/TimeUtils.java diff --git a/framework/src/main/java/org/opentripplanner/framework/tostring/MultiLineToStringBuilder.java b/utils/src/main/java/org/opentripplanner/utils/tostring/MultiLineToStringBuilder.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/tostring/MultiLineToStringBuilder.java rename to utils/src/main/java/org/opentripplanner/utils/tostring/MultiLineToStringBuilder.java diff --git a/framework/src/main/java/org/opentripplanner/framework/tostring/ToStringBuilder.java b/utils/src/main/java/org/opentripplanner/utils/tostring/ToStringBuilder.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/tostring/ToStringBuilder.java rename to utils/src/main/java/org/opentripplanner/utils/tostring/ToStringBuilder.java diff --git a/framework/src/main/java/org/opentripplanner/framework/tostring/ValueObjectToStringBuilder.java b/utils/src/main/java/org/opentripplanner/utils/tostring/ValueObjectToStringBuilder.java similarity index 100% rename from framework/src/main/java/org/opentripplanner/framework/tostring/ValueObjectToStringBuilder.java rename to utils/src/main/java/org/opentripplanner/utils/tostring/ValueObjectToStringBuilder.java diff --git a/framework/src/test/java/org/opentripplanner/framework/collection/CollectionUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/collection/CollectionUtilsTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/collection/CollectionUtilsTest.java rename to utils/src/test/java/org/opentripplanner/utils/collection/CollectionUtilsTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/collection/CollectionsViewTest.java b/utils/src/test/java/org/opentripplanner/utils/collection/CollectionsViewTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/collection/CollectionsViewTest.java rename to utils/src/test/java/org/opentripplanner/utils/collection/CollectionsViewTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/collection/CompositeComparatorTest.java b/utils/src/test/java/org/opentripplanner/utils/collection/CompositeComparatorTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/collection/CompositeComparatorTest.java rename to utils/src/test/java/org/opentripplanner/utils/collection/CompositeComparatorTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/collection/ListSectionTest.java b/utils/src/test/java/org/opentripplanner/utils/collection/ListSectionTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/collection/ListSectionTest.java rename to utils/src/test/java/org/opentripplanner/utils/collection/ListSectionTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/collection/ListUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/collection/ListUtilsTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/collection/ListUtilsTest.java rename to utils/src/test/java/org/opentripplanner/utils/collection/ListUtilsTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/collection/MapUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/collection/MapUtilsTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/collection/MapUtilsTest.java rename to utils/src/test/java/org/opentripplanner/utils/collection/MapUtilsTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/collection/SetUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/collection/SetUtilsTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/collection/SetUtilsTest.java rename to utils/src/test/java/org/opentripplanner/utils/collection/SetUtilsTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/lang/ArrayUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/lang/ArrayUtilsTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/lang/ArrayUtilsTest.java rename to utils/src/test/java/org/opentripplanner/utils/lang/ArrayUtilsTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/lang/BitSetUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/lang/BitSetUtilsTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/lang/BitSetUtilsTest.java rename to utils/src/test/java/org/opentripplanner/utils/lang/BitSetUtilsTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/lang/BoxTest.java b/utils/src/test/java/org/opentripplanner/utils/lang/BoxTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/lang/BoxTest.java rename to utils/src/test/java/org/opentripplanner/utils/lang/BoxTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/lang/DoubleUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/lang/DoubleUtilsTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/lang/DoubleUtilsTest.java rename to utils/src/test/java/org/opentripplanner/utils/lang/DoubleUtilsTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/lang/IntBoxTest.java b/utils/src/test/java/org/opentripplanner/utils/lang/IntBoxTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/lang/IntBoxTest.java rename to utils/src/test/java/org/opentripplanner/utils/lang/IntBoxTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/lang/IntRangeTest.java b/utils/src/test/java/org/opentripplanner/utils/lang/IntRangeTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/lang/IntRangeTest.java rename to utils/src/test/java/org/opentripplanner/utils/lang/IntRangeTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/lang/IntUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/lang/IntUtilsTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/lang/IntUtilsTest.java rename to utils/src/test/java/org/opentripplanner/utils/lang/IntUtilsTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/lang/MemEfficientArrayBuilderTest.java b/utils/src/test/java/org/opentripplanner/utils/lang/MemEfficientArrayBuilderTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/lang/MemEfficientArrayBuilderTest.java rename to utils/src/test/java/org/opentripplanner/utils/lang/MemEfficientArrayBuilderTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/lang/ObjectUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/lang/ObjectUtilsTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/lang/ObjectUtilsTest.java rename to utils/src/test/java/org/opentripplanner/utils/lang/ObjectUtilsTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/lang/OtpNumberFormatTest.java b/utils/src/test/java/org/opentripplanner/utils/lang/OtpNumberFormatTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/lang/OtpNumberFormatTest.java rename to utils/src/test/java/org/opentripplanner/utils/lang/OtpNumberFormatTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/lang/StringUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/lang/StringUtilsTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/lang/StringUtilsTest.java rename to utils/src/test/java/org/opentripplanner/utils/lang/StringUtilsTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/logging/ProgressTrackerTest.java b/utils/src/test/java/org/opentripplanner/utils/logging/ProgressTrackerTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/logging/ProgressTrackerTest.java rename to utils/src/test/java/org/opentripplanner/utils/logging/ProgressTrackerTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/logging/ThrottleTest.java b/utils/src/test/java/org/opentripplanner/utils/logging/ThrottleTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/logging/ThrottleTest.java rename to utils/src/test/java/org/opentripplanner/utils/logging/ThrottleTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/text/CharacterEscapeFormatterTest.java b/utils/src/test/java/org/opentripplanner/utils/text/CharacterEscapeFormatterTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/text/CharacterEscapeFormatterTest.java rename to utils/src/test/java/org/opentripplanner/utils/text/CharacterEscapeFormatterTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/text/FileSizeToTextConverterTest.java b/utils/src/test/java/org/opentripplanner/utils/text/FileSizeToTextConverterTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/text/FileSizeToTextConverterTest.java rename to utils/src/test/java/org/opentripplanner/utils/text/FileSizeToTextConverterTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/text/HexStringTest.java b/utils/src/test/java/org/opentripplanner/utils/text/HexStringTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/text/HexStringTest.java rename to utils/src/test/java/org/opentripplanner/utils/text/HexStringTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/text/MarkdownFormatterTest.java b/utils/src/test/java/org/opentripplanner/utils/text/MarkdownFormatterTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/text/MarkdownFormatterTest.java rename to utils/src/test/java/org/opentripplanner/utils/text/MarkdownFormatterTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/text/TableTest.java b/utils/src/test/java/org/opentripplanner/utils/text/TableTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/text/TableTest.java rename to utils/src/test/java/org/opentripplanner/utils/text/TableTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/time/CountdownTimerTest.java b/utils/src/test/java/org/opentripplanner/utils/time/CountdownTimerTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/time/CountdownTimerTest.java rename to utils/src/test/java/org/opentripplanner/utils/time/CountdownTimerTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/time/DateUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/time/DateUtilsTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/time/DateUtilsTest.java rename to utils/src/test/java/org/opentripplanner/utils/time/DateUtilsTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/time/DurationUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/time/DurationUtilsTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/time/DurationUtilsTest.java rename to utils/src/test/java/org/opentripplanner/utils/time/DurationUtilsTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/time/LocalDateUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/time/LocalDateUtilsTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/time/LocalDateUtilsTest.java rename to utils/src/test/java/org/opentripplanner/utils/time/LocalDateUtilsTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/time/OffsetDateTimeParserTest.java b/utils/src/test/java/org/opentripplanner/utils/time/OffsetDateTimeParserTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/time/OffsetDateTimeParserTest.java rename to utils/src/test/java/org/opentripplanner/utils/time/OffsetDateTimeParserTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/time/ServiceDateUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/time/ServiceDateUtilsTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/time/ServiceDateUtilsTest.java rename to utils/src/test/java/org/opentripplanner/utils/time/ServiceDateUtilsTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/time/TimeUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/time/TimeUtilsTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/time/TimeUtilsTest.java rename to utils/src/test/java/org/opentripplanner/utils/time/TimeUtilsTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/time/ZoneIds.java b/utils/src/test/java/org/opentripplanner/utils/time/ZoneIds.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/time/ZoneIds.java rename to utils/src/test/java/org/opentripplanner/utils/time/ZoneIds.java diff --git a/framework/src/test/java/org/opentripplanner/framework/tostring/MultiLineToStringBuilderTest.java b/utils/src/test/java/org/opentripplanner/utils/tostring/MultiLineToStringBuilderTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/tostring/MultiLineToStringBuilderTest.java rename to utils/src/test/java/org/opentripplanner/utils/tostring/MultiLineToStringBuilderTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/tostring/ToStringBuilderTest.java b/utils/src/test/java/org/opentripplanner/utils/tostring/ToStringBuilderTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/tostring/ToStringBuilderTest.java rename to utils/src/test/java/org/opentripplanner/utils/tostring/ToStringBuilderTest.java diff --git a/framework/src/test/java/org/opentripplanner/framework/tostring/ValueObjectToStringBuilderTest.java b/utils/src/test/java/org/opentripplanner/utils/tostring/ValueObjectToStringBuilderTest.java similarity index 100% rename from framework/src/test/java/org/opentripplanner/framework/tostring/ValueObjectToStringBuilderTest.java rename to utils/src/test/java/org/opentripplanner/utils/tostring/ValueObjectToStringBuilderTest.java From 09e2de79e913a931c90958d24352bd40d6797827 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Tue, 29 Oct 2024 22:42:43 +0100 Subject: [PATCH 146/213] Rename all packages in utils from framework to utils We do this in a separate PR from moving the files to keep git-history. --- application/pom.xml | 2 +- .../ext/flex/FlexStopTimesForTest.java | 2 +- .../template/FlexTemplateFactoryTest.java | 2 +- .../flex/trip/ScheduledDeviatedTripTest.java | 2 +- .../ext/flex/trip/UnscheduledTripTest.java | 6 +++--- .../RealtimeResolverTest.java | 2 +- .../vectortiles/VectorTilesConfigDocTest.java | 2 +- .../layers/stops/RealtimeStopsLayerTest.java | 2 +- ...leRentalServiceDirectoryConfigDocTest.java | 2 +- .../api/DataOverlayParameters.java | 2 +- .../configuration/DataOverlayConfig.java | 2 +- .../DataOverlayParameterBindings.java | 2 +- .../configuration/IndexVariable.java | 2 +- .../configuration/ParameterBinding.java | 2 +- .../ext/dataoverlay/routing/Parameter.java | 2 +- .../ext/emissions/Co2EmissionsDataReader.java | 4 ++-- .../ext/emissions/DecorateWithEmission.java | 2 +- .../emissions/DefaultEmissionsService.java | 2 +- .../ext/emissions/EmissionsService.java | 2 +- .../ext/fares/FaresToItineraryMapper.java | 2 +- .../impl/CombinedInterlinedTransitLeg.java | 2 +- .../ext/fares/model/Distance.java | 2 +- .../ext/fares/model/FareRule.java | 2 +- .../ext/flex/AreaStopsToVerticesMapper.java | 2 +- .../ext/flex/FlexAccessEgress.java | 2 +- .../ext/flex/FlexPathDurations.java | 2 +- .../opentripplanner/ext/flex/FlexRouter.java | 2 +- .../ext/flex/FlexTripsMapper.java | 2 +- .../ext/flex/FlexibleTransitLeg.java | 4 ++-- .../ext/flex/flexpathcalculator/FlexPath.java | 2 +- .../flex/template/AbstractFlexTemplate.java | 2 +- .../ext/flex/template/ClosestTrip.java | 2 +- .../ext/flex/trip/StopTimeWindow.java | 2 +- .../ext/flex/trip/UnscheduledTrip.java | 6 +++--- .../ext/geocoder/LuceneIndex.java | 2 +- .../ext/geocoder/StopClusterMapper.java | 2 +- .../debug/raptor/RaptorDebugModel.java | 2 +- .../ext/reportapi/model/CsvReportBuilder.java | 4 ++-- .../ext/reportapi/model/TransfersReport.java | 2 +- .../ext/restapi/mapping/LocalDateMapper.java | 2 +- .../ext/restapi/model/ApiBookingInfo.java | 2 +- .../ext/restapi/model/ApiBookingTime.java | 2 +- .../ext/restapi/model/ApiContactInfo.java | 2 +- .../ext/restapi/resources/IndexAPI.java | 2 +- .../resources/RequestToPreferencesMapper.java | 2 +- .../restapi/resources/RoutingResource.java | 4 ++-- ...DigitransitRealtimeStopPropertyMapper.java | 2 +- .../vehicleparking/bikeep/BikeepUpdater.java | 2 +- .../parkapi/ParkAPIUpdater.java | 2 +- .../sirifm/SiriFmDatasource.java | 2 +- .../apis/gtfs/GraphQLScalars.java | 2 +- .../apis/gtfs/datafetchers/PatternImpl.java | 2 +- .../apis/gtfs/datafetchers/QueryTypeImpl.java | 2 +- .../apis/gtfs/datafetchers/StopImpl.java | 2 +- .../apis/gtfs/datafetchers/TripImpl.java | 2 +- .../BicyclePreferencesMapper.java | 2 +- .../routerequest/RouteRequestMapper.java | 2 +- .../TransitPreferencesMapper.java | 4 ++-- .../apis/transmodel/TransmodelGraph.java | 2 +- .../transmodel/mapping/TransitIdMapper.java | 2 +- .../framework/PenaltyForStreetModeType.java | 2 +- .../StreetModeDurationInputType.java | 2 +- .../transmodel/model/plan/RelaxCostType.java | 2 +- .../plan/TripPatternTimePenaltyType.java | 2 +- .../model/scalars/DateTimeScalarFactory.java | 2 +- ...UnprocessableRequestExecutionStrategy.java | 2 +- .../apis/vectortiles/DebugStyleSpec.java | 2 +- .../apis/vectortiles/model/StyleBuilder.java | 2 +- .../model/ZoomDependentNumber.java | 3 --- .../java/org/opentripplanner/astar/AStar.java | 2 +- .../datastore/api/DataSource.java | 2 +- .../https/HttpsDataSourceMetadata.java | 2 +- .../framework/application/LogMDCSupport.java | 2 +- .../geometry/CompactElevationProfile.java | 2 +- .../geometry/CompactLineStringUtils.java | 2 +- .../geometry/HashGridSpatialIndex.java | 2 +- .../framework/geometry/WgsCoordinate.java | 4 ++-- .../graphql/scalar/CostScalarFactory.java | 2 +- .../graphql/scalar/DurationScalarFactory.java | 2 +- .../opentripplanner/framework/model/Cost.java | 4 ++-- .../framework/model/TimeAndCost.java | 2 +- .../framework/model/Units.java | 4 ++-- .../framework/time/ZoneIdFallback.java | 2 +- .../framework/token/Serializer.java | 2 +- .../framework/token/TokenBuilder.java | 2 +- .../framework/token/TokenDefinition.java | 2 +- .../token/TokenDefinitionBuilder.java | 4 ++-- .../token/TokenFormatterConfiguration.java | 2 +- .../framework/token/TokenSchema.java | 2 +- .../framework/token/TokenType.java | 2 +- .../graph_builder/GraphBuilder.java | 4 ++-- .../graph_builder/issue/api/Issue.java | 2 +- .../issue/report/DataImportIssueReporter.java | 2 +- .../graph_builder/issues/HopZeroDistance.java | 2 +- .../module/DirectTransferGenerator.java | 2 +- .../module/StreetLinkerModule.java | 2 +- ...ateAndInterpolateStopTimesForEachTrip.java | 2 +- .../CalculateWorldEnvelopeModule.java | 2 +- .../module/ned/ElevationModule.java | 6 +++--- .../module/ned/MissingElevationHandler.java | 2 +- .../graph_builder/module/osm/OsmDatabase.java | 2 +- .../graph_builder/module/osm/OsmModule.java | 2 +- .../module/osm/naming/SidewalkNamer.java | 4 ++-- .../gtfs/GenerateTripPatternsOperation.java | 2 +- .../gtfs/interlining/InterlineProcessor.java | 2 +- .../gtfs/mapping/AgencyMapper.java | 2 +- .../gtfs/mapping/BoardingAreaMapper.java | 2 +- .../gtfs/mapping/EntranceMapper.java | 2 +- .../gtfs/mapping/FareAttributeMapper.java | 2 +- .../gtfs/mapping/FareRuleMapper.java | 2 +- .../gtfs/mapping/FeedInfoMapper.java | 2 +- .../gtfs/mapping/FrequencyMapper.java | 2 +- .../gtfs/mapping/LocationGroupMapper.java | 2 +- .../gtfs/mapping/LocationMapper.java | 2 +- .../gtfs/mapping/PathwayMapper.java | 2 +- .../gtfs/mapping/PathwayNodeMapper.java | 2 +- .../gtfs/mapping/RouteMapper.java | 2 +- .../mapping/ServiceCalendarDateMapper.java | 2 +- .../gtfs/mapping/ServiceCalendarMapper.java | 2 +- .../gtfs/mapping/ShapePointMapper.java | 2 +- .../gtfs/mapping/StopMapper.java | 2 +- .../gtfs/mapping/StopTimeMapper.java | 2 +- .../gtfs/mapping/TripMapper.java | 2 +- .../vector/edge/EdgePropertyMapper.java | 4 ++-- .../vector/vertex/VertexPropertyMapper.java | 2 +- .../org/opentripplanner/model/Frequency.java | 2 +- .../model/GenericLocation.java | 4 ++-- .../opentripplanner/model/PathTransfer.java | 2 +- .../org/opentripplanner/model/StopTime.java | 2 +- .../opentripplanner/model/SystemNotice.java | 2 +- .../org/opentripplanner/model/Timetable.java | 2 +- .../model/TimetableSnapshot.java | 2 +- .../model/calendar/CalendarServiceData.java | 2 +- .../model/calendar/ServiceCalendarDate.java | 2 +- .../model/calendar/ServiceDateInterval.java | 2 +- .../calendar/openinghours/OHCalendar.java | 2 +- .../calendar/openinghours/OpeningHours.java | 2 +- .../openinghours/OsmOpeningHoursSupport.java | 2 +- .../model/fare/FareMedium.java | 2 +- .../model/fare/FareProduct.java | 4 ++-- .../model/fare/FareProductUse.java | 2 +- .../model/fare/ItineraryFares.java | 4 ++-- .../model/fare/RiderCategory.java | 2 +- .../modes/AllowMainAndSubModeFilter.java | 2 +- .../modes/AllowMainAndSubModesFilter.java | 2 +- .../model/modes/AllowMainModeFilter.java | 2 +- .../model/modes/AllowMainModesFilter.java | 2 +- .../model/modes/ExcludeAllTransitFilter.java | 2 +- .../model/plan/ElevationProfile.java | 4 ++-- .../opentripplanner/model/plan/Emissions.java | 2 +- .../model/plan/FrequencyTransitLeg.java | 2 +- .../opentripplanner/model/plan/Itinerary.java | 4 ++-- .../model/plan/ItinerarySortKey.java | 2 +- .../org/opentripplanner/model/plan/Leg.java | 2 +- .../org/opentripplanner/model/plan/Place.java | 2 +- .../model/plan/ScheduledTransitLeg.java | 6 +++--- .../model/plan/StopArrival.java | 2 +- .../model/plan/StopArrivalMapper.java | 2 +- .../opentripplanner/model/plan/StreetLeg.java | 4 ++-- .../opentripplanner/model/plan/TripPlan.java | 2 +- .../model/plan/UnknownTransitPathLeg.java | 4 ++-- .../opentripplanner/model/plan/WalkStep.java | 4 ++-- .../model/plan/WalkStepBuilder.java | 4 ++-- .../ScheduledTransitLegReference.java | 2 +- .../model/plan/paging/cursor/PageCursor.java | 4 ++-- .../plan/paging/cursor/PageCursorFactory.java | 2 +- .../paging/cursor/PageCursorSerializer.java | 2 +- .../model/projectinfo/VersionControlInfo.java | 2 +- .../model/transfer/ConstrainedTransfer.java | 2 +- .../transfer/RouteStopTransferPoint.java | 2 +- .../model/transfer/StationTransferPoint.java | 2 +- .../model/transfer/TransferConstraint.java | 2 +- .../model/transfer/TripTransferPoint.java | 2 +- .../netex/config/NetexFeedParameters.java | 2 +- .../mapping/AuthorityToAgencyMapper.java | 2 +- .../mapping/MultilingualStringMapper.java | 2 +- .../netex/mapping/OperatorToAgencyMapper.java | 2 +- .../org/opentripplanner/osm/OsmProvider.java | 4 ++-- .../osm/model/OsmWithTags.java | 2 +- .../specifier/BestMatchSpecifier.java | 2 +- .../raptor/api/debug/DebugEvent.java | 2 +- .../model/GeneralizedCostRelaxFunction.java | 4 ++-- .../raptor/api/model/RaptorAccessEgress.java | 4 ++-- .../raptor/api/model/RaptorTransfer.java | 2 +- .../raptor/api/path/PathLeg.java | 4 ++-- .../raptor/api/path/PathStringBuilder.java | 4 ++-- .../raptor/api/request/DebugRequest.java | 2 +- .../api/request/MultiCriteriaRequest.java | 2 +- .../raptor/api/request/PassThroughPoint.java | 2 +- .../raptor/api/request/RaptorRequest.java | 2 +- .../api/request/RaptorViaConnection.java | 2 +- .../raptor/api/request/RaptorViaLocation.java | 4 ++-- .../raptor/api/request/SearchParams.java | 2 +- .../api/request/SearchParamsBuilder.java | 2 +- .../raptor/api/response/RaptorResponse.java | 2 +- .../raptor/api/view/ArrivalView.java | 2 +- .../raptor/path/PathBuilderLeg.java | 2 +- .../rangeraptor/SystemErrDebugLogger.java | 20 +++++++++---------- .../internalapi/HeuristicAtStop.java | 4 ++-- .../multicriteria/ride/c1/PatternRideC1.java | 2 +- .../ride/c2/PassThroughRideFactory.java | 2 +- .../multicriteria/ride/c2/PatternRideC2.java | 2 +- .../path/DestinationArrivalPaths.java | 4 ++-- .../MinTravelDurationRoutingStrategy.java | 2 +- .../standard/besttimes/BestTimes.java | 4 ++-- .../SimpleBestNumberOfTransfers.java | 2 +- .../heuristics/HeuristicsAdapter.java | 6 +++--- .../stoparrivals/AccessStopArrivalState.java | 2 +- .../stoparrivals/DefaultStopArrivalState.java | 2 +- .../stoparrivals/EgressStopArrivalState.java | 2 +- .../path/EgressArrivalToPathAdapter.java | 4 ++-- .../ForwardRaptorTransitCalculator.java | 2 +- .../transit/RaptorTransitCalculator.java | 2 +- .../ReverseRaptorTransitCalculator.java | 2 +- .../transit/TripScheduleExactMatchSearch.java | 2 +- .../rangeraptor/transit/TripTimesSearch.java | 2 +- .../raptor/service/DebugHeuristics.java | 2 +- .../raptor/service/HeuristicSearchTask.java | 2 +- .../raptor/spi/BoardAndAlightTime.java | 4 ++-- .../raptor/util/CompareIntArrays.java | 2 +- .../routing/TripTimeOnDateHelper.java | 2 +- .../routing/algorithm/RoutingWorker.java | 2 +- .../ItineraryListFilterChainBuilder.java | 4 ++-- .../filterchain/api/GroupBySimilarity.java | 2 +- .../TransitGeneralizedCostFilterParams.java | 2 +- .../filters/system/NumItinerariesFilter.java | 2 +- .../system/NumItinerariesFilterResults.java | 6 +++--- .../filters/system/PagingFilter.java | 2 +- .../transit/TransitGeneralizedCostFilter.java | 2 +- .../framework/groupids/GroupByDistance.java | 2 +- .../framework/sort/SortOrderComparator.java | 2 +- .../raptoradapter/path/PathDiff.java | 16 +++++++-------- .../router/street/AccessEgressRouter.java | 2 +- .../raptoradapter/transit/Transfer.java | 4 ++-- .../transit/TransitTuningParameters.java | 2 +- .../transit/TripPatternForDate.java | 2 +- .../ConstrainedTransfersForPatterns.java | 2 +- .../cost/GeneralizedCostParameters.java | 2 +- .../request/RaptorRequestTransferCache.java | 2 +- .../RaptorRoutingRequestTransitData.java | 2 +- ...aptorRoutingRequestTransitDataCreator.java | 6 +++--- .../transit/request/TripPatternForDates.java | 2 +- .../request/TripScheduleAlightSearch.java | 2 +- .../request/TripScheduleBoardSearch.java | 2 +- .../request/TripScheduleWithOffset.java | 2 +- .../OptimizeTransferService.java | 2 +- .../model/BasicStopTime.java | 2 +- .../model/MinSafeTransferTimeCalculator.java | 4 ++-- .../model/OptimizedPathTail.java | 2 +- .../model/StopPriorityCostCalculator.java | 2 +- .../model/TripStopTime.java | 2 +- .../model/TripToTripTransfer.java | 2 +- .../costfilter/MinCostPathTailFilter.java | 2 +- .../PassThroughPathTailFilter.java | 2 +- .../services/TransitPathLegSelector.java | 2 +- .../alternativelegs/AlternativeLegs.java | 2 +- .../routing/api/request/DebugRaptor.java | 2 +- .../routing/api/request/RequestModes.java | 2 +- .../routing/api/request/RouteRequest.java | 10 +++++----- .../request/framework/DurationForEnum.java | 2 +- .../LinearFunctionSerialization.java | 6 +++--- .../framework/TimeAndCostPenaltyForEnum.java | 2 +- .../api/request/framework/TimePenalty.java | 4 ++-- .../preference/AccessEgressPreferences.java | 2 +- .../preference/AccessibilityPreferences.java | 2 +- .../request/preference/BikePreferences.java | 6 +++--- .../request/preference/CarPreferences.java | 6 +++--- .../preference/ElevatorPreferences.java | 2 +- .../ItineraryFilterPreferences.java | 2 +- .../request/preference/RaptorPreferences.java | 2 +- .../routing/api/request/preference/Relax.java | 4 ++-- .../preference/RoutingPreferences.java | 2 +- .../preference/ScooterPreferences.java | 6 +++--- .../request/preference/StreetPreferences.java | 6 ++---- .../request/preference/SystemPreferences.java | 2 +- .../preference/TimeSlopeSafetyTriangle.java | 4 ++-- .../TransferOptimizationPreferences.java | 4 ++-- .../preference/TransferPreferences.java | 6 +++--- .../preference/TransitPreferences.java | 2 +- .../preference/VehicleParkingPreferences.java | 2 +- .../preference/VehicleRentalPreferences.java | 2 +- .../preference/VehicleWalkingPreferences.java | 2 +- .../request/preference/WalkPreferences.java | 4 ++-- .../preference/WheelchairPreferences.java | 2 +- .../filter/VehicleParkingFilter.java | 2 +- .../request/request/filter/SelectRequest.java | 2 +- .../request/filter/TransitFilterRequest.java | 2 +- .../request/filter/TransitGroupSelect.java | 2 +- .../request/via/PassThroughViaLocation.java | 2 +- .../api/request/via/VisitViaLocation.java | 4 ++-- .../routing/api/response/RoutingError.java | 2 +- .../routing/api/response/RoutingResponse.java | 2 +- .../api/response/TripSearchMetadata.java | 2 +- .../routing/graph/SerializedGraphObject.java | 4 ++-- .../routing/graph/index/StreetIndex.java | 2 +- .../routing/graphfinder/PatternAtStop.java | 2 +- .../StopFinderTraverseVisitor.java | 2 +- .../service/DefaultRoutingService.java | 2 +- .../routing/stoptimes/StopTimesHelper.java | 2 +- .../vehicle_parking/VehicleParking.java | 2 +- .../VehicleParkingEntrance.java | 2 +- .../vehicle_parking/VehicleParkingGroup.java | 2 +- .../vehicle_parking/VehicleParkingSpaces.java | 2 +- .../service/paging/PagingService.java | 2 +- .../model/VehicleRentalStation.java | 2 +- .../worldenvelope/model/WorldEnvelope.java | 2 +- .../standalone/config/BuildConfig.java | 2 +- .../config/framework/json/ConfigType.java | 6 +++--- .../config/framework/json/EnumMapper.java | 2 +- .../config/framework/json/NodeInfo.java | 4 ++-- .../framework/json/ParameterBuilder.java | 4 ++-- .../routerequest/RouteRequestConfig.java | 2 +- .../configure/ConstructApplication.java | 2 +- .../standalone/server/EtagRequestFilter.java | 2 +- .../standalone/server/RequestTraceFilter.java | 2 +- .../server/RequestTraceParameter.java | 2 +- .../street/model/edge/ElevatorBoardEdge.java | 1 - .../street/model/edge/ElevatorHopEdge.java | 1 - .../street/model/edge/StreetEdge.java | 4 ++-- .../street/model/edge/StreetEdgeBuilder.java | 2 +- .../model/edge/StreetElevationExtension.java | 2 +- .../model/edge/StreetTransitEntityLink.java | 1 - .../model/edge/StreetVehicleParkingLink.java | 1 - .../model/note/StreetNoteAndMatcher.java | 2 +- .../model/vertex/IntersectionVertex.java | 2 +- .../vertex/OsmBoardingLocationVertex.java | 2 +- .../street/search/state/State.java | 4 ++-- .../api/request/TripOnServiceDateRequest.java | 2 +- .../transit/model/basic/Money.java | 2 +- .../transit/model/framework/Deduplicator.java | 2 +- .../transit/model/framework/FeedScopedId.java | 4 ++-- .../transit/model/network/Route.java | 2 +- .../transit/model/network/StopPattern.java | 2 +- .../transit/model/network/TripPattern.java | 2 +- .../TransitGroupPriorityService.java | 2 +- .../transit/model/organization/Agency.java | 2 +- .../model/organization/ContactInfo.java | 2 +- .../transit/model/organization/Operator.java | 2 +- .../transit/model/site/StopLocation.java | 2 +- .../model/site/StopLocationsGroup.java | 2 +- .../model/timetable/ScheduledTripTimes.java | 6 +++--- .../timetable/ScheduledTripTimesBuilder.java | 2 +- .../transit/model/timetable/Trip.java | 4 ++-- .../timetable/TripTimesStringBuilder.java | 2 +- .../model/timetable/booking/BookingInfo.java | 2 +- .../model/timetable/booking/BookingTime.java | 2 +- .../timetable/booking/RoutingBookingInfo.java | 2 +- .../service/DefaultTransitService.java | 2 +- .../transit/service/SiteRepository.java | 4 ++-- .../transit/service/StopModelIndex.java | 2 +- .../transit/service/TimetableRepository.java | 4 ++-- .../updater/GtfsRealtimeFuzzyTripMatcher.java | 4 ++-- .../alert/GtfsRealtimeAlertsUpdater.java | 2 +- .../updater/siri/AddedTripBuilder.java | 2 +- .../updater/siri/DebugString.java | 2 +- .../updater/siri/ModifiedTripBuilder.java | 2 +- .../updater/siri/SiriFuzzyTripMatcher.java | 2 +- .../updater/siri/TimetableHelper.java | 2 +- .../GooglePubsubEstimatedTimetableSource.java | 4 ++-- .../SiriETGooglePubsubUpdaterParameters.java | 2 +- .../updater/spi/ResultLogger.java | 2 +- .../updater/spi/UpdateSuccess.java | 2 +- .../trip/GtfsRealtimeTripUpdateSource.java | 2 +- .../updater/trip/MqttGtfsRealtimeUpdater.java | 2 +- .../updater/trip/PollingTripUpdater.java | 2 +- .../updater/trip/TimetableSnapshotSource.java | 4 ++-- .../vehicle_parking/AvailabiltyUpdate.java | 2 +- .../VehicleParkingAvailabilityUpdater.java | 2 +- .../VehicleParkingUpdater.java | 2 +- ...GtfsRealtimeHttpVehiclePositionSource.java | 2 +- .../PollingVehiclePositionUpdater.java | 2 +- .../RealtimeVehiclePatternMatcher.java | 4 ++-- .../vehicle_rental/VehicleRentalUpdater.java | 10 +++++----- .../datasources/GbfsGeofencingZoneMapper.java | 2 +- .../GbfsVehicleRentalDataSource.java | 2 +- .../org/opentripplanner/DateTimeHelper.java | 2 +- .../apis/gtfs/GraphQLIntegrationTest.java | 2 +- .../mapping/TripRequestMapperTest.java | 2 +- .../plan/TripPlanTimePenaltyDtoTest.java | 2 +- .../support/ExecutionResultMapperTest.java | 2 +- .../datastore/OtpDataStoreTest.java | 2 +- .../framework/model/TimeAndCostTest.java | 2 +- .../token/TestTokenSchemaConstants.java | 2 +- .../doc/BuildConfigurationDocTest.java | 2 +- .../doc/EmissionsConfigurationDocTest.java | 2 +- .../doc/FlexConfigurationDocTest.java | 2 +- .../generate/doc/OsmMapperDocTest.java | 4 ++-- .../generate/doc/RideHailingDocTest.java | 2 +- .../generate/doc/RouteRequestDocTest.java | 2 +- .../doc/RouterConfigurationDocTest.java | 2 +- .../generate/doc/SiriAzureConfigDocTest.java | 2 +- .../generate/doc/SiriConfigDocTest.java | 2 +- .../doc/SiriGooglePubSubConfigDocTest.java | 2 +- .../generate/doc/UpdaterConfigDocTest.java | 2 +- .../generate/doc/VehicleParkingDocTest.java | 2 +- .../generate/doc/framework/AbstractTable.java | 10 +++++----- .../generate/doc/framework/DocBuilder.java | 4 ++-- .../doc/framework/DocBuilderTest.java | 2 +- .../doc/framework/ParameterDetailsList.java | 2 +- .../doc/framework/ParameterSummaryTable.java | 10 +++++----- .../generate/doc/support/ConfigTypeTable.java | 4 ++-- .../generate/doc/support/OTPFeatureTable.java | 10 +++++----- .../issue/api/DataImportIssueSummaryTest.java | 2 +- .../module/DirectTransferGeneratorTest.java | 2 +- .../ServiceCalendarDateMapperTest.java | 2 +- .../mapping/ServiceCalendarMapperTest.java | 2 +- .../CalendarServiceDataFactoryImplTest.java | 2 +- .../model/plan/PlanTestConstants.java | 4 ++-- .../model/plan/TestItineraryBuilder.java | 4 ++-- .../PagingSearchWindowAdjusterTest.java | 2 +- .../paging/cursor/PageCursorFactoryTest.java | 2 +- .../cursor/PageCursorSerializerTest.java | 2 +- .../plan/paging/cursor/PageCursorTest.java | 6 +++--- .../transfer/TransferConstraintTest.java | 2 +- .../raptor/_data/RaptorTestConstants.java | 4 ++-- .../_data/api/TestPathBuilderTestRaptor.java | 5 ++--- .../_data/stoparrival/BasicPathTestCase.java | 4 ++-- .../raptor/_data/stoparrival/Egress.java | 2 +- .../FlexAccessAndEgressPathTestCase.java | 6 +++--- .../_data/transit/TestAccessEgress.java | 2 +- .../TestConstrainedBoardingSearch.java | 2 +- .../transit/TestConstrainedTransfer.java | 2 +- .../raptor/_data/transit/TestRoute.java | 2 +- .../_data/transit/TestTransferPoint.java | 2 +- .../raptor/_data/transit/TestTripPattern.java | 2 +- .../_data/transit/TestTripSchedule.java | 6 +++--- .../raptor/api/path/PathTest.java | 4 ++-- .../raptor/moduletests/B01_AccessTest.java | 2 +- .../moduletests/F02_EgressWithRidesTest.java | 2 +- .../G01_AccessWithOpeningHoursTest.java | 2 +- .../G02_EgressWithOpeningHoursTest.java | 2 +- .../L01_TimePenaltyAccessTest.java | 2 +- .../L01_TimePenaltyEgressTest.java | 2 +- .../support/RaptorModuleTestCaseFactory.java | 2 +- .../arrivals/c1/StopArrivalFactoryC1Test.java | 4 ++-- .../arrivals/c2/StopArrivalFactoryC2Test.java | 4 ++-- .../rangeraptor/transit/EgressPathsTest.java | 2 +- .../ForwardRaptorTransitCalculatorTest.java | 2 +- .../transit/ForwardTransitCalculatorTest.java | 2 +- .../ReverseRaptorTransitCalculatorTest.java | 2 +- .../transit/TripTimesSearchTest.java | 4 ++-- .../raptor/spi/RaptorTripScheduleTest.java | 2 +- .../raptor/util/paretoset/ParetoSetTest.java | 2 +- ...RemoveBikeRentalWithMostlyWalkingTest.java | 4 ++-- ...emoveParkAndRideWithMostlyWalkingTest.java | 4 ++-- .../street/RemoveWalkOnlyFilterTest.java | 4 ++-- .../system/FlexSearchWindowFilterTest.java | 2 +- .../system/NumItinerariesFilterTest.java | 2 +- .../system/OutsideSearchWindowFilterTest.java | 2 +- .../filters/system/PagingFilterTest.java | 8 ++++---- .../mapping/PagingServiceFactoryTest.java | 4 ++-- .../RaptorPathToItineraryMapperTest.java | 2 +- .../algorithm/mapping/SnapshotTestBase.java | 2 +- .../AccessEgressPenaltyDecoratorTest.java | 2 +- ...rRoutingRequestTransitDataCreatorTest.java | 2 +- .../transit/request/TestRouteData.java | 2 +- .../MinSafeTransferTimeCalculatorTest.java | 4 ++-- .../TransferWaitTimeCostCalculatorTest.java | 2 +- .../model/TripStopTimeTest.java | 4 ++-- .../PassThroughNoTransfersTest.java | 2 +- .../PassThroughOneTransferTest.java | 2 +- .../PassThroughTwoTransfersTest.java | 2 +- .../WalkDurationForStopCombinations.java | 2 +- ...imizePathDomainServiceConstrainedTest.java | 2 +- .../OptimizePathDomainServiceTest.java | 2 +- .../services/TestTransferBuilder.java | 2 +- .../services/TransferGeneratorTest.java | 2 +- .../services/TransitPathLegSelectorTest.java | 2 +- .../algorithm/via/ViaRoutingWorkerTest.java | 2 +- .../framework/CostLinearFunctionTest.java | 2 +- .../LinearFunctionSerializationTest.java | 2 +- .../framework/TimeAndCostPenaltyTest.java | 2 +- .../request/framework/TimePenaltyTest.java | 2 +- .../paging/PS1_LegacyMetaDataTest.java | 2 +- ...FewItinerariesOnSearchWindowLimitTest.java | 2 +- .../service/paging/TestDriver.java | 4 ++-- .../service/paging/TestPagingModel.java | 4 ++-- .../config/OtpConfigLoaderTest.java | 2 +- .../framework/file/ConfigFileLoaderTest.java | 2 +- .../file/IncludeFileDirectiveTest.java | 2 +- .../timetable/ScheduledTripTimesTest.java | 2 +- .../timetable/booking/BookingTimeTest.java | 2 +- .../booking/RoutingBookingInfoTest.java | 2 +- .../transit/speed_test/ResultPrinter.java | 6 +++--- .../model/testcase/ItineraryResultMapper.java | 2 +- .../speed_test/model/testcase/Result.java | 6 +++--- .../model/testcase/TableTestReport.java | 12 +++++------ .../model/testcase/TestCaseDefinition.java | 6 +++--- .../model/testcase/io/AbstractCsvFile.java | 4 ++-- .../trip/TimetableSnapshotSourceTest.java | 2 +- .../updater/trip/TripInput.java | 2 +- .../updater/trip/TripUpdateBuilder.java | 2 +- .../utils/collection/CollectionUtils.java | 2 +- .../utils/collection/CollectionsView.java | 2 +- .../utils/collection/CompositeComparator.java | 2 +- .../utils/collection/ListSection.java | 2 +- .../utils/collection/ListUtils.java | 2 +- .../utils/collection/MapUtils.java | 2 +- .../utils/collection/SetUtils.java | 2 +- .../utils/lang/ArrayUtils.java | 2 +- .../utils/lang/BitSetUtils.java | 2 +- .../org/opentripplanner/utils/lang/Box.java | 2 +- .../utils/lang/DoubleUtils.java | 4 ++-- .../opentripplanner/utils/lang/IntBox.java | 2 +- .../opentripplanner/utils/lang/IntRange.java | 2 +- .../opentripplanner/utils/lang/IntUtils.java | 2 +- .../utils/lang/MemEfficientArrayBuilder.java | 2 +- .../utils/lang/ObjectUtils.java | 2 +- .../utils/lang/OtpNumberFormat.java | 2 +- .../opentripplanner/utils/lang/Sandbox.java | 2 +- .../utils/lang/StringUtils.java | 2 +- .../utils/logging/ProgressTracker.java | 6 +++--- .../logging/ProgressTrackerInputStream.java | 2 +- .../logging/ProgressTrackerOutputStream.java | 2 +- .../utils/logging/Throttle.java | 4 ++-- .../utils/text/CharacterEscapeFormatter.java | 2 +- .../utils/text/FileSizeToTextConverter.java | 2 +- .../opentripplanner/utils/text/HexString.java | 2 +- .../utils/text/MarkdownFormatter.java | 2 +- .../org/opentripplanner/utils/text/Table.java | 6 +++--- .../utils/text/TableBuilder.java | 2 +- .../utils/text/TableRowFormatter.java | 6 +++--- .../utils/time/CountdownTimer.java | 2 +- .../opentripplanner/utils/time/DateUtils.java | 2 +- .../utils/time/DurationUtils.java | 2 +- .../utils/time/LocalDateUtils.java | 2 +- .../utils/time/OffsetDateTimeParser.java | 2 +- .../utils/time/RelativeTime.java | 2 +- .../utils/time/ServiceDateUtils.java | 2 +- .../opentripplanner/utils/time/TimeUtils.java | 2 +- .../tostring/MultiLineToStringBuilder.java | 4 ++-- .../utils/tostring/ToStringBuilder.java | 12 +++++------ .../tostring/ValueObjectToStringBuilder.java | 8 ++++---- .../utils/collection/CollectionUtilsTest.java | 2 +- .../utils/collection/CollectionsViewTest.java | 2 +- .../collection/CompositeComparatorTest.java | 2 +- .../utils/collection/ListSectionTest.java | 2 +- .../utils/collection/ListUtilsTest.java | 6 +++--- .../utils/collection/MapUtilsTest.java | 4 ++-- .../utils/collection/SetUtilsTest.java | 2 +- .../utils/lang/ArrayUtilsTest.java | 4 ++-- .../utils/lang/BitSetUtilsTest.java | 2 +- .../opentripplanner/utils/lang/BoxTest.java | 2 +- .../utils/lang/DoubleUtilsTest.java | 14 ++++++------- .../utils/lang/IntBoxTest.java | 2 +- .../utils/lang/IntRangeTest.java | 2 +- .../utils/lang/IntUtilsTest.java | 20 +++++++++---------- .../lang/MemEfficientArrayBuilderTest.java | 2 +- .../utils/lang/ObjectUtilsTest.java | 2 +- .../utils/lang/OtpNumberFormatTest.java | 2 +- .../utils/lang/StringUtilsTest.java | 2 +- .../utils/logging/ProgressTrackerTest.java | 2 +- .../utils/logging/ThrottleTest.java | 2 +- .../text/CharacterEscapeFormatterTest.java | 2 +- .../text/FileSizeToTextConverterTest.java | 4 ++-- .../utils/text/HexStringTest.java | 2 +- .../utils/text/MarkdownFormatterTest.java | 2 +- .../opentripplanner/utils/text/TableTest.java | 8 ++++---- .../utils/time/CountdownTimerTest.java | 2 +- .../utils/time/DateUtilsTest.java | 4 ++-- .../utils/time/DurationUtilsTest.java | 12 +++++------ .../utils/time/LocalDateUtilsTest.java | 2 +- .../utils/time/OffsetDateTimeParserTest.java | 2 +- .../utils/time/ServiceDateUtilsTest.java | 4 ++-- .../utils/time/TimeUtilsTest.java | 2 +- .../opentripplanner/utils/time/ZoneIds.java | 2 +- .../MultiLineToStringBuilderTest.java | 2 +- .../utils/tostring/ToStringBuilderTest.java | 6 +++--- .../ValueObjectToStringBuilderTest.java | 2 +- 569 files changed, 774 insertions(+), 784 deletions(-) diff --git a/application/pom.xml b/application/pom.xml index 60765797344..f7ff90f8db0 100644 --- a/application/pom.xml +++ b/application/pom.xml @@ -20,7 +20,7 @@ ${project.groupId} - otp-framework + otp-utils ${project.version} diff --git a/application/src/ext-test/java/org/opentripplanner/ext/flex/FlexStopTimesForTest.java b/application/src/ext-test/java/org/opentripplanner/ext/flex/FlexStopTimesForTest.java index acf0d3b2699..50c2dd45340 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/flex/FlexStopTimesForTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/flex/FlexStopTimesForTest.java @@ -3,11 +3,11 @@ import static org.opentripplanner.model.StopTime.MISSING_VALUE; import org.opentripplanner._support.geometry.Polygons; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.model.StopTime; import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.StopLocation; +import org.opentripplanner.utils.time.TimeUtils; public class FlexStopTimesForTest { diff --git a/application/src/ext-test/java/org/opentripplanner/ext/flex/template/FlexTemplateFactoryTest.java b/application/src/ext-test/java/org/opentripplanner/ext/flex/template/FlexTemplateFactoryTest.java index cdb8bb8ff4e..159e25ff113 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/flex/template/FlexTemplateFactoryTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/flex/template/FlexTemplateFactoryTest.java @@ -6,7 +6,7 @@ import static org.opentripplanner.ext.flex.template.BoardAlight.ALIGHT_ONLY; import static org.opentripplanner.ext.flex.template.BoardAlight.BOARD_AND_ALIGHT; import static org.opentripplanner.ext.flex.template.BoardAlight.BOARD_ONLY; -import static org.opentripplanner.framework.time.TimeUtils.time; +import static org.opentripplanner.utils.time.TimeUtils.time; import gnu.trove.set.hash.TIntHashSet; import java.time.Duration; diff --git a/application/src/ext-test/java/org/opentripplanner/ext/flex/trip/ScheduledDeviatedTripTest.java b/application/src/ext-test/java/org/opentripplanner/ext/flex/trip/ScheduledDeviatedTripTest.java index 4c77ecc6134..38f3a1fc2a8 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/flex/trip/ScheduledDeviatedTripTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/flex/trip/ScheduledDeviatedTripTest.java @@ -24,7 +24,6 @@ import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.framework.geometry.EncodedPolyline; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.graph_builder.module.ValidateAndInterpolateStopTimesForEachTrip; import org.opentripplanner.model.GenericLocation; import org.opentripplanner.model.StopTime; @@ -45,6 +44,7 @@ import org.opentripplanner.transit.model.site.AreaStop; import org.opentripplanner.transit.service.DefaultTransitService; import org.opentripplanner.transit.service.TimetableRepository; +import org.opentripplanner.utils.time.ServiceDateUtils; /** * This tests that the feed for the Cobb County Flex service is processed correctly. This service diff --git a/application/src/ext-test/java/org/opentripplanner/ext/flex/trip/UnscheduledTripTest.java b/application/src/ext-test/java/org/opentripplanner/ext/flex/trip/UnscheduledTripTest.java index d235dd5a950..cfcbc123642 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/flex/trip/UnscheduledTripTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/flex/trip/UnscheduledTripTest.java @@ -17,14 +17,14 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.time.TimeUtils; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.PickDrop; import org.opentripplanner.model.StopTime; import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.StopLocation; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.time.TimeUtils; +import org.opentripplanner.utils.tostring.ToStringBuilder; class UnscheduledTripTest { diff --git a/application/src/ext-test/java/org/opentripplanner/ext/realtimeresolver/RealtimeResolverTest.java b/application/src/ext-test/java/org/opentripplanner/ext/realtimeresolver/RealtimeResolverTest.java index 6150cfc6c18..80e5d1b153b 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/realtimeresolver/RealtimeResolverTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/realtimeresolver/RealtimeResolverTest.java @@ -3,8 +3,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.opentripplanner.framework.time.TimeUtils.time; import static org.opentripplanner.model.plan.TestItineraryBuilder.newItinerary; +import static org.opentripplanner.utils.time.TimeUtils.time; import java.time.LocalDate; import java.util.List; diff --git a/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/VectorTilesConfigDocTest.java b/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/VectorTilesConfigDocTest.java index 51e1738ff6c..3a057182a67 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/VectorTilesConfigDocTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/VectorTilesConfigDocTest.java @@ -3,11 +3,11 @@ import static org.opentripplanner.framework.io.FileUtils.assertFileEquals; import static org.opentripplanner.framework.io.FileUtils.readFile; import static org.opentripplanner.framework.io.FileUtils.writeFile; -import static org.opentripplanner.framework.text.MarkdownFormatter.HEADER_4; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.TEMPLATE_PATH; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.USER_DOC_PATH; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceSection; import static org.opentripplanner.standalone.config.framework.json.JsonSupport.jsonNodeFromPath; +import static org.opentripplanner.utils.text.MarkdownFormatter.HEADER_4; import java.io.File; import org.junit.jupiter.api.Test; diff --git a/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/stops/RealtimeStopsLayerTest.java b/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/stops/RealtimeStopsLayerTest.java index 6723034f2a7..0db19baf6e5 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/stops/RealtimeStopsLayerTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/stops/RealtimeStopsLayerTest.java @@ -1,8 +1,8 @@ package org.opentripplanner.ext.vectortiles.layers.stops; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.framework.time.TimeUtils.time; import static org.opentripplanner.model.plan.TestItineraryBuilder.newItinerary; +import static org.opentripplanner.utils.time.TimeUtils.time; import java.time.ZonedDateTime; import java.util.HashMap; diff --git a/application/src/ext-test/java/org/opentripplanner/ext/vehiclerentalservicedirectory/generatedoc/VehicleRentalServiceDirectoryConfigDocTest.java b/application/src/ext-test/java/org/opentripplanner/ext/vehiclerentalservicedirectory/generatedoc/VehicleRentalServiceDirectoryConfigDocTest.java index 2afcd95949c..06d75073029 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/vehiclerentalservicedirectory/generatedoc/VehicleRentalServiceDirectoryConfigDocTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/vehiclerentalservicedirectory/generatedoc/VehicleRentalServiceDirectoryConfigDocTest.java @@ -4,13 +4,13 @@ import static org.opentripplanner.framework.io.FileUtils.assertFileEquals; import static org.opentripplanner.framework.io.FileUtils.readFile; import static org.opentripplanner.framework.io.FileUtils.writeFile; -import static org.opentripplanner.framework.text.MarkdownFormatter.HEADER_4; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.TEMPLATE_PATH; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.USER_DOC_PATH; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceJsonExample; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceParametersDetails; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceParametersTable; import static org.opentripplanner.standalone.config.framework.json.JsonSupport.jsonNodeFromResource; +import static org.opentripplanner.utils.text.MarkdownFormatter.HEADER_4; import java.io.File; import org.junit.jupiter.api.Test; diff --git a/application/src/ext/java/org/opentripplanner/ext/dataoverlay/api/DataOverlayParameters.java b/application/src/ext/java/org/opentripplanner/ext/dataoverlay/api/DataOverlayParameters.java index 5e18a914d34..42a0209ba94 100644 --- a/application/src/ext/java/org/opentripplanner/ext/dataoverlay/api/DataOverlayParameters.java +++ b/application/src/ext/java/org/opentripplanner/ext/dataoverlay/api/DataOverlayParameters.java @@ -6,7 +6,7 @@ import java.util.Map; import java.util.stream.Collectors; import javax.annotation.Nullable; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * The purpose of this class is to hold all parameters and their value in a map. It also contains diff --git a/application/src/ext/java/org/opentripplanner/ext/dataoverlay/configuration/DataOverlayConfig.java b/application/src/ext/java/org/opentripplanner/ext/dataoverlay/configuration/DataOverlayConfig.java index c650bdf8a3c..858ac97d8ce 100644 --- a/application/src/ext/java/org/opentripplanner/ext/dataoverlay/configuration/DataOverlayConfig.java +++ b/application/src/ext/java/org/opentripplanner/ext/dataoverlay/configuration/DataOverlayConfig.java @@ -2,7 +2,7 @@ import java.io.Serializable; import java.util.List; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * POJO class describing expected data-overlay-config.json structure diff --git a/application/src/ext/java/org/opentripplanner/ext/dataoverlay/configuration/DataOverlayParameterBindings.java b/application/src/ext/java/org/opentripplanner/ext/dataoverlay/configuration/DataOverlayParameterBindings.java index c86cf24bb79..7b3d1f19bac 100644 --- a/application/src/ext/java/org/opentripplanner/ext/dataoverlay/configuration/DataOverlayParameterBindings.java +++ b/application/src/ext/java/org/opentripplanner/ext/dataoverlay/configuration/DataOverlayParameterBindings.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.Optional; import org.opentripplanner.ext.dataoverlay.api.ParameterName; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; public class DataOverlayParameterBindings implements Serializable { diff --git a/application/src/ext/java/org/opentripplanner/ext/dataoverlay/configuration/IndexVariable.java b/application/src/ext/java/org/opentripplanner/ext/dataoverlay/configuration/IndexVariable.java index 56b55b3a6b0..720ded65f89 100644 --- a/application/src/ext/java/org/opentripplanner/ext/dataoverlay/configuration/IndexVariable.java +++ b/application/src/ext/java/org/opentripplanner/ext/dataoverlay/configuration/IndexVariable.java @@ -1,7 +1,7 @@ package org.opentripplanner.ext.dataoverlay.configuration; import java.io.Serializable; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * This class describes the variables for the incoming .nc data file diff --git a/application/src/ext/java/org/opentripplanner/ext/dataoverlay/configuration/ParameterBinding.java b/application/src/ext/java/org/opentripplanner/ext/dataoverlay/configuration/ParameterBinding.java index 94a992eb552..07a29d4c4c1 100644 --- a/application/src/ext/java/org/opentripplanner/ext/dataoverlay/configuration/ParameterBinding.java +++ b/application/src/ext/java/org/opentripplanner/ext/dataoverlay/configuration/ParameterBinding.java @@ -3,7 +3,7 @@ import java.io.Serializable; import org.opentripplanner.ext.dataoverlay.api.ParameterName; import org.opentripplanner.ext.dataoverlay.routing.Parameter; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * This class describes the expected routing request parameter for the generic data diff --git a/application/src/ext/java/org/opentripplanner/ext/dataoverlay/routing/Parameter.java b/application/src/ext/java/org/opentripplanner/ext/dataoverlay/routing/Parameter.java index 7b6078bb04f..542f7ee26dc 100644 --- a/application/src/ext/java/org/opentripplanner/ext/dataoverlay/routing/Parameter.java +++ b/application/src/ext/java/org/opentripplanner/ext/dataoverlay/routing/Parameter.java @@ -2,7 +2,7 @@ import org.opentripplanner.ext.dataoverlay.api.ParameterName; import org.opentripplanner.ext.dataoverlay.configuration.ParameterBinding; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; public class Parameter { diff --git a/application/src/ext/java/org/opentripplanner/ext/emissions/Co2EmissionsDataReader.java b/application/src/ext/java/org/opentripplanner/ext/emissions/Co2EmissionsDataReader.java index 597a7d89380..f3988265085 100644 --- a/application/src/ext/java/org/opentripplanner/ext/emissions/Co2EmissionsDataReader.java +++ b/application/src/ext/java/org/opentripplanner/ext/emissions/Co2EmissionsDataReader.java @@ -11,10 +11,10 @@ import java.util.Optional; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; -import org.opentripplanner.framework.lang.Sandbox; -import org.opentripplanner.framework.lang.StringUtils; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.lang.Sandbox; +import org.opentripplanner.utils.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/ext/java/org/opentripplanner/ext/emissions/DecorateWithEmission.java b/application/src/ext/java/org/opentripplanner/ext/emissions/DecorateWithEmission.java index 1f6e79fc4df..9657e053cb9 100644 --- a/application/src/ext/java/org/opentripplanner/ext/emissions/DecorateWithEmission.java +++ b/application/src/ext/java/org/opentripplanner/ext/emissions/DecorateWithEmission.java @@ -3,7 +3,6 @@ import java.util.List; import java.util.Optional; import org.opentripplanner.ext.flex.FlexibleTransitLeg; -import org.opentripplanner.framework.lang.Sandbox; import org.opentripplanner.framework.model.Grams; import org.opentripplanner.model.plan.Emissions; import org.opentripplanner.model.plan.Itinerary; @@ -13,6 +12,7 @@ import org.opentripplanner.routing.algorithm.filterchain.framework.spi.ItineraryDecorator; import org.opentripplanner.street.search.TraverseMode; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.lang.Sandbox; /** * Calculates the emissions for the itineraries and adds them. diff --git a/application/src/ext/java/org/opentripplanner/ext/emissions/DefaultEmissionsService.java b/application/src/ext/java/org/opentripplanner/ext/emissions/DefaultEmissionsService.java index 5df2ca17f26..4aaefd5a7a3 100644 --- a/application/src/ext/java/org/opentripplanner/ext/emissions/DefaultEmissionsService.java +++ b/application/src/ext/java/org/opentripplanner/ext/emissions/DefaultEmissionsService.java @@ -2,10 +2,10 @@ import jakarta.inject.Inject; import java.util.Optional; -import org.opentripplanner.framework.lang.Sandbox; import org.opentripplanner.framework.model.Grams; import org.opentripplanner.model.plan.Emissions; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.lang.Sandbox; @Sandbox public class DefaultEmissionsService implements EmissionsService { diff --git a/application/src/ext/java/org/opentripplanner/ext/emissions/EmissionsService.java b/application/src/ext/java/org/opentripplanner/ext/emissions/EmissionsService.java index 6f69ac60d06..18712bb590c 100644 --- a/application/src/ext/java/org/opentripplanner/ext/emissions/EmissionsService.java +++ b/application/src/ext/java/org/opentripplanner/ext/emissions/EmissionsService.java @@ -1,9 +1,9 @@ package org.opentripplanner.ext.emissions; import java.util.Optional; -import org.opentripplanner.framework.lang.Sandbox; import org.opentripplanner.model.plan.Emissions; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.lang.Sandbox; /** * A service for getting emissions information for routes. diff --git a/application/src/ext/java/org/opentripplanner/ext/fares/FaresToItineraryMapper.java b/application/src/ext/java/org/opentripplanner/ext/fares/FaresToItineraryMapper.java index c545cbbb858..b936e458c00 100644 --- a/application/src/ext/java/org/opentripplanner/ext/fares/FaresToItineraryMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/fares/FaresToItineraryMapper.java @@ -1,9 +1,9 @@ package org.opentripplanner.ext.fares; -import org.opentripplanner.framework.collection.ListUtils; import org.opentripplanner.model.fare.FareProductUse; import org.opentripplanner.model.fare.ItineraryFares; import org.opentripplanner.model.plan.Itinerary; +import org.opentripplanner.utils.collection.ListUtils; /** * Takes fares and applies them to the legs of an itinerary. diff --git a/application/src/ext/java/org/opentripplanner/ext/fares/impl/CombinedInterlinedTransitLeg.java b/application/src/ext/java/org/opentripplanner/ext/fares/impl/CombinedInterlinedTransitLeg.java index d3608ccf8d9..85aa1a25004 100644 --- a/application/src/ext/java/org/opentripplanner/ext/fares/impl/CombinedInterlinedTransitLeg.java +++ b/application/src/ext/java/org/opentripplanner/ext/fares/impl/CombinedInterlinedTransitLeg.java @@ -7,7 +7,6 @@ import java.util.Set; import javax.annotation.Nullable; import org.locationtech.jts.geom.LineString; -import org.opentripplanner.framework.collection.ListUtils; import org.opentripplanner.model.fare.FareProductUse; import org.opentripplanner.model.plan.Leg; import org.opentripplanner.model.plan.LegTime; @@ -19,6 +18,7 @@ import org.opentripplanner.transit.model.organization.Agency; import org.opentripplanner.transit.model.site.FareZone; import org.opentripplanner.transit.model.timetable.Trip; +import org.opentripplanner.utils.collection.ListUtils; /** * This is a fake leg that combines two interlined legs for the purpose of fare calculation. diff --git a/application/src/ext/java/org/opentripplanner/ext/fares/model/Distance.java b/application/src/ext/java/org/opentripplanner/ext/fares/model/Distance.java index e29282fb4b8..f30712d4cad 100644 --- a/application/src/ext/java/org/opentripplanner/ext/fares/model/Distance.java +++ b/application/src/ext/java/org/opentripplanner/ext/fares/model/Distance.java @@ -1,6 +1,6 @@ package org.opentripplanner.ext.fares.model; -import org.opentripplanner.framework.tostring.ValueObjectToStringBuilder; +import org.opentripplanner.utils.tostring.ValueObjectToStringBuilder; public class Distance { diff --git a/application/src/ext/java/org/opentripplanner/ext/fares/model/FareRule.java b/application/src/ext/java/org/opentripplanner/ext/fares/model/FareRule.java index 3e70ef1cf2e..3b416ec2a6d 100644 --- a/application/src/ext/java/org/opentripplanner/ext/fares/model/FareRule.java +++ b/application/src/ext/java/org/opentripplanner/ext/fares/model/FareRule.java @@ -2,9 +2,9 @@ package org.opentripplanner.ext.fares.model; import java.io.Serializable; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.transit.model.framework.AbstractTransitEntity; import org.opentripplanner.transit.model.network.Route; +import org.opentripplanner.utils.tostring.ToStringBuilder; public final class FareRule implements Serializable { diff --git a/application/src/ext/java/org/opentripplanner/ext/flex/AreaStopsToVerticesMapper.java b/application/src/ext/java/org/opentripplanner/ext/flex/AreaStopsToVerticesMapper.java index 796971a43b5..85a4f749b16 100644 --- a/application/src/ext/java/org/opentripplanner/ext/flex/AreaStopsToVerticesMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/flex/AreaStopsToVerticesMapper.java @@ -6,13 +6,13 @@ import java.util.stream.Stream; import org.locationtech.jts.geom.Point; import org.opentripplanner.framework.geometry.GeometryUtils; -import org.opentripplanner.framework.logging.ProgressTracker; import org.opentripplanner.graph_builder.model.GraphBuilderModule; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.routing.graph.index.StreetIndex; import org.opentripplanner.street.model.vertex.StreetVertex; import org.opentripplanner.transit.model.site.AreaStop; import org.opentripplanner.transit.service.TimetableRepository; +import org.opentripplanner.utils.logging.ProgressTracker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/ext/java/org/opentripplanner/ext/flex/FlexAccessEgress.java b/application/src/ext/java/org/opentripplanner/ext/flex/FlexAccessEgress.java index f464f1e1907..9ff2b3f67be 100644 --- a/application/src/ext/java/org/opentripplanner/ext/flex/FlexAccessEgress.java +++ b/application/src/ext/java/org/opentripplanner/ext/flex/FlexAccessEgress.java @@ -4,10 +4,10 @@ import java.util.Objects; import org.opentripplanner.ext.flex.trip.FlexTrip; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.street.search.state.State; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.timetable.booking.RoutingBookingInfo; +import org.opentripplanner.utils.tostring.ToStringBuilder; public final class FlexAccessEgress { diff --git a/application/src/ext/java/org/opentripplanner/ext/flex/FlexPathDurations.java b/application/src/ext/java/org/opentripplanner/ext/flex/FlexPathDurations.java index a77d72185d0..258435a6d6b 100644 --- a/application/src/ext/java/org/opentripplanner/ext/flex/FlexPathDurations.java +++ b/application/src/ext/java/org/opentripplanner/ext/flex/FlexPathDurations.java @@ -1,6 +1,6 @@ package org.opentripplanner.ext.flex; -import org.opentripplanner.framework.time.DurationUtils; +import org.opentripplanner.utils.time.DurationUtils; /** * This value-object contains the durations for a Flex access or egress path. The path may also diff --git a/application/src/ext/java/org/opentripplanner/ext/flex/FlexRouter.java b/application/src/ext/java/org/opentripplanner/ext/flex/FlexRouter.java index 84098db9dc9..103a27e7554 100644 --- a/application/src/ext/java/org/opentripplanner/ext/flex/FlexRouter.java +++ b/application/src/ext/java/org/opentripplanner/ext/flex/FlexRouter.java @@ -20,7 +20,6 @@ import org.opentripplanner.ext.flex.template.FlexServiceDate; import org.opentripplanner.ext.flex.trip.FlexTrip; import org.opentripplanner.framework.application.OTPRequestTimeoutException; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.model.PathTransfer; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.routing.algorithm.mapping.GraphPathToItineraryMapper; @@ -31,6 +30,7 @@ import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.model.timetable.booking.RoutingBookingInfo; import org.opentripplanner.transit.service.TransitService; +import org.opentripplanner.utils.time.ServiceDateUtils; public class FlexRouter { diff --git a/application/src/ext/java/org/opentripplanner/ext/flex/FlexTripsMapper.java b/application/src/ext/java/org/opentripplanner/ext/flex/FlexTripsMapper.java index c4167f2f9e1..696c5df4c2a 100644 --- a/application/src/ext/java/org/opentripplanner/ext/flex/FlexTripsMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/flex/FlexTripsMapper.java @@ -7,13 +7,13 @@ import org.opentripplanner.ext.flex.trip.FlexTrip; import org.opentripplanner.ext.flex.trip.ScheduledDeviatedTrip; import org.opentripplanner.ext.flex.trip.UnscheduledTrip; -import org.opentripplanner.framework.logging.ProgressTracker; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.model.StopTime; import org.opentripplanner.model.TripStopTimes; import org.opentripplanner.model.impl.OtpTransitServiceBuilder; import org.opentripplanner.routing.api.request.framework.TimePenalty; import org.opentripplanner.transit.model.timetable.Trip; +import org.opentripplanner.utils.logging.ProgressTracker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/ext/java/org/opentripplanner/ext/flex/FlexibleTransitLeg.java b/application/src/ext/java/org/opentripplanner/ext/flex/FlexibleTransitLeg.java index cf6c229c46f..25c4abee12e 100644 --- a/application/src/ext/java/org/opentripplanner/ext/flex/FlexibleTransitLeg.java +++ b/application/src/ext/java/org/opentripplanner/ext/flex/FlexibleTransitLeg.java @@ -10,8 +10,6 @@ import org.locationtech.jts.geom.LineString; import org.opentripplanner.ext.flex.edgetype.FlexTripEdge; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.lang.DoubleUtils; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.PickDrop; import org.opentripplanner.model.fare.FareProductUse; import org.opentripplanner.model.plan.Leg; @@ -28,6 +26,8 @@ import org.opentripplanner.transit.model.organization.Operator; import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.model.timetable.booking.BookingInfo; +import org.opentripplanner.utils.lang.DoubleUtils; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * One leg of a trip -- that is, a temporally continuous piece of the journey that takes place on a diff --git a/application/src/ext/java/org/opentripplanner/ext/flex/flexpathcalculator/FlexPath.java b/application/src/ext/java/org/opentripplanner/ext/flex/flexpathcalculator/FlexPath.java index 4a494286313..86934a22310 100644 --- a/application/src/ext/java/org/opentripplanner/ext/flex/flexpathcalculator/FlexPath.java +++ b/application/src/ext/java/org/opentripplanner/ext/flex/flexpathcalculator/FlexPath.java @@ -4,8 +4,8 @@ import java.util.function.Supplier; import javax.annotation.concurrent.Immutable; import org.locationtech.jts.geom.LineString; -import org.opentripplanner.framework.lang.IntUtils; import org.opentripplanner.routing.api.request.framework.TimePenalty; +import org.opentripplanner.utils.lang.IntUtils; /** * This class contains the results from a FlexPathCalculator. diff --git a/application/src/ext/java/org/opentripplanner/ext/flex/template/AbstractFlexTemplate.java b/application/src/ext/java/org/opentripplanner/ext/flex/template/AbstractFlexTemplate.java index 9ce9cf8a4c4..8dbcf4d785e 100644 --- a/application/src/ext/java/org/opentripplanner/ext/flex/template/AbstractFlexTemplate.java +++ b/application/src/ext/java/org/opentripplanner/ext/flex/template/AbstractFlexTemplate.java @@ -13,7 +13,6 @@ import org.opentripplanner.ext.flex.edgetype.FlexTripEdge; import org.opentripplanner.ext.flex.flexpathcalculator.FlexPathCalculator; import org.opentripplanner.ext.flex.trip.FlexTrip; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.PathTransfer; import org.opentripplanner.routing.graphfinder.NearbyStop; import org.opentripplanner.street.model.edge.Edge; @@ -22,6 +21,7 @@ import org.opentripplanner.street.search.state.State; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.StopLocation; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * A container for a few pieces of information that can be used to calculate flex accesses, egresses, diff --git a/application/src/ext/java/org/opentripplanner/ext/flex/template/ClosestTrip.java b/application/src/ext/java/org/opentripplanner/ext/flex/template/ClosestTrip.java index a30ebacc497..553c8aee6c0 100644 --- a/application/src/ext/java/org/opentripplanner/ext/flex/template/ClosestTrip.java +++ b/application/src/ext/java/org/opentripplanner/ext/flex/template/ClosestTrip.java @@ -7,9 +7,9 @@ import java.util.Map; import java.util.Objects; import org.opentripplanner.ext.flex.trip.FlexTrip; -import org.opentripplanner.framework.lang.IntUtils; import org.opentripplanner.routing.graphfinder.NearbyStop; import org.opentripplanner.transit.model.timetable.booking.RoutingBookingInfo; +import org.opentripplanner.utils.lang.IntUtils; /** * The combination of the closest stop, trip and trip active date. diff --git a/application/src/ext/java/org/opentripplanner/ext/flex/trip/StopTimeWindow.java b/application/src/ext/java/org/opentripplanner/ext/flex/trip/StopTimeWindow.java index 5b7ebbbc575..24b33360fce 100644 --- a/application/src/ext/java/org/opentripplanner/ext/flex/trip/StopTimeWindow.java +++ b/application/src/ext/java/org/opentripplanner/ext/flex/trip/StopTimeWindow.java @@ -3,10 +3,10 @@ import static org.opentripplanner.model.StopTime.MISSING_VALUE; import java.io.Serializable; -import org.opentripplanner.framework.lang.IntRange; import org.opentripplanner.model.PickDrop; import org.opentripplanner.model.StopTime; import org.opentripplanner.transit.model.site.StopLocation; +import org.opentripplanner.utils.lang.IntRange; class StopTimeWindow implements Serializable { diff --git a/application/src/ext/java/org/opentripplanner/ext/flex/trip/UnscheduledTrip.java b/application/src/ext/java/org/opentripplanner/ext/flex/trip/UnscheduledTrip.java index 30c79ac0d1a..b0286541bd2 100644 --- a/application/src/ext/java/org/opentripplanner/ext/flex/trip/UnscheduledTrip.java +++ b/application/src/ext/java/org/opentripplanner/ext/flex/trip/UnscheduledTrip.java @@ -12,9 +12,6 @@ import java.util.stream.Collectors; import org.opentripplanner.ext.flex.flexpathcalculator.FlexPathCalculator; import org.opentripplanner.ext.flex.flexpathcalculator.TimePenaltyCalculator; -import org.opentripplanner.framework.lang.DoubleUtils; -import org.opentripplanner.framework.lang.IntRange; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.model.PickDrop; import org.opentripplanner.model.StopTime; import org.opentripplanner.routing.api.request.framework.TimePenalty; @@ -23,6 +20,9 @@ import org.opentripplanner.transit.model.site.GroupStop; import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.model.timetable.booking.BookingInfo; +import org.opentripplanner.utils.lang.DoubleUtils; +import org.opentripplanner.utils.lang.IntRange; +import org.opentripplanner.utils.time.DurationUtils; /** * This type of FlexTrip is used when a taxi-type service is modeled, which operates in any number diff --git a/application/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java b/application/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java index 72ac22b027a..f742ddb131a 100644 --- a/application/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java +++ b/application/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java @@ -42,7 +42,6 @@ import org.apache.lucene.search.suggest.document.SuggestIndexSearcher; import org.apache.lucene.store.ByteBuffersDirectory; import org.opentripplanner.ext.stopconsolidation.StopConsolidationService; -import org.opentripplanner.framework.collection.ListUtils; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.site.StopLocation; @@ -50,6 +49,7 @@ import org.opentripplanner.transit.service.DefaultTransitService; import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.transit.service.TransitService; +import org.opentripplanner.utils.collection.ListUtils; public class LuceneIndex implements Serializable { diff --git a/application/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java b/application/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java index 98a617b809f..3a6546cfe1e 100644 --- a/application/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java @@ -13,7 +13,6 @@ import javax.annotation.Nullable; import org.opentripplanner.ext.stopconsolidation.StopConsolidationService; import org.opentripplanner.ext.stopconsolidation.model.StopReplacement; -import org.opentripplanner.framework.collection.ListUtils; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.model.FeedInfo; @@ -24,6 +23,7 @@ import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.model.site.StopLocationsGroup; import org.opentripplanner.transit.service.TransitService; +import org.opentripplanner.utils.collection.ListUtils; /** * Mappers for generating {@link LuceneStopCluster} from the transit model. diff --git a/application/src/ext/java/org/opentripplanner/ext/interactivelauncher/debug/raptor/RaptorDebugModel.java b/application/src/ext/java/org/opentripplanner/ext/interactivelauncher/debug/raptor/RaptorDebugModel.java index 41d6ed6be1a..71fb682581c 100644 --- a/application/src/ext/java/org/opentripplanner/ext/interactivelauncher/debug/raptor/RaptorDebugModel.java +++ b/application/src/ext/java/org/opentripplanner/ext/interactivelauncher/debug/raptor/RaptorDebugModel.java @@ -7,9 +7,9 @@ import java.util.Set; import javax.annotation.Nullable; import org.opentripplanner.ext.interactivelauncher.api.LauncherRequestDecorator; -import org.opentripplanner.framework.lang.StringUtils; import org.opentripplanner.routing.api.request.DebugEventType; import org.opentripplanner.routing.api.request.RouteRequest; +import org.opentripplanner.utils.lang.StringUtils; public class RaptorDebugModel implements LauncherRequestDecorator { diff --git a/application/src/ext/java/org/opentripplanner/ext/reportapi/model/CsvReportBuilder.java b/application/src/ext/java/org/opentripplanner/ext/reportapi/model/CsvReportBuilder.java index f2513159fa6..087ed028a23 100644 --- a/application/src/ext/java/org/opentripplanner/ext/reportapi/model/CsvReportBuilder.java +++ b/application/src/ext/java/org/opentripplanner/ext/reportapi/model/CsvReportBuilder.java @@ -1,7 +1,7 @@ package org.opentripplanner.ext.reportapi.model; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.time.TimeUtils; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.time.TimeUtils; /** * A very simple CSV builder to create CSV reports. diff --git a/application/src/ext/java/org/opentripplanner/ext/reportapi/model/TransfersReport.java b/application/src/ext/java/org/opentripplanner/ext/reportapi/model/TransfersReport.java index e53cd6c3c58..cff5d2f791e 100644 --- a/application/src/ext/java/org/opentripplanner/ext/reportapi/model/TransfersReport.java +++ b/application/src/ext/java/org/opentripplanner/ext/reportapi/model/TransfersReport.java @@ -1,6 +1,6 @@ package org.opentripplanner.ext.reportapi.model; -import static org.opentripplanner.framework.time.DurationUtils.durationToStr; +import static org.opentripplanner.utils.time.DurationUtils.durationToStr; import java.util.List; import java.util.Optional; diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LocalDateMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LocalDateMapper.java index 940bcc13d54..09ff79ef9fd 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LocalDateMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LocalDateMapper.java @@ -1,7 +1,7 @@ package org.opentripplanner.ext.restapi.mapping; import java.time.LocalDate; -import org.opentripplanner.framework.time.ServiceDateUtils; +import org.opentripplanner.utils.time.ServiceDateUtils; public class LocalDateMapper { diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiBookingInfo.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiBookingInfo.java index c89d6429caa..1fd4566a9b8 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiBookingInfo.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiBookingInfo.java @@ -3,7 +3,7 @@ import java.io.Serializable; import java.time.Duration; import java.util.Set; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Info about how a trip might be booked at a particular stop. All of this is pass-through diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiBookingTime.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiBookingTime.java index 08eee69a3cf..f2a8d5767ff 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiBookingTime.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiBookingTime.java @@ -1,7 +1,7 @@ package org.opentripplanner.ext.restapi.model; import java.io.Serializable; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Represents either an earliest or latest time a trip can be booked relative to the departure day diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiContactInfo.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiContactInfo.java index b7c2ec90166..cc7e6d069f1 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiContactInfo.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiContactInfo.java @@ -1,7 +1,7 @@ package org.opentripplanner.ext.restapi.model; import java.io.Serializable; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * How to contact the agency to book a trip or requests information. diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/IndexAPI.java b/application/src/ext/java/org/opentripplanner/ext/restapi/resources/IndexAPI.java index cab2be13ad0..ccf18217148 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/IndexAPI.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/resources/IndexAPI.java @@ -51,7 +51,6 @@ 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; import org.opentripplanner.model.TripTimeOnDate; import org.opentripplanner.routing.graphfinder.DirectGraphFinder; @@ -64,6 +63,7 @@ import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.service.TransitService; +import org.opentripplanner.utils.time.ServiceDateUtils; // TODO move to org.opentripplanner.api.resource, this is a Jersey resource class diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java index 51b2fae86b5..22aa194d4bb 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java @@ -3,7 +3,6 @@ import jakarta.validation.constraints.NotNull; import java.util.function.Consumer; import org.opentripplanner.ext.restapi.mapping.LegacyVehicleRoutingOptimizeType; -import org.opentripplanner.framework.lang.ObjectUtils; import org.opentripplanner.routing.algorithm.filterchain.api.TransitGeneralizedCostFilterParams; import org.opentripplanner.routing.api.request.framework.CostLinearFunction; import org.opentripplanner.routing.api.request.preference.ItineraryFilterPreferences; @@ -11,6 +10,7 @@ import org.opentripplanner.routing.api.request.preference.RoutingPreferences; import org.opentripplanner.routing.api.request.preference.VehicleParkingPreferences; import org.opentripplanner.routing.api.request.preference.VehicleRentalPreferences; +import org.opentripplanner.utils.lang.ObjectUtils; class RequestToPreferencesMapper { diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/RoutingResource.java b/application/src/ext/java/org/opentripplanner/ext/restapi/resources/RoutingResource.java index 3ae029fdb2d..9a0f030a807 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/RoutingResource.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/resources/RoutingResource.java @@ -23,8 +23,6 @@ import org.opentripplanner.ext.dataoverlay.api.DataOverlayParameters; import org.opentripplanner.ext.restapi.mapping.LegacyVehicleRoutingOptimizeType; import org.opentripplanner.framework.application.OTPFeature; -import org.opentripplanner.framework.lang.StringUtils; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.framework.time.ZoneIdFallback; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.preference.ItineraryFilterDebugProfile; @@ -35,6 +33,8 @@ import org.opentripplanner.standalone.config.framework.json.NodeAdapter; import org.opentripplanner.standalone.config.routerequest.RouteRequestConfig; import org.opentripplanner.transit.model.basic.MainAndSubMode; +import org.opentripplanner.utils.lang.StringUtils; +import org.opentripplanner.utils.time.DurationUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/DigitransitRealtimeStopPropertyMapper.java b/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/DigitransitRealtimeStopPropertyMapper.java index cf555d6412f..af2ec7212ec 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/DigitransitRealtimeStopPropertyMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/DigitransitRealtimeStopPropertyMapper.java @@ -8,12 +8,12 @@ import java.util.List; import java.util.Locale; import org.opentripplanner.apis.support.mapping.PropertyMapper; -import org.opentripplanner.framework.collection.ListUtils; import org.opentripplanner.framework.i18n.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.routing.stoptimes.ArrivalDeparture; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.service.TransitService; +import org.opentripplanner.utils.collection.ListUtils; public class DigitransitRealtimeStopPropertyMapper extends PropertyMapper { diff --git a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/bikeep/BikeepUpdater.java b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/bikeep/BikeepUpdater.java index 9216eb79995..cd6a39fecd3 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/bikeep/BikeepUpdater.java +++ b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/bikeep/BikeepUpdater.java @@ -7,12 +7,12 @@ import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.framework.json.ObjectMappers; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.vehicle_parking.VehicleParking; import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; import org.opentripplanner.routing.vehicle_parking.VehicleParkingState; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.updater.spi.GenericJsonDataSource; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Vehicle parking updater for Bikeep's API. diff --git a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/parkapi/ParkAPIUpdater.java b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/parkapi/ParkAPIUpdater.java index 59a19b1cce7..c7bd6631a48 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/parkapi/ParkAPIUpdater.java +++ b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/parkapi/ParkAPIUpdater.java @@ -12,7 +12,6 @@ import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.framework.i18n.TranslatedString; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.calendar.openinghours.OHCalendar; import org.opentripplanner.model.calendar.openinghours.OpeningHoursCalendarService; import org.opentripplanner.osm.OsmOpeningHoursParser; @@ -21,6 +20,7 @@ import org.opentripplanner.routing.vehicle_parking.VehicleParkingState; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.updater.spi.GenericJsonDataSource; +import org.opentripplanner.utils.tostring.ToStringBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/sirifm/SiriFmDatasource.java b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/sirifm/SiriFmDatasource.java index abfdf4d29be..e05cfdb42ad 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/sirifm/SiriFmDatasource.java +++ b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/sirifm/SiriFmDatasource.java @@ -8,11 +8,11 @@ import org.entur.siri21.util.SiriXml; import org.opentripplanner.framework.io.OtpHttpClient; import org.opentripplanner.framework.io.OtpHttpClientFactory; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.updater.spi.DataSource; import org.opentripplanner.updater.spi.HttpHeaders; import org.opentripplanner.updater.vehicle_parking.AvailabiltyUpdate; +import org.opentripplanner.utils.tostring.ToStringBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import uk.org.siri.siri21.FacilityConditionStructure; diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/GraphQLScalars.java b/application/src/main/java/org/opentripplanner/apis/gtfs/GraphQLScalars.java index 25953652365..8427777bd38 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/GraphQLScalars.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/GraphQLScalars.java @@ -22,7 +22,7 @@ import org.opentripplanner.framework.json.ObjectMappers; import org.opentripplanner.framework.model.Cost; import org.opentripplanner.framework.model.Grams; -import org.opentripplanner.framework.time.OffsetDateTimeParser; +import org.opentripplanner.utils.time.OffsetDateTimeParser; public class GraphQLScalars { diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PatternImpl.java b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PatternImpl.java index 88db00c3c4e..fbab1e95400 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PatternImpl.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PatternImpl.java @@ -18,7 +18,6 @@ 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; import org.opentripplanner.routing.alertpatch.TransitAlert; import org.opentripplanner.routing.services.TransitAlertService; @@ -31,6 +30,7 @@ import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.model.timetable.TripTimes; import org.opentripplanner.transit.service.TransitService; +import org.opentripplanner.utils.time.ServiceDateUtils; public class PatternImpl implements GraphQLDataFetchers.GraphQLPattern { diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java index 95984ba6dd0..9e9d78445f3 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java @@ -38,7 +38,6 @@ import org.opentripplanner.ext.fares.impl.GtfsFaresService; import org.opentripplanner.ext.fares.model.FareRuleSet; import org.opentripplanner.framework.application.OTPFeature; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.gtfs.mapping.DirectionMapper; import org.opentripplanner.model.TripTimeOnDate; @@ -74,6 +73,7 @@ import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.service.TransitService; import org.opentripplanner.updater.GtfsRealtimeFuzzyTripMatcher; +import org.opentripplanner.utils.time.ServiceDateUtils; public class QueryTypeImpl implements GraphQLDataFetchers.GraphQLQueryType { diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/StopImpl.java b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/StopImpl.java index 8d9c11bb7d4..2d17326a0ef 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/StopImpl.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/StopImpl.java @@ -20,7 +20,6 @@ import org.opentripplanner.apis.gtfs.generated.GraphQLTypes; import org.opentripplanner.apis.gtfs.support.filter.PatternByDateFilterUtil; import org.opentripplanner.apis.gtfs.support.time.LocalDateRangeUtil; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.model.StopTimesInPattern; import org.opentripplanner.model.TripTimeOnDate; import org.opentripplanner.routing.alertpatch.EntitySelector; @@ -37,6 +36,7 @@ import org.opentripplanner.transit.model.site.Station; import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.service.TransitService; +import org.opentripplanner.utils.time.ServiceDateUtils; public class StopImpl implements GraphQLDataFetchers.GraphQLStop { diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/TripImpl.java b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/TripImpl.java index 21bff637976..956b35309e2 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/TripImpl.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/TripImpl.java @@ -23,7 +23,6 @@ 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; import org.opentripplanner.routing.alertpatch.EntitySelector; @@ -39,6 +38,7 @@ import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.model.timetable.TripTimes; import org.opentripplanner.transit.service.TransitService; +import org.opentripplanner.utils.time.ServiceDateUtils; public class TripImpl implements GraphQLDataFetchers.GraphQLTrip { diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/BicyclePreferencesMapper.java b/application/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/BicyclePreferencesMapper.java index cd4d508282e..263f6ee33ee 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/BicyclePreferencesMapper.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/BicyclePreferencesMapper.java @@ -8,11 +8,11 @@ import graphql.schema.DataFetchingEnvironment; import java.util.Set; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.routing.api.request.preference.BikePreferences; import org.opentripplanner.routing.api.request.preference.VehicleParkingPreferences; import org.opentripplanner.routing.api.request.preference.VehicleRentalPreferences; import org.opentripplanner.routing.api.request.preference.VehicleWalkingPreferences; +import org.opentripplanner.utils.time.DurationUtils; public class BicyclePreferencesMapper { diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/RouteRequestMapper.java b/application/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/RouteRequestMapper.java index 22834b200f6..95752548ca8 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/RouteRequestMapper.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/RouteRequestMapper.java @@ -12,12 +12,12 @@ import org.opentripplanner.apis.gtfs.GraphQLRequestContext; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes; import org.opentripplanner.framework.graphql.GraphQLUtils; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.model.GenericLocation; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.preference.ItineraryFilterPreferences; import org.opentripplanner.routing.api.request.preference.RoutingPreferences; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.time.DurationUtils; public class RouteRequestMapper { diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/TransitPreferencesMapper.java b/application/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/TransitPreferencesMapper.java index f9ef3d2af55..4ac55add5a9 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/TransitPreferencesMapper.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/TransitPreferencesMapper.java @@ -7,10 +7,10 @@ import java.util.stream.Collectors; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes; import org.opentripplanner.apis.gtfs.mapping.TransitModeMapper; -import org.opentripplanner.framework.collection.CollectionUtils; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.routing.api.request.preference.TransferPreferences; import org.opentripplanner.routing.api.request.preference.TransitPreferences; +import org.opentripplanner.utils.collection.CollectionUtils; +import org.opentripplanner.utils.time.DurationUtils; public class TransitPreferencesMapper { diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraph.java b/application/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraph.java index f4241fcbc61..e7f3fc7b8e0 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraph.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraph.java @@ -23,9 +23,9 @@ import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.framework.application.OTPRequestTimeoutException; import org.opentripplanner.framework.concurrent.OtpRequestThreadFactory; -import org.opentripplanner.framework.lang.ObjectUtils; import org.opentripplanner.standalone.api.OtpServerRequestContext; import org.opentripplanner.transit.model.framework.EntityNotFoundException; +import org.opentripplanner.utils.lang.ObjectUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/mapping/TransitIdMapper.java b/application/src/main/java/org/opentripplanner/apis/transmodel/mapping/TransitIdMapper.java index 1231ebd73b6..4bb1bb556e1 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/mapping/TransitIdMapper.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/mapping/TransitIdMapper.java @@ -5,9 +5,9 @@ import java.util.Map; import java.util.stream.Collectors; import javax.annotation.Nullable; -import org.opentripplanner.framework.lang.StringUtils; import org.opentripplanner.transit.model.framework.AbstractTransitEntity; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/framework/PenaltyForStreetModeType.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/framework/PenaltyForStreetModeType.java index b899ada3599..c553fccf667 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/framework/PenaltyForStreetModeType.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/framework/PenaltyForStreetModeType.java @@ -19,10 +19,10 @@ import org.opentripplanner.apis.transmodel.model.EnumTypes; import org.opentripplanner.apis.transmodel.model.scalars.DoubleFunction; import org.opentripplanner.apis.transmodel.support.GqlUtil; -import org.opentripplanner.framework.lang.ObjectUtils; import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.routing.api.request.framework.TimeAndCostPenalty; import org.opentripplanner.routing.api.request.framework.TimeAndCostPenaltyForEnum; +import org.opentripplanner.utils.lang.ObjectUtils; /** * Access and egress penalty: diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/framework/StreetModeDurationInputType.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/framework/StreetModeDurationInputType.java index 2fba22c78b7..9c92d7253d5 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/framework/StreetModeDurationInputType.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/framework/StreetModeDurationInputType.java @@ -17,9 +17,9 @@ import java.util.Objects; import org.opentripplanner.apis.transmodel.model.EnumTypes; import org.opentripplanner.apis.transmodel.support.GqlUtil; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.routing.api.request.framework.DurationForEnum; +import org.opentripplanner.utils.time.DurationUtils; public class StreetModeDurationInputType { diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/RelaxCostType.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/RelaxCostType.java index 41435c83a2f..9272bd86757 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/RelaxCostType.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/RelaxCostType.java @@ -10,8 +10,8 @@ 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; +import org.opentripplanner.utils.time.DurationUtils; public class RelaxCostType { diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPatternTimePenaltyType.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPatternTimePenaltyType.java index 744113929c7..2ad88762408 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPatternTimePenaltyType.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPatternTimePenaltyType.java @@ -4,7 +4,7 @@ import graphql.schema.DataFetchingEnvironment; import graphql.schema.GraphQLFieldDefinition; import graphql.schema.GraphQLObjectType; -import org.opentripplanner.framework.time.DurationUtils; +import org.opentripplanner.utils.time.DurationUtils; public class TripPatternTimePenaltyType { diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/scalars/DateTimeScalarFactory.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/scalars/DateTimeScalarFactory.java index f539715206e..19681987199 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/scalars/DateTimeScalarFactory.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/scalars/DateTimeScalarFactory.java @@ -12,7 +12,7 @@ import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.time.temporal.TemporalAccessor; -import org.opentripplanner.framework.time.OffsetDateTimeParser; +import org.opentripplanner.utils.time.OffsetDateTimeParser; public final class DateTimeScalarFactory { diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/support/AbortOnUnprocessableRequestExecutionStrategy.java b/application/src/main/java/org/opentripplanner/apis/transmodel/support/AbortOnUnprocessableRequestExecutionStrategy.java index c395d359131..f47b2404bb2 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/support/AbortOnUnprocessableRequestExecutionStrategy.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/support/AbortOnUnprocessableRequestExecutionStrategy.java @@ -8,7 +8,7 @@ import org.opentripplanner.apis.support.graphql.LoggingDataFetcherExceptionHandler; import org.opentripplanner.apis.transmodel.ResponseTooLargeException; import org.opentripplanner.framework.application.OTPRequestTimeoutException; -import org.opentripplanner.framework.logging.ProgressTracker; +import org.opentripplanner.utils.logging.ProgressTracker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java b/application/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java index 1fc87176af8..3c8423c5270 100644 --- a/application/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java +++ b/application/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java @@ -11,7 +11,6 @@ import org.opentripplanner.apis.vectortiles.model.VectorSourceLayer; import org.opentripplanner.apis.vectortiles.model.ZoomDependentNumber; import org.opentripplanner.apis.vectortiles.model.ZoomDependentNumber.ZoomStop; -import org.opentripplanner.framework.collection.ListUtils; import org.opentripplanner.service.vehiclerental.street.StreetVehicleRentalLink; import org.opentripplanner.street.model.StreetTraversalPermission; import org.opentripplanner.street.model.edge.AreaEdge; @@ -28,6 +27,7 @@ import org.opentripplanner.street.model.edge.TemporaryFreeEdge; import org.opentripplanner.street.model.edge.TemporaryPartialStreetEdge; import org.opentripplanner.street.model.vertex.VehicleParkingEntranceVertex; +import org.opentripplanner.utils.collection.ListUtils; /** * A Mapbox/Mapblibre style specification for rendering debug information about transit and diff --git a/application/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleBuilder.java b/application/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleBuilder.java index 93b7ea91e7c..6f81e7fd998 100644 --- a/application/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleBuilder.java +++ b/application/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleBuilder.java @@ -9,11 +9,11 @@ import java.util.Objects; import java.util.stream.Stream; import org.opentripplanner.apis.vectortiles.model.ZoomDependentNumber.ZoomStop; -import org.opentripplanner.framework.collection.ListUtils; import org.opentripplanner.framework.json.ObjectMappers; import org.opentripplanner.street.model.StreetTraversalPermission; import org.opentripplanner.street.model.edge.Edge; import org.opentripplanner.street.model.vertex.Vertex; +import org.opentripplanner.utils.collection.ListUtils; /** * Builds a Maplibre/Mapbox vector tile diff --git a/application/src/main/java/org/opentripplanner/apis/vectortiles/model/ZoomDependentNumber.java b/application/src/main/java/org/opentripplanner/apis/vectortiles/model/ZoomDependentNumber.java index 4d1d83ee8a9..cc655ba2038 100644 --- a/application/src/main/java/org/opentripplanner/apis/vectortiles/model/ZoomDependentNumber.java +++ b/application/src/main/java/org/opentripplanner/apis/vectortiles/model/ZoomDependentNumber.java @@ -3,10 +3,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.ArrayList; -import java.util.LinkedHashMap; import java.util.List; -import java.util.stream.Stream; -import org.opentripplanner.framework.collection.ListUtils; import org.opentripplanner.framework.json.ObjectMappers; /** diff --git a/application/src/main/java/org/opentripplanner/astar/AStar.java b/application/src/main/java/org/opentripplanner/astar/AStar.java index 9c14669a159..86d48a3cbd8 100644 --- a/application/src/main/java/org/opentripplanner/astar/AStar.java +++ b/application/src/main/java/org/opentripplanner/astar/AStar.java @@ -19,7 +19,7 @@ import org.opentripplanner.astar.spi.SkipEdgeStrategy; import org.opentripplanner.astar.spi.TraverseVisitor; import org.opentripplanner.framework.application.OTPRequestTimeoutException; -import org.opentripplanner.framework.time.DateUtils; +import org.opentripplanner.utils.time.DateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/datastore/api/DataSource.java b/application/src/main/java/org/opentripplanner/datastore/api/DataSource.java index e1eafcbdb2a..ee95f50680e 100644 --- a/application/src/main/java/org/opentripplanner/datastore/api/DataSource.java +++ b/application/src/main/java/org/opentripplanner/datastore/api/DataSource.java @@ -6,7 +6,7 @@ import java.net.URI; import java.text.SimpleDateFormat; import org.opentripplanner.datastore.OtpDataStore; -import org.opentripplanner.framework.text.FileSizeToTextConverter; +import org.opentripplanner.utils.text.FileSizeToTextConverter; /** * A data source is generalized type to represent an file, database blob or unit that OTP read or diff --git a/application/src/main/java/org/opentripplanner/datastore/https/HttpsDataSourceMetadata.java b/application/src/main/java/org/opentripplanner/datastore/https/HttpsDataSourceMetadata.java index 9011f99d5ce..8a84b0210b1 100644 --- a/application/src/main/java/org/opentripplanner/datastore/https/HttpsDataSourceMetadata.java +++ b/application/src/main/java/org/opentripplanner/datastore/https/HttpsDataSourceMetadata.java @@ -9,7 +9,7 @@ import org.apache.hc.core5.http.Header; import org.apache.hc.core5.http.HttpHeaders; import org.opentripplanner.datastore.api.DataSource; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * HTTPS data source metadata returned by the HTTP server (HTTP headers). diff --git a/application/src/main/java/org/opentripplanner/framework/application/LogMDCSupport.java b/application/src/main/java/org/opentripplanner/framework/application/LogMDCSupport.java index 6dccdcd8152..909363badd3 100644 --- a/application/src/main/java/org/opentripplanner/framework/application/LogMDCSupport.java +++ b/application/src/main/java/org/opentripplanner/framework/application/LogMDCSupport.java @@ -2,7 +2,7 @@ import java.util.Map; import javax.annotation.Nullable; -import org.opentripplanner.framework.lang.StringUtils; +import org.opentripplanner.utils.lang.StringUtils; import org.slf4j.MDC; /** diff --git a/application/src/main/java/org/opentripplanner/framework/geometry/CompactElevationProfile.java b/application/src/main/java/org/opentripplanner/framework/geometry/CompactElevationProfile.java index bdab5f492e3..105c79973cd 100644 --- a/application/src/main/java/org/opentripplanner/framework/geometry/CompactElevationProfile.java +++ b/application/src/main/java/org/opentripplanner/framework/geometry/CompactElevationProfile.java @@ -4,7 +4,7 @@ import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.CoordinateSequence; import org.locationtech.jts.geom.impl.PackedCoordinateSequence; -import org.opentripplanner.framework.lang.IntUtils; +import org.opentripplanner.utils.lang.IntUtils; /** * Compact elevation profile. To optimize storage, we use the following tricks: diff --git a/application/src/main/java/org/opentripplanner/framework/geometry/CompactLineStringUtils.java b/application/src/main/java/org/opentripplanner/framework/geometry/CompactLineStringUtils.java index d464d96fcee..19bf9824726 100644 --- a/application/src/main/java/org/opentripplanner/framework/geometry/CompactLineStringUtils.java +++ b/application/src/main/java/org/opentripplanner/framework/geometry/CompactLineStringUtils.java @@ -2,7 +2,7 @@ import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.LineString; -import org.opentripplanner.framework.lang.IntUtils; +import org.opentripplanner.utils.lang.IntUtils; /** * Compact line string. To optimize storage, we use the following tricks: diff --git a/application/src/main/java/org/opentripplanner/framework/geometry/HashGridSpatialIndex.java b/application/src/main/java/org/opentripplanner/framework/geometry/HashGridSpatialIndex.java index d4082f9e22d..edda3fe4086 100644 --- a/application/src/main/java/org/opentripplanner/framework/geometry/HashGridSpatialIndex.java +++ b/application/src/main/java/org/opentripplanner/framework/geometry/HashGridSpatialIndex.java @@ -14,7 +14,7 @@ import org.locationtech.jts.geom.LineString; import org.locationtech.jts.index.ItemVisitor; import org.locationtech.jts.index.SpatialIndex; -import org.opentripplanner.framework.lang.IntBox; +import org.opentripplanner.utils.lang.IntBox; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/framework/geometry/WgsCoordinate.java b/application/src/main/java/org/opentripplanner/framework/geometry/WgsCoordinate.java index 6c3dbf0f9d3..e6b88ad0223 100644 --- a/application/src/main/java/org/opentripplanner/framework/geometry/WgsCoordinate.java +++ b/application/src/main/java/org/opentripplanner/framework/geometry/WgsCoordinate.java @@ -5,8 +5,8 @@ import java.util.Objects; import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.Point; -import org.opentripplanner.framework.lang.DoubleUtils; -import org.opentripplanner.framework.tostring.ValueObjectToStringBuilder; +import org.opentripplanner.utils.lang.DoubleUtils; +import org.opentripplanner.utils.tostring.ValueObjectToStringBuilder; /** * This class represent a OTP coordinate. diff --git a/application/src/main/java/org/opentripplanner/framework/graphql/scalar/CostScalarFactory.java b/application/src/main/java/org/opentripplanner/framework/graphql/scalar/CostScalarFactory.java index 415118013f3..fc109444786 100644 --- a/application/src/main/java/org/opentripplanner/framework/graphql/scalar/CostScalarFactory.java +++ b/application/src/main/java/org/opentripplanner/framework/graphql/scalar/CostScalarFactory.java @@ -11,7 +11,7 @@ import java.util.Locale; import java.util.NoSuchElementException; import org.opentripplanner.framework.model.Cost; -import org.opentripplanner.framework.time.DurationUtils; +import org.opentripplanner.utils.time.DurationUtils; public class CostScalarFactory { diff --git a/application/src/main/java/org/opentripplanner/framework/graphql/scalar/DurationScalarFactory.java b/application/src/main/java/org/opentripplanner/framework/graphql/scalar/DurationScalarFactory.java index b685ecc597e..5a61816ea06 100644 --- a/application/src/main/java/org/opentripplanner/framework/graphql/scalar/DurationScalarFactory.java +++ b/application/src/main/java/org/opentripplanner/framework/graphql/scalar/DurationScalarFactory.java @@ -8,7 +8,7 @@ import graphql.schema.GraphQLScalarType; import java.time.Duration; import java.time.format.DateTimeParseException; -import org.opentripplanner.framework.time.DurationUtils; +import org.opentripplanner.utils.time.DurationUtils; public class DurationScalarFactory { diff --git a/application/src/main/java/org/opentripplanner/framework/model/Cost.java b/application/src/main/java/org/opentripplanner/framework/model/Cost.java index dbd96b81180..47ab4875f5b 100644 --- a/application/src/main/java/org/opentripplanner/framework/model/Cost.java +++ b/application/src/main/java/org/opentripplanner/framework/model/Cost.java @@ -2,8 +2,8 @@ import java.io.Serializable; import java.time.Duration; -import org.opentripplanner.framework.lang.IntUtils; -import org.opentripplanner.framework.lang.OtpNumberFormat; +import org.opentripplanner.utils.lang.IntUtils; +import org.opentripplanner.utils.lang.OtpNumberFormat; /** * A type safe representation of a cost, like generalized-cost. A cost unit is equivalent of riding diff --git a/application/src/main/java/org/opentripplanner/framework/model/TimeAndCost.java b/application/src/main/java/org/opentripplanner/framework/model/TimeAndCost.java index e9376dad622..77c568d0b55 100644 --- a/application/src/main/java/org/opentripplanner/framework/model/TimeAndCost.java +++ b/application/src/main/java/org/opentripplanner/framework/model/TimeAndCost.java @@ -1,7 +1,7 @@ package org.opentripplanner.framework.model; import java.time.Duration; -import org.opentripplanner.framework.time.DurationUtils; +import org.opentripplanner.utils.time.DurationUtils; /** * Tuple of time(duration) and cost. diff --git a/application/src/main/java/org/opentripplanner/framework/model/Units.java b/application/src/main/java/org/opentripplanner/framework/model/Units.java index 736846c869f..ab3d77e5703 100644 --- a/application/src/main/java/org/opentripplanner/framework/model/Units.java +++ b/application/src/main/java/org/opentripplanner/framework/model/Units.java @@ -3,8 +3,8 @@ import static java.lang.Math.abs; import java.util.Locale; -import org.opentripplanner.framework.lang.DoubleUtils; -import org.opentripplanner.framework.lang.IntUtils; +import org.opentripplanner.utils.lang.DoubleUtils; +import org.opentripplanner.utils.lang.IntUtils; /** * This utility can be used to perform sanity checks on common number types. It will also normalize diff --git a/application/src/main/java/org/opentripplanner/framework/time/ZoneIdFallback.java b/application/src/main/java/org/opentripplanner/framework/time/ZoneIdFallback.java index 2d43216e4b2..b645dbe88f4 100644 --- a/application/src/main/java/org/opentripplanner/framework/time/ZoneIdFallback.java +++ b/application/src/main/java/org/opentripplanner/framework/time/ZoneIdFallback.java @@ -2,7 +2,7 @@ import java.time.ZoneId; import javax.annotation.Nullable; -import org.opentripplanner.framework.logging.Throttle; +import org.opentripplanner.utils.logging.Throttle; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/framework/token/Serializer.java b/application/src/main/java/org/opentripplanner/framework/token/Serializer.java index 2d01a0ebf5e..3b48792c06d 100644 --- a/application/src/main/java/org/opentripplanner/framework/token/Serializer.java +++ b/application/src/main/java/org/opentripplanner/framework/token/Serializer.java @@ -1,7 +1,7 @@ package org.opentripplanner.framework.token; import java.util.Base64; -import org.opentripplanner.framework.text.CharacterEscapeFormatter; +import org.opentripplanner.utils.text.CharacterEscapeFormatter; class Serializer { diff --git a/application/src/main/java/org/opentripplanner/framework/token/TokenBuilder.java b/application/src/main/java/org/opentripplanner/framework/token/TokenBuilder.java index 4061d073a2d..4a6af98319d 100644 --- a/application/src/main/java/org/opentripplanner/framework/token/TokenBuilder.java +++ b/application/src/main/java/org/opentripplanner/framework/token/TokenBuilder.java @@ -2,7 +2,7 @@ import java.time.Duration; import java.time.Instant; -import org.opentripplanner.framework.lang.ObjectUtils; +import org.opentripplanner.utils.lang.ObjectUtils; /** * This class is used to create a {@link Token} before encoding it. diff --git a/application/src/main/java/org/opentripplanner/framework/token/TokenDefinition.java b/application/src/main/java/org/opentripplanner/framework/token/TokenDefinition.java index d4ac7a61aec..e8e44f0f293 100644 --- a/application/src/main/java/org/opentripplanner/framework/token/TokenDefinition.java +++ b/application/src/main/java/org/opentripplanner/framework/token/TokenDefinition.java @@ -4,7 +4,7 @@ import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * A token definition is an ordered list of fields. A field has a name and a type. The diff --git a/application/src/main/java/org/opentripplanner/framework/token/TokenDefinitionBuilder.java b/application/src/main/java/org/opentripplanner/framework/token/TokenDefinitionBuilder.java index 06a935c7b47..6fb9f500e88 100644 --- a/application/src/main/java/org/opentripplanner/framework/token/TokenDefinitionBuilder.java +++ b/application/src/main/java/org/opentripplanner/framework/token/TokenDefinitionBuilder.java @@ -2,8 +2,8 @@ import java.util.ArrayList; import java.util.List; -import org.opentripplanner.framework.collection.ListUtils; -import org.opentripplanner.framework.lang.IntUtils; +import org.opentripplanner.utils.collection.ListUtils; +import org.opentripplanner.utils.lang.IntUtils; public class TokenDefinitionBuilder { diff --git a/application/src/main/java/org/opentripplanner/framework/token/TokenFormatterConfiguration.java b/application/src/main/java/org/opentripplanner/framework/token/TokenFormatterConfiguration.java index 3945014dad5..16f71d7475c 100644 --- a/application/src/main/java/org/opentripplanner/framework/token/TokenFormatterConfiguration.java +++ b/application/src/main/java/org/opentripplanner/framework/token/TokenFormatterConfiguration.java @@ -1,6 +1,6 @@ package org.opentripplanner.framework.token; -import org.opentripplanner.framework.text.CharacterEscapeFormatter; +import org.opentripplanner.utils.text.CharacterEscapeFormatter; class TokenFormatterConfiguration { diff --git a/application/src/main/java/org/opentripplanner/framework/token/TokenSchema.java b/application/src/main/java/org/opentripplanner/framework/token/TokenSchema.java index 7ac3aa63c9f..35bb836251b 100644 --- a/application/src/main/java/org/opentripplanner/framework/token/TokenSchema.java +++ b/application/src/main/java/org/opentripplanner/framework/token/TokenSchema.java @@ -3,7 +3,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * A token schema contains a set of token definitions, one for each version. This is diff --git a/application/src/main/java/org/opentripplanner/framework/token/TokenType.java b/application/src/main/java/org/opentripplanner/framework/token/TokenType.java index aea39949b0e..b60d80f3406 100644 --- a/application/src/main/java/org/opentripplanner/framework/token/TokenType.java +++ b/application/src/main/java/org/opentripplanner/framework/token/TokenType.java @@ -3,7 +3,7 @@ import java.time.Duration; import java.time.Instant; import javax.annotation.Nullable; -import org.opentripplanner.framework.time.DurationUtils; +import org.opentripplanner.utils.time.DurationUtils; /** * List of types we can store in a token. diff --git a/application/src/main/java/org/opentripplanner/graph_builder/GraphBuilder.java b/application/src/main/java/org/opentripplanner/graph_builder/GraphBuilder.java index f88cc6ea937..bc83ad2a8af 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/GraphBuilder.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/GraphBuilder.java @@ -13,8 +13,6 @@ import org.opentripplanner.ext.stopconsolidation.StopConsolidationRepository; import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.framework.application.OtpAppException; -import org.opentripplanner.framework.lang.OtpNumberFormat; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.graph_builder.issue.api.DataImportIssueSummary; import org.opentripplanner.graph_builder.model.GraphBuilderModule; @@ -24,6 +22,8 @@ import org.opentripplanner.standalone.config.BuildConfig; import org.opentripplanner.street.model.StreetLimitationParameters; import org.opentripplanner.transit.service.TimetableRepository; +import org.opentripplanner.utils.lang.OtpNumberFormat; +import org.opentripplanner.utils.time.DurationUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/graph_builder/issue/api/Issue.java b/application/src/main/java/org/opentripplanner/graph_builder/issue/api/Issue.java index 24beb48e845..cb50320345c 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/issue/api/Issue.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/issue/api/Issue.java @@ -1,6 +1,6 @@ package org.opentripplanner.graph_builder.issue.api; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Generic issue type, which can be used to create issues. diff --git a/application/src/main/java/org/opentripplanner/graph_builder/issue/report/DataImportIssueReporter.java b/application/src/main/java/org/opentripplanner/graph_builder/issue/report/DataImportIssueReporter.java index 5d209f26ac9..28daceccbba 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/issue/report/DataImportIssueReporter.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/issue/report/DataImportIssueReporter.java @@ -8,10 +8,10 @@ import java.util.Map; import java.util.stream.Collectors; import org.opentripplanner.datastore.api.CompositeDataSource; -import org.opentripplanner.framework.logging.ProgressTracker; import org.opentripplanner.graph_builder.issue.api.DataImportIssue; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.graph_builder.model.GraphBuilderModule; +import org.opentripplanner.utils.logging.ProgressTracker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/graph_builder/issues/HopZeroDistance.java b/application/src/main/java/org/opentripplanner/graph_builder/issues/HopZeroDistance.java index 3ea11b25901..cf11f011d00 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/issues/HopZeroDistance.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/issues/HopZeroDistance.java @@ -1,10 +1,10 @@ package org.opentripplanner.graph_builder.issues; import org.locationtech.jts.geom.Geometry; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.graph_builder.issue.api.DataImportIssue; import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.model.timetable.Trip; +import org.opentripplanner.utils.time.DurationUtils; public record HopZeroDistance( int sec, diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/DirectTransferGenerator.java b/application/src/main/java/org/opentripplanner/graph_builder/module/DirectTransferGenerator.java index a1a0796c66a..c0deb932418 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/DirectTransferGenerator.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/DirectTransferGenerator.java @@ -8,7 +8,6 @@ import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import org.opentripplanner.framework.application.OTPFeature; -import org.opentripplanner.framework.logging.ProgressTracker; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.graph_builder.issues.StopNotLinkedForTransfers; import org.opentripplanner.graph_builder.model.GraphBuilderModule; @@ -26,6 +25,7 @@ import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.service.DefaultTransitService; import org.opentripplanner.transit.service.TimetableRepository; +import org.opentripplanner.utils.logging.ProgressTracker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java b/application/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java index 32495617db9..a52f705147e 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/StreetLinkerModule.java @@ -6,7 +6,6 @@ import java.util.function.BiFunction; import java.util.stream.Collectors; import org.opentripplanner.framework.application.OTPFeature; -import org.opentripplanner.framework.logging.ProgressTracker; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.graph_builder.issues.ParkAndRideEntranceRemoved; import org.opentripplanner.graph_builder.model.GraphBuilderModule; @@ -32,6 +31,7 @@ import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.service.TimetableRepository; +import org.opentripplanner.utils.logging.ProgressTracker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/ValidateAndInterpolateStopTimesForEachTrip.java b/application/src/main/java/org/opentripplanner/graph_builder/module/ValidateAndInterpolateStopTimesForEachTrip.java index b0fc10fbe37..62b8e5c8173 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/ValidateAndInterpolateStopTimesForEachTrip.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/ValidateAndInterpolateStopTimesForEachTrip.java @@ -8,7 +8,6 @@ import org.opentripplanner.ext.flex.trip.FlexTrip; import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.framework.geometry.SphericalDistanceLibrary; -import org.opentripplanner.framework.logging.ProgressTracker; import org.opentripplanner.graph_builder.issue.api.DataImportIssue; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.graph_builder.issues.HopSpeedFast; @@ -23,6 +22,7 @@ import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.timetable.Trip; +import org.opentripplanner.utils.logging.ProgressTracker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/geometry/CalculateWorldEnvelopeModule.java b/application/src/main/java/org/opentripplanner/graph_builder/module/geometry/CalculateWorldEnvelopeModule.java index e114eb612e3..87bb931cd3a 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/geometry/CalculateWorldEnvelopeModule.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/geometry/CalculateWorldEnvelopeModule.java @@ -2,7 +2,6 @@ import jakarta.inject.Inject; import java.util.Collection; -import org.opentripplanner.framework.logging.ProgressTracker; import org.opentripplanner.graph_builder.model.GraphBuilderModule; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.service.worldenvelope.WorldEnvelopeRepository; @@ -10,6 +9,7 @@ import org.opentripplanner.street.model.vertex.Vertex; import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.service.TimetableRepository; +import org.opentripplanner.utils.logging.ProgressTracker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/ned/ElevationModule.java b/application/src/main/java/org/opentripplanner/graph_builder/module/ned/ElevationModule.java index 6bcab049bd4..af8fb943072 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/ned/ElevationModule.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/ned/ElevationModule.java @@ -29,9 +29,6 @@ import org.locationtech.jts.geom.impl.PackedCoordinateSequence; import org.opentripplanner.framework.geometry.EncodedPolyline; import org.opentripplanner.framework.geometry.SphericalDistanceLibrary; -import org.opentripplanner.framework.lang.IntUtils; -import org.opentripplanner.framework.logging.ProgressTracker; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.graph_builder.issues.ElevationFlattened; import org.opentripplanner.graph_builder.issues.ElevationProfileFailure; @@ -43,6 +40,9 @@ import org.opentripplanner.street.model.edge.StreetEdge; import org.opentripplanner.street.model.edge.StreetElevationExtensionBuilder; import org.opentripplanner.street.model.vertex.Vertex; +import org.opentripplanner.utils.lang.IntUtils; +import org.opentripplanner.utils.logging.ProgressTracker; +import org.opentripplanner.utils.time.DurationUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/ned/MissingElevationHandler.java b/application/src/main/java/org/opentripplanner/graph_builder/module/ned/MissingElevationHandler.java index 4ae6c698d03..e0f5672a6ca 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/ned/MissingElevationHandler.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/ned/MissingElevationHandler.java @@ -5,7 +5,6 @@ import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.impl.PackedCoordinateSequence; import org.opentripplanner.astar.model.BinHeap; -import org.opentripplanner.framework.lang.DoubleUtils; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.graph_builder.issues.ElevationFlattened; import org.opentripplanner.graph_builder.issues.ElevationProfileFailure; @@ -13,6 +12,7 @@ import org.opentripplanner.street.model.edge.StreetEdge; import org.opentripplanner.street.model.edge.StreetElevationExtensionBuilder; import org.opentripplanner.street.model.vertex.Vertex; +import org.opentripplanner.utils.lang.DoubleUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java b/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java index 0fa3c4cbd3b..382b206a053 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java @@ -27,7 +27,6 @@ import org.opentripplanner.framework.collection.ToveUtils; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.framework.geometry.HashGridSpatialIndex; -import org.opentripplanner.framework.lang.StringUtils; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.graph_builder.issue.api.Issue; import org.opentripplanner.graph_builder.issues.DisconnectedOsmNode; @@ -50,6 +49,7 @@ import org.opentripplanner.street.model.TurnRestrictionType; import org.opentripplanner.street.search.TraverseMode; import org.opentripplanner.street.search.TraverseModeSet; +import org.opentripplanner.utils.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmModule.java b/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmModule.java index 98ed4953b91..08d23087a45 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmModule.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmModule.java @@ -14,7 +14,6 @@ import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.framework.geometry.SphericalDistanceLibrary; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.logging.ProgressTracker; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.graph_builder.model.GraphBuilderModule; import org.opentripplanner.graph_builder.module.osm.parameters.OsmProcessingParameters; @@ -34,6 +33,7 @@ import org.opentripplanner.street.model.vertex.BarrierVertex; import org.opentripplanner.street.model.vertex.IntersectionVertex; import org.opentripplanner.street.model.vertex.Vertex; +import org.opentripplanner.utils.logging.ProgressTracker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/osm/naming/SidewalkNamer.java b/application/src/main/java/org/opentripplanner/graph_builder/module/osm/naming/SidewalkNamer.java index f2bb2951239..582684d3bea 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/osm/naming/SidewalkNamer.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/osm/naming/SidewalkNamer.java @@ -27,12 +27,12 @@ import org.opentripplanner.framework.geometry.HashGridSpatialIndex; import org.opentripplanner.framework.geometry.SphericalDistanceLibrary; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.lang.DoubleUtils; -import org.opentripplanner.framework.logging.ProgressTracker; import org.opentripplanner.graph_builder.module.osm.StreetEdgePair; import org.opentripplanner.graph_builder.services.osm.EdgeNamer; import org.opentripplanner.osm.model.OsmWithTags; import org.opentripplanner.street.model.edge.StreetEdge; +import org.opentripplanner.utils.lang.DoubleUtils; +import org.opentripplanner.utils.logging.ProgressTracker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/gtfs/GenerateTripPatternsOperation.java b/application/src/main/java/org/opentripplanner/gtfs/GenerateTripPatternsOperation.java index 08ad300fa9a..e647bc4cb9e 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/GenerateTripPatternsOperation.java +++ b/application/src/main/java/org/opentripplanner/gtfs/GenerateTripPatternsOperation.java @@ -10,7 +10,6 @@ import java.util.Map; import java.util.Set; import org.opentripplanner.ext.flex.trip.FlexTrip; -import org.opentripplanner.framework.logging.ProgressTracker; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.graph_builder.issues.TripDegenerate; import org.opentripplanner.graph_builder.issues.TripUndefinedService; @@ -30,6 +29,7 @@ import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.model.timetable.TripTimes; import org.opentripplanner.transit.model.timetable.TripTimesFactory; +import org.opentripplanner.utils.logging.ProgressTracker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/gtfs/interlining/InterlineProcessor.java b/application/src/main/java/org/opentripplanner/gtfs/interlining/InterlineProcessor.java index 4247af4117e..dbfe3af1c9b 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/interlining/InterlineProcessor.java +++ b/application/src/main/java/org/opentripplanner/gtfs/interlining/InterlineProcessor.java @@ -12,7 +12,6 @@ import java.util.List; import java.util.Map; import org.opentripplanner.framework.geometry.SphericalDistanceLibrary; -import org.opentripplanner.framework.lang.StringUtils; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.graph_builder.issues.InterliningTeleport; import org.opentripplanner.gtfs.mapping.StaySeatedNotAllowed; @@ -27,6 +26,7 @@ import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.model.timetable.TripTimes; +import org.opentripplanner.utils.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/AgencyMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/AgencyMapper.java index f57a9db8684..3e826c998a5 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/AgencyMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/AgencyMapper.java @@ -3,9 +3,9 @@ import java.util.Collection; import java.util.HashMap; import java.util.Map; -import org.opentripplanner.framework.collection.MapUtils; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.organization.Agency; +import org.opentripplanner.utils.collection.MapUtils; /** Responsible for mapping GTFS Agency into the OTP model. */ class AgencyMapper { diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/BoardingAreaMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/BoardingAreaMapper.java index 9c818e97bdb..d757a08d6df 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/BoardingAreaMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/BoardingAreaMapper.java @@ -7,10 +7,10 @@ import java.util.Map; import java.util.Optional; import java.util.function.Function; -import org.opentripplanner.framework.collection.MapUtils; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.site.BoardingArea; import org.opentripplanner.transit.model.site.RegularStop; +import org.opentripplanner.utils.collection.MapUtils; /** * Responsible for mapping GTFS Boarding areas into the OTP model. diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/EntranceMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/EntranceMapper.java index 786baeb1ba8..eb005ebd641 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/EntranceMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/EntranceMapper.java @@ -4,10 +4,10 @@ import java.util.HashMap; import java.util.Map; import java.util.function.Function; -import org.opentripplanner.framework.collection.MapUtils; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.site.Entrance; import org.opentripplanner.transit.model.site.Station; +import org.opentripplanner.utils.collection.MapUtils; /** * Responsible for mapping GTFS Entrance into the OTP model. diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/FareAttributeMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/FareAttributeMapper.java index 6b1a195b399..87b06edb82b 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/FareAttributeMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/FareAttributeMapper.java @@ -8,9 +8,9 @@ import java.util.Map; import org.opentripplanner.ext.fares.model.FareAttribute; import org.opentripplanner.ext.fares.model.FareAttributeBuilder; -import org.opentripplanner.framework.collection.MapUtils; import org.opentripplanner.transit.model.basic.Money; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.collection.MapUtils; /** Responsible for mapping GTFS FareAttribute into the OTP model. */ class FareAttributeMapper { diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/FareRuleMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/FareRuleMapper.java index 35cefa510f9..022de12404b 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/FareRuleMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/FareRuleMapper.java @@ -4,7 +4,7 @@ import java.util.HashMap; import java.util.Map; import org.opentripplanner.ext.fares.model.FareRule; -import org.opentripplanner.framework.collection.MapUtils; +import org.opentripplanner.utils.collection.MapUtils; /** Responsible for mapping GTFS FareRule into the OTP model. */ class FareRuleMapper { diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/FeedInfoMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/FeedInfoMapper.java index a8ec889372e..1ee10dcfc78 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/FeedInfoMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/FeedInfoMapper.java @@ -5,8 +5,8 @@ import java.util.Collection; import java.util.HashMap; import java.util.Map; -import org.opentripplanner.framework.collection.MapUtils; import org.opentripplanner.model.FeedInfo; +import org.opentripplanner.utils.collection.MapUtils; /** Responsible for mapping GTFS FeedInfo into the OTP model. */ class FeedInfoMapper { diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/FrequencyMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/FrequencyMapper.java index 1144e926499..18927d67000 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/FrequencyMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/FrequencyMapper.java @@ -3,8 +3,8 @@ import java.util.Collection; import java.util.HashMap; import java.util.Map; -import org.opentripplanner.framework.collection.MapUtils; import org.opentripplanner.model.Frequency; +import org.opentripplanner.utils.collection.MapUtils; /** Responsible for mapping GTFS Frequency into the OTP model. */ class FrequencyMapper { diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/LocationGroupMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/LocationGroupMapper.java index b4ba6d3cc27..cf1022d671a 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/LocationGroupMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/LocationGroupMapper.java @@ -9,11 +9,11 @@ import org.onebusaway.gtfs.model.Location; import org.onebusaway.gtfs.model.LocationGroup; import org.onebusaway.gtfs.model.Stop; -import org.opentripplanner.framework.collection.MapUtils; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.transit.model.site.GroupStop; import org.opentripplanner.transit.model.site.GroupStopBuilder; import org.opentripplanner.transit.service.SiteRepositoryBuilder; +import org.opentripplanner.utils.collection.MapUtils; public class LocationGroupMapper { diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/LocationMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/LocationMapper.java index 5a845b8bfe8..4e75eaac312 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/LocationMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/LocationMapper.java @@ -8,7 +8,6 @@ import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.operation.valid.IsValidOp; import org.onebusaway.gtfs.model.Location; -import org.opentripplanner.framework.collection.MapUtils; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.framework.geometry.UnsupportedGeometryException; import org.opentripplanner.framework.i18n.NonLocalizedString; @@ -16,6 +15,7 @@ import org.opentripplanner.graph_builder.issue.api.Issue; import org.opentripplanner.transit.model.site.AreaStop; import org.opentripplanner.transit.service.SiteRepositoryBuilder; +import org.opentripplanner.utils.collection.MapUtils; /** Responsible for mapping GTFS Location into the OTP model. */ public class LocationMapper { diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/PathwayMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/PathwayMapper.java index d92087d4d41..3f5633a3da4 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/PathwayMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/PathwayMapper.java @@ -4,10 +4,10 @@ import java.util.HashMap; import java.util.Map; import org.onebusaway.gtfs.model.Stop; -import org.opentripplanner.framework.collection.MapUtils; import org.opentripplanner.transit.model.site.Pathway; import org.opentripplanner.transit.model.site.PathwayBuilder; import org.opentripplanner.transit.model.site.StationElement; +import org.opentripplanner.utils.collection.MapUtils; /** Responsible for mapping GTFS Pathway into the OTP model. */ class PathwayMapper { diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/PathwayNodeMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/PathwayNodeMapper.java index 06c1dfb3f18..ab74d4c8e58 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/PathwayNodeMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/PathwayNodeMapper.java @@ -5,10 +5,10 @@ import java.util.Map; import java.util.Optional; import java.util.function.Function; -import org.opentripplanner.framework.collection.MapUtils; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.site.PathwayNode; import org.opentripplanner.transit.model.site.Station; +import org.opentripplanner.utils.collection.MapUtils; /** Responsible for mapping GTFS Node into the OTP model. */ class PathwayNodeMapper { diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/RouteMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/RouteMapper.java index 0c668f64b92..96c10c20c01 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/RouteMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/RouteMapper.java @@ -3,13 +3,13 @@ import java.util.Collection; import java.util.HashMap; import java.util.Map; -import org.opentripplanner.framework.collection.MapUtils; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.GroupOfRoutes; import org.opentripplanner.transit.model.network.Route; +import org.opentripplanner.utils.collection.MapUtils; /** Responsible for mapping GTFS Route into the OTP model. */ class RouteMapper { diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/ServiceCalendarDateMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/ServiceCalendarDateMapper.java index a722a8ad9e3..53e35380198 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/ServiceCalendarDateMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/ServiceCalendarDateMapper.java @@ -3,8 +3,8 @@ import java.util.Collection; import java.util.HashMap; import java.util.Map; -import org.opentripplanner.framework.collection.MapUtils; import org.opentripplanner.model.calendar.ServiceCalendarDate; +import org.opentripplanner.utils.collection.MapUtils; /** Responsible for mapping GTFS ServiceCalendarDate into the OTP model. */ class ServiceCalendarDateMapper { diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/ServiceCalendarMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/ServiceCalendarMapper.java index 1d229c57b19..0bb1f220a30 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/ServiceCalendarMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/ServiceCalendarMapper.java @@ -5,8 +5,8 @@ import java.util.Collection; import java.util.HashMap; import java.util.Map; -import org.opentripplanner.framework.collection.MapUtils; import org.opentripplanner.model.calendar.ServiceCalendar; +import org.opentripplanner.utils.collection.MapUtils; /** Responsible for mapping GTFS ServiceCalendar into the OTP model. */ class ServiceCalendarMapper { diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/ShapePointMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/ShapePointMapper.java index 78318559e88..8b24bc8f4ea 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/ShapePointMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/ShapePointMapper.java @@ -3,8 +3,8 @@ import java.util.Collection; import java.util.HashMap; import java.util.Map; -import org.opentripplanner.framework.collection.MapUtils; import org.opentripplanner.model.ShapePoint; +import org.opentripplanner.utils.collection.MapUtils; /** Responsible for mapping GTFS ShapePoint into the OTP model. */ class ShapePointMapper { diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/StopMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/StopMapper.java index 4cbe252d68f..e5d68e71fee 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/StopMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/StopMapper.java @@ -6,13 +6,13 @@ import java.util.Map; import java.util.function.Function; import org.onebusaway.gtfs.model.Stop; -import org.opentripplanner.framework.collection.MapUtils; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.site.FareZone; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.RegularStopBuilder; import org.opentripplanner.transit.model.site.Station; import org.opentripplanner.transit.service.SiteRepositoryBuilder; +import org.opentripplanner.utils.collection.MapUtils; /** Responsible for mapping GTFS Stop into the OTP model. */ class StopMapper { diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/StopTimeMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/StopTimeMapper.java index 5f20b6e0224..2b1d30c09bd 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/StopTimeMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/StopTimeMapper.java @@ -7,9 +7,9 @@ import org.onebusaway.gtfs.model.Location; import org.onebusaway.gtfs.model.LocationGroup; import org.onebusaway.gtfs.model.Stop; -import org.opentripplanner.framework.collection.MapUtils; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.model.StopTime; +import org.opentripplanner.utils.collection.MapUtils; /** * Responsible for mapping GTFS StopTime into the OTP Transit model. diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/TripMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/TripMapper.java index fdef2bb4e0c..70f2fe3094e 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/TripMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/TripMapper.java @@ -5,10 +5,10 @@ import java.util.HashMap; import java.util.Map; import java.util.Optional; -import org.opentripplanner.framework.collection.MapUtils; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.routing.api.request.framework.TimePenalty; import org.opentripplanner.transit.model.timetable.Trip; +import org.opentripplanner.utils.collection.MapUtils; /** Responsible for mapping GTFS TripMapper into the OTP model. */ class TripMapper { diff --git a/application/src/main/java/org/opentripplanner/inspector/vector/edge/EdgePropertyMapper.java b/application/src/main/java/org/opentripplanner/inspector/vector/edge/EdgePropertyMapper.java index d43a91d384d..5dc68fc335f 100644 --- a/application/src/main/java/org/opentripplanner/inspector/vector/edge/EdgePropertyMapper.java +++ b/application/src/main/java/org/opentripplanner/inspector/vector/edge/EdgePropertyMapper.java @@ -1,17 +1,17 @@ package org.opentripplanner.inspector.vector.edge; -import static org.opentripplanner.framework.lang.DoubleUtils.roundTo2Decimals; import static org.opentripplanner.inspector.vector.KeyValue.kv; +import static org.opentripplanner.utils.lang.DoubleUtils.roundTo2Decimals; import com.google.common.collect.Lists; import java.util.Collection; import java.util.List; import org.opentripplanner.apis.support.mapping.PropertyMapper; -import org.opentripplanner.framework.collection.ListUtils; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.street.model.edge.Edge; import org.opentripplanner.street.model.edge.EscalatorEdge; import org.opentripplanner.street.model.edge.StreetEdge; +import org.opentripplanner.utils.collection.ListUtils; public class EdgePropertyMapper extends PropertyMapper { diff --git a/application/src/main/java/org/opentripplanner/inspector/vector/vertex/VertexPropertyMapper.java b/application/src/main/java/org/opentripplanner/inspector/vector/vertex/VertexPropertyMapper.java index 01f5263b11a..de700486c77 100644 --- a/application/src/main/java/org/opentripplanner/inspector/vector/vertex/VertexPropertyMapper.java +++ b/application/src/main/java/org/opentripplanner/inspector/vector/vertex/VertexPropertyMapper.java @@ -8,7 +8,6 @@ import java.util.List; import java.util.Set; import org.opentripplanner.apis.support.mapping.PropertyMapper; -import org.opentripplanner.framework.collection.ListUtils; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.routing.vehicle_parking.VehicleParking; import org.opentripplanner.routing.vehicle_parking.VehicleParkingEntrance; @@ -17,6 +16,7 @@ import org.opentripplanner.street.model.vertex.VehicleParkingEntranceVertex; import org.opentripplanner.street.model.vertex.Vertex; import org.opentripplanner.street.search.TraverseMode; +import org.opentripplanner.utils.collection.ListUtils; public class VertexPropertyMapper extends PropertyMapper { diff --git a/application/src/main/java/org/opentripplanner/model/Frequency.java b/application/src/main/java/org/opentripplanner/model/Frequency.java index c4bd653d41b..fd50219d865 100644 --- a/application/src/main/java/org/opentripplanner/model/Frequency.java +++ b/application/src/main/java/org/opentripplanner/model/Frequency.java @@ -3,9 +3,9 @@ import java.io.Serializable; import java.util.Objects; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.transit.model.framework.AbstractTransitEntity; import org.opentripplanner.transit.model.timetable.Trip; +import org.opentripplanner.utils.tostring.ToStringBuilder; public final class Frequency implements Serializable { diff --git a/application/src/main/java/org/opentripplanner/model/GenericLocation.java b/application/src/main/java/org/opentripplanner/model/GenericLocation.java index fd270741e92..bd053cd7147 100644 --- a/application/src/main/java/org/opentripplanner/model/GenericLocation.java +++ b/application/src/main/java/org/opentripplanner/model/GenericLocation.java @@ -2,9 +2,9 @@ import javax.annotation.Nullable; import org.locationtech.jts.geom.Coordinate; -import org.opentripplanner.framework.lang.StringUtils; -import org.opentripplanner.framework.tostring.ValueObjectToStringBuilder; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.lang.StringUtils; +import org.opentripplanner.utils.tostring.ValueObjectToStringBuilder; /** * Represents a location that is to be used in a routing request. It can be either a from, to, or diff --git a/application/src/main/java/org/opentripplanner/model/PathTransfer.java b/application/src/main/java/org/opentripplanner/model/PathTransfer.java index 161df9fd3b8..5b42a8149e3 100644 --- a/application/src/main/java/org/opentripplanner/model/PathTransfer.java +++ b/application/src/main/java/org/opentripplanner/model/PathTransfer.java @@ -2,10 +2,10 @@ import java.io.Serializable; import java.util.List; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.transfer.ConstrainedTransfer; import org.opentripplanner.street.model.edge.Edge; import org.opentripplanner.transit.model.site.StopLocation; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Represents a transfer between stops with the street network path attatched to it. diff --git a/application/src/main/java/org/opentripplanner/model/StopTime.java b/application/src/main/java/org/opentripplanner/model/StopTime.java index edd5fbdb52d..e31350192e1 100644 --- a/application/src/main/java/org/opentripplanner/model/StopTime.java +++ b/application/src/main/java/org/opentripplanner/model/StopTime.java @@ -3,11 +3,11 @@ import java.util.List; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.model.timetable.StopTimeKey; import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.model.timetable.booking.BookingInfo; +import org.opentripplanner.utils.time.TimeUtils; /** * This class is TEMPORALLY used during mapping of GTFS and Netex into the internal Model, it is not diff --git a/application/src/main/java/org/opentripplanner/model/SystemNotice.java b/application/src/main/java/org/opentripplanner/model/SystemNotice.java index f9af41d3fd0..6e6b910665a 100644 --- a/application/src/main/java/org/opentripplanner/model/SystemNotice.java +++ b/application/src/main/java/org/opentripplanner/model/SystemNotice.java @@ -1,8 +1,8 @@ package org.opentripplanner.model; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.alertpatch.TransitAlert; import org.opentripplanner.transit.model.basic.Notice; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * A system notice is used to tag elements with system information. diff --git a/application/src/main/java/org/opentripplanner/model/Timetable.java b/application/src/main/java/org/opentripplanner/model/Timetable.java index 6740e2cc99d..c437a60b0d5 100644 --- a/application/src/main/java/org/opentripplanner/model/Timetable.java +++ b/application/src/main/java/org/opentripplanner/model/Timetable.java @@ -22,7 +22,6 @@ import java.util.Map; import java.util.Optional; import javax.annotation.Nullable; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.transit.model.framework.DataValidationException; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.framework.Result; @@ -36,6 +35,7 @@ import org.opentripplanner.updater.spi.DataValidationExceptionMapper; import org.opentripplanner.updater.spi.UpdateError; import org.opentripplanner.updater.trip.BackwardsDelayPropagationType; +import org.opentripplanner.utils.time.ServiceDateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/model/TimetableSnapshot.java b/application/src/main/java/org/opentripplanner/model/TimetableSnapshot.java index fa8bb2e55e0..0a54fc964d8 100644 --- a/application/src/main/java/org/opentripplanner/model/TimetableSnapshot.java +++ b/application/src/main/java/org/opentripplanner/model/TimetableSnapshot.java @@ -1,6 +1,6 @@ package org.opentripplanner.model; -import static org.opentripplanner.framework.collection.CollectionUtils.getByNullableKey; +import static org.opentripplanner.utils.collection.CollectionUtils.getByNullableKey; import com.google.common.collect.HashMultimap; import com.google.common.collect.ImmutableSetMultimap; diff --git a/application/src/main/java/org/opentripplanner/model/calendar/CalendarServiceData.java b/application/src/main/java/org/opentripplanner/model/calendar/CalendarServiceData.java index b007fa08ea1..81011f03bd0 100644 --- a/application/src/main/java/org/opentripplanner/model/calendar/CalendarServiceData.java +++ b/application/src/main/java/org/opentripplanner/model/calendar/CalendarServiceData.java @@ -11,8 +11,8 @@ import java.util.Map; import java.util.Optional; import java.util.Set; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.time.ServiceDateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/model/calendar/ServiceCalendarDate.java b/application/src/main/java/org/opentripplanner/model/calendar/ServiceCalendarDate.java index 87fb173a112..9d6ddb748cf 100644 --- a/application/src/main/java/org/opentripplanner/model/calendar/ServiceCalendarDate.java +++ b/application/src/main/java/org/opentripplanner/model/calendar/ServiceCalendarDate.java @@ -4,8 +4,8 @@ import java.io.Serializable; import java.time.LocalDate; import java.util.Objects; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * This class explicitly activate or disable a service by date. It can be used in two ways. diff --git a/application/src/main/java/org/opentripplanner/model/calendar/ServiceDateInterval.java b/application/src/main/java/org/opentripplanner/model/calendar/ServiceDateInterval.java index a879f6c790e..db0aef21bd0 100644 --- a/application/src/main/java/org/opentripplanner/model/calendar/ServiceDateInterval.java +++ b/application/src/main/java/org/opentripplanner/model/calendar/ServiceDateInterval.java @@ -6,7 +6,7 @@ import java.time.LocalDate; import java.time.temporal.ChronoUnit; import java.util.Objects; -import org.opentripplanner.framework.time.ServiceDateUtils; +import org.opentripplanner.utils.time.ServiceDateUtils; /** * Value object which represent a service date interval from a starting date until an end date. diff --git a/application/src/main/java/org/opentripplanner/model/calendar/openinghours/OHCalendar.java b/application/src/main/java/org/opentripplanner/model/calendar/openinghours/OHCalendar.java index 7c084d28186..1881ed72dcc 100644 --- a/application/src/main/java/org/opentripplanner/model/calendar/openinghours/OHCalendar.java +++ b/application/src/main/java/org/opentripplanner/model/calendar/openinghours/OHCalendar.java @@ -8,7 +8,7 @@ import java.time.temporal.ChronoUnit; import java.util.List; import java.util.Objects; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; public class OHCalendar implements Serializable { diff --git a/application/src/main/java/org/opentripplanner/model/calendar/openinghours/OpeningHours.java b/application/src/main/java/org/opentripplanner/model/calendar/openinghours/OpeningHours.java index 2918b43bd42..258caedacdc 100644 --- a/application/src/main/java/org/opentripplanner/model/calendar/openinghours/OpeningHours.java +++ b/application/src/main/java/org/opentripplanner/model/calendar/openinghours/OpeningHours.java @@ -4,7 +4,7 @@ import java.time.LocalTime; import java.util.BitSet; import java.util.Objects; -import org.opentripplanner.framework.time.TimeUtils; +import org.opentripplanner.utils.time.TimeUtils; /** */ diff --git a/application/src/main/java/org/opentripplanner/model/calendar/openinghours/OsmOpeningHoursSupport.java b/application/src/main/java/org/opentripplanner/model/calendar/openinghours/OsmOpeningHoursSupport.java index acb500fee62..e87a63fc678 100644 --- a/application/src/main/java/org/opentripplanner/model/calendar/openinghours/OsmOpeningHoursSupport.java +++ b/application/src/main/java/org/opentripplanner/model/calendar/openinghours/OsmOpeningHoursSupport.java @@ -3,7 +3,7 @@ import java.time.Duration; import java.time.temporal.ChronoUnit; import java.util.stream.Collectors; -import org.opentripplanner.framework.time.TimeUtils; +import org.opentripplanner.utils.time.TimeUtils; public class OsmOpeningHoursSupport { diff --git a/application/src/main/java/org/opentripplanner/model/fare/FareMedium.java b/application/src/main/java/org/opentripplanner/model/fare/FareMedium.java index 08a0a738666..caa286b1c31 100644 --- a/application/src/main/java/org/opentripplanner/model/fare/FareMedium.java +++ b/application/src/main/java/org/opentripplanner/model/fare/FareMedium.java @@ -1,8 +1,8 @@ package org.opentripplanner.model.fare; import java.util.Objects; -import org.opentripplanner.framework.lang.Sandbox; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.lang.Sandbox; /** * diff --git a/application/src/main/java/org/opentripplanner/model/fare/FareProduct.java b/application/src/main/java/org/opentripplanner/model/fare/FareProduct.java index 189b73807e7..8aa86e5af89 100644 --- a/application/src/main/java/org/opentripplanner/model/fare/FareProduct.java +++ b/application/src/main/java/org/opentripplanner/model/fare/FareProduct.java @@ -6,10 +6,10 @@ import java.util.Objects; import java.util.UUID; import javax.annotation.Nullable; -import org.opentripplanner.framework.lang.Sandbox; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.transit.model.basic.Money; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.lang.Sandbox; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * A ticket that a user can purchase to travel. diff --git a/application/src/main/java/org/opentripplanner/model/fare/FareProductUse.java b/application/src/main/java/org/opentripplanner/model/fare/FareProductUse.java index 33c67f56314..99f34503270 100644 --- a/application/src/main/java/org/opentripplanner/model/fare/FareProductUse.java +++ b/application/src/main/java/org/opentripplanner/model/fare/FareProductUse.java @@ -1,6 +1,6 @@ package org.opentripplanner.model.fare; -import org.opentripplanner.framework.lang.Sandbox; +import org.opentripplanner.utils.lang.Sandbox; /** * diff --git a/application/src/main/java/org/opentripplanner/model/fare/ItineraryFares.java b/application/src/main/java/org/opentripplanner/model/fare/ItineraryFares.java index 1a64f21c41b..d39180ac3a9 100644 --- a/application/src/main/java/org/opentripplanner/model/fare/ItineraryFares.java +++ b/application/src/main/java/org/opentripplanner/model/fare/ItineraryFares.java @@ -8,9 +8,9 @@ import java.util.List; import java.util.Objects; import java.util.Set; -import org.opentripplanner.framework.lang.Sandbox; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.plan.Leg; +import org.opentripplanner.utils.lang.Sandbox; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * diff --git a/application/src/main/java/org/opentripplanner/model/fare/RiderCategory.java b/application/src/main/java/org/opentripplanner/model/fare/RiderCategory.java index df68d3a8ce6..ee293d2142c 100644 --- a/application/src/main/java/org/opentripplanner/model/fare/RiderCategory.java +++ b/application/src/main/java/org/opentripplanner/model/fare/RiderCategory.java @@ -2,8 +2,8 @@ import java.util.Objects; import javax.annotation.Nullable; -import org.opentripplanner.framework.lang.Sandbox; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.lang.Sandbox; @Sandbox public record RiderCategory(FeedScopedId id, String name, @Nullable String url) { diff --git a/application/src/main/java/org/opentripplanner/model/modes/AllowMainAndSubModeFilter.java b/application/src/main/java/org/opentripplanner/model/modes/AllowMainAndSubModeFilter.java index 1b34acd5327..a6f75ac0ed9 100644 --- a/application/src/main/java/org/opentripplanner/model/modes/AllowMainAndSubModeFilter.java +++ b/application/src/main/java/org/opentripplanner/model/modes/AllowMainAndSubModeFilter.java @@ -2,10 +2,10 @@ import java.util.Objects; import javax.annotation.Nullable; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.transit.model.basic.MainAndSubMode; import org.opentripplanner.transit.model.basic.SubMode; import org.opentripplanner.transit.model.basic.TransitMode; +import org.opentripplanner.utils.tostring.ToStringBuilder; class AllowMainAndSubModeFilter implements AllowTransitModeFilter { diff --git a/application/src/main/java/org/opentripplanner/model/modes/AllowMainAndSubModesFilter.java b/application/src/main/java/org/opentripplanner/model/modes/AllowMainAndSubModesFilter.java index 50a20f72c55..5d40b365204 100644 --- a/application/src/main/java/org/opentripplanner/model/modes/AllowMainAndSubModesFilter.java +++ b/application/src/main/java/org/opentripplanner/model/modes/AllowMainAndSubModesFilter.java @@ -5,9 +5,9 @@ import java.util.Comparator; import java.util.List; import java.util.Objects; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.transit.model.basic.SubMode; import org.opentripplanner.transit.model.basic.TransitMode; +import org.opentripplanner.utils.tostring.ToStringBuilder; class AllowMainAndSubModesFilter implements AllowTransitModeFilter { diff --git a/application/src/main/java/org/opentripplanner/model/modes/AllowMainModeFilter.java b/application/src/main/java/org/opentripplanner/model/modes/AllowMainModeFilter.java index eaa6719d143..9efcceee86e 100644 --- a/application/src/main/java/org/opentripplanner/model/modes/AllowMainModeFilter.java +++ b/application/src/main/java/org/opentripplanner/model/modes/AllowMainModeFilter.java @@ -1,8 +1,8 @@ package org.opentripplanner.model.modes; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.transit.model.basic.SubMode; import org.opentripplanner.transit.model.basic.TransitMode; +import org.opentripplanner.utils.tostring.ToStringBuilder; class AllowMainModeFilter implements AllowTransitModeFilter { diff --git a/application/src/main/java/org/opentripplanner/model/modes/AllowMainModesFilter.java b/application/src/main/java/org/opentripplanner/model/modes/AllowMainModesFilter.java index f6c8aa3b4a2..0926f6d5621 100644 --- a/application/src/main/java/org/opentripplanner/model/modes/AllowMainModesFilter.java +++ b/application/src/main/java/org/opentripplanner/model/modes/AllowMainModesFilter.java @@ -3,9 +3,9 @@ import java.util.Collection; import java.util.EnumSet; import java.util.Set; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.transit.model.basic.SubMode; import org.opentripplanner.transit.model.basic.TransitMode; +import org.opentripplanner.utils.tostring.ToStringBuilder; class AllowMainModesFilter implements AllowTransitModeFilter { diff --git a/application/src/main/java/org/opentripplanner/model/modes/ExcludeAllTransitFilter.java b/application/src/main/java/org/opentripplanner/model/modes/ExcludeAllTransitFilter.java index 163d82170b0..08fdf4a528b 100644 --- a/application/src/main/java/org/opentripplanner/model/modes/ExcludeAllTransitFilter.java +++ b/application/src/main/java/org/opentripplanner/model/modes/ExcludeAllTransitFilter.java @@ -1,10 +1,10 @@ package org.opentripplanner.model.modes; import java.io.Serializable; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.api.request.request.filter.TransitFilter; import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.timetable.TripTimes; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * This filter will exclude everything. diff --git a/application/src/main/java/org/opentripplanner/model/plan/ElevationProfile.java b/application/src/main/java/org/opentripplanner/model/plan/ElevationProfile.java index a293039c3c3..91f3a748a37 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/ElevationProfile.java +++ b/application/src/main/java/org/opentripplanner/model/plan/ElevationProfile.java @@ -4,8 +4,8 @@ import java.util.List; import java.util.Objects; import java.util.function.Predicate; -import org.opentripplanner.framework.lang.DoubleUtils; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.lang.DoubleUtils; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Represents an elevation profile as a list of {@code x,y} coordinates. The {@code x} is the diff --git a/application/src/main/java/org/opentripplanner/model/plan/Emissions.java b/application/src/main/java/org/opentripplanner/model/plan/Emissions.java index e19ce3a914a..3339cc8b93f 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/Emissions.java +++ b/application/src/main/java/org/opentripplanner/model/plan/Emissions.java @@ -1,7 +1,7 @@ package org.opentripplanner.model.plan; -import org.opentripplanner.framework.lang.Sandbox; import org.opentripplanner.framework.model.Grams; +import org.opentripplanner.utils.lang.Sandbox; /** * Represents the emissions of a journey. Each type of emissions has its own field and unit. diff --git a/application/src/main/java/org/opentripplanner/model/plan/FrequencyTransitLeg.java b/application/src/main/java/org/opentripplanner/model/plan/FrequencyTransitLeg.java index 48c4b1b7b87..dc00dd49f22 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/FrequencyTransitLeg.java +++ b/application/src/main/java/org/opentripplanner/model/plan/FrequencyTransitLeg.java @@ -2,8 +2,8 @@ import java.util.ArrayList; import java.util.List; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.transit.model.site.StopLocation; +import org.opentripplanner.utils.time.ServiceDateUtils; /** * One leg of a trip -- that is, a temporally continuous piece of the journey that takes place on a diff --git a/application/src/main/java/org/opentripplanner/model/plan/Itinerary.java b/application/src/main/java/org/opentripplanner/model/plan/Itinerary.java index 18055690b6e..f707b97c131 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/Itinerary.java +++ b/application/src/main/java/org/opentripplanner/model/plan/Itinerary.java @@ -13,9 +13,7 @@ import java.util.stream.Stream; import javax.annotation.Nullable; import org.opentripplanner.ext.flex.FlexibleTransitLeg; -import org.opentripplanner.framework.lang.DoubleUtils; import org.opentripplanner.framework.model.TimeAndCost; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.SystemNotice; import org.opentripplanner.model.fare.ItineraryFares; import org.opentripplanner.raptor.api.model.RaptorConstants; @@ -23,6 +21,8 @@ import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.preference.ItineraryFilterPreferences; +import org.opentripplanner.utils.lang.DoubleUtils; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * An Itinerary is one complete way of getting from the start location to the end location. diff --git a/application/src/main/java/org/opentripplanner/model/plan/ItinerarySortKey.java b/application/src/main/java/org/opentripplanner/model/plan/ItinerarySortKey.java index 18939c95f8c..6df5d828633 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/ItinerarySortKey.java +++ b/application/src/main/java/org/opentripplanner/model/plan/ItinerarySortKey.java @@ -1,7 +1,7 @@ package org.opentripplanner.model.plan; import java.time.Instant; -import org.opentripplanner.framework.tostring.ValueObjectToStringBuilder; +import org.opentripplanner.utils.tostring.ValueObjectToStringBuilder; /** * This interface is used to sort itineraries and other instances that we might want to sort among diff --git a/application/src/main/java/org/opentripplanner/model/plan/Leg.java b/application/src/main/java/org/opentripplanner/model/plan/Leg.java index 174fdf70452..b3c9b526f03 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/Leg.java +++ b/application/src/main/java/org/opentripplanner/model/plan/Leg.java @@ -10,7 +10,6 @@ import javax.annotation.Nullable; import org.locationtech.jts.geom.LineString; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.lang.Sandbox; import org.opentripplanner.model.PickDrop; import org.opentripplanner.model.fare.FareProductUse; import org.opentripplanner.model.plan.legreference.LegReference; @@ -26,6 +25,7 @@ import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.model.timetable.TripOnServiceDate; import org.opentripplanner.transit.model.timetable.booking.BookingInfo; +import org.opentripplanner.utils.lang.Sandbox; /** * One leg of a trip -- that is, a temporally continuous piece of the journey that takes place on a diff --git a/application/src/main/java/org/opentripplanner/model/plan/Place.java b/application/src/main/java/org/opentripplanner/model/plan/Place.java index fe3a9dee420..4e2e2a425f1 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/Place.java +++ b/application/src/main/java/org/opentripplanner/model/plan/Place.java @@ -3,7 +3,6 @@ import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.LocalizedString; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; import org.opentripplanner.service.vehiclerental.street.VehicleRentalPlaceVertex; import org.opentripplanner.street.model.vertex.StreetVertex; @@ -14,6 +13,7 @@ import org.opentripplanner.street.search.state.State; import org.opentripplanner.transit.model.site.AreaStop; import org.opentripplanner.transit.model.site.StopLocation; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * A Place is where a journey starts or ends, or a transit stop along the way. diff --git a/application/src/main/java/org/opentripplanner/model/plan/ScheduledTransitLeg.java b/application/src/main/java/org/opentripplanner/model/plan/ScheduledTransitLeg.java index 9949d83cdfe..f3fba29515e 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/ScheduledTransitLeg.java +++ b/application/src/main/java/org/opentripplanner/model/plan/ScheduledTransitLeg.java @@ -16,9 +16,6 @@ import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.framework.geometry.SphericalDistanceLibrary; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.lang.DoubleUtils; -import org.opentripplanner.framework.time.ServiceDateUtils; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.PickDrop; import org.opentripplanner.model.fare.FareProductUse; import org.opentripplanner.model.plan.legreference.LegReference; @@ -38,6 +35,9 @@ import org.opentripplanner.transit.model.timetable.TripOnServiceDate; import org.opentripplanner.transit.model.timetable.TripTimes; import org.opentripplanner.transit.model.timetable.booking.BookingInfo; +import org.opentripplanner.utils.lang.DoubleUtils; +import org.opentripplanner.utils.time.ServiceDateUtils; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * One leg of a trip -- that is, a temporally continuous piece of the journey that takes place on a diff --git a/application/src/main/java/org/opentripplanner/model/plan/StopArrival.java b/application/src/main/java/org/opentripplanner/model/plan/StopArrival.java index 489b122da09..d43df69ff21 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/StopArrival.java +++ b/application/src/main/java/org/opentripplanner/model/plan/StopArrival.java @@ -1,6 +1,6 @@ package org.opentripplanner.model.plan; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * This class is used to represent a stop arrival event mostly for intermediate visits to a stops diff --git a/application/src/main/java/org/opentripplanner/model/plan/StopArrivalMapper.java b/application/src/main/java/org/opentripplanner/model/plan/StopArrivalMapper.java index 25bab2a7c3f..c6a719addd5 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/StopArrivalMapper.java +++ b/application/src/main/java/org/opentripplanner/model/plan/StopArrivalMapper.java @@ -3,9 +3,9 @@ import java.time.LocalDate; import java.time.ZoneId; import java.util.Objects; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.model.timetable.TripTimes; +import org.opentripplanner.utils.time.ServiceDateUtils; /** * Maps leg-related information to an instance of {@link StopArrival}. diff --git a/application/src/main/java/org/opentripplanner/model/plan/StreetLeg.java b/application/src/main/java/org/opentripplanner/model/plan/StreetLeg.java index 6384159a4ec..a61c68dccc5 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/StreetLeg.java +++ b/application/src/main/java/org/opentripplanner/model/plan/StreetLeg.java @@ -7,11 +7,11 @@ import java.util.Set; import javax.annotation.Nullable; import org.locationtech.jts.geom.LineString; -import org.opentripplanner.framework.lang.DoubleUtils; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.fare.FareProductUse; import org.opentripplanner.street.model.note.StreetNote; import org.opentripplanner.street.search.TraverseMode; +import org.opentripplanner.utils.lang.DoubleUtils; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * One leg of a trip -- that is, a temporally continuous piece of the journey that takes place using diff --git a/application/src/main/java/org/opentripplanner/model/plan/TripPlan.java b/application/src/main/java/org/opentripplanner/model/plan/TripPlan.java index 2640d655bde..ccd2af8b333 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/TripPlan.java +++ b/application/src/main/java/org/opentripplanner/model/plan/TripPlan.java @@ -3,7 +3,7 @@ import java.time.Instant; import java.util.Collection; import java.util.List; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * A TripPlan is a set of ways to get from point A to point B at time T. diff --git a/application/src/main/java/org/opentripplanner/model/plan/UnknownTransitPathLeg.java b/application/src/main/java/org/opentripplanner/model/plan/UnknownTransitPathLeg.java index 76179a8ee7c..45a9c6561d3 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/UnknownTransitPathLeg.java +++ b/application/src/main/java/org/opentripplanner/model/plan/UnknownTransitPathLeg.java @@ -6,10 +6,10 @@ import java.util.List; import javax.annotation.Nullable; import org.locationtech.jts.geom.LineString; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.fare.FareProductUse; import org.opentripplanner.raptor.spi.RaptorCostCalculator; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * A transit search may return an unknown transit path. A path consisting of a mix of diff --git a/application/src/main/java/org/opentripplanner/model/plan/WalkStep.java b/application/src/main/java/org/opentripplanner/model/plan/WalkStep.java index 13249d5da52..45f2b5da701 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/WalkStep.java +++ b/application/src/main/java/org/opentripplanner/model/plan/WalkStep.java @@ -6,10 +6,10 @@ import java.util.Set; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.lang.DoubleUtils; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.street.model.edge.Edge; import org.opentripplanner.street.model.note.StreetNote; +import org.opentripplanner.utils.lang.DoubleUtils; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Represents one instruction in walking directions. Three examples from New York City: diff --git a/application/src/main/java/org/opentripplanner/model/plan/WalkStepBuilder.java b/application/src/main/java/org/opentripplanner/model/plan/WalkStepBuilder.java index 25c6ee25b6b..8d4df6634fd 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/WalkStepBuilder.java +++ b/application/src/main/java/org/opentripplanner/model/plan/WalkStepBuilder.java @@ -7,10 +7,10 @@ import javax.annotation.Nullable; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.lang.DoubleUtils; -import org.opentripplanner.framework.lang.IntUtils; import org.opentripplanner.street.model.edge.Edge; import org.opentripplanner.street.model.note.StreetNote; +import org.opentripplanner.utils.lang.DoubleUtils; +import org.opentripplanner.utils.lang.IntUtils; public class WalkStepBuilder { diff --git a/application/src/main/java/org/opentripplanner/model/plan/legreference/ScheduledTransitLegReference.java b/application/src/main/java/org/opentripplanner/model/plan/legreference/ScheduledTransitLegReference.java index b008dea5737..422a62ce763 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/legreference/ScheduledTransitLegReference.java +++ b/application/src/main/java/org/opentripplanner/model/plan/legreference/ScheduledTransitLegReference.java @@ -3,7 +3,6 @@ import java.time.LocalDate; import java.time.ZoneId; import javax.annotation.Nullable; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.model.Timetable; import org.opentripplanner.model.plan.ScheduledTransitLeg; import org.opentripplanner.model.plan.ScheduledTransitLegBuilder; @@ -15,6 +14,7 @@ import org.opentripplanner.transit.model.timetable.TripOnServiceDate; import org.opentripplanner.transit.model.timetable.TripTimes; import org.opentripplanner.transit.service.TransitService; +import org.opentripplanner.utils.time.ServiceDateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/model/plan/paging/cursor/PageCursor.java b/application/src/main/java/org/opentripplanner/model/plan/paging/cursor/PageCursor.java index a52dc0429c1..ead71fbeb38 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/paging/cursor/PageCursor.java +++ b/application/src/main/java/org/opentripplanner/model/plan/paging/cursor/PageCursor.java @@ -3,10 +3,10 @@ import java.time.Duration; import java.time.Instant; import javax.annotation.Nullable; -import org.opentripplanner.framework.collection.ListSection; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.plan.ItinerarySortKey; import org.opentripplanner.model.plan.SortOrder; +import org.opentripplanner.utils.collection.ListSection; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * This class holds all the information needed to page to the next/previous page. It is serialized diff --git a/application/src/main/java/org/opentripplanner/model/plan/paging/cursor/PageCursorFactory.java b/application/src/main/java/org/opentripplanner/model/plan/paging/cursor/PageCursorFactory.java index 92f59319cc1..4e2fad2a398 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/paging/cursor/PageCursorFactory.java +++ b/application/src/main/java/org/opentripplanner/model/plan/paging/cursor/PageCursorFactory.java @@ -6,9 +6,9 @@ import java.time.Duration; import java.time.Instant; import javax.annotation.Nullable; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.plan.ItinerarySortKey; import org.opentripplanner.model.plan.SortOrder; +import org.opentripplanner.utils.tostring.ToStringBuilder; public class PageCursorFactory { diff --git a/application/src/main/java/org/opentripplanner/model/plan/paging/cursor/PageCursorSerializer.java b/application/src/main/java/org/opentripplanner/model/plan/paging/cursor/PageCursorSerializer.java index 396c7499d2f..ac2a8e1df0b 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/paging/cursor/PageCursorSerializer.java +++ b/application/src/main/java/org/opentripplanner/model/plan/paging/cursor/PageCursorSerializer.java @@ -1,10 +1,10 @@ package org.opentripplanner.model.plan.paging.cursor; import javax.annotation.Nullable; -import org.opentripplanner.framework.lang.StringUtils; import org.opentripplanner.framework.token.TokenSchema; import org.opentripplanner.model.plan.ItinerarySortKey; import org.opentripplanner.model.plan.SortOrder; +import org.opentripplanner.utils.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/model/projectinfo/VersionControlInfo.java b/application/src/main/java/org/opentripplanner/model/projectinfo/VersionControlInfo.java index d2bbca43e66..6cd6a47f5ef 100644 --- a/application/src/main/java/org/opentripplanner/model/projectinfo/VersionControlInfo.java +++ b/application/src/main/java/org/opentripplanner/model/projectinfo/VersionControlInfo.java @@ -3,7 +3,7 @@ import static org.opentripplanner.model.projectinfo.OtpProjectInfo.UNKNOWN; import java.io.Serializable; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; public class VersionControlInfo implements Serializable { diff --git a/application/src/main/java/org/opentripplanner/model/transfer/ConstrainedTransfer.java b/application/src/main/java/org/opentripplanner/model/transfer/ConstrainedTransfer.java index d289727fd57..a5e6c624d9c 100644 --- a/application/src/main/java/org/opentripplanner/model/transfer/ConstrainedTransfer.java +++ b/application/src/main/java/org/opentripplanner/model/transfer/ConstrainedTransfer.java @@ -3,9 +3,9 @@ import java.io.Serializable; import java.util.Objects; import javax.annotation.Nullable; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.model.RaptorConstrainedTransfer; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * A constrained transfer is a transfer which is restricted in one ore more ways by the transit data diff --git a/application/src/main/java/org/opentripplanner/model/transfer/RouteStopTransferPoint.java b/application/src/main/java/org/opentripplanner/model/transfer/RouteStopTransferPoint.java index 7b81f44c6a6..627d82f7ccd 100644 --- a/application/src/main/java/org/opentripplanner/model/transfer/RouteStopTransferPoint.java +++ b/application/src/main/java/org/opentripplanner/model/transfer/RouteStopTransferPoint.java @@ -1,9 +1,9 @@ package org.opentripplanner.model.transfer; import java.io.Serializable; -import org.opentripplanner.framework.tostring.ValueObjectToStringBuilder; import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.site.StopLocation; +import org.opentripplanner.utils.tostring.ValueObjectToStringBuilder; public final class RouteStopTransferPoint implements TransferPoint, Serializable { diff --git a/application/src/main/java/org/opentripplanner/model/transfer/StationTransferPoint.java b/application/src/main/java/org/opentripplanner/model/transfer/StationTransferPoint.java index 53219e7fbcc..4af961ff0f4 100644 --- a/application/src/main/java/org/opentripplanner/model/transfer/StationTransferPoint.java +++ b/application/src/main/java/org/opentripplanner/model/transfer/StationTransferPoint.java @@ -1,8 +1,8 @@ package org.opentripplanner.model.transfer; import java.io.Serializable; -import org.opentripplanner.framework.tostring.ValueObjectToStringBuilder; import org.opentripplanner.transit.model.site.Station; +import org.opentripplanner.utils.tostring.ValueObjectToStringBuilder; public final class StationTransferPoint implements TransferPoint, Serializable { diff --git a/application/src/main/java/org/opentripplanner/model/transfer/TransferConstraint.java b/application/src/main/java/org/opentripplanner/model/transfer/TransferConstraint.java index bc8dc4cd28f..e6509c7d8ca 100644 --- a/application/src/main/java/org/opentripplanner/model/transfer/TransferConstraint.java +++ b/application/src/main/java/org/opentripplanner/model/transfer/TransferConstraint.java @@ -10,9 +10,9 @@ import java.util.function.IntSupplier; import javax.annotation.Nullable; import org.opentripplanner.framework.application.OTPFeature; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.model.RaptorTransferConstraint; import org.opentripplanner.raptor.api.model.SearchDirection; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * This class holds transfer constraint information. diff --git a/application/src/main/java/org/opentripplanner/model/transfer/TripTransferPoint.java b/application/src/main/java/org/opentripplanner/model/transfer/TripTransferPoint.java index ca3359f27dd..5dd23269779 100644 --- a/application/src/main/java/org/opentripplanner/model/transfer/TripTransferPoint.java +++ b/application/src/main/java/org/opentripplanner/model/transfer/TripTransferPoint.java @@ -1,8 +1,8 @@ package org.opentripplanner.model.transfer; import java.io.Serializable; -import org.opentripplanner.framework.tostring.ValueObjectToStringBuilder; import org.opentripplanner.transit.model.timetable.Trip; +import org.opentripplanner.utils.tostring.ValueObjectToStringBuilder; public final class TripTransferPoint implements TransferPoint, Serializable { diff --git a/application/src/main/java/org/opentripplanner/netex/config/NetexFeedParameters.java b/application/src/main/java/org/opentripplanner/netex/config/NetexFeedParameters.java index 723c707ecf1..604a28b1ab5 100644 --- a/application/src/main/java/org/opentripplanner/netex/config/NetexFeedParameters.java +++ b/application/src/main/java/org/opentripplanner/netex/config/NetexFeedParameters.java @@ -11,8 +11,8 @@ import java.util.Objects; import java.util.Set; import java.util.regex.Pattern; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.graph_builder.model.DataSourceConfig; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Parameters to configure the NETEX import. Se the generated build-config documentation or diff --git a/application/src/main/java/org/opentripplanner/netex/mapping/AuthorityToAgencyMapper.java b/application/src/main/java/org/opentripplanner/netex/mapping/AuthorityToAgencyMapper.java index ec466cc2e27..f954c3a4c24 100644 --- a/application/src/main/java/org/opentripplanner/netex/mapping/AuthorityToAgencyMapper.java +++ b/application/src/main/java/org/opentripplanner/netex/mapping/AuthorityToAgencyMapper.java @@ -2,10 +2,10 @@ import static org.opentripplanner.netex.mapping.support.NetexObjectDecorator.withOptional; -import org.opentripplanner.framework.lang.StringUtils; import org.opentripplanner.netex.mapping.support.FeedScopedIdFactory; import org.opentripplanner.transit.model.organization.Agency; import org.opentripplanner.transit.model.organization.AgencyBuilder; +import org.opentripplanner.utils.lang.StringUtils; import org.rutebanken.netex.model.Authority; /** diff --git a/application/src/main/java/org/opentripplanner/netex/mapping/MultilingualStringMapper.java b/application/src/main/java/org/opentripplanner/netex/mapping/MultilingualStringMapper.java index 0f0e2336bc7..668c9feea46 100644 --- a/application/src/main/java/org/opentripplanner/netex/mapping/MultilingualStringMapper.java +++ b/application/src/main/java/org/opentripplanner/netex/mapping/MultilingualStringMapper.java @@ -1,7 +1,7 @@ package org.opentripplanner.netex.mapping; import javax.annotation.Nullable; -import org.opentripplanner.framework.lang.StringUtils; +import org.opentripplanner.utils.lang.StringUtils; import org.rutebanken.netex.model.MultilingualString; public class MultilingualStringMapper { diff --git a/application/src/main/java/org/opentripplanner/netex/mapping/OperatorToAgencyMapper.java b/application/src/main/java/org/opentripplanner/netex/mapping/OperatorToAgencyMapper.java index f7bd2643769..b4cf9f3e4de 100644 --- a/application/src/main/java/org/opentripplanner/netex/mapping/OperatorToAgencyMapper.java +++ b/application/src/main/java/org/opentripplanner/netex/mapping/OperatorToAgencyMapper.java @@ -1,10 +1,10 @@ package org.opentripplanner.netex.mapping; -import org.opentripplanner.framework.lang.StringUtils; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.netex.mapping.support.FeedScopedIdFactory; import org.opentripplanner.transit.model.organization.Operator; import org.opentripplanner.transit.model.organization.OperatorBuilder; +import org.opentripplanner.utils.lang.StringUtils; import org.rutebanken.netex.model.ContactStructure; /** diff --git a/application/src/main/java/org/opentripplanner/osm/OsmProvider.java b/application/src/main/java/org/opentripplanner/osm/OsmProvider.java index 2569f666281..597fd516b0e 100644 --- a/application/src/main/java/org/opentripplanner/osm/OsmProvider.java +++ b/application/src/main/java/org/opentripplanner/osm/OsmProvider.java @@ -10,13 +10,13 @@ import org.opentripplanner.datastore.api.FileType; import org.opentripplanner.datastore.file.FileDataSource; import org.opentripplanner.framework.application.OtpFileNames; -import org.opentripplanner.framework.logging.ProgressTracker; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.graph_builder.module.osm.OsmDatabase; import org.opentripplanner.osm.tagmapping.OsmTagMapper; import org.opentripplanner.osm.tagmapping.OsmTagMapperSource; import org.opentripplanner.osm.wayproperty.WayPropertySet; +import org.opentripplanner.utils.logging.ProgressTracker; +import org.opentripplanner.utils.tostring.ToStringBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/osm/model/OsmWithTags.java b/application/src/main/java/org/opentripplanner/osm/model/OsmWithTags.java index 1cd08d9fcd5..00d275ec36a 100644 --- a/application/src/main/java/org/opentripplanner/osm/model/OsmWithTags.java +++ b/application/src/main/java/org/opentripplanner/osm/model/OsmWithTags.java @@ -15,11 +15,11 @@ import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.framework.i18n.TranslatedString; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.graph_builder.module.osm.OsmModule; import org.opentripplanner.osm.OsmProvider; import org.opentripplanner.street.model.StreetTraversalPermission; import org.opentripplanner.transit.model.basic.Accessibility; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * A base class for OSM entities containing common methods. diff --git a/application/src/main/java/org/opentripplanner/osm/wayproperty/specifier/BestMatchSpecifier.java b/application/src/main/java/org/opentripplanner/osm/wayproperty/specifier/BestMatchSpecifier.java index 1d03d74956e..94dbab99b26 100644 --- a/application/src/main/java/org/opentripplanner/osm/wayproperty/specifier/BestMatchSpecifier.java +++ b/application/src/main/java/org/opentripplanner/osm/wayproperty/specifier/BestMatchSpecifier.java @@ -2,8 +2,8 @@ import java.util.Arrays; import java.util.stream.Collectors; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.osm.model.OsmWithTags; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Specifies a class of OSM tagged entities (e.g. ways) by a list of tags and their values (which diff --git a/application/src/main/java/org/opentripplanner/raptor/api/debug/DebugEvent.java b/application/src/main/java/org/opentripplanner/raptor/api/debug/DebugEvent.java index 7162a4a6641..a69e977efe3 100644 --- a/application/src/main/java/org/opentripplanner/raptor/api/debug/DebugEvent.java +++ b/application/src/main/java/org/opentripplanner/raptor/api/debug/DebugEvent.java @@ -1,6 +1,6 @@ package org.opentripplanner.raptor.api.debug; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Debug events hold information about an internal event in the Raptor Algorithm. The element may be diff --git a/application/src/main/java/org/opentripplanner/raptor/api/model/GeneralizedCostRelaxFunction.java b/application/src/main/java/org/opentripplanner/raptor/api/model/GeneralizedCostRelaxFunction.java index 0335e962d98..0038a8e2681 100644 --- a/application/src/main/java/org/opentripplanner/raptor/api/model/GeneralizedCostRelaxFunction.java +++ b/application/src/main/java/org/opentripplanner/raptor/api/model/GeneralizedCostRelaxFunction.java @@ -3,8 +3,8 @@ import java.time.Duration; import java.util.Locale; import java.util.Objects; -import org.opentripplanner.framework.lang.IntUtils; -import org.opentripplanner.framework.lang.OtpNumberFormat; +import org.opentripplanner.utils.lang.IntUtils; +import org.opentripplanner.utils.lang.OtpNumberFormat; /** * This relax-function is used to relax increasing values by: diff --git a/application/src/main/java/org/opentripplanner/raptor/api/model/RaptorAccessEgress.java b/application/src/main/java/org/opentripplanner/raptor/api/model/RaptorAccessEgress.java index 3a7f48cf743..f970254dcc8 100644 --- a/application/src/main/java/org/opentripplanner/raptor/api/model/RaptorAccessEgress.java +++ b/application/src/main/java/org/opentripplanner/raptor/api/model/RaptorAccessEgress.java @@ -4,8 +4,8 @@ import java.time.temporal.ChronoUnit; import javax.annotation.Nullable; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.time.TimeUtils; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.time.TimeUtils; /** * Encapsulate information about an access or egress path. We do not distinguish between diff --git a/application/src/main/java/org/opentripplanner/raptor/api/model/RaptorTransfer.java b/application/src/main/java/org/opentripplanner/raptor/api/model/RaptorTransfer.java index 856d6828b30..477c785eaa4 100644 --- a/application/src/main/java/org/opentripplanner/raptor/api/model/RaptorTransfer.java +++ b/application/src/main/java/org/opentripplanner/raptor/api/model/RaptorTransfer.java @@ -1,6 +1,6 @@ package org.opentripplanner.raptor.api.model; -import org.opentripplanner.framework.time.DurationUtils; +import org.opentripplanner.utils.time.DurationUtils; /** * Encapsulate information about a transfer path. diff --git a/application/src/main/java/org/opentripplanner/raptor/api/path/PathLeg.java b/application/src/main/java/org/opentripplanner/raptor/api/path/PathLeg.java index 35a351a4d77..20ffdbae34a 100644 --- a/application/src/main/java/org/opentripplanner/raptor/api/path/PathLeg.java +++ b/application/src/main/java/org/opentripplanner/raptor/api/path/PathLeg.java @@ -4,9 +4,9 @@ import java.util.stream.Stream; import java.util.stream.StreamSupport; import javax.annotation.Nullable; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.time.TimeUtils; /** * A leg in a Raptor path. The legs are linked together from the first leg {@link AccessPathLeg}, to diff --git a/application/src/main/java/org/opentripplanner/raptor/api/path/PathStringBuilder.java b/application/src/main/java/org/opentripplanner/raptor/api/path/PathStringBuilder.java index da56474ae02..cefba73f41f 100644 --- a/application/src/main/java/org/opentripplanner/raptor/api/path/PathStringBuilder.java +++ b/application/src/main/java/org/opentripplanner/raptor/api/path/PathStringBuilder.java @@ -3,13 +3,13 @@ import java.time.ZonedDateTime; import java.util.function.Consumer; import javax.annotation.Nullable; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.api.model.RaptorConstants; import org.opentripplanner.raptor.api.model.RaptorStopNameResolver; import org.opentripplanner.raptor.api.model.RaptorValueFormatter; import org.opentripplanner.raptor.spi.RaptorCostCalculator; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.time.TimeUtils; /** * Create a path like: {@code Walk 5m - 101 - Transit 10:07 10:35 - 2111 - Walk 4m } diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/DebugRequest.java b/application/src/main/java/org/opentripplanner/raptor/api/request/DebugRequest.java index 876175bae6e..91144d86917 100644 --- a/application/src/main/java/org/opentripplanner/raptor/api/request/DebugRequest.java +++ b/application/src/main/java/org/opentripplanner/raptor/api/request/DebugRequest.java @@ -3,12 +3,12 @@ import java.util.List; import java.util.Objects; import java.util.function.Consumer; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.debug.DebugEvent; import org.opentripplanner.raptor.api.debug.DebugLogger; import org.opentripplanner.raptor.api.path.RaptorPath; import org.opentripplanner.raptor.api.view.ArrivalView; import org.opentripplanner.raptor.api.view.PatternRideView; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * This class configure the amount of debugging you want for your request. Debugging is supported by diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/MultiCriteriaRequest.java b/application/src/main/java/org/opentripplanner/raptor/api/request/MultiCriteriaRequest.java index 683c9807af5..7f0da11b558 100644 --- a/application/src/main/java/org/opentripplanner/raptor/api/request/MultiCriteriaRequest.java +++ b/application/src/main/java/org/opentripplanner/raptor/api/request/MultiCriteriaRequest.java @@ -4,9 +4,9 @@ import java.util.Objects; import java.util.Optional; import javax.annotation.Nullable; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.api.model.RelaxFunction; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Parameters to configure the multi-criteria search. diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/PassThroughPoint.java b/application/src/main/java/org/opentripplanner/raptor/api/request/PassThroughPoint.java index 187436907fe..7c529343b32 100644 --- a/application/src/main/java/org/opentripplanner/raptor/api/request/PassThroughPoint.java +++ b/application/src/main/java/org/opentripplanner/raptor/api/request/PassThroughPoint.java @@ -6,7 +6,7 @@ import java.util.function.IntFunction; import java.util.stream.IntStream; import javax.annotation.Nullable; -import org.opentripplanner.framework.lang.StringUtils; +import org.opentripplanner.utils.lang.StringUtils; /** * A collection of stop indexes used to define a pass through-point. diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorRequest.java b/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorRequest.java index 010bff4bc08..3c27f5478c8 100644 --- a/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorRequest.java +++ b/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorRequest.java @@ -4,10 +4,10 @@ import java.util.Collections; import java.util.Objects; import java.util.Set; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.debug.RaptorTimers; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.api.model.SearchDirection; +import org.opentripplanner.utils.tostring.ToStringBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorViaConnection.java b/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorViaConnection.java index 45dc5394188..a8359e6c5fa 100644 --- a/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorViaConnection.java +++ b/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorViaConnection.java @@ -2,10 +2,10 @@ import java.util.Objects; import javax.annotation.Nullable; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.raptor.api.model.RaptorConstants; import org.opentripplanner.raptor.api.model.RaptorStopNameResolver; import org.opentripplanner.raptor.api.model.RaptorTransfer; +import org.opentripplanner.utils.time.DurationUtils; /** * A via-connection is used to define one of the physical locations in a via location Raptor must diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorViaLocation.java b/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorViaLocation.java index ae7ea19d20d..fbaae6dabdc 100644 --- a/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorViaLocation.java +++ b/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorViaLocation.java @@ -5,11 +5,11 @@ import java.util.List; import java.util.Objects; import javax.annotation.Nullable; -import org.opentripplanner.framework.lang.IntUtils; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.raptor.api.model.RaptorConstants; import org.opentripplanner.raptor.api.model.RaptorStopNameResolver; import org.opentripplanner.raptor.api.model.RaptorTransfer; +import org.opentripplanner.utils.lang.IntUtils; +import org.opentripplanner.utils.time.DurationUtils; /** * Defines a via location which Raptor will force the path through. The concrete location is diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/SearchParams.java b/application/src/main/java/org/opentripplanner/raptor/api/request/SearchParams.java index 6ba51319a29..d43d0f11ab6 100644 --- a/application/src/main/java/org/opentripplanner/raptor/api/request/SearchParams.java +++ b/application/src/main/java/org/opentripplanner/raptor/api/request/SearchParams.java @@ -5,10 +5,10 @@ import java.util.Collection; import java.util.List; import java.util.Objects; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.api.model.RaptorConstants; import org.opentripplanner.raptor.api.model.RaptorTransfer; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * The responsibility of this class is to encapsulate a Range Raptor travel request search diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/SearchParamsBuilder.java b/application/src/main/java/org/opentripplanner/raptor/api/request/SearchParamsBuilder.java index 7db4ce5d0f7..cdb7146e814 100644 --- a/application/src/main/java/org/opentripplanner/raptor/api/request/SearchParamsBuilder.java +++ b/application/src/main/java/org/opentripplanner/raptor/api/request/SearchParamsBuilder.java @@ -5,10 +5,10 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.api.model.RaptorConstants; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Mutable version of {@link SearchParams}. diff --git a/application/src/main/java/org/opentripplanner/raptor/api/response/RaptorResponse.java b/application/src/main/java/org/opentripplanner/raptor/api/response/RaptorResponse.java index 82c0c06d0cd..5b0f1885a85 100644 --- a/application/src/main/java/org/opentripplanner/raptor/api/response/RaptorResponse.java +++ b/application/src/main/java/org/opentripplanner/raptor/api/response/RaptorResponse.java @@ -1,11 +1,11 @@ package org.opentripplanner.raptor.api.response; import java.util.Collection; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.RaptorService; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.api.path.RaptorPath; import org.opentripplanner.raptor.api.request.RaptorRequest; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * This is the result of a raptor search including the result paths, the original request diff --git a/application/src/main/java/org/opentripplanner/raptor/api/view/ArrivalView.java b/application/src/main/java/org/opentripplanner/raptor/api/view/ArrivalView.java index 2dffbbe5733..83e46f2d78f 100644 --- a/application/src/main/java/org/opentripplanner/raptor/api/view/ArrivalView.java +++ b/application/src/main/java/org/opentripplanner/raptor/api/view/ArrivalView.java @@ -2,7 +2,6 @@ import java.util.function.IntFunction; import javax.annotation.Nullable; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.raptor.api.model.PathLegType; import org.opentripplanner.raptor.api.model.RaptorConstants; import org.opentripplanner.raptor.api.model.RaptorTransfer; @@ -10,6 +9,7 @@ import org.opentripplanner.raptor.api.model.RaptorValueFormatter; import org.opentripplanner.raptor.api.model.TransitArrival; import org.opentripplanner.raptor.spi.RaptorCostCalculator; +import org.opentripplanner.utils.time.TimeUtils; /** * The purpose of the stop-arrival-view is to provide a common interface for stop-arrivals for diff --git a/application/src/main/java/org/opentripplanner/raptor/path/PathBuilderLeg.java b/application/src/main/java/org/opentripplanner/raptor/path/PathBuilderLeg.java index 335d38203b1..eb80b36316b 100644 --- a/application/src/main/java/org/opentripplanner/raptor/path/PathBuilderLeg.java +++ b/application/src/main/java/org/opentripplanner/raptor/path/PathBuilderLeg.java @@ -2,7 +2,6 @@ import java.util.function.Predicate; import javax.annotation.Nullable; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.api.model.RaptorConstants; import org.opentripplanner.raptor.api.model.RaptorConstrainedTransfer; @@ -22,6 +21,7 @@ import org.opentripplanner.raptor.spi.BoardAndAlightTime; import org.opentripplanner.raptor.spi.RaptorCostCalculator; import org.opentripplanner.raptor.spi.RaptorSlackProvider; +import org.opentripplanner.utils.time.TimeUtils; /** * This is the leg implementation for the {@link PathBuilder}. It helps to cache and calculate diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/SystemErrDebugLogger.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/SystemErrDebugLogger.java index 951721f81a7..c80d226afc7 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/SystemErrDebugLogger.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/SystemErrDebugLogger.java @@ -1,22 +1,17 @@ package org.opentripplanner.raptor.rangeraptor; -import static org.opentripplanner.framework.text.Table.Align.Center; -import static org.opentripplanner.framework.text.Table.Align.Left; -import static org.opentripplanner.framework.text.Table.Align.Right; -import static org.opentripplanner.framework.time.TimeUtils.timeToStrCompact; -import static org.opentripplanner.framework.time.TimeUtils.timeToStrLong; import static org.opentripplanner.raptor.api.model.PathLegType.ACCESS; import static org.opentripplanner.raptor.api.model.PathLegType.TRANSIT; +import static org.opentripplanner.utils.text.Table.Align.Center; +import static org.opentripplanner.utils.text.Table.Align.Left; +import static org.opentripplanner.utils.text.Table.Align.Right; +import static org.opentripplanner.utils.time.TimeUtils.timeToStrCompact; +import static org.opentripplanner.utils.time.TimeUtils.timeToStrLong; import java.text.NumberFormat; import java.util.Locale; import java.util.function.Consumer; import javax.annotation.Nullable; -import org.opentripplanner.framework.lang.IntUtils; -import org.opentripplanner.framework.lang.OtpNumberFormat; -import org.opentripplanner.framework.lang.StringUtils; -import org.opentripplanner.framework.text.Table; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.raptor.api.debug.DebugEvent; import org.opentripplanner.raptor.api.debug.DebugLogger; import org.opentripplanner.raptor.api.debug.DebugTopic; @@ -26,6 +21,11 @@ import org.opentripplanner.raptor.api.view.ArrivalView; import org.opentripplanner.raptor.api.view.PatternRideView; import org.opentripplanner.raptor.rangeraptor.transit.TripTimesSearch; +import org.opentripplanner.utils.lang.IntUtils; +import org.opentripplanner.utils.lang.OtpNumberFormat; +import org.opentripplanner.utils.lang.StringUtils; +import org.opentripplanner.utils.text.Table; +import org.opentripplanner.utils.time.DurationUtils; /** * A debug logger which can be plugged into Raptor to do debug logging to standard error. This is diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/HeuristicAtStop.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/HeuristicAtStop.java index b58d773969c..da07c643fb6 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/HeuristicAtStop.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/HeuristicAtStop.java @@ -1,8 +1,8 @@ package org.opentripplanner.raptor.rangeraptor.internalapi; -import org.opentripplanner.framework.lang.OtpNumberFormat; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.raptor.api.model.RaptorConstants; +import org.opentripplanner.utils.lang.OtpNumberFormat; +import org.opentripplanner.utils.time.DurationUtils; /** * Heuristic data for a given stop. diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c1/PatternRideC1.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c1/PatternRideC1.java index cbb3fbfadf3..fd669e40ffc 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c1/PatternRideC1.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c1/PatternRideC1.java @@ -1,12 +1,12 @@ package org.opentripplanner.raptor.rangeraptor.multicriteria.ride.c1; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.rangeraptor.multicriteria.arrivals.McStopArrival; import org.opentripplanner.raptor.rangeraptor.multicriteria.ride.PatternRide; import org.opentripplanner.raptor.rangeraptor.multicriteria.ride.PatternRideFactory; import org.opentripplanner.raptor.spi.RaptorCostCalculator; import org.opentripplanner.raptor.util.paretoset.ParetoComparator; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * A {@link PatternRide} with support for c1 {@code generalized-cost}. diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/PassThroughRideFactory.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/PassThroughRideFactory.java index 6120ae9d698..734766666c5 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/PassThroughRideFactory.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/PassThroughRideFactory.java @@ -1,10 +1,10 @@ package org.opentripplanner.raptor.rangeraptor.multicriteria.ride.c2; -import org.opentripplanner.framework.lang.IntBox; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.rangeraptor.internalapi.PassThroughPointsService; import org.opentripplanner.raptor.rangeraptor.multicriteria.arrivals.McStopArrival; import org.opentripplanner.raptor.rangeraptor.multicriteria.ride.PatternRideFactory; +import org.opentripplanner.utils.lang.IntBox; public class PassThroughRideFactory implements PatternRideFactory> { diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/PatternRideC2.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/PatternRideC2.java index d02bef207c2..a23999f1813 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/PatternRideC2.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/PatternRideC2.java @@ -1,11 +1,11 @@ package org.opentripplanner.raptor.rangeraptor.multicriteria.ride.c2; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.model.DominanceFunction; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.rangeraptor.multicriteria.arrivals.McStopArrival; import org.opentripplanner.raptor.rangeraptor.multicriteria.ride.PatternRide; import org.opentripplanner.raptor.util.paretoset.ParetoComparator; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * A {@link PatternRide} with support for c1 {@code generalized-cost} and c2 (custom-use-case-cost). diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/path/DestinationArrivalPaths.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/path/DestinationArrivalPaths.java index 78dc7da4967..2f257e52645 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/path/DestinationArrivalPaths.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/path/DestinationArrivalPaths.java @@ -5,8 +5,6 @@ import java.util.Optional; import java.util.function.IntPredicate; import javax.annotation.Nullable; -import org.opentripplanner.framework.lang.OtpNumberFormat; -import org.opentripplanner.framework.logging.Throttle; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.api.model.RaptorConstants; import org.opentripplanner.raptor.api.model.RaptorStopNameResolver; @@ -22,6 +20,8 @@ import org.opentripplanner.raptor.spi.RaptorCostCalculator; import org.opentripplanner.raptor.util.paretoset.ParetoComparator; import org.opentripplanner.raptor.util.paretoset.ParetoSet; +import org.opentripplanner.utils.lang.OtpNumberFormat; +import org.opentripplanner.utils.logging.Throttle; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/MinTravelDurationRoutingStrategy.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/MinTravelDurationRoutingStrategy.java index 0e18729b97e..f68299a0a13 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/MinTravelDurationRoutingStrategy.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/MinTravelDurationRoutingStrategy.java @@ -2,7 +2,6 @@ import static org.opentripplanner.raptor.spi.RaptorTripScheduleSearch.UNBOUNDED_TRIP_INDEX; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.rangeraptor.internalapi.RoutingStrategy; @@ -12,6 +11,7 @@ import org.opentripplanner.raptor.spi.RaptorBoardOrAlightEvent; import org.opentripplanner.raptor.spi.RaptorConstrainedBoardingSearch; import org.opentripplanner.raptor.spi.RaptorRoute; +import org.opentripplanner.utils.time.TimeUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/BestTimes.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/BestTimes.java index 3807b26b6c6..296325e9022 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/BestTimes.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/BestTimes.java @@ -1,14 +1,14 @@ package org.opentripplanner.raptor.rangeraptor.standard.besttimes; -import static org.opentripplanner.framework.lang.IntUtils.intArray; +import static org.opentripplanner.utils.lang.IntUtils.intArray; import java.util.BitSet; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.rangeraptor.internalapi.SingleCriteriaStopArrivals; import org.opentripplanner.raptor.rangeraptor.internalapi.WorkerLifeCycle; import org.opentripplanner.raptor.rangeraptor.support.IntArraySingleCriteriaArrivals; import org.opentripplanner.raptor.rangeraptor.transit.TransitCalculator; import org.opentripplanner.raptor.util.BitSetIterator; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * This class is responsible for keeping track of the overall best times and the best "on-board" diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/SimpleBestNumberOfTransfers.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/SimpleBestNumberOfTransfers.java index 22b0f44a579..f529ce31e20 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/SimpleBestNumberOfTransfers.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/SimpleBestNumberOfTransfers.java @@ -1,10 +1,10 @@ package org.opentripplanner.raptor.rangeraptor.standard.besttimes; -import org.opentripplanner.framework.lang.IntUtils; import org.opentripplanner.raptor.rangeraptor.internalapi.SingleCriteriaStopArrivals; import org.opentripplanner.raptor.rangeraptor.internalapi.WorkerLifeCycle; import org.opentripplanner.raptor.rangeraptor.standard.internalapi.BestNumberOfTransfers; import org.opentripplanner.raptor.rangeraptor.support.IntArraySingleCriteriaArrivals; +import org.opentripplanner.utils.lang.IntUtils; /** * The responsibility for this class is to keep track of the best (minimun) number of transfers for diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/heuristics/HeuristicsAdapter.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/heuristics/HeuristicsAdapter.java index 3dbff516347..00cce39622d 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/heuristics/HeuristicsAdapter.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/heuristics/HeuristicsAdapter.java @@ -4,9 +4,6 @@ import java.util.Arrays; import java.util.List; import java.util.function.IntUnaryOperator; -import org.opentripplanner.framework.lang.IntUtils; -import org.opentripplanner.framework.time.TimeUtils; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.rangeraptor.internalapi.HeuristicAtStop; import org.opentripplanner.raptor.rangeraptor.internalapi.Heuristics; @@ -15,6 +12,9 @@ import org.opentripplanner.raptor.rangeraptor.transit.RaptorTransitCalculator; import org.opentripplanner.raptor.rangeraptor.transit.TransitCalculator; import org.opentripplanner.raptor.spi.RaptorCostCalculator; +import org.opentripplanner.utils.lang.IntUtils; +import org.opentripplanner.utils.time.TimeUtils; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * The responsibility of this class is to play the {@link Heuristics} role. It wrap the internal diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/AccessStopArrivalState.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/AccessStopArrivalState.java index 867707be215..62f708d1899 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/AccessStopArrivalState.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/AccessStopArrivalState.java @@ -1,9 +1,9 @@ package org.opentripplanner.raptor.rangeraptor.standard.stoparrivals; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.api.model.RaptorTransfer; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * This class is responsible for adding access functionality, which the {@link diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/DefaultStopArrivalState.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/DefaultStopArrivalState.java index 6df63b37d16..b76b0560791 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/DefaultStopArrivalState.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/DefaultStopArrivalState.java @@ -1,9 +1,9 @@ package org.opentripplanner.raptor.rangeraptor.standard.stoparrivals; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.api.model.RaptorTransfer; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * The main purpose of this class is to hold data for a given arrival at a stop and raptor round. It diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/EgressStopArrivalState.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/EgressStopArrivalState.java index f546e358ad8..c002f57dcba 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/EgressStopArrivalState.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/EgressStopArrivalState.java @@ -2,11 +2,11 @@ import java.util.Collection; import java.util.List; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.api.model.RaptorTransfer; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.rangeraptor.standard.internalapi.DestinationArrivalListener; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * The egress stop arrival state is responsible for sending arrival notifications. This is used to diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/path/EgressArrivalToPathAdapter.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/path/EgressArrivalToPathAdapter.java index b52e0d854da..a5d39d2eca9 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/path/EgressArrivalToPathAdapter.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/path/EgressArrivalToPathAdapter.java @@ -4,8 +4,6 @@ import java.util.ArrayList; import java.util.List; -import org.opentripplanner.framework.time.TimeUtils; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.api.view.ArrivalView; @@ -16,6 +14,8 @@ import org.opentripplanner.raptor.rangeraptor.standard.internalapi.DestinationArrivalListener; import org.opentripplanner.raptor.rangeraptor.standard.stoparrivals.view.StopsCursor; import org.opentripplanner.raptor.rangeraptor.transit.TransitCalculator; +import org.opentripplanner.utils.time.TimeUtils; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * The responsibility of this class is to listen for egress stop arrivals and forward these as diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculator.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculator.java index 5c50aa030f5..20dda7a3b37 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculator.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculator.java @@ -1,7 +1,6 @@ package org.opentripplanner.raptor.rangeraptor.transit; import java.util.Iterator; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.raptor.api.model.RaptorConstants; import org.opentripplanner.raptor.api.model.RaptorTransfer; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; @@ -14,6 +13,7 @@ import org.opentripplanner.raptor.spi.RaptorTransitDataProvider; import org.opentripplanner.raptor.spi.RaptorTripScheduleSearch; import org.opentripplanner.raptor.util.IntIterators; +import org.opentripplanner.utils.time.TimeUtils; public final class ForwardRaptorTransitCalculator extends ForwardTransitCalculator diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/RaptorTransitCalculator.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/RaptorTransitCalculator.java index af9cff110d0..141c71ee86c 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/RaptorTransitCalculator.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/RaptorTransitCalculator.java @@ -1,7 +1,7 @@ package org.opentripplanner.raptor.rangeraptor.transit; -import static org.opentripplanner.framework.time.TimeUtils.hm2time; import static org.opentripplanner.raptor.api.model.RaptorConstants.TIME_NOT_SET; +import static org.opentripplanner.utils.time.TimeUtils.hm2time; import java.util.Iterator; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculator.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculator.java index 09ded9fb4b7..1229c8d85ff 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculator.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculator.java @@ -1,7 +1,6 @@ package org.opentripplanner.raptor.rangeraptor.transit; import java.util.Iterator; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.raptor.api.model.RaptorConstants; import org.opentripplanner.raptor.api.model.RaptorTransfer; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; @@ -14,6 +13,7 @@ import org.opentripplanner.raptor.spi.RaptorTransitDataProvider; import org.opentripplanner.raptor.spi.RaptorTripScheduleSearch; import org.opentripplanner.raptor.util.IntIterators; +import org.opentripplanner.utils.time.TimeUtils; public final class ReverseRaptorTransitCalculator extends ReverseTransitCalculator diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TripScheduleExactMatchSearch.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TripScheduleExactMatchSearch.java index 666cf95f31e..1db6b2de055 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TripScheduleExactMatchSearch.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TripScheduleExactMatchSearch.java @@ -1,9 +1,9 @@ package org.opentripplanner.raptor.rangeraptor.transit; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.spi.RaptorBoardOrAlightEvent; import org.opentripplanner.raptor.spi.RaptorTripScheduleSearch; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * This trip search will only match trips that is within the given slack of the timeLimit. diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TripTimesSearch.java b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TripTimesSearch.java index 83bfbe16481..94dfa83ad80 100644 --- a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TripTimesSearch.java +++ b/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TripTimesSearch.java @@ -1,10 +1,10 @@ package org.opentripplanner.raptor.rangeraptor.transit; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.raptor.api.model.RaptorTripPattern; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.api.view.ArrivalView; import org.opentripplanner.raptor.spi.BoardAndAlightTime; +import org.opentripplanner.utils.time.TimeUtils; /** * This class is used to find the board and alight time for a known trip, where you now the diff --git a/application/src/main/java/org/opentripplanner/raptor/service/DebugHeuristics.java b/application/src/main/java/org/opentripplanner/raptor/service/DebugHeuristics.java index bb4241bb2ae..f4c2c141f04 100644 --- a/application/src/main/java/org/opentripplanner/raptor/service/DebugHeuristics.java +++ b/application/src/main/java/org/opentripplanner/raptor/service/DebugHeuristics.java @@ -5,13 +5,13 @@ import static org.opentripplanner.raptor.api.model.RaptorConstants.N_TRANSFERS_UNREACHED; import static org.opentripplanner.raptor.api.model.RaptorConstants.UNREACHED_HIGH; -import org.opentripplanner.framework.lang.IntUtils; import org.opentripplanner.raptor.api.debug.DebugLogger; import org.opentripplanner.raptor.api.model.SearchDirection; import org.opentripplanner.raptor.api.request.DebugRequest; import org.opentripplanner.raptor.api.request.RaptorRequest; import org.opentripplanner.raptor.rangeraptor.internalapi.Heuristics; import org.opentripplanner.raptor.util.CompareIntArrays; +import org.opentripplanner.utils.lang.IntUtils; /** * Utility class to log computed heuristic data. diff --git a/application/src/main/java/org/opentripplanner/raptor/service/HeuristicSearchTask.java b/application/src/main/java/org/opentripplanner/raptor/service/HeuristicSearchTask.java index 7c0158d2192..e31f8852ad6 100644 --- a/application/src/main/java/org/opentripplanner/raptor/service/HeuristicSearchTask.java +++ b/application/src/main/java/org/opentripplanner/raptor/service/HeuristicSearchTask.java @@ -3,7 +3,6 @@ import static org.opentripplanner.raptor.api.request.RaptorProfile.MIN_TRAVEL_DURATION; import javax.annotation.Nullable; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.api.model.SearchDirection; import org.opentripplanner.raptor.api.request.RaptorRequest; @@ -12,6 +11,7 @@ import org.opentripplanner.raptor.rangeraptor.internalapi.Heuristics; import org.opentripplanner.raptor.rangeraptor.internalapi.RaptorRouterResult; import org.opentripplanner.raptor.spi.RaptorTransitDataProvider; +import org.opentripplanner.utils.time.DurationUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/raptor/spi/BoardAndAlightTime.java b/application/src/main/java/org/opentripplanner/raptor/spi/BoardAndAlightTime.java index 9c0f8264511..c90e67934a8 100644 --- a/application/src/main/java/org/opentripplanner/raptor/spi/BoardAndAlightTime.java +++ b/application/src/main/java/org/opentripplanner/raptor/spi/BoardAndAlightTime.java @@ -1,9 +1,9 @@ package org.opentripplanner.raptor.spi; import java.util.Objects; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.time.TimeUtils; /** * Board and alight time tuple value object. diff --git a/application/src/main/java/org/opentripplanner/raptor/util/CompareIntArrays.java b/application/src/main/java/org/opentripplanner/raptor/util/CompareIntArrays.java index 9bff831a670..1f446fe036c 100644 --- a/application/src/main/java/org/opentripplanner/raptor/util/CompareIntArrays.java +++ b/application/src/main/java/org/opentripplanner/raptor/util/CompareIntArrays.java @@ -2,7 +2,7 @@ import java.util.Comparator; import java.util.function.IntFunction; -import org.opentripplanner.framework.time.TimeUtils; +import org.opentripplanner.utils.time.TimeUtils; /** * The responsibility of this class is to compare two int arrays and list all elements that differ. diff --git a/application/src/main/java/org/opentripplanner/routing/TripTimeOnDateHelper.java b/application/src/main/java/org/opentripplanner/routing/TripTimeOnDateHelper.java index 72665edf657..f2806d0a1f2 100644 --- a/application/src/main/java/org/opentripplanner/routing/TripTimeOnDateHelper.java +++ b/application/src/main/java/org/opentripplanner/routing/TripTimeOnDateHelper.java @@ -4,13 +4,13 @@ import java.time.LocalDate; import java.util.ArrayList; import java.util.List; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.model.Timetable; import org.opentripplanner.model.TripTimeOnDate; import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.model.timetable.TripTimes; import org.opentripplanner.transit.service.TransitService; +import org.opentripplanner.utils.time.ServiceDateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/RoutingWorker.java b/application/src/main/java/org/opentripplanner/routing/algorithm/RoutingWorker.java index 1e2dd3f2d4e..e0b06eab561 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/RoutingWorker.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/RoutingWorker.java @@ -14,7 +14,6 @@ import javax.annotation.Nullable; import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.framework.application.OTPRequestTimeoutException; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.grouppriority.TransitGroupPriorityItineraryDecorator; import org.opentripplanner.model.plan.paging.cursor.PageCursorInput; @@ -38,6 +37,7 @@ import org.opentripplanner.service.paging.PagingService; import org.opentripplanner.standalone.api.OtpServerRequestContext; import org.opentripplanner.transit.model.network.grouppriority.TransitGroupPriorityService; +import org.opentripplanner.utils.time.ServiceDateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/ItineraryListFilterChainBuilder.java b/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/ItineraryListFilterChainBuilder.java index 3ff85db467a..65776948cbb 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/ItineraryListFilterChainBuilder.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/ItineraryListFilterChainBuilder.java @@ -13,8 +13,6 @@ import javax.annotation.Nullable; import org.opentripplanner.ext.accessibilityscore.DecorateWithAccessibilityScore; import org.opentripplanner.framework.application.OTPFeature; -import org.opentripplanner.framework.collection.ListSection; -import org.opentripplanner.framework.lang.Sandbox; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.ItinerarySortKey; import org.opentripplanner.model.plan.SortOrder; @@ -58,6 +56,8 @@ import org.opentripplanner.street.search.TraverseMode; import org.opentripplanner.transit.model.site.MultiModalStation; import org.opentripplanner.transit.model.site.Station; +import org.opentripplanner.utils.collection.ListSection; +import org.opentripplanner.utils.lang.Sandbox; /** * Create a filter chain based on the given config. diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/api/GroupBySimilarity.java b/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/api/GroupBySimilarity.java index 0f671524a06..5cec3046710 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/api/GroupBySimilarity.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/api/GroupBySimilarity.java @@ -1,7 +1,7 @@ package org.opentripplanner.routing.algorithm.filterchain.api; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.algorithm.filterchain.ItineraryListFilterChainBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Group itineraries by similarity and reduce the number of itineraries down to an given maximum diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/api/TransitGeneralizedCostFilterParams.java b/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/api/TransitGeneralizedCostFilterParams.java index a173f6b454b..da33b6f92a0 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/api/TransitGeneralizedCostFilterParams.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/api/TransitGeneralizedCostFilterParams.java @@ -1,7 +1,7 @@ package org.opentripplanner.routing.algorithm.filterchain.api; -import org.opentripplanner.framework.lang.DoubleUtils; import org.opentripplanner.routing.api.request.framework.CostLinearFunction; +import org.opentripplanner.utils.lang.DoubleUtils; /** * Input parameters for diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/NumItinerariesFilter.java b/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/NumItinerariesFilter.java index aed5eeb4f95..77c297fcfa5 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/NumItinerariesFilter.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/NumItinerariesFilter.java @@ -2,10 +2,10 @@ import java.util.List; import java.util.function.Consumer; -import org.opentripplanner.framework.collection.ListSection; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.paging.cursor.PageCursorInput; import org.opentripplanner.routing.algorithm.filterchain.framework.spi.RemoveItineraryFlagger; +import org.opentripplanner.utils.collection.ListSection; /** * Flag all itineraries after the provided limit. This flags the itineraries at the end of the list diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/NumItinerariesFilterResults.java b/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/NumItinerariesFilterResults.java index 8b11be099f7..401dc95026d 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/NumItinerariesFilterResults.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/NumItinerariesFilterResults.java @@ -2,12 +2,12 @@ import java.time.Instant; import java.util.List; -import org.opentripplanner.framework.collection.ListSection; -import org.opentripplanner.framework.collection.ListUtils; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.ItinerarySortKey; import org.opentripplanner.model.plan.paging.cursor.PageCursorInput; +import org.opentripplanner.utils.collection.ListSection; +import org.opentripplanner.utils.collection.ListUtils; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * The NumItinerariesFilter removes itineraries from a list of itineraries based on the number to diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/PagingFilter.java b/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/PagingFilter.java index 1ef109525f6..417ffca9d83 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/PagingFilter.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/PagingFilter.java @@ -3,12 +3,12 @@ import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; -import org.opentripplanner.framework.collection.ListSection; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.ItinerarySortKey; import org.opentripplanner.model.plan.SortOrder; import org.opentripplanner.routing.algorithm.filterchain.framework.sort.SortOrderComparator; import org.opentripplanner.routing.algorithm.filterchain.framework.spi.RemoveItineraryFlagger; +import org.opentripplanner.utils.collection.ListSection; /** * This class is used to enforce the cut/limit between two pages. It removes potential duplicates diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/transit/TransitGeneralizedCostFilter.java b/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/transit/TransitGeneralizedCostFilter.java index 430f00372d0..4af0acd00cb 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/transit/TransitGeneralizedCostFilter.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/transit/TransitGeneralizedCostFilter.java @@ -4,11 +4,11 @@ import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; -import org.opentripplanner.framework.lang.IntUtils; import org.opentripplanner.framework.model.Cost; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.routing.algorithm.filterchain.framework.spi.RemoveItineraryFlagger; import org.opentripplanner.routing.api.request.framework.CostLinearFunction; +import org.opentripplanner.utils.lang.IntUtils; /** * This filter removes all transit results which have a generalized-cost higher than the max-limit diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/framework/groupids/GroupByDistance.java b/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/framework/groupids/GroupByDistance.java index ee67e4f76d0..eb25cf9275c 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/framework/groupids/GroupByDistance.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/framework/groupids/GroupByDistance.java @@ -2,12 +2,12 @@ import java.util.Comparator; import java.util.List; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.Leg; import org.opentripplanner.model.plan.StreetLeg; import org.opentripplanner.model.plan.TransitLeg; import org.opentripplanner.routing.algorithm.filterchain.framework.spi.GroupId; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * This class creates a group identifier for an itinerary based on the longest legs which together diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/framework/sort/SortOrderComparator.java b/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/framework/sort/SortOrderComparator.java index f11caf5ceaa..a904a6990ca 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/framework/sort/SortOrderComparator.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/filterchain/framework/sort/SortOrderComparator.java @@ -4,9 +4,9 @@ import static java.util.Comparator.comparingInt; import java.util.Comparator; -import org.opentripplanner.framework.collection.CompositeComparator; import org.opentripplanner.model.plan.ItinerarySortKey; import org.opentripplanner.model.plan.SortOrder; +import org.opentripplanner.utils.collection.CompositeComparator; /** * This comparator implements the itinerary sort order defined by the {@link SortOrder}. diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/path/PathDiff.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/path/PathDiff.java index 18f1fa4f64a..d595c8abcff 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/path/PathDiff.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/path/PathDiff.java @@ -1,8 +1,8 @@ package org.opentripplanner.routing.algorithm.raptoradapter.path; -import static org.opentripplanner.framework.text.Table.Align.Center; -import static org.opentripplanner.framework.text.Table.Align.Left; -import static org.opentripplanner.framework.text.Table.Align.Right; +import static org.opentripplanner.utils.text.Table.Align.Center; +import static org.opentripplanner.utils.text.Table.Align.Left; +import static org.opentripplanner.utils.text.Table.Align.Right; import java.util.ArrayList; import java.util.Collection; @@ -10,16 +10,16 @@ import java.util.List; import java.util.function.Consumer; import java.util.stream.Collectors; -import org.opentripplanner.framework.collection.CompositeComparator; -import org.opentripplanner.framework.text.Table; -import org.opentripplanner.framework.text.TableBuilder; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.api.path.PathLeg; import org.opentripplanner.raptor.api.path.RaptorPath; import org.opentripplanner.routing.util.DiffEntry; import org.opentripplanner.routing.util.DiffTool; +import org.opentripplanner.utils.collection.CompositeComparator; +import org.opentripplanner.utils.text.Table; +import org.opentripplanner.utils.text.TableBuilder; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.time.TimeUtils; /** * This class is used to diff two set of paths. You may ask for the diff result or pass in a logger diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/AccessEgressRouter.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/AccessEgressRouter.java index 9b592fad3aa..0ae2df4e105 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/AccessEgressRouter.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/AccessEgressRouter.java @@ -7,12 +7,12 @@ import javax.annotation.Nullable; import org.opentripplanner.ext.dataoverlay.routing.DataOverlayContext; import org.opentripplanner.framework.application.OTPRequestTimeoutException; -import org.opentripplanner.framework.collection.ListUtils; import org.opentripplanner.graph_builder.module.nearbystops.StreetNearbyStopFinder; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.request.StreetRequest; import org.opentripplanner.routing.graphfinder.NearbyStop; import org.opentripplanner.street.search.TemporaryVerticesContainer; +import org.opentripplanner.utils.collection.ListUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/Transfer.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/Transfer.java index c6086100f5d..175c782ab22 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/Transfer.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/Transfer.java @@ -5,8 +5,6 @@ import java.util.List; import java.util.Optional; import org.locationtech.jts.geom.Coordinate; -import org.opentripplanner.framework.logging.Throttle; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.model.RaptorTransfer; import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter; import org.opentripplanner.routing.api.request.preference.WalkPreferences; @@ -14,6 +12,8 @@ import org.opentripplanner.street.search.request.StreetSearchRequest; import org.opentripplanner.street.search.state.EdgeTraverser; import org.opentripplanner.street.search.state.StateEditor; +import org.opentripplanner.utils.logging.Throttle; +import org.opentripplanner.utils.tostring.ToStringBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TransitTuningParameters.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TransitTuningParameters.java index b62459db679..c2e518a9ec1 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TransitTuningParameters.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TransitTuningParameters.java @@ -2,9 +2,9 @@ import java.time.Duration; import java.util.List; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.transit.model.site.StopTransferPriority; +import org.opentripplanner.utils.time.DurationUtils; public interface TransitTuningParameters { List PAGING_SEARCH_WINDOW_ADJUSTMENTS = DurationUtils.durations("4h 2h 1h 30m 20m 10m"); diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TripPatternForDate.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TripPatternForDate.java index 1411424dfc6..eeaf1312677 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TripPatternForDate.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TripPatternForDate.java @@ -8,10 +8,10 @@ import java.util.function.Predicate; import java.util.stream.Collectors; import javax.annotation.Nullable; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.transit.model.network.RoutingTripPattern; import org.opentripplanner.transit.model.timetable.FrequencyEntry; import org.opentripplanner.transit.model.timetable.TripTimes; +import org.opentripplanner.utils.time.ServiceDateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/constrainedtransfer/ConstrainedTransfersForPatterns.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/constrainedtransfer/ConstrainedTransfersForPatterns.java index f3b8eac0dd2..670c223e87d 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/constrainedtransfer/ConstrainedTransfersForPatterns.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/constrainedtransfer/ConstrainedTransfersForPatterns.java @@ -2,7 +2,7 @@ import java.util.List; import java.util.Objects; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * This is a container for returning transfers from and to stop-positions indexed by diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/GeneralizedCostParameters.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/GeneralizedCostParameters.java index e1271aca199..eee0fbf36c0 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/GeneralizedCostParameters.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/GeneralizedCostParameters.java @@ -3,9 +3,9 @@ import java.util.BitSet; import java.util.Objects; import javax.annotation.Nullable; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.preference.AccessibilityPreferences; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * This class define how to calculate the cost when cost is part of the multi-criteria pareto diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRequestTransferCache.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRequestTransferCache.java index 5e274c4120f..d778f491142 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRequestTransferCache.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRequestTransferCache.java @@ -6,7 +6,6 @@ import java.util.List; import java.util.Objects; import java.util.concurrent.ExecutionException; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.algorithm.raptoradapter.transit.RaptorTransferIndex; import org.opentripplanner.routing.algorithm.raptoradapter.transit.Transfer; import org.opentripplanner.routing.api.request.RouteRequest; @@ -17,6 +16,7 @@ import org.opentripplanner.routing.api.request.preference.WheelchairPreferences; import org.opentripplanner.street.search.request.StreetSearchRequest; import org.opentripplanner.street.search.request.StreetSearchRequestMapper; +import org.opentripplanner.utils.tostring.ToStringBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitData.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitData.java index 0182598ca35..784f24af1bc 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitData.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitData.java @@ -6,7 +6,6 @@ import java.util.List; import javax.annotation.Nullable; import org.opentripplanner.framework.application.OTPFeature; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.model.transfer.TransferService; import org.opentripplanner.raptor.api.model.RaptorConstrainedTransfer; import org.opentripplanner.raptor.api.model.RaptorStopNameResolver; @@ -30,6 +29,7 @@ import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.transit.model.network.RoutingTripPattern; import org.opentripplanner.transit.model.network.grouppriority.TransitGroupPriorityService; +import org.opentripplanner.utils.time.ServiceDateUtils; /** * This is the data provider for the Range Raptor search engine. It uses data from the TransitLayer, diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitDataCreator.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitDataCreator.java index 815bf839e31..bde424f8269 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitDataCreator.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitDataCreator.java @@ -1,6 +1,6 @@ package org.opentripplanner.routing.algorithm.raptoradapter.transit.request; -import static org.opentripplanner.framework.time.ServiceDateUtils.secondsSinceStartOfTime; +import static org.opentripplanner.utils.time.ServiceDateUtils.secondsSinceStartOfTime; import gnu.trove.list.array.TIntArrayList; import gnu.trove.map.TObjectIntMap; @@ -14,13 +14,13 @@ import java.util.List; import java.util.Map; import java.util.function.Predicate; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.routing.algorithm.raptoradapter.transit.TransitLayer; import org.opentripplanner.routing.algorithm.raptoradapter.transit.TripPatternForDate; import org.opentripplanner.transit.model.network.RoutingTripPattern; import org.opentripplanner.transit.model.network.grouppriority.TransitGroupPriorityService; import org.opentripplanner.transit.model.timetable.TripTimes; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.time.ServiceDateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripPatternForDates.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripPatternForDates.java index 0fb39b227ea..a94aa0850ba 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripPatternForDates.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripPatternForDates.java @@ -2,7 +2,6 @@ import java.util.BitSet; import java.util.function.IntUnaryOperator; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.model.RaptorTripPattern; import org.opentripplanner.raptor.api.model.SearchDirection; import org.opentripplanner.raptor.spi.IntIterator; @@ -18,6 +17,7 @@ import org.opentripplanner.transit.model.basic.Accessibility; import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.network.RoutingTripPattern; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * A collection of all the TripSchedules active on a range of consecutive days. The outer list of diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripScheduleAlightSearch.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripScheduleAlightSearch.java index 5ece76aedb5..628a16511ce 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripScheduleAlightSearch.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripScheduleAlightSearch.java @@ -2,13 +2,13 @@ import java.util.function.IntUnaryOperator; import javax.annotation.Nullable; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.model.RaptorConstants; import org.opentripplanner.raptor.api.model.RaptorTransferConstraint; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.api.model.SearchDirection; import org.opentripplanner.raptor.spi.RaptorBoardOrAlightEvent; import org.opentripplanner.raptor.spi.RaptorTripScheduleSearch; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * The purpose of this class is to optimize the search for a trip schedule for a given pattern and diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripScheduleBoardSearch.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripScheduleBoardSearch.java index 4ec306f84b3..7bd5062d8dc 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripScheduleBoardSearch.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripScheduleBoardSearch.java @@ -1,13 +1,13 @@ package org.opentripplanner.routing.algorithm.raptoradapter.transit.request; import java.util.function.IntUnaryOperator; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.model.RaptorConstants; import org.opentripplanner.raptor.api.model.RaptorTransferConstraint; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.api.model.SearchDirection; import org.opentripplanner.raptor.spi.RaptorBoardOrAlightEvent; import org.opentripplanner.raptor.spi.RaptorTripScheduleSearch; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * The purpose of this class is to optimize the search for a trip schedule for a given pattern and diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripScheduleWithOffset.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripScheduleWithOffset.java index aca998b24ca..d692f0079f6 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripScheduleWithOffset.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripScheduleWithOffset.java @@ -2,7 +2,6 @@ import java.time.LocalDate; import java.util.function.IntUnaryOperator; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.model.RaptorTripPattern; import org.opentripplanner.raptor.spi.IntIterator; import org.opentripplanner.routing.algorithm.raptoradapter.transit.TripPatternForDate; @@ -10,6 +9,7 @@ import org.opentripplanner.transit.model.basic.Accessibility; import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.timetable.TripTimes; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * This represents a single trip within a TripPattern, but with a time offset in seconds. This is diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/OptimizeTransferService.java b/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/OptimizeTransferService.java index 8a4f25d8910..4d8a79b3f4f 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/OptimizeTransferService.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/OptimizeTransferService.java @@ -3,7 +3,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; -import org.opentripplanner.framework.logging.Throttle; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.api.path.RaptorPath; import org.opentripplanner.routing.algorithm.raptoradapter.path.PathDiff; @@ -11,6 +10,7 @@ import org.opentripplanner.routing.algorithm.transferoptimization.model.MinSafeTransferTimeCalculator; import org.opentripplanner.routing.algorithm.transferoptimization.model.TransferWaitTimeCostCalculator; import org.opentripplanner.routing.algorithm.transferoptimization.services.OptimizePathDomainService; +import org.opentripplanner.utils.logging.Throttle; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/BasicStopTime.java b/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/BasicStopTime.java index 9d073b2ae64..5fd9e73e398 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/BasicStopTime.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/BasicStopTime.java @@ -1,7 +1,7 @@ package org.opentripplanner.routing.algorithm.transferoptimization.model; import java.util.Objects; -import org.opentripplanner.framework.tostring.ValueObjectToStringBuilder; +import org.opentripplanner.utils.tostring.ValueObjectToStringBuilder; /** Basic stop and time value object. */ final class BasicStopTime implements StopTime { diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/MinSafeTransferTimeCalculator.java b/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/MinSafeTransferTimeCalculator.java index 49b3c29559e..fde6b3d4a64 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/MinSafeTransferTimeCalculator.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/MinSafeTransferTimeCalculator.java @@ -1,14 +1,14 @@ package org.opentripplanner.routing.algorithm.transferoptimization.model; -import static org.opentripplanner.framework.time.DurationUtils.durationInSeconds; +import static org.opentripplanner.utils.time.DurationUtils.durationInSeconds; import java.util.Collection; import java.util.function.ToIntFunction; -import org.opentripplanner.framework.lang.IntUtils; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.api.path.RaptorPath; import org.opentripplanner.raptor.api.path.TransitPathLeg; import org.opentripplanner.raptor.spi.RaptorSlackProvider; +import org.opentripplanner.utils.lang.IntUtils; /** * This is a calculator to calculate a min-safe-transfer-time. The min-safe-transfer-time is used to diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/OptimizedPathTail.java b/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/OptimizedPathTail.java index b36a7d6ebfd..efe53d8e090 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/OptimizedPathTail.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/OptimizedPathTail.java @@ -1,7 +1,6 @@ package org.opentripplanner.routing.algorithm.transferoptimization.model; import javax.annotation.Nullable; -import org.opentripplanner.framework.tostring.ValueObjectToStringBuilder; import org.opentripplanner.model.transfer.TransferConstraint; import org.opentripplanner.raptor.api.model.RaptorConstants; import org.opentripplanner.raptor.api.model.RaptorStopNameResolver; @@ -16,6 +15,7 @@ import org.opentripplanner.raptor.spi.RaptorSlackProvider; import org.opentripplanner.routing.algorithm.transferoptimization.api.OptimizedPath; import org.opentripplanner.routing.algorithm.transferoptimization.api.TransferOptimized; +import org.opentripplanner.utils.tostring.ValueObjectToStringBuilder; /** * This class is used to decorate a {@link TransitPathLeg} with information about transfers diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/StopPriorityCostCalculator.java b/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/StopPriorityCostCalculator.java index 48a4b733b58..6ea660e654f 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/StopPriorityCostCalculator.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/StopPriorityCostCalculator.java @@ -1,7 +1,7 @@ package org.opentripplanner.routing.algorithm.transferoptimization.model; -import org.opentripplanner.framework.lang.IntUtils; import org.opentripplanner.routing.algorithm.raptoradapter.transit.TransitLayer; +import org.opentripplanner.utils.lang.IntUtils; /** * This class calculates an extra stop priority cost by using the stop-board-alight-transfer-cost diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/TripStopTime.java b/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/TripStopTime.java index 75fd589a45b..27299e407f4 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/TripStopTime.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/TripStopTime.java @@ -1,8 +1,8 @@ package org.opentripplanner.routing.algorithm.transferoptimization.model; import java.util.Objects; -import org.opentripplanner.framework.tostring.ValueObjectToStringBuilder; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; +import org.opentripplanner.utils.tostring.ValueObjectToStringBuilder; /** * @param The TripSchedule type defined by the user of the raptor API. diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/TripToTripTransfer.java b/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/TripToTripTransfer.java index 0dce8933e3f..2aa13d0cd16 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/TripToTripTransfer.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/TripToTripTransfer.java @@ -1,10 +1,10 @@ package org.opentripplanner.routing.algorithm.transferoptimization.model; import javax.annotation.Nullable; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.transfer.ConstrainedTransfer; import org.opentripplanner.raptor.api.model.RaptorTransfer; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * @param The TripSchedule type defined by the user of the raptor API. diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/costfilter/MinCostPathTailFilter.java b/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/costfilter/MinCostPathTailFilter.java index 8de4c8fa847..6b8dbef7f4e 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/costfilter/MinCostPathTailFilter.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/costfilter/MinCostPathTailFilter.java @@ -4,10 +4,10 @@ import java.util.List; import java.util.Set; import java.util.function.ToIntFunction; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.routing.algorithm.transferoptimization.model.OptimizedPathTail; import org.opentripplanner.routing.algorithm.transferoptimization.model.PathTailFilter; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * This class takes a list of "cost functions" and creates a filter chain for them. The precedence diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughPathTailFilter.java b/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughPathTailFilter.java index 46b1a9020b0..bff656bb940 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughPathTailFilter.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughPathTailFilter.java @@ -7,11 +7,11 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.api.request.PassThroughPoint; import org.opentripplanner.routing.algorithm.transferoptimization.model.OptimizedPathTail; import org.opentripplanner.routing.algorithm.transferoptimization.model.PathTailFilter; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Create a filter chain function and find the best combination of transfers for the journey diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransitPathLegSelector.java b/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransitPathLegSelector.java index 9e0a4257f57..646939a9ac5 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransitPathLegSelector.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransitPathLegSelector.java @@ -2,10 +2,10 @@ import java.util.HashSet; import java.util.Set; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.routing.algorithm.transferoptimization.model.OptimizedPathTail; import org.opentripplanner.routing.algorithm.transferoptimization.model.PathTailFilter; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * This class takes a list of transit legs and returns the best leg based on the {@link diff --git a/application/src/main/java/org/opentripplanner/routing/alternativelegs/AlternativeLegs.java b/application/src/main/java/org/opentripplanner/routing/alternativelegs/AlternativeLegs.java index 465ed230884..14dc7ade982 100644 --- a/application/src/main/java/org/opentripplanner/routing/alternativelegs/AlternativeLegs.java +++ b/application/src/main/java/org/opentripplanner/routing/alternativelegs/AlternativeLegs.java @@ -16,7 +16,6 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.model.Timetable; import org.opentripplanner.model.TripTimeOnDate; import org.opentripplanner.model.plan.Leg; @@ -29,6 +28,7 @@ import org.opentripplanner.transit.model.timetable.TripOnServiceDate; import org.opentripplanner.transit.model.timetable.TripTimes; import org.opentripplanner.transit.service.TransitService; +import org.opentripplanner.utils.time.ServiceDateUtils; /** * A helper class to fetch previous/next alternative legs for a scheduled transit leg. diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/DebugRaptor.java b/application/src/main/java/org/opentripplanner/routing/api/request/DebugRaptor.java index 0b9ff4f0c30..a0d7bd6de2e 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/DebugRaptor.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/DebugRaptor.java @@ -9,7 +9,7 @@ import java.util.List; import java.util.Set; import java.util.regex.Pattern; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/RequestModes.java b/application/src/main/java/org/opentripplanner/routing/api/request/RequestModes.java index 8afb3082e1b..f10686216a8 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/RequestModes.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/RequestModes.java @@ -3,7 +3,7 @@ import static org.opentripplanner.routing.api.request.StreetMode.NOT_SET; import java.util.Objects; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; public class RequestModes { diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/RouteRequest.java b/application/src/main/java/org/opentripplanner/routing/api/request/RouteRequest.java index 27ecc777050..8e649b3be49 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/RouteRequest.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/RouteRequest.java @@ -1,6 +1,6 @@ package org.opentripplanner.routing.api.request; -import static org.opentripplanner.framework.time.DurationUtils.durationInSeconds; +import static org.opentripplanner.utils.time.DurationUtils.durationInSeconds; import java.io.Serializable; import java.time.Duration; @@ -14,10 +14,6 @@ import java.util.Objects; import java.util.function.Consumer; import javax.annotation.Nullable; -import org.opentripplanner.framework.collection.ListSection; -import org.opentripplanner.framework.lang.ObjectUtils; -import org.opentripplanner.framework.time.DateUtils; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.GenericLocation; import org.opentripplanner.model.plan.SortOrder; import org.opentripplanner.model.plan.paging.cursor.PageCursor; @@ -29,6 +25,10 @@ import org.opentripplanner.routing.api.response.RoutingErrorCode; import org.opentripplanner.routing.error.RoutingValidationException; import org.opentripplanner.standalone.config.routerconfig.TransitRoutingConfig; +import org.opentripplanner.utils.collection.ListSection; +import org.opentripplanner.utils.lang.ObjectUtils; +import org.opentripplanner.utils.time.DateUtils; +import org.opentripplanner.utils.tostring.ToStringBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/framework/DurationForEnum.java b/application/src/main/java/org/opentripplanner/routing/api/request/framework/DurationForEnum.java index e6dacaac19d..c6586aa8b0f 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/framework/DurationForEnum.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/framework/DurationForEnum.java @@ -7,7 +7,7 @@ import java.util.Map; import java.util.Objects; import java.util.function.Consumer; -import org.opentripplanner.framework.tostring.ValueObjectToStringBuilder; +import org.opentripplanner.utils.tostring.ValueObjectToStringBuilder; /** * This class is used to store a {@link Duration} value for each of the enum type values. diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/framework/LinearFunctionSerialization.java b/application/src/main/java/org/opentripplanner/routing/api/request/framework/LinearFunctionSerialization.java index cb9dfb5c4cc..a6c846ccb35 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/framework/LinearFunctionSerialization.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/framework/LinearFunctionSerialization.java @@ -7,10 +7,10 @@ import java.util.function.BiFunction; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.opentripplanner.framework.lang.IntUtils; -import org.opentripplanner.framework.lang.StringUtils; import org.opentripplanner.framework.model.Units; -import org.opentripplanner.framework.time.DurationUtils; +import org.opentripplanner.utils.lang.IntUtils; +import org.opentripplanner.utils.lang.StringUtils; +import org.opentripplanner.utils.time.DurationUtils; /** * This class can serialize and parse a linear function of time/duration/cost on the form diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/framework/TimeAndCostPenaltyForEnum.java b/application/src/main/java/org/opentripplanner/routing/api/request/framework/TimeAndCostPenaltyForEnum.java index 2f439801cb5..ace9b813937 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/framework/TimeAndCostPenaltyForEnum.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/framework/TimeAndCostPenaltyForEnum.java @@ -7,7 +7,7 @@ import java.util.Objects; import java.util.function.Consumer; import org.opentripplanner.framework.model.TimeAndCost; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * A map of {@link TimeAndCost} indexed by enum type {@code T}. diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/framework/TimePenalty.java b/application/src/main/java/org/opentripplanner/routing/api/request/framework/TimePenalty.java index 3ee07034135..99643b69d02 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/framework/TimePenalty.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/framework/TimePenalty.java @@ -1,8 +1,8 @@ package org.opentripplanner.routing.api.request.framework; import java.time.Duration; -import org.opentripplanner.framework.lang.StringUtils; -import org.opentripplanner.framework.time.DurationUtils; +import org.opentripplanner.utils.lang.StringUtils; +import org.opentripplanner.utils.time.DurationUtils; public final class TimePenalty extends AbstractLinearFunction { diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/preference/AccessEgressPreferences.java b/application/src/main/java/org/opentripplanner/routing/api/request/preference/AccessEgressPreferences.java index 9998f0a3b1c..42925339fd1 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/preference/AccessEgressPreferences.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/preference/AccessEgressPreferences.java @@ -7,12 +7,12 @@ import java.util.Map; import java.util.Objects; import java.util.function.Consumer; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.routing.api.request.framework.DurationForEnum; import org.opentripplanner.routing.api.request.framework.TimeAndCostPenalty; import org.opentripplanner.routing.api.request.framework.TimeAndCostPenaltyForEnum; import org.opentripplanner.routing.api.request.framework.TimePenalty; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Preferences for access/egress routing on street network diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/preference/AccessibilityPreferences.java b/application/src/main/java/org/opentripplanner/routing/api/request/preference/AccessibilityPreferences.java index 303bda51858..d4d232ab3f6 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/preference/AccessibilityPreferences.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/preference/AccessibilityPreferences.java @@ -3,7 +3,7 @@ import java.util.Objects; import java.util.function.Consumer; import org.opentripplanner.framework.model.Cost; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Preferences for how to treat trips or stops with accessibility restrictions, like wheelchair diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/preference/BikePreferences.java b/application/src/main/java/org/opentripplanner/routing/api/request/preference/BikePreferences.java index 5767b74eaa8..038d6c140da 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/preference/BikePreferences.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/preference/BikePreferences.java @@ -1,17 +1,17 @@ package org.opentripplanner.routing.api.request.preference; -import static org.opentripplanner.framework.lang.DoubleUtils.doubleEquals; -import static org.opentripplanner.framework.lang.ObjectUtils.ifNotNull; import static org.opentripplanner.routing.core.VehicleRoutingOptimizeType.SAFE_STREETS; import static org.opentripplanner.routing.core.VehicleRoutingOptimizeType.TRIANGLE; +import static org.opentripplanner.utils.lang.DoubleUtils.doubleEquals; +import static org.opentripplanner.utils.lang.ObjectUtils.ifNotNull; import java.io.Serializable; import java.util.Objects; import java.util.function.Consumer; import org.opentripplanner.framework.model.Cost; import org.opentripplanner.framework.model.Units; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * The bike preferences contain all speed, reluctance, cost and factor preferences for biking diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/preference/CarPreferences.java b/application/src/main/java/org/opentripplanner/routing/api/request/preference/CarPreferences.java index cc9b7ba62d8..3ea3634c623 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/preference/CarPreferences.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/preference/CarPreferences.java @@ -1,15 +1,15 @@ package org.opentripplanner.routing.api.request.preference; -import static org.opentripplanner.framework.lang.ObjectUtils.ifNotNull; +import static org.opentripplanner.utils.lang.ObjectUtils.ifNotNull; import java.io.Serializable; import java.time.Duration; import java.util.Objects; 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.utils.lang.DoubleUtils; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * The car preferences contain all speed, reluctance, cost and factor preferences for driving diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/preference/ElevatorPreferences.java b/application/src/main/java/org/opentripplanner/routing/api/request/preference/ElevatorPreferences.java index 7ee6409d7b7..7e5e55d6263 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/preference/ElevatorPreferences.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/preference/ElevatorPreferences.java @@ -5,7 +5,7 @@ import java.util.function.Consumer; import org.opentripplanner.framework.model.Cost; import org.opentripplanner.framework.model.Units; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * TODO: how long does it /really/ take to an elevator? diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/preference/ItineraryFilterPreferences.java b/application/src/main/java/org/opentripplanner/routing/api/request/preference/ItineraryFilterPreferences.java index 31fa7edd139..f18cf5ce9c1 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/preference/ItineraryFilterPreferences.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/preference/ItineraryFilterPreferences.java @@ -4,9 +4,9 @@ import java.util.Objects; import java.util.function.Consumer; import org.opentripplanner.framework.model.Units; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.algorithm.filterchain.api.TransitGeneralizedCostFilterParams; import org.opentripplanner.routing.api.request.framework.CostLinearFunction; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Group by Similarity filter parameters. See the configuration for documentation of each field. diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/preference/RaptorPreferences.java b/application/src/main/java/org/opentripplanner/routing/api/request/preference/RaptorPreferences.java index 03ed9482ff8..e9318bc8dc3 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/preference/RaptorPreferences.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/preference/RaptorPreferences.java @@ -11,10 +11,10 @@ import java.util.function.Consumer; import javax.annotation.Nullable; import org.opentripplanner.framework.model.Units; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.model.SearchDirection; import org.opentripplanner.raptor.api.request.Optimization; import org.opentripplanner.raptor.api.request.RaptorProfile; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Set of optimizations to use with Raptor. These are available here for testing purposes. diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/preference/Relax.java b/application/src/main/java/org/opentripplanner/routing/api/request/preference/Relax.java index 8f10ffd1525..a5e61325483 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/preference/Relax.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/preference/Relax.java @@ -1,8 +1,8 @@ package org.opentripplanner.routing.api.request.preference; import java.util.Locale; -import org.opentripplanner.framework.lang.DoubleUtils; -import org.opentripplanner.framework.lang.IntUtils; +import org.opentripplanner.utils.lang.DoubleUtils; +import org.opentripplanner.utils.lang.IntUtils; /** * Relax a value by the given ratio and slack. The relaxed value diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/preference/RoutingPreferences.java b/application/src/main/java/org/opentripplanner/routing/api/request/preference/RoutingPreferences.java index 5e5475d12ac..5eccc970101 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/preference/RoutingPreferences.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/preference/RoutingPreferences.java @@ -1,7 +1,7 @@ package org.opentripplanner.routing.api.request.preference; import static java.util.Objects.requireNonNull; -import static org.opentripplanner.framework.lang.ObjectUtils.ifNotNull; +import static org.opentripplanner.utils.lang.ObjectUtils.ifNotNull; import java.io.Serializable; import java.util.Objects; diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/preference/ScooterPreferences.java b/application/src/main/java/org/opentripplanner/routing/api/request/preference/ScooterPreferences.java index 1d5cf83a54b..6a20cbcd293 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/preference/ScooterPreferences.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/preference/ScooterPreferences.java @@ -1,16 +1,16 @@ package org.opentripplanner.routing.api.request.preference; -import static org.opentripplanner.framework.lang.DoubleUtils.doubleEquals; -import static org.opentripplanner.framework.lang.ObjectUtils.ifNotNull; import static org.opentripplanner.routing.core.VehicleRoutingOptimizeType.SAFE_STREETS; import static org.opentripplanner.routing.core.VehicleRoutingOptimizeType.TRIANGLE; +import static org.opentripplanner.utils.lang.DoubleUtils.doubleEquals; +import static org.opentripplanner.utils.lang.ObjectUtils.ifNotNull; import java.io.Serializable; import java.util.Objects; import java.util.function.Consumer; import org.opentripplanner.framework.model.Units; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * The scooter preferences contain all speed, reluctance, cost and factor preferences for scooter diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/preference/StreetPreferences.java b/application/src/main/java/org/opentripplanner/routing/api/request/preference/StreetPreferences.java index 166c950a0e7..bb526ceaa31 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/preference/StreetPreferences.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/preference/StreetPreferences.java @@ -1,7 +1,6 @@ package org.opentripplanner.routing.api.request.preference; import static java.time.Duration.ofHours; -import static java.time.Duration.ofMinutes; import static java.util.Objects.requireNonNull; import java.io.Serializable; @@ -9,14 +8,13 @@ import java.util.Map; import java.util.Objects; import java.util.function.Consumer; -import org.opentripplanner.framework.lang.DoubleUtils; import org.opentripplanner.framework.model.Units; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.routing.api.request.framework.DurationForEnum; -import org.opentripplanner.routing.api.request.framework.TimeAndCostPenalty; import org.opentripplanner.street.search.intersection_model.DrivingDirection; import org.opentripplanner.street.search.intersection_model.IntersectionTraversalModel; +import org.opentripplanner.utils.lang.DoubleUtils; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * This class holds preferences for street routing in general, not mode specific. diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/preference/SystemPreferences.java b/application/src/main/java/org/opentripplanner/routing/api/request/preference/SystemPreferences.java index 442ab33434a..f35a65c2f03 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/preference/SystemPreferences.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/preference/SystemPreferences.java @@ -9,8 +9,8 @@ import java.util.Set; import java.util.function.Consumer; import org.opentripplanner.ext.dataoverlay.api.DataOverlayParameters; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.api.request.RoutingTag; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Configure system related features - a system feature is a non-functional feature. It diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/preference/TimeSlopeSafetyTriangle.java b/application/src/main/java/org/opentripplanner/routing/api/request/preference/TimeSlopeSafetyTriangle.java index ae4f1039f32..cca9105f112 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/preference/TimeSlopeSafetyTriangle.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/preference/TimeSlopeSafetyTriangle.java @@ -1,7 +1,7 @@ package org.opentripplanner.routing.api.request.preference; -import static org.opentripplanner.framework.lang.DoubleUtils.doubleEquals; -import static org.opentripplanner.framework.lang.DoubleUtils.roundTo2Decimals; +import static org.opentripplanner.utils.lang.DoubleUtils.doubleEquals; +import static org.opentripplanner.utils.lang.DoubleUtils.roundTo2Decimals; /** * Sets the (bicycle or scooter) triangle routing parameters -- the relative importance of safety, diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/preference/TransferOptimizationPreferences.java b/application/src/main/java/org/opentripplanner/routing/api/request/preference/TransferOptimizationPreferences.java index 41a1954603b..7ba6e609ce9 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/preference/TransferOptimizationPreferences.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/preference/TransferOptimizationPreferences.java @@ -1,13 +1,13 @@ package org.opentripplanner.routing.api.request.preference; -import static org.opentripplanner.framework.lang.DoubleUtils.doubleEquals; +import static org.opentripplanner.utils.lang.DoubleUtils.doubleEquals; import java.io.Serializable; import java.util.Objects; import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.framework.model.Units; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.algorithm.transferoptimization.api.TransferOptimizationParameters; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * See {@link TransferOptimizationParameters} for documentation on this class. diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/preference/TransferPreferences.java b/application/src/main/java/org/opentripplanner/routing/api/request/preference/TransferPreferences.java index 464b9872bdd..f996dd5e6f4 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/preference/TransferPreferences.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/preference/TransferPreferences.java @@ -1,7 +1,7 @@ package org.opentripplanner.routing.api.request.preference; import static java.util.Objects.requireNonNull; -import static org.opentripplanner.framework.lang.DoubleUtils.doubleEquals; +import static org.opentripplanner.utils.lang.DoubleUtils.doubleEquals; import java.io.Serializable; import java.time.Duration; @@ -9,9 +9,9 @@ import java.util.function.Consumer; import org.opentripplanner.framework.model.Cost; import org.opentripplanner.framework.model.Units; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.algorithm.transferoptimization.api.TransferOptimizationParameters; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Parameters for doing transfers between transit legs. diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/preference/TransitPreferences.java b/application/src/main/java/org/opentripplanner/routing/api/request/preference/TransitPreferences.java index 78f30277e72..f15b47216e5 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/preference/TransitPreferences.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/preference/TransitPreferences.java @@ -7,10 +7,10 @@ import java.util.Objects; import java.util.function.Consumer; import org.opentripplanner.framework.model.Cost; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.api.request.framework.CostLinearFunction; import org.opentripplanner.routing.api.request.framework.DurationForEnum; import org.opentripplanner.transit.model.basic.TransitMode; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Preferences for transit routing. diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/preference/VehicleParkingPreferences.java b/application/src/main/java/org/opentripplanner/routing/api/request/preference/VehicleParkingPreferences.java index f7183812c3a..732171c7b80 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/preference/VehicleParkingPreferences.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/preference/VehicleParkingPreferences.java @@ -7,9 +7,9 @@ import java.util.Set; import java.util.function.Consumer; import org.opentripplanner.framework.model.Cost; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.api.request.preference.filter.VehicleParkingFilter; import org.opentripplanner.routing.api.request.preference.filter.VehicleParkingSelect; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * The parking preferences contain preferences for car and bicycle parking. These preferences diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/preference/VehicleRentalPreferences.java b/application/src/main/java/org/opentripplanner/routing/api/request/preference/VehicleRentalPreferences.java index 6c9bbfea875..4c00014f30d 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/preference/VehicleRentalPreferences.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/preference/VehicleRentalPreferences.java @@ -7,7 +7,7 @@ import java.util.function.Consumer; import org.opentripplanner.framework.model.Cost; import org.opentripplanner.framework.model.Units; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Preferences for renting a Bike, Car or other type of vehicle. diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/preference/VehicleWalkingPreferences.java b/application/src/main/java/org/opentripplanner/routing/api/request/preference/VehicleWalkingPreferences.java index b7adc04df1c..50b3735a85d 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/preference/VehicleWalkingPreferences.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/preference/VehicleWalkingPreferences.java @@ -6,7 +6,7 @@ import java.util.function.Consumer; import org.opentripplanner.framework.model.Cost; import org.opentripplanner.framework.model.Units; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Preferences for walking a vehicle. diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/preference/WalkPreferences.java b/application/src/main/java/org/opentripplanner/routing/api/request/preference/WalkPreferences.java index 8e5061d752b..4a5969049ba 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/preference/WalkPreferences.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/preference/WalkPreferences.java @@ -1,13 +1,13 @@ package org.opentripplanner.routing.api.request.preference; -import static org.opentripplanner.framework.lang.DoubleUtils.doubleEquals; +import static org.opentripplanner.utils.lang.DoubleUtils.doubleEquals; import java.io.Serializable; import java.util.Objects; import java.util.function.Consumer; import org.opentripplanner.framework.model.Cost; import org.opentripplanner.framework.model.Units; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * The walk preferences contain all speed, reluctance, cost and factor preferences for walking diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/preference/WheelchairPreferences.java b/application/src/main/java/org/opentripplanner/routing/api/request/preference/WheelchairPreferences.java index 737c5057943..d8a53d8e098 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/preference/WheelchairPreferences.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/preference/WheelchairPreferences.java @@ -6,7 +6,7 @@ import java.util.Objects; import java.util.function.Consumer; import org.opentripplanner.framework.model.Units; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * See the configuration for documentation of each field. diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/preference/filter/VehicleParkingFilter.java b/application/src/main/java/org/opentripplanner/routing/api/request/preference/filter/VehicleParkingFilter.java index 3fb6d6b0a62..5f34dc4e1a7 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/preference/filter/VehicleParkingFilter.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/preference/filter/VehicleParkingFilter.java @@ -4,8 +4,8 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.vehicle_parking.VehicleParking; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * A filter class that checks if parking faclities match certain conditions for diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/request/filter/SelectRequest.java b/application/src/main/java/org/opentripplanner/routing/api/request/request/filter/SelectRequest.java index a1610ed8947..8ae98b8dfc9 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/request/filter/SelectRequest.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/request/filter/SelectRequest.java @@ -4,12 +4,12 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.modes.AllowTransitModeFilter; import org.opentripplanner.transit.model.basic.MainAndSubMode; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.timetable.TripTimes; +import org.opentripplanner.utils.tostring.ToStringBuilder; public class SelectRequest implements Serializable { diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/request/filter/TransitFilterRequest.java b/application/src/main/java/org/opentripplanner/routing/api/request/request/filter/TransitFilterRequest.java index 38f79b82baa..6380ace7c83 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/request/filter/TransitFilterRequest.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/request/filter/TransitFilterRequest.java @@ -5,9 +5,9 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.timetable.TripTimes; +import org.opentripplanner.utils.tostring.ToStringBuilder; public class TransitFilterRequest implements Serializable, TransitFilter { diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/request/filter/TransitGroupSelect.java b/application/src/main/java/org/opentripplanner/routing/api/request/request/filter/TransitGroupSelect.java index dfa5daa0e31..caa8c9e0d65 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/request/filter/TransitGroupSelect.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/request/filter/TransitGroupSelect.java @@ -5,9 +5,9 @@ import java.util.Comparator; import java.util.List; import java.util.Objects; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Select a given set of transit routes base on the list of diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/via/PassThroughViaLocation.java b/application/src/main/java/org/opentripplanner/routing/api/request/via/PassThroughViaLocation.java index aa75a634004..9da6ae5cd23 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/via/PassThroughViaLocation.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/via/PassThroughViaLocation.java @@ -2,8 +2,8 @@ import java.util.Collection; import javax.annotation.Nullable; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * One of the listed stop locations or one of its children must be visited. An on-board diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/via/VisitViaLocation.java b/application/src/main/java/org/opentripplanner/routing/api/request/via/VisitViaLocation.java index 096fbfabc0b..550b1646aeb 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/via/VisitViaLocation.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/via/VisitViaLocation.java @@ -5,9 +5,9 @@ import java.util.Objects; import javax.annotation.Nullable; import org.opentripplanner.framework.geometry.WgsCoordinate; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * A visit-via-location is a physical visit to one of the stops or coordinates listed. An on-board diff --git a/application/src/main/java/org/opentripplanner/routing/api/response/RoutingError.java b/application/src/main/java/org/opentripplanner/routing/api/response/RoutingError.java index 2c948e1777c..d5c8173f09e 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/response/RoutingError.java +++ b/application/src/main/java/org/opentripplanner/routing/api/response/RoutingError.java @@ -1,7 +1,7 @@ package org.opentripplanner.routing.api.response; import java.util.Objects; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; public class RoutingError { diff --git a/application/src/main/java/org/opentripplanner/routing/api/response/RoutingResponse.java b/application/src/main/java/org/opentripplanner/routing/api/response/RoutingResponse.java index f7bcaca72e2..fe9f6457cf4 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/response/RoutingResponse.java +++ b/application/src/main/java/org/opentripplanner/routing/api/response/RoutingResponse.java @@ -1,10 +1,10 @@ package org.opentripplanner.routing.api.response; import java.util.List; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.plan.TripPlan; import org.opentripplanner.model.plan.paging.cursor.PageCursor; import org.opentripplanner.routing.framework.DebugTimingAggregator; +import org.opentripplanner.utils.tostring.ToStringBuilder; public class RoutingResponse { diff --git a/application/src/main/java/org/opentripplanner/routing/api/response/TripSearchMetadata.java b/application/src/main/java/org/opentripplanner/routing/api/response/TripSearchMetadata.java index a5eb5842f23..704a1cb8e18 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/response/TripSearchMetadata.java +++ b/application/src/main/java/org/opentripplanner/routing/api/response/TripSearchMetadata.java @@ -4,7 +4,7 @@ import java.time.Instant; import java.time.temporal.ChronoUnit; import javax.annotation.Nullable; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Meta-data about the trip search performed. diff --git a/application/src/main/java/org/opentripplanner/routing/graph/SerializedGraphObject.java b/application/src/main/java/org/opentripplanner/routing/graph/SerializedGraphObject.java index e7e0c3248e8..0843124131b 100644 --- a/application/src/main/java/org/opentripplanner/routing/graph/SerializedGraphObject.java +++ b/application/src/main/java/org/opentripplanner/routing/graph/SerializedGraphObject.java @@ -21,8 +21,6 @@ import org.opentripplanner.ext.stopconsolidation.StopConsolidationRepository; import org.opentripplanner.framework.application.OtpAppException; import org.opentripplanner.framework.geometry.CompactElevationProfile; -import org.opentripplanner.framework.lang.OtpNumberFormat; -import org.opentripplanner.framework.logging.ProgressTracker; import org.opentripplanner.graph_builder.issue.api.DataImportIssueSummary; import org.opentripplanner.model.projectinfo.GraphFileHeader; import org.opentripplanner.model.projectinfo.OtpProjectInfo; @@ -36,6 +34,8 @@ import org.opentripplanner.transit.model.basic.SubMode; import org.opentripplanner.transit.model.network.RoutingTripPattern; import org.opentripplanner.transit.service.TimetableRepository; +import org.opentripplanner.utils.lang.OtpNumberFormat; +import org.opentripplanner.utils.logging.ProgressTracker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/routing/graph/index/StreetIndex.java b/application/src/main/java/org/opentripplanner/routing/graph/index/StreetIndex.java index 90294d554cc..b632cd5c3e9 100644 --- a/application/src/main/java/org/opentripplanner/routing/graph/index/StreetIndex.java +++ b/application/src/main/java/org/opentripplanner/routing/graph/index/StreetIndex.java @@ -19,7 +19,6 @@ import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.LocalizedString; import org.opentripplanner.framework.i18n.NonLocalizedString; -import org.opentripplanner.framework.logging.ProgressTracker; import org.opentripplanner.model.GenericLocation; import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.routing.graph.Graph; @@ -42,6 +41,7 @@ import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.service.SiteRepository; +import org.opentripplanner.utils.logging.ProgressTracker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/routing/graphfinder/PatternAtStop.java b/application/src/main/java/org/opentripplanner/routing/graphfinder/PatternAtStop.java index a8602a77737..c06e8bbcf91 100644 --- a/application/src/main/java/org/opentripplanner/routing/graphfinder/PatternAtStop.java +++ b/application/src/main/java/org/opentripplanner/routing/graphfinder/PatternAtStop.java @@ -6,13 +6,13 @@ import java.util.Base64; import java.util.List; import java.util.Objects; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.TripTimeOnDate; import org.opentripplanner.routing.stoptimes.ArrivalDeparture; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.service.TransitService; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * A reference to a pattern at a specific stop. diff --git a/application/src/main/java/org/opentripplanner/routing/graphfinder/StopFinderTraverseVisitor.java b/application/src/main/java/org/opentripplanner/routing/graphfinder/StopFinderTraverseVisitor.java index 5c75e8c9322..854e33831ae 100644 --- a/application/src/main/java/org/opentripplanner/routing/graphfinder/StopFinderTraverseVisitor.java +++ b/application/src/main/java/org/opentripplanner/routing/graphfinder/StopFinderTraverseVisitor.java @@ -4,11 +4,11 @@ import java.util.List; import org.opentripplanner.astar.spi.SkipEdgeStrategy; import org.opentripplanner.astar.spi.TraverseVisitor; -import org.opentripplanner.framework.collection.ListUtils; import org.opentripplanner.street.model.edge.Edge; import org.opentripplanner.street.model.vertex.TransitStopVertex; import org.opentripplanner.street.model.vertex.Vertex; import org.opentripplanner.street.search.state.State; +import org.opentripplanner.utils.collection.ListUtils; /** * A TraverseVisitor used in finding stops while walking the street graph. diff --git a/application/src/main/java/org/opentripplanner/routing/service/DefaultRoutingService.java b/application/src/main/java/org/opentripplanner/routing/service/DefaultRoutingService.java index 01736aac80e..5f654d39deb 100644 --- a/application/src/main/java/org/opentripplanner/routing/service/DefaultRoutingService.java +++ b/application/src/main/java/org/opentripplanner/routing/service/DefaultRoutingService.java @@ -3,7 +3,6 @@ import java.time.ZoneId; import org.opentripplanner.framework.application.OTPRequestTimeoutException; import org.opentripplanner.framework.time.ZoneIdFallback; -import org.opentripplanner.framework.tostring.MultiLineToStringBuilder; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.routing.algorithm.RoutingWorker; import org.opentripplanner.routing.algorithm.via.ViaRoutingWorker; @@ -13,6 +12,7 @@ import org.opentripplanner.routing.api.response.RoutingResponse; import org.opentripplanner.routing.api.response.ViaRoutingResponse; import org.opentripplanner.standalone.api.OtpServerRequestContext; +import org.opentripplanner.utils.tostring.MultiLineToStringBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/routing/stoptimes/StopTimesHelper.java b/application/src/main/java/org/opentripplanner/routing/stoptimes/StopTimesHelper.java index f11d92465a7..863e2fc6569 100644 --- a/application/src/main/java/org/opentripplanner/routing/stoptimes/StopTimesHelper.java +++ b/application/src/main/java/org/opentripplanner/routing/stoptimes/StopTimesHelper.java @@ -14,7 +14,6 @@ import java.util.Comparator; import java.util.List; import java.util.Queue; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.model.PickDrop; import org.opentripplanner.model.StopTimesInPattern; import org.opentripplanner.model.Timetable; @@ -24,6 +23,7 @@ import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.model.timetable.TripTimes; import org.opentripplanner.transit.service.TransitService; +import org.opentripplanner.utils.time.ServiceDateUtils; public class StopTimesHelper { diff --git a/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParking.java b/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParking.java index 098af909296..4e71ecd1c68 100644 --- a/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParking.java +++ b/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParking.java @@ -9,10 +9,10 @@ import javax.annotation.Nullable; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.calendar.openinghours.OHCalendar; import org.opentripplanner.street.search.TraverseMode; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Vehicle parking locations, which may allow bicycle and/or car parking. diff --git a/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingEntrance.java b/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingEntrance.java index b91776b0265..f6bc584fb18 100644 --- a/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingEntrance.java +++ b/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingEntrance.java @@ -5,9 +5,9 @@ import javax.annotation.Nullable; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.street.model.vertex.StreetVertex; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.tostring.ToStringBuilder; public class VehicleParkingEntrance implements Serializable { diff --git a/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingGroup.java b/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingGroup.java index 535f201a0de..74ffedc0dcb 100644 --- a/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingGroup.java +++ b/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingGroup.java @@ -4,8 +4,8 @@ import javax.annotation.Nullable; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Group of vehicle parking locations. diff --git a/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingSpaces.java b/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingSpaces.java index 8b21cc21f2c..eb50440651b 100644 --- a/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingSpaces.java +++ b/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingSpaces.java @@ -2,7 +2,7 @@ import java.io.Serializable; import java.util.Objects; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * The number of spaces by type. {@code null} if unknown. diff --git a/application/src/main/java/org/opentripplanner/service/paging/PagingService.java b/application/src/main/java/org/opentripplanner/service/paging/PagingService.java index 3aa8033105a..b9a11ab5ffa 100644 --- a/application/src/main/java/org/opentripplanner/service/paging/PagingService.java +++ b/application/src/main/java/org/opentripplanner/service/paging/PagingService.java @@ -5,7 +5,6 @@ import java.util.List; import java.util.Objects; import javax.annotation.Nullable; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.SortOrder; import org.opentripplanner.model.plan.paging.PagingSearchWindowAdjuster; @@ -14,6 +13,7 @@ import org.opentripplanner.model.plan.paging.cursor.PageCursorInput; import org.opentripplanner.model.plan.paging.cursor.PageType; import org.opentripplanner.routing.api.response.TripSearchMetadata; +import org.opentripplanner.utils.tostring.ToStringBuilder; public class PagingService { diff --git a/application/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalStation.java b/application/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalStation.java index d6e72023a31..ff17ee00593 100644 --- a/application/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalStation.java +++ b/application/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalStation.java @@ -9,10 +9,10 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import org.locationtech.jts.geom.Geometry; -import org.opentripplanner.framework.collection.SetUtils; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.street.model.RentalFormFactor; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.collection.SetUtils; /** * Implements the {@link VehicleRentalPlace} class which contains Javadoc. diff --git a/application/src/main/java/org/opentripplanner/service/worldenvelope/model/WorldEnvelope.java b/application/src/main/java/org/opentripplanner/service/worldenvelope/model/WorldEnvelope.java index 27a1fb4d30f..55024b63982 100644 --- a/application/src/main/java/org/opentripplanner/service/worldenvelope/model/WorldEnvelope.java +++ b/application/src/main/java/org/opentripplanner/service/worldenvelope/model/WorldEnvelope.java @@ -3,7 +3,7 @@ import java.io.Serializable; import java.util.Optional; import org.opentripplanner.framework.geometry.WgsCoordinate; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * This class calculates borders of envelopes that can be also on 180th meridian. diff --git a/application/src/main/java/org/opentripplanner/standalone/config/BuildConfig.java b/application/src/main/java/org/opentripplanner/standalone/config/BuildConfig.java index ef2931b987e..16c6f1e722c 100644 --- a/application/src/main/java/org/opentripplanner/standalone/config/BuildConfig.java +++ b/application/src/main/java/org/opentripplanner/standalone/config/BuildConfig.java @@ -23,7 +23,6 @@ import org.opentripplanner.ext.emissions.EmissionsConfig; import org.opentripplanner.ext.fares.FaresConfiguration; import org.opentripplanner.framework.geometry.CompactElevationProfile; -import org.opentripplanner.framework.lang.ObjectUtils; import org.opentripplanner.graph_builder.module.ned.parameter.DemExtractParameters; import org.opentripplanner.graph_builder.module.ned.parameter.DemExtractParametersList; import org.opentripplanner.graph_builder.module.osm.parameters.OsmExtractParameters; @@ -46,6 +45,7 @@ import org.opentripplanner.standalone.config.framework.json.NodeAdapter; import org.opentripplanner.standalone.config.sandbox.DataOverlayConfigMapper; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.lang.ObjectUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/standalone/config/framework/json/ConfigType.java b/application/src/main/java/org/opentripplanner/standalone/config/framework/json/ConfigType.java index fec5cb05a51..3796fcac645 100644 --- a/application/src/main/java/org/opentripplanner/standalone/config/framework/json/ConfigType.java +++ b/application/src/main/java/org/opentripplanner/standalone/config/framework/json/ConfigType.java @@ -6,9 +6,9 @@ import java.util.EnumSet; import java.util.stream.Collectors; import javax.annotation.Nullable; -import org.opentripplanner.framework.lang.StringUtils; -import org.opentripplanner.framework.text.MarkdownFormatter; -import org.opentripplanner.framework.time.DurationUtils; +import org.opentripplanner.utils.lang.StringUtils; +import org.opentripplanner.utils.text.MarkdownFormatter; +import org.opentripplanner.utils.time.DurationUtils; /** * These are the types we support in the NodeAdaptor diff --git a/application/src/main/java/org/opentripplanner/standalone/config/framework/json/EnumMapper.java b/application/src/main/java/org/opentripplanner/standalone/config/framework/json/EnumMapper.java index c57220c41d5..c39c2ef7377 100644 --- a/application/src/main/java/org/opentripplanner/standalone/config/framework/json/EnumMapper.java +++ b/application/src/main/java/org/opentripplanner/standalone/config/framework/json/EnumMapper.java @@ -3,7 +3,7 @@ import java.util.Arrays; import java.util.Optional; import org.opentripplanner.framework.doc.DocumentedEnum; -import org.opentripplanner.framework.lang.StringUtils; +import org.opentripplanner.utils.lang.StringUtils; /** * This converts strings appearing in configuration files into enum values. diff --git a/application/src/main/java/org/opentripplanner/standalone/config/framework/json/NodeInfo.java b/application/src/main/java/org/opentripplanner/standalone/config/framework/json/NodeInfo.java index ce29639b924..b9db7fb75c8 100644 --- a/application/src/main/java/org/opentripplanner/standalone/config/framework/json/NodeInfo.java +++ b/application/src/main/java/org/opentripplanner/standalone/config/framework/json/NodeInfo.java @@ -6,8 +6,8 @@ import java.util.List; import java.util.Objects; import javax.annotation.Nullable; -import org.opentripplanner.framework.lang.StringUtils; -import org.opentripplanner.framework.tostring.ValueObjectToStringBuilder; +import org.opentripplanner.utils.lang.StringUtils; +import org.opentripplanner.utils.tostring.ValueObjectToStringBuilder; /** * Information about a configuration parameter. diff --git a/application/src/main/java/org/opentripplanner/standalone/config/framework/json/ParameterBuilder.java b/application/src/main/java/org/opentripplanner/standalone/config/framework/json/ParameterBuilder.java index 0afca602872..784d381a2e6 100644 --- a/application/src/main/java/org/opentripplanner/standalone/config/framework/json/ParameterBuilder.java +++ b/application/src/main/java/org/opentripplanner/standalone/config/framework/json/ParameterBuilder.java @@ -36,11 +36,11 @@ import java.util.function.Function; import java.util.regex.Pattern; import org.opentripplanner.framework.application.OtpAppException; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.time.LocalDateUtils; import org.opentripplanner.routing.api.request.framework.CostLinearFunction; import org.opentripplanner.routing.api.request.framework.TimePenalty; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.time.LocalDateUtils; /** * TODO RT_AB: add Javadoc to clarify whether this is building a declarative representation of the diff --git a/application/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java b/application/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java index dc91388458a..d05aee96ccf 100644 --- a/application/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java +++ b/application/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java @@ -18,7 +18,6 @@ import java.util.stream.Collectors; import org.opentripplanner.api.parameter.QualifiedModeSet; import org.opentripplanner.framework.application.OTPFeature; -import org.opentripplanner.framework.lang.StringUtils; import org.opentripplanner.routing.api.request.RequestModes; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.StreetMode; @@ -35,6 +34,7 @@ import org.opentripplanner.standalone.config.framework.json.NodeAdapter; import org.opentripplanner.standalone.config.sandbox.DataOverlayParametersMapper; import org.opentripplanner.transit.model.basic.TransitMode; +import org.opentripplanner.utils.lang.StringUtils; public class RouteRequestConfig { diff --git a/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplication.java b/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplication.java index 979467299cd..279c3c48368 100644 --- a/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplication.java +++ b/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplication.java @@ -8,7 +8,6 @@ import org.opentripplanner.ext.stopconsolidation.StopConsolidationRepository; import org.opentripplanner.framework.application.LogMDCSupport; import org.opentripplanner.framework.application.OTPFeature; -import org.opentripplanner.framework.logging.ProgressTracker; import org.opentripplanner.graph_builder.GraphBuilder; import org.opentripplanner.graph_builder.GraphBuilderDataSources; import org.opentripplanner.graph_builder.issue.api.DataImportIssueSummary; @@ -35,6 +34,7 @@ import org.opentripplanner.transit.service.DefaultTransitService; import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.updater.configure.UpdaterConfigurator; +import org.opentripplanner.utils.logging.ProgressTracker; import org.opentripplanner.visualizer.GraphVisualizer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/standalone/server/EtagRequestFilter.java b/application/src/main/java/org/opentripplanner/standalone/server/EtagRequestFilter.java index 65cdec32a7d..b53739084ae 100644 --- a/application/src/main/java/org/opentripplanner/standalone/server/EtagRequestFilter.java +++ b/application/src/main/java/org/opentripplanner/standalone/server/EtagRequestFilter.java @@ -10,7 +10,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import org.apache.hc.core5.http.HttpStatus; -import org.opentripplanner.framework.text.HexString; +import org.opentripplanner.utils.text.HexString; public class EtagRequestFilter implements ContainerResponseFilter { diff --git a/application/src/main/java/org/opentripplanner/standalone/server/RequestTraceFilter.java b/application/src/main/java/org/opentripplanner/standalone/server/RequestTraceFilter.java index 8ee2e6bbd27..31d2745913b 100644 --- a/application/src/main/java/org/opentripplanner/standalone/server/RequestTraceFilter.java +++ b/application/src/main/java/org/opentripplanner/standalone/server/RequestTraceFilter.java @@ -12,7 +12,7 @@ import java.util.Random; import java.util.regex.Pattern; import org.opentripplanner.framework.application.LogMDCSupport; -import org.opentripplanner.framework.lang.StringUtils; +import org.opentripplanner.utils.lang.StringUtils; /** * This filter manages OTP request trace parameters. A trace parameter can be read from the diff --git a/application/src/main/java/org/opentripplanner/standalone/server/RequestTraceParameter.java b/application/src/main/java/org/opentripplanner/standalone/server/RequestTraceParameter.java index 98abe8c8091..6e1b3286dcc 100644 --- a/application/src/main/java/org/opentripplanner/standalone/server/RequestTraceParameter.java +++ b/application/src/main/java/org/opentripplanner/standalone/server/RequestTraceParameter.java @@ -1,6 +1,6 @@ package org.opentripplanner.standalone.server; -import org.opentripplanner.framework.lang.StringUtils; +import org.opentripplanner.utils.lang.StringUtils; /** * OTP supports tracing user requests across log events and "outside" services. It does so by diff --git a/application/src/main/java/org/opentripplanner/street/model/edge/ElevatorBoardEdge.java b/application/src/main/java/org/opentripplanner/street/model/edge/ElevatorBoardEdge.java index 81856476f2e..9bf0d67afa5 100644 --- a/application/src/main/java/org/opentripplanner/street/model/edge/ElevatorBoardEdge.java +++ b/application/src/main/java/org/opentripplanner/street/model/edge/ElevatorBoardEdge.java @@ -6,7 +6,6 @@ import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.street.model.vertex.ElevatorOffboardVertex; import org.opentripplanner.street.model.vertex.ElevatorOnboardVertex; import org.opentripplanner.street.search.state.State; diff --git a/application/src/main/java/org/opentripplanner/street/model/edge/ElevatorHopEdge.java b/application/src/main/java/org/opentripplanner/street/model/edge/ElevatorHopEdge.java index 4acecd05a64..75eddb53777 100644 --- a/application/src/main/java/org/opentripplanner/street/model/edge/ElevatorHopEdge.java +++ b/application/src/main/java/org/opentripplanner/street/model/edge/ElevatorHopEdge.java @@ -1,7 +1,6 @@ package org.opentripplanner.street.model.edge; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.api.request.preference.RoutingPreferences; import org.opentripplanner.street.model.StreetTraversalPermission; import org.opentripplanner.street.model.vertex.Vertex; diff --git a/application/src/main/java/org/opentripplanner/street/model/edge/StreetEdge.java b/application/src/main/java/org/opentripplanner/street/model/edge/StreetEdge.java index 505d2a95a3a..fbd4173b68c 100644 --- a/application/src/main/java/org/opentripplanner/street/model/edge/StreetEdge.java +++ b/application/src/main/java/org/opentripplanner/street/model/edge/StreetEdge.java @@ -17,8 +17,6 @@ import org.opentripplanner.framework.geometry.SphericalDistanceLibrary; import org.opentripplanner.framework.geometry.SplitLineString; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.lang.BitSetUtils; -import org.opentripplanner.framework.lang.IntUtils; import org.opentripplanner.routing.api.request.preference.RoutingPreferences; import org.opentripplanner.routing.linking.DisposableEdgeCollection; import org.opentripplanner.routing.linking.LinkingDirection; @@ -36,6 +34,8 @@ import org.opentripplanner.street.search.state.State; import org.opentripplanner.street.search.state.StateEditor; import org.opentripplanner.street.search.state.VehicleRentalState; +import org.opentripplanner.utils.lang.BitSetUtils; +import org.opentripplanner.utils.lang.IntUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/street/model/edge/StreetEdgeBuilder.java b/application/src/main/java/org/opentripplanner/street/model/edge/StreetEdgeBuilder.java index b3173b7bed5..99a02205eb6 100644 --- a/application/src/main/java/org/opentripplanner/street/model/edge/StreetEdgeBuilder.java +++ b/application/src/main/java/org/opentripplanner/street/model/edge/StreetEdgeBuilder.java @@ -14,10 +14,10 @@ import org.locationtech.jts.geom.LineString; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; -import org.opentripplanner.framework.lang.BitSetUtils; import org.opentripplanner.street.model.StreetTraversalPermission; import org.opentripplanner.street.model.vertex.StreetVertex; import org.opentripplanner.street.search.TraverseMode; +import org.opentripplanner.utils.lang.BitSetUtils; public class StreetEdgeBuilder> { diff --git a/application/src/main/java/org/opentripplanner/street/model/edge/StreetElevationExtension.java b/application/src/main/java/org/opentripplanner/street/model/edge/StreetElevationExtension.java index 65ab72093ef..d741fb0a763 100644 --- a/application/src/main/java/org/opentripplanner/street/model/edge/StreetElevationExtension.java +++ b/application/src/main/java/org/opentripplanner/street/model/edge/StreetElevationExtension.java @@ -3,7 +3,7 @@ import java.io.Serializable; import org.locationtech.jts.geom.impl.PackedCoordinateSequence; import org.opentripplanner.framework.geometry.CompactElevationProfile; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; public class StreetElevationExtension implements Serializable { diff --git a/application/src/main/java/org/opentripplanner/street/model/edge/StreetTransitEntityLink.java b/application/src/main/java/org/opentripplanner/street/model/edge/StreetTransitEntityLink.java index 92897232700..5a62eda0f90 100644 --- a/application/src/main/java/org/opentripplanner/street/model/edge/StreetTransitEntityLink.java +++ b/application/src/main/java/org/opentripplanner/street/model/edge/StreetTransitEntityLink.java @@ -4,7 +4,6 @@ import org.locationtech.jts.geom.LineString; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.api.request.preference.RoutingPreferences; import org.opentripplanner.street.model.vertex.StreetVertex; import org.opentripplanner.street.model.vertex.Vertex; diff --git a/application/src/main/java/org/opentripplanner/street/model/edge/StreetVehicleParkingLink.java b/application/src/main/java/org/opentripplanner/street/model/edge/StreetVehicleParkingLink.java index e8fbae31b5f..682aeca0b3e 100644 --- a/application/src/main/java/org/opentripplanner/street/model/edge/StreetVehicleParkingLink.java +++ b/application/src/main/java/org/opentripplanner/street/model/edge/StreetVehicleParkingLink.java @@ -3,7 +3,6 @@ import org.locationtech.jts.geom.LineString; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.api.request.preference.VehicleParkingPreferences; import org.opentripplanner.routing.vehicle_parking.VehicleParking; import org.opentripplanner.street.model.vertex.StreetVertex; diff --git a/application/src/main/java/org/opentripplanner/street/model/note/StreetNoteAndMatcher.java b/application/src/main/java/org/opentripplanner/street/model/note/StreetNoteAndMatcher.java index 84d775aca3b..953645c46bc 100644 --- a/application/src/main/java/org/opentripplanner/street/model/note/StreetNoteAndMatcher.java +++ b/application/src/main/java/org/opentripplanner/street/model/note/StreetNoteAndMatcher.java @@ -2,7 +2,7 @@ import java.io.Serializable; import java.util.Objects; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * A container for a pair (note and note matcher). diff --git a/application/src/main/java/org/opentripplanner/street/model/vertex/IntersectionVertex.java b/application/src/main/java/org/opentripplanner/street/model/vertex/IntersectionVertex.java index baea576a85f..2a8582cbaab 100644 --- a/application/src/main/java/org/opentripplanner/street/model/vertex/IntersectionVertex.java +++ b/application/src/main/java/org/opentripplanner/street/model/vertex/IntersectionVertex.java @@ -1,6 +1,6 @@ package org.opentripplanner.street.model.vertex; -import org.opentripplanner.framework.lang.BitSetUtils; +import org.opentripplanner.utils.lang.BitSetUtils; /** * Represents an ordinary location in space, typically an intersection. diff --git a/application/src/main/java/org/opentripplanner/street/model/vertex/OsmBoardingLocationVertex.java b/application/src/main/java/org/opentripplanner/street/model/vertex/OsmBoardingLocationVertex.java index 8ba8b25c2b2..8d89ebbe8e0 100644 --- a/application/src/main/java/org/opentripplanner/street/model/vertex/OsmBoardingLocationVertex.java +++ b/application/src/main/java/org/opentripplanner/street/model/vertex/OsmBoardingLocationVertex.java @@ -5,7 +5,7 @@ import java.util.Set; import javax.annotation.Nullable; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * A vertex for an OSM node that represents a transit stop and has a tag to cross-reference this to diff --git a/application/src/main/java/org/opentripplanner/street/search/state/State.java b/application/src/main/java/org/opentripplanner/street/search/state/State.java index 6c7f342cad6..9413cbcbd57 100644 --- a/application/src/main/java/org/opentripplanner/street/search/state/State.java +++ b/application/src/main/java/org/opentripplanner/street/search/state/State.java @@ -1,6 +1,6 @@ package org.opentripplanner.street.search.state; -import static org.opentripplanner.framework.lang.ObjectUtils.requireNotInitialized; +import static org.opentripplanner.utils.lang.ObjectUtils.requireNotInitialized; import java.time.Instant; import java.util.ArrayList; @@ -11,7 +11,6 @@ import javax.annotation.Nullable; import org.opentripplanner.astar.spi.AStarState; import org.opentripplanner.ext.dataoverlay.routing.DataOverlayContext; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.api.request.preference.RoutingPreferences; import org.opentripplanner.service.vehiclerental.street.VehicleRentalEdge; import org.opentripplanner.service.vehiclerental.street.VehicleRentalPlaceVertex; @@ -21,6 +20,7 @@ import org.opentripplanner.street.search.TraverseMode; import org.opentripplanner.street.search.intersection_model.IntersectionTraversalCalculator; import org.opentripplanner.street.search.request.StreetSearchRequest; +import org.opentripplanner.utils.tostring.ToStringBuilder; public class State implements AStarState, Cloneable { diff --git a/application/src/main/java/org/opentripplanner/transit/api/request/TripOnServiceDateRequest.java b/application/src/main/java/org/opentripplanner/transit/api/request/TripOnServiceDateRequest.java index 6735dc1db29..adc7283ee4d 100644 --- a/application/src/main/java/org/opentripplanner/transit/api/request/TripOnServiceDateRequest.java +++ b/application/src/main/java/org/opentripplanner/transit/api/request/TripOnServiceDateRequest.java @@ -2,9 +2,9 @@ import java.time.LocalDate; import java.util.List; -import org.opentripplanner.framework.collection.ListUtils; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.timetable.TripAlteration; +import org.opentripplanner.utils.collection.ListUtils; /* * A request for trips on a specific service date. diff --git a/application/src/main/java/org/opentripplanner/transit/model/basic/Money.java b/application/src/main/java/org/opentripplanner/transit/model/basic/Money.java index de1c6647b6b..97d6f91be5a 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/basic/Money.java +++ b/application/src/main/java/org/opentripplanner/transit/model/basic/Money.java @@ -8,7 +8,7 @@ import java.util.Locale; import java.util.Objects; import java.util.function.Function; -import org.opentripplanner.framework.lang.IntUtils; +import org.opentripplanner.utils.lang.IntUtils; /** * Represents an amount of money. diff --git a/application/src/main/java/org/opentripplanner/transit/model/framework/Deduplicator.java b/application/src/main/java/org/opentripplanner/transit/model/framework/Deduplicator.java index 587ad2871cd..69b5385ad86 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/framework/Deduplicator.java +++ b/application/src/main/java/org/opentripplanner/transit/model/framework/Deduplicator.java @@ -14,7 +14,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.Nullable; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Does the same thing as String.intern, but for several different types. Java's String.intern uses diff --git a/application/src/main/java/org/opentripplanner/transit/model/framework/FeedScopedId.java b/application/src/main/java/org/opentripplanner/transit/model/framework/FeedScopedId.java index bdb09cb0db8..be12be83548 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/framework/FeedScopedId.java +++ b/application/src/main/java/org/opentripplanner/transit/model/framework/FeedScopedId.java @@ -1,12 +1,12 @@ package org.opentripplanner.transit.model.framework; -import static org.opentripplanner.framework.lang.StringUtils.assertHasValue; +import static org.opentripplanner.utils.lang.StringUtils.assertHasValue; import java.io.Serializable; import java.util.Arrays; import java.util.List; import javax.annotation.Nullable; -import org.opentripplanner.framework.lang.StringUtils; +import org.opentripplanner.utils.lang.StringUtils; public final class FeedScopedId implements Serializable, Comparable { diff --git a/application/src/main/java/org/opentripplanner/transit/model/network/Route.java b/application/src/main/java/org/opentripplanner/transit/model/network/Route.java index bd868fba10d..1daae1e6209 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/network/Route.java +++ b/application/src/main/java/org/opentripplanner/transit/model/network/Route.java @@ -9,7 +9,6 @@ import java.util.Objects; import javax.annotation.Nullable; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.lang.IntUtils; import org.opentripplanner.transit.model.basic.SubMode; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.AbstractTransitEntity; @@ -18,6 +17,7 @@ import org.opentripplanner.transit.model.organization.Agency; import org.opentripplanner.transit.model.organization.Branding; import org.opentripplanner.transit.model.organization.Operator; +import org.opentripplanner.utils.lang.IntUtils; public final class Route extends AbstractTransitEntity implements LogInfo { diff --git a/application/src/main/java/org/opentripplanner/transit/model/network/StopPattern.java b/application/src/main/java/org/opentripplanner/transit/model/network/StopPattern.java index 7395d28419f..9df095d5170 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/network/StopPattern.java +++ b/application/src/main/java/org/opentripplanner/transit/model/network/StopPattern.java @@ -9,13 +9,13 @@ import java.util.Optional; import java.util.function.Predicate; import javax.annotation.Nullable; -import org.opentripplanner.framework.lang.MemEfficientArrayBuilder; import org.opentripplanner.model.PickDrop; import org.opentripplanner.model.StopTime; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.Station; import org.opentripplanner.transit.model.site.StopLocation; +import org.opentripplanner.utils.lang.MemEfficientArrayBuilder; /** * This class represents what is called a JourneyPattern in Transmodel: the sequence of stops at diff --git a/application/src/main/java/org/opentripplanner/transit/model/network/TripPattern.java b/application/src/main/java/org/opentripplanner/transit/model/network/TripPattern.java index becf1686733..88d48d741f3 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/network/TripPattern.java +++ b/application/src/main/java/org/opentripplanner/transit/model/network/TripPattern.java @@ -1,7 +1,7 @@ package org.opentripplanner.transit.model.network; import static java.util.Objects.requireNonNull; -import static org.opentripplanner.framework.lang.ObjectUtils.requireNotInitialized; +import static org.opentripplanner.utils.lang.ObjectUtils.requireNotInitialized; import java.util.ArrayList; import java.util.Collection; diff --git a/application/src/main/java/org/opentripplanner/transit/model/network/grouppriority/TransitGroupPriorityService.java b/application/src/main/java/org/opentripplanner/transit/model/network/grouppriority/TransitGroupPriorityService.java index 048b2279a88..e8172cdf546 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/network/grouppriority/TransitGroupPriorityService.java +++ b/application/src/main/java/org/opentripplanner/transit/model/network/grouppriority/TransitGroupPriorityService.java @@ -7,12 +7,12 @@ import java.util.Collection; import java.util.List; import java.util.stream.Stream; -import org.opentripplanner.framework.lang.ArrayUtils; import org.opentripplanner.routing.api.request.framework.CostLinearFunction; import org.opentripplanner.routing.api.request.request.filter.TransitGroupSelect; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.timetable.Trip; +import org.opentripplanner.utils.lang.ArrayUtils; /** * This class dynamically builds an index of transit-group-ids from the provided diff --git a/application/src/main/java/org/opentripplanner/transit/model/organization/Agency.java b/application/src/main/java/org/opentripplanner/transit/model/organization/Agency.java index 4d82ab05e57..dc684511ca1 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/organization/Agency.java +++ b/application/src/main/java/org/opentripplanner/transit/model/organization/Agency.java @@ -1,7 +1,7 @@ /* This file is based on code copied from project OneBusAway, see the LICENSE file for further information. */ package org.opentripplanner.transit.model.organization; -import static org.opentripplanner.framework.lang.StringUtils.assertHasValue; +import static org.opentripplanner.utils.lang.StringUtils.assertHasValue; import java.time.ZoneId; import java.util.Objects; diff --git a/application/src/main/java/org/opentripplanner/transit/model/organization/ContactInfo.java b/application/src/main/java/org/opentripplanner/transit/model/organization/ContactInfo.java index 01ad5047510..d54b38dba24 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/organization/ContactInfo.java +++ b/application/src/main/java/org/opentripplanner/transit/model/organization/ContactInfo.java @@ -2,8 +2,8 @@ import java.util.Objects; import javax.annotation.Nullable; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.transit.model.framework.TransitObject; +import org.opentripplanner.utils.tostring.ToStringBuilder; public class ContactInfo implements TransitObject { diff --git a/application/src/main/java/org/opentripplanner/transit/model/organization/Operator.java b/application/src/main/java/org/opentripplanner/transit/model/organization/Operator.java index 399b726602f..35461fd7498 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/organization/Operator.java +++ b/application/src/main/java/org/opentripplanner/transit/model/organization/Operator.java @@ -1,6 +1,6 @@ package org.opentripplanner.transit.model.organization; -import static org.opentripplanner.framework.lang.StringUtils.assertHasValue; +import static org.opentripplanner.utils.lang.StringUtils.assertHasValue; import java.util.Objects; import javax.annotation.Nullable; diff --git a/application/src/main/java/org/opentripplanner/transit/model/site/StopLocation.java b/application/src/main/java/org/opentripplanner/transit/model/site/StopLocation.java index d9c79732970..ecd0cf440b6 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/site/StopLocation.java +++ b/application/src/main/java/org/opentripplanner/transit/model/site/StopLocation.java @@ -8,12 +8,12 @@ import org.locationtech.jts.geom.Geometry; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.lang.ObjectUtils; import org.opentripplanner.transit.model.basic.Accessibility; import org.opentripplanner.transit.model.basic.SubMode; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.framework.LogInfo; +import org.opentripplanner.utils.lang.ObjectUtils; /** * A StopLocation describes a place where a vehicle can be boarded or alighted, which is not diff --git a/application/src/main/java/org/opentripplanner/transit/model/site/StopLocationsGroup.java b/application/src/main/java/org/opentripplanner/transit/model/site/StopLocationsGroup.java index 3536f59e9b6..4158828e9a4 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/site/StopLocationsGroup.java +++ b/application/src/main/java/org/opentripplanner/transit/model/site/StopLocationsGroup.java @@ -3,9 +3,9 @@ import java.util.Collection; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.lang.ObjectUtils; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.framework.LogInfo; +import org.opentripplanner.utils.lang.ObjectUtils; /** * A grouping of Stops referred to by the same name. No actual boarding or alighting happens at this diff --git a/application/src/main/java/org/opentripplanner/transit/model/timetable/ScheduledTripTimes.java b/application/src/main/java/org/opentripplanner/transit/model/timetable/ScheduledTripTimes.java index 3cae0c1678b..9a7298cd15e 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/timetable/ScheduledTripTimes.java +++ b/application/src/main/java/org/opentripplanner/transit/model/timetable/ScheduledTripTimes.java @@ -13,14 +13,14 @@ import javax.annotation.Nullable; import org.opentripplanner.framework.error.OtpError; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.lang.IntUtils; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.transit.model.basic.Accessibility; import org.opentripplanner.transit.model.framework.DataValidationException; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.DeduplicatorService; import org.opentripplanner.transit.model.timetable.booking.BookingInfo; +import org.opentripplanner.utils.lang.IntUtils; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.time.TimeUtils; /** * Regular/planed/scheduled read-only version of {@link TripTimes}. The set of static diff --git a/application/src/main/java/org/opentripplanner/transit/model/timetable/ScheduledTripTimesBuilder.java b/application/src/main/java/org/opentripplanner/transit/model/timetable/ScheduledTripTimesBuilder.java index 200afc27e8d..acca4a6a526 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/timetable/ScheduledTripTimesBuilder.java +++ b/application/src/main/java/org/opentripplanner/transit/model/timetable/ScheduledTripTimesBuilder.java @@ -4,9 +4,9 @@ import java.util.List; import javax.annotation.Nullable; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.transit.model.framework.DeduplicatorService; import org.opentripplanner.transit.model.timetable.booking.BookingInfo; +import org.opentripplanner.utils.time.TimeUtils; public class ScheduledTripTimesBuilder { diff --git a/application/src/main/java/org/opentripplanner/transit/model/timetable/Trip.java b/application/src/main/java/org/opentripplanner/transit/model/timetable/Trip.java index 6e829e15866..c9bacc3a298 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/timetable/Trip.java +++ b/application/src/main/java/org/opentripplanner/transit/model/timetable/Trip.java @@ -3,12 +3,11 @@ import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNullElse; -import static org.opentripplanner.framework.lang.ObjectUtils.ifNotNull; +import static org.opentripplanner.utils.lang.ObjectUtils.ifNotNull; import java.util.Objects; import javax.annotation.Nullable; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.lang.StringUtils; import org.opentripplanner.transit.model.basic.Accessibility; import org.opentripplanner.transit.model.basic.SubMode; import org.opentripplanner.transit.model.basic.TransitMode; @@ -18,6 +17,7 @@ import org.opentripplanner.transit.model.network.BikeAccess; import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.organization.Operator; +import org.opentripplanner.utils.lang.StringUtils; /** * A Trip represents the movement of a public transport vehicle on a given {@link Route}, using a diff --git a/application/src/main/java/org/opentripplanner/transit/model/timetable/TripTimesStringBuilder.java b/application/src/main/java/org/opentripplanner/transit/model/timetable/TripTimesStringBuilder.java index a5e77037dea..143cb59ff31 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/timetable/TripTimesStringBuilder.java +++ b/application/src/main/java/org/opentripplanner/transit/model/timetable/TripTimesStringBuilder.java @@ -1,8 +1,8 @@ package org.opentripplanner.transit.model.timetable; import java.util.ArrayList; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.transit.model.network.TripPattern; +import org.opentripplanner.utils.time.TimeUtils; public class TripTimesStringBuilder { diff --git a/application/src/main/java/org/opentripplanner/transit/model/timetable/booking/BookingInfo.java b/application/src/main/java/org/opentripplanner/transit/model/timetable/booking/BookingInfo.java index 3e23696b65a..b21543b717c 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/timetable/booking/BookingInfo.java +++ b/application/src/main/java/org/opentripplanner/transit/model/timetable/booking/BookingInfo.java @@ -4,8 +4,8 @@ import java.time.Duration; import java.util.EnumSet; import javax.annotation.Nullable; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.transit.model.organization.ContactInfo; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * Info about how a trip might be booked at a particular stop. All of this is pass-through diff --git a/application/src/main/java/org/opentripplanner/transit/model/timetable/booking/BookingTime.java b/application/src/main/java/org/opentripplanner/transit/model/timetable/booking/BookingTime.java index 8034fe07388..d0f1558e0d4 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/timetable/booking/BookingTime.java +++ b/application/src/main/java/org/opentripplanner/transit/model/timetable/booking/BookingTime.java @@ -3,7 +3,7 @@ import java.io.Serializable; import java.time.LocalTime; import java.util.Objects; -import org.opentripplanner.framework.time.TimeUtils; +import org.opentripplanner.utils.time.TimeUtils; /** * Represents either the earliest or latest time a trip can be booked relative to the departure day diff --git a/application/src/main/java/org/opentripplanner/transit/model/timetable/booking/RoutingBookingInfo.java b/application/src/main/java/org/opentripplanner/transit/model/timetable/booking/RoutingBookingInfo.java index 8dad53a0bde..471cff394e2 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/timetable/booking/RoutingBookingInfo.java +++ b/application/src/main/java/org/opentripplanner/transit/model/timetable/booking/RoutingBookingInfo.java @@ -3,7 +3,7 @@ import java.time.Duration; import java.util.Objects; import javax.annotation.Nullable; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * This is the contract between booking info and the router. The router will enforce diff --git a/application/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java b/application/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java index 2ce99e7809b..5f7cfa95524 100644 --- a/application/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java +++ b/application/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java @@ -22,7 +22,6 @@ import org.locationtech.jts.geom.Envelope; import org.opentripplanner.ext.flex.FlexIndex; import org.opentripplanner.framework.application.OTPRequestTimeoutException; -import org.opentripplanner.framework.collection.CollectionsView; import org.opentripplanner.model.FeedInfo; import org.opentripplanner.model.PathTransfer; import org.opentripplanner.model.StopTimesInPattern; @@ -59,6 +58,7 @@ import org.opentripplanner.transit.model.timetable.TripIdAndServiceDate; import org.opentripplanner.transit.model.timetable.TripOnServiceDate; import org.opentripplanner.updater.GraphUpdaterStatus; +import org.opentripplanner.utils.collection.CollectionsView; /** * Default implementation of the Transit Service and Transit Editor Service. diff --git a/application/src/main/java/org/opentripplanner/transit/service/SiteRepository.java b/application/src/main/java/org/opentripplanner/transit/service/SiteRepository.java index 6c9d591933a..a2a4adea931 100644 --- a/application/src/main/java/org/opentripplanner/transit/service/SiteRepository.java +++ b/application/src/main/java/org/opentripplanner/transit/service/SiteRepository.java @@ -8,8 +8,6 @@ import java.util.concurrent.atomic.AtomicInteger; import javax.annotation.Nullable; import org.locationtech.jts.geom.Envelope; -import org.opentripplanner.framework.collection.CollectionsView; -import org.opentripplanner.framework.collection.MapUtils; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.site.AreaStop; @@ -20,6 +18,8 @@ import org.opentripplanner.transit.model.site.Station; import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.model.site.StopLocationsGroup; +import org.opentripplanner.utils.collection.CollectionsView; +import org.opentripplanner.utils.collection.MapUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/transit/service/StopModelIndex.java b/application/src/main/java/org/opentripplanner/transit/service/StopModelIndex.java index 48048101b3d..13a8c0d278d 100644 --- a/application/src/main/java/org/opentripplanner/transit/service/StopModelIndex.java +++ b/application/src/main/java/org/opentripplanner/transit/service/StopModelIndex.java @@ -7,7 +7,6 @@ import java.util.Objects; import javax.annotation.Nullable; import org.locationtech.jts.geom.Envelope; -import org.opentripplanner.framework.collection.CollectionsView; import org.opentripplanner.framework.geometry.HashGridSpatialIndex; import org.opentripplanner.transit.model.site.AreaStop; import org.opentripplanner.transit.model.site.GroupStop; @@ -15,6 +14,7 @@ import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.Station; import org.opentripplanner.transit.model.site.StopLocation; +import org.opentripplanner.utils.collection.CollectionsView; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.event.Level; diff --git a/application/src/main/java/org/opentripplanner/transit/service/TimetableRepository.java b/application/src/main/java/org/opentripplanner/transit/service/TimetableRepository.java index 6dec0c09eb6..532bc2e6e8f 100644 --- a/application/src/main/java/org/opentripplanner/transit/service/TimetableRepository.java +++ b/application/src/main/java/org/opentripplanner/transit/service/TimetableRepository.java @@ -22,8 +22,6 @@ import java.util.Set; import javax.annotation.Nullable; import org.opentripplanner.ext.flex.trip.FlexTrip; -import org.opentripplanner.framework.lang.ObjectUtils; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.graph_builder.issues.NoFutureDates; import org.opentripplanner.model.FeedInfo; @@ -51,6 +49,8 @@ import org.opentripplanner.transit.model.timetable.TripOnServiceDate; import org.opentripplanner.updater.GraphUpdaterManager; import org.opentripplanner.updater.configure.UpdaterConfigurator; +import org.opentripplanner.utils.lang.ObjectUtils; +import org.opentripplanner.utils.time.ServiceDateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/updater/GtfsRealtimeFuzzyTripMatcher.java b/application/src/main/java/org/opentripplanner/updater/GtfsRealtimeFuzzyTripMatcher.java index 6972bfb6208..96e2d25bbd8 100644 --- a/application/src/main/java/org/opentripplanner/updater/GtfsRealtimeFuzzyTripMatcher.java +++ b/application/src/main/java/org/opentripplanner/updater/GtfsRealtimeFuzzyTripMatcher.java @@ -4,8 +4,6 @@ import gnu.trove.set.TIntSet; import java.text.ParseException; import java.time.LocalDate; -import org.opentripplanner.framework.time.ServiceDateUtils; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.gtfs.mapping.DirectionMapper; import org.opentripplanner.transit.model.framework.FeedScopedId; @@ -15,6 +13,8 @@ import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.model.timetable.TripTimes; import org.opentripplanner.transit.service.TransitService; +import org.opentripplanner.utils.time.ServiceDateUtils; +import org.opentripplanner.utils.time.TimeUtils; /** * This class is used for matching TripDescriptors without trip_ids to scheduled GTFS data and to diff --git a/application/src/main/java/org/opentripplanner/updater/alert/GtfsRealtimeAlertsUpdater.java b/application/src/main/java/org/opentripplanner/updater/alert/GtfsRealtimeAlertsUpdater.java index 23b6d741e10..b71dad6a656 100644 --- a/application/src/main/java/org/opentripplanner/updater/alert/GtfsRealtimeAlertsUpdater.java +++ b/application/src/main/java/org/opentripplanner/updater/alert/GtfsRealtimeAlertsUpdater.java @@ -4,13 +4,13 @@ import java.net.URI; import org.opentripplanner.framework.io.OtpHttpClient; import org.opentripplanner.framework.io.OtpHttpClientFactory; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.impl.TransitAlertServiceImpl; import org.opentripplanner.routing.services.TransitAlertService; import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.updater.spi.HttpHeaders; import org.opentripplanner.updater.spi.PollingGraphUpdater; import org.opentripplanner.updater.spi.WriteToGraphCallback; +import org.opentripplanner.utils.tostring.ToStringBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/updater/siri/AddedTripBuilder.java b/application/src/main/java/org/opentripplanner/updater/siri/AddedTripBuilder.java index 3be1bcbc4a2..a1ca89f5c83 100644 --- a/application/src/main/java/org/opentripplanner/updater/siri/AddedTripBuilder.java +++ b/application/src/main/java/org/opentripplanner/updater/siri/AddedTripBuilder.java @@ -16,7 +16,6 @@ import java.util.function.Function; import javax.annotation.Nullable; import org.opentripplanner.framework.i18n.NonLocalizedString; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.model.StopTime; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.DataValidationException; @@ -37,6 +36,7 @@ import org.opentripplanner.updater.siri.mapper.PickDropMapper; import org.opentripplanner.updater.spi.DataValidationExceptionMapper; import org.opentripplanner.updater.spi.UpdateError; +import org.opentripplanner.utils.time.ServiceDateUtils; import org.rutebanken.netex.model.BusSubmodeEnumeration; import org.rutebanken.netex.model.RailSubmodeEnumeration; import org.slf4j.Logger; diff --git a/application/src/main/java/org/opentripplanner/updater/siri/DebugString.java b/application/src/main/java/org/opentripplanner/updater/siri/DebugString.java index e8265856245..fa5d45544e0 100644 --- a/application/src/main/java/org/opentripplanner/updater/siri/DebugString.java +++ b/application/src/main/java/org/opentripplanner/updater/siri/DebugString.java @@ -1,6 +1,6 @@ package org.opentripplanner.updater.siri; -import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.utils.tostring.ToStringBuilder; import uk.org.siri.siri20.DataFrameRefStructure; import uk.org.siri.siri20.DatedVehicleJourneyRef; import uk.org.siri.siri20.EstimatedVehicleJourney; diff --git a/application/src/main/java/org/opentripplanner/updater/siri/ModifiedTripBuilder.java b/application/src/main/java/org/opentripplanner/updater/siri/ModifiedTripBuilder.java index 68435290d1b..0f1475f7b50 100644 --- a/application/src/main/java/org/opentripplanner/updater/siri/ModifiedTripBuilder.java +++ b/application/src/main/java/org/opentripplanner/updater/siri/ModifiedTripBuilder.java @@ -10,7 +10,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.transit.model.framework.DataValidationException; import org.opentripplanner.transit.model.framework.Result; import org.opentripplanner.transit.model.network.StopPattern; @@ -23,6 +22,7 @@ import org.opentripplanner.updater.siri.mapper.PickDropMapper; import org.opentripplanner.updater.spi.DataValidationExceptionMapper; import org.opentripplanner.updater.spi.UpdateError; +import org.opentripplanner.utils.time.ServiceDateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import uk.org.siri.siri20.EstimatedVehicleJourney; diff --git a/application/src/main/java/org/opentripplanner/updater/siri/SiriFuzzyTripMatcher.java b/application/src/main/java/org/opentripplanner/updater/siri/SiriFuzzyTripMatcher.java index db3fa50e94c..604dceed408 100644 --- a/application/src/main/java/org/opentripplanner/updater/siri/SiriFuzzyTripMatcher.java +++ b/application/src/main/java/org/opentripplanner/updater/siri/SiriFuzzyTripMatcher.java @@ -11,7 +11,6 @@ import java.util.function.BiFunction; import java.util.stream.Collectors; import javax.annotation.Nullable; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.model.Timetable; import org.opentripplanner.model.calendar.CalendarService; import org.opentripplanner.transit.model.basic.TransitMode; @@ -21,6 +20,7 @@ import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.model.timetable.TripTimes; import org.opentripplanner.transit.service.TransitService; +import org.opentripplanner.utils.time.ServiceDateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import uk.org.siri.siri20.EstimatedVehicleJourney; diff --git a/application/src/main/java/org/opentripplanner/updater/siri/TimetableHelper.java b/application/src/main/java/org/opentripplanner/updater/siri/TimetableHelper.java index 870316403f6..dad1bc9a243 100644 --- a/application/src/main/java/org/opentripplanner/updater/siri/TimetableHelper.java +++ b/application/src/main/java/org/opentripplanner/updater/siri/TimetableHelper.java @@ -5,9 +5,9 @@ import java.time.ZonedDateTime; import java.util.function.Supplier; import org.opentripplanner.framework.i18n.NonLocalizedString; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.transit.model.timetable.RealTimeTripTimes; import org.opentripplanner.updater.siri.mapper.OccupancyMapper; +import org.opentripplanner.utils.time.ServiceDateUtils; import uk.org.siri.siri20.NaturalLanguageStringStructure; import uk.org.siri.siri20.OccupancyEnumeration; diff --git a/application/src/main/java/org/opentripplanner/updater/siri/updater/google/GooglePubsubEstimatedTimetableSource.java b/application/src/main/java/org/opentripplanner/updater/siri/updater/google/GooglePubsubEstimatedTimetableSource.java index 4592d102d1d..b9812576fd8 100644 --- a/application/src/main/java/org/opentripplanner/updater/siri/updater/google/GooglePubsubEstimatedTimetableSource.java +++ b/application/src/main/java/org/opentripplanner/updater/siri/updater/google/GooglePubsubEstimatedTimetableSource.java @@ -29,9 +29,9 @@ import org.opentripplanner.framework.io.OtpHttpClientFactory; import org.opentripplanner.framework.retry.OtpRetry; import org.opentripplanner.framework.retry.OtpRetryBuilder; -import org.opentripplanner.framework.text.FileSizeToTextConverter; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.updater.siri.updater.AsyncEstimatedTimetableSource; +import org.opentripplanner.utils.text.FileSizeToTextConverter; +import org.opentripplanner.utils.time.DurationUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import uk.org.siri.siri20.ServiceDelivery; diff --git a/application/src/main/java/org/opentripplanner/updater/siri/updater/google/SiriETGooglePubsubUpdaterParameters.java b/application/src/main/java/org/opentripplanner/updater/siri/updater/google/SiriETGooglePubsubUpdaterParameters.java index fc698142adc..2970ac114c0 100644 --- a/application/src/main/java/org/opentripplanner/updater/siri/updater/google/SiriETGooglePubsubUpdaterParameters.java +++ b/application/src/main/java/org/opentripplanner/updater/siri/updater/google/SiriETGooglePubsubUpdaterParameters.java @@ -3,8 +3,8 @@ import java.time.Duration; import java.util.Objects; import javax.annotation.Nullable; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.updater.trip.UrlUpdaterParameters; +import org.opentripplanner.utils.tostring.ToStringBuilder; public record SiriETGooglePubsubUpdaterParameters( String configRef, diff --git a/application/src/main/java/org/opentripplanner/updater/spi/ResultLogger.java b/application/src/main/java/org/opentripplanner/updater/spi/ResultLogger.java index 97af8d650bb..9ea737fa0e7 100644 --- a/application/src/main/java/org/opentripplanner/updater/spi/ResultLogger.java +++ b/application/src/main/java/org/opentripplanner/updater/spi/ResultLogger.java @@ -3,7 +3,7 @@ import static net.logstash.logback.argument.StructuredArguments.keyValue; import java.util.stream.Collectors; -import org.opentripplanner.framework.lang.DoubleUtils; +import org.opentripplanner.utils.lang.DoubleUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/updater/spi/UpdateSuccess.java b/application/src/main/java/org/opentripplanner/updater/spi/UpdateSuccess.java index 3e6135d88c0..6d797a9a650 100644 --- a/application/src/main/java/org/opentripplanner/updater/spi/UpdateSuccess.java +++ b/application/src/main/java/org/opentripplanner/updater/spi/UpdateSuccess.java @@ -3,7 +3,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; -import org.opentripplanner.framework.collection.ListUtils; +import org.opentripplanner.utils.collection.ListUtils; /** * The result of a successful application of a realtime update, for example for trips or diff --git a/application/src/main/java/org/opentripplanner/updater/trip/GtfsRealtimeTripUpdateSource.java b/application/src/main/java/org/opentripplanner/updater/trip/GtfsRealtimeTripUpdateSource.java index 48f2d39ccc4..0b20a4c22c7 100644 --- a/application/src/main/java/org/opentripplanner/updater/trip/GtfsRealtimeTripUpdateSource.java +++ b/application/src/main/java/org/opentripplanner/updater/trip/GtfsRealtimeTripUpdateSource.java @@ -14,8 +14,8 @@ import java.util.List; import org.opentripplanner.framework.io.OtpHttpClient; import org.opentripplanner.framework.io.OtpHttpClientFactory; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.updater.spi.HttpHeaders; +import org.opentripplanner.utils.tostring.ToStringBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/updater/trip/MqttGtfsRealtimeUpdater.java b/application/src/main/java/org/opentripplanner/updater/trip/MqttGtfsRealtimeUpdater.java index e1c8bf4ea83..20b49ed022f 100644 --- a/application/src/main/java/org/opentripplanner/updater/trip/MqttGtfsRealtimeUpdater.java +++ b/application/src/main/java/org/opentripplanner/updater/trip/MqttGtfsRealtimeUpdater.java @@ -16,11 +16,11 @@ import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; -import org.opentripplanner.framework.tostring.ToStringBuilder; 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.opentripplanner.utils.tostring.ToStringBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/updater/trip/PollingTripUpdater.java b/application/src/main/java/org/opentripplanner/updater/trip/PollingTripUpdater.java index 71f93235e01..c725c8b1088 100644 --- a/application/src/main/java/org/opentripplanner/updater/trip/PollingTripUpdater.java +++ b/application/src/main/java/org/opentripplanner/updater/trip/PollingTripUpdater.java @@ -3,11 +3,11 @@ import com.google.transit.realtime.GtfsRealtime.TripUpdate; import java.util.List; import java.util.function.Consumer; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.updater.spi.PollingGraphUpdater; import org.opentripplanner.updater.spi.UpdateResult; import org.opentripplanner.updater.spi.WriteToGraphCallback; import org.opentripplanner.updater.trip.metrics.BatchTripUpdateMetrics; +import org.opentripplanner.utils.tostring.ToStringBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/updater/trip/TimetableSnapshotSource.java b/application/src/main/java/org/opentripplanner/updater/trip/TimetableSnapshotSource.java index f83fa9d247e..54c3901f3e8 100644 --- a/application/src/main/java/org/opentripplanner/updater/trip/TimetableSnapshotSource.java +++ b/application/src/main/java/org/opentripplanner/updater/trip/TimetableSnapshotSource.java @@ -37,8 +37,6 @@ import java.util.function.Supplier; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; -import org.opentripplanner.framework.lang.StringUtils; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.gtfs.mapping.TransitModeMapper; import org.opentripplanner.model.RealTimeTripUpdate; import org.opentripplanner.model.StopTime; @@ -70,6 +68,8 @@ import org.opentripplanner.updater.spi.UpdateError; import org.opentripplanner.updater.spi.UpdateResult; import org.opentripplanner.updater.spi.UpdateSuccess; +import org.opentripplanner.utils.lang.StringUtils; +import org.opentripplanner.utils.time.ServiceDateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/updater/vehicle_parking/AvailabiltyUpdate.java b/application/src/main/java/org/opentripplanner/updater/vehicle_parking/AvailabiltyUpdate.java index a9d352cbaf2..414a62938ba 100644 --- a/application/src/main/java/org/opentripplanner/updater/vehicle_parking/AvailabiltyUpdate.java +++ b/application/src/main/java/org/opentripplanner/updater/vehicle_parking/AvailabiltyUpdate.java @@ -1,8 +1,8 @@ package org.opentripplanner.updater.vehicle_parking; import java.util.Objects; -import org.opentripplanner.framework.lang.IntUtils; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.lang.IntUtils; public record AvailabiltyUpdate(FeedScopedId vehicleParkingId, int spacesAvailable) { public AvailabiltyUpdate { diff --git a/application/src/main/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingAvailabilityUpdater.java b/application/src/main/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingAvailabilityUpdater.java index 96544321735..b23f46522c3 100644 --- a/application/src/main/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingAvailabilityUpdater.java +++ b/application/src/main/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingAvailabilityUpdater.java @@ -4,7 +4,6 @@ import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.vehicle_parking.VehicleParking; import org.opentripplanner.routing.vehicle_parking.VehicleParkingService; import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; @@ -14,6 +13,7 @@ import org.opentripplanner.updater.spi.DataSource; import org.opentripplanner.updater.spi.PollingGraphUpdater; import org.opentripplanner.updater.spi.WriteToGraphCallback; +import org.opentripplanner.utils.tostring.ToStringBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingUpdater.java b/application/src/main/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingUpdater.java index 59aea16e928..830429151b4 100644 --- a/application/src/main/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingUpdater.java +++ b/application/src/main/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingUpdater.java @@ -8,7 +8,6 @@ import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.routing.linking.DisposableEdgeCollection; import org.opentripplanner.routing.linking.LinkingDirection; @@ -28,6 +27,7 @@ import org.opentripplanner.updater.spi.DataSource; import org.opentripplanner.updater.spi.PollingGraphUpdater; import org.opentripplanner.updater.spi.WriteToGraphCallback; +import org.opentripplanner.utils.tostring.ToStringBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/updater/vehicle_position/GtfsRealtimeHttpVehiclePositionSource.java b/application/src/main/java/org/opentripplanner/updater/vehicle_position/GtfsRealtimeHttpVehiclePositionSource.java index ec0be6822e7..31ae9a32faf 100644 --- a/application/src/main/java/org/opentripplanner/updater/vehicle_position/GtfsRealtimeHttpVehiclePositionSource.java +++ b/application/src/main/java/org/opentripplanner/updater/vehicle_position/GtfsRealtimeHttpVehiclePositionSource.java @@ -10,8 +10,8 @@ import org.opentripplanner.framework.io.OtpHttpClient; import org.opentripplanner.framework.io.OtpHttpClientException; import org.opentripplanner.framework.io.OtpHttpClientFactory; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.updater.spi.HttpHeaders; +import org.opentripplanner.utils.tostring.ToStringBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/updater/vehicle_position/PollingVehiclePositionUpdater.java b/application/src/main/java/org/opentripplanner/updater/vehicle_position/PollingVehiclePositionUpdater.java index c2860d1d091..4c487ac997b 100644 --- a/application/src/main/java/org/opentripplanner/updater/vehicle_position/PollingVehiclePositionUpdater.java +++ b/application/src/main/java/org/opentripplanner/updater/vehicle_position/PollingVehiclePositionUpdater.java @@ -3,12 +3,12 @@ import com.google.transit.realtime.GtfsRealtime.VehiclePosition; import java.util.List; import java.util.Set; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.service.realtimevehicles.RealtimeVehicleRepository; import org.opentripplanner.service.realtimevehicles.model.RealtimeVehicle; import org.opentripplanner.standalone.config.routerconfig.updaters.VehiclePositionsUpdaterConfig; import org.opentripplanner.updater.spi.PollingGraphUpdater; import org.opentripplanner.updater.spi.WriteToGraphCallback; +import org.opentripplanner.utils.tostring.ToStringBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/updater/vehicle_position/RealtimeVehiclePatternMatcher.java b/application/src/main/java/org/opentripplanner/updater/vehicle_position/RealtimeVehiclePatternMatcher.java index 0723adc91b8..27ee0d479ab 100644 --- a/application/src/main/java/org/opentripplanner/updater/vehicle_position/RealtimeVehiclePatternMatcher.java +++ b/application/src/main/java/org/opentripplanner/updater/vehicle_position/RealtimeVehiclePatternMatcher.java @@ -30,8 +30,6 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import org.opentripplanner.framework.geometry.WgsCoordinate; -import org.opentripplanner.framework.lang.StringUtils; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.service.realtimevehicles.RealtimeVehicleRepository; import org.opentripplanner.service.realtimevehicles.model.RealtimeVehicle; import org.opentripplanner.service.realtimevehicles.model.RealtimeVehicle.StopStatus; @@ -48,6 +46,8 @@ import org.opentripplanner.updater.spi.UpdateError; import org.opentripplanner.updater.spi.UpdateResult; import org.opentripplanner.updater.spi.UpdateSuccess; +import org.opentripplanner.utils.lang.StringUtils; +import org.opentripplanner.utils.time.ServiceDateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/updater/vehicle_rental/VehicleRentalUpdater.java b/application/src/main/java/org/opentripplanner/updater/vehicle_rental/VehicleRentalUpdater.java index 77c3c8d01c6..24686edce6c 100644 --- a/application/src/main/java/org/opentripplanner/updater/vehicle_rental/VehicleRentalUpdater.java +++ b/application/src/main/java/org/opentripplanner/updater/vehicle_rental/VehicleRentalUpdater.java @@ -10,11 +10,6 @@ import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; -import org.opentripplanner.framework.lang.ObjectUtils; -import org.opentripplanner.framework.logging.Throttle; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.time.TimeUtils; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.linking.DisposableEdgeCollection; import org.opentripplanner.routing.linking.LinkingDirection; import org.opentripplanner.routing.linking.VertexLinker; @@ -37,6 +32,11 @@ import org.opentripplanner.updater.spi.UpdaterConstructionException; import org.opentripplanner.updater.spi.WriteToGraphCallback; import org.opentripplanner.updater.vehicle_rental.datasources.VehicleRentalDatasource; +import org.opentripplanner.utils.lang.ObjectUtils; +import org.opentripplanner.utils.logging.Throttle; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.time.TimeUtils; +import org.opentripplanner.utils.tostring.ToStringBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java b/application/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java index 22a4131f338..934243a1e76 100644 --- a/application/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java +++ b/application/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java @@ -10,9 +10,9 @@ import org.mobilitydata.gbfs.v2_3.geofencing_zones.GBFSGeofencingZones; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.framework.geometry.UnsupportedGeometryException; -import org.opentripplanner.framework.lang.StringUtils; import org.opentripplanner.service.vehiclerental.model.GeofencingZone; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsVehicleRentalDataSource.java b/application/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsVehicleRentalDataSource.java index c441efb974a..e3e86981bc8 100644 --- a/application/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsVehicleRentalDataSource.java +++ b/application/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsVehicleRentalDataSource.java @@ -17,12 +17,12 @@ import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.framework.io.OtpHttpClient; import org.opentripplanner.framework.io.OtpHttpClientFactory; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.service.vehiclerental.model.GeofencingZone; import org.opentripplanner.service.vehiclerental.model.RentalVehicleType; import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; import org.opentripplanner.service.vehiclerental.model.VehicleRentalSystem; import org.opentripplanner.updater.vehicle_rental.datasources.params.GbfsVehicleRentalDataSourceParameters; +import org.opentripplanner.utils.tostring.ToStringBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/test/java/org/opentripplanner/DateTimeHelper.java b/application/src/test/java/org/opentripplanner/DateTimeHelper.java index 6a058118d1b..2751af48daf 100644 --- a/application/src/test/java/org/opentripplanner/DateTimeHelper.java +++ b/application/src/test/java/org/opentripplanner/DateTimeHelper.java @@ -3,7 +3,7 @@ import java.time.LocalDate; import java.time.ZoneId; import java.time.ZonedDateTime; -import org.opentripplanner.framework.time.DateUtils; +import org.opentripplanner.utils.time.DateUtils; public class DateTimeHelper { diff --git a/application/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java b/application/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java index 406217e6604..3aad9075f73 100644 --- a/application/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java +++ b/application/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java @@ -38,7 +38,6 @@ import org.opentripplanner._support.time.ZoneIds; import org.opentripplanner.ext.fares.FaresToItineraryMapper; import org.opentripplanner.ext.fares.impl.DefaultFareService; -import org.opentripplanner.framework.collection.ListUtils; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; @@ -97,6 +96,7 @@ import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.transit.service.TransitEditorService; import org.opentripplanner.transit.service.TransitService; +import org.opentripplanner.utils.collection.ListUtils; class GraphQLIntegrationTest { diff --git a/application/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java b/application/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java index 593fb622adc..84743571cc3 100644 --- a/application/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java +++ b/application/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java @@ -5,8 +5,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.opentripplanner.framework.time.TimeUtils.time; import static org.opentripplanner.model.plan.TestItineraryBuilder.newItinerary; +import static org.opentripplanner.utils.time.TimeUtils.time; import graphql.ExecutionInput; import graphql.execution.ExecutionId; diff --git a/application/src/test/java/org/opentripplanner/apis/transmodel/model/plan/TripPlanTimePenaltyDtoTest.java b/application/src/test/java/org/opentripplanner/apis/transmodel/model/plan/TripPlanTimePenaltyDtoTest.java index 58054a3c778..0548bde0612 100644 --- a/application/src/test/java/org/opentripplanner/apis/transmodel/model/plan/TripPlanTimePenaltyDtoTest.java +++ b/application/src/test/java/org/opentripplanner/apis/transmodel/model/plan/TripPlanTimePenaltyDtoTest.java @@ -7,11 +7,11 @@ import org.junit.jupiter.api.Test; import org.opentripplanner.framework.model.Cost; import org.opentripplanner.framework.model.TimeAndCost; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.Place; import org.opentripplanner.model.plan.TestItineraryBuilder; import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; +import org.opentripplanner.utils.time.DurationUtils; class TripPlanTimePenaltyDtoTest { diff --git a/application/src/test/java/org/opentripplanner/apis/transmodel/support/ExecutionResultMapperTest.java b/application/src/test/java/org/opentripplanner/apis/transmodel/support/ExecutionResultMapperTest.java index b697adc9288..7cc373e5145 100644 --- a/application/src/test/java/org/opentripplanner/apis/transmodel/support/ExecutionResultMapperTest.java +++ b/application/src/test/java/org/opentripplanner/apis/transmodel/support/ExecutionResultMapperTest.java @@ -1,7 +1,7 @@ package org.opentripplanner.apis.transmodel.support; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.framework.lang.StringUtils.quoteReplace; +import static org.opentripplanner.utils.lang.StringUtils.quoteReplace; import graphql.ExecutionResult; import graphql.GraphQLError; diff --git a/application/src/test/java/org/opentripplanner/datastore/OtpDataStoreTest.java b/application/src/test/java/org/opentripplanner/datastore/OtpDataStoreTest.java index 1733a97777b..d7afc55a556 100644 --- a/application/src/test/java/org/opentripplanner/datastore/OtpDataStoreTest.java +++ b/application/src/test/java/org/opentripplanner/datastore/OtpDataStoreTest.java @@ -34,8 +34,8 @@ import org.opentripplanner.datastore.api.FileType; import org.opentripplanner.datastore.api.OtpDataStoreConfig; import org.opentripplanner.datastore.configure.DataStoreModule; -import org.opentripplanner.framework.lang.StringUtils; import org.opentripplanner.standalone.config.OtpConfigLoader; +import org.opentripplanner.utils.lang.StringUtils; public class OtpDataStoreTest { diff --git a/application/src/test/java/org/opentripplanner/framework/model/TimeAndCostTest.java b/application/src/test/java/org/opentripplanner/framework/model/TimeAndCostTest.java index 4660da480b2..5eca02043ef 100644 --- a/application/src/test/java/org/opentripplanner/framework/model/TimeAndCostTest.java +++ b/application/src/test/java/org/opentripplanner/framework/model/TimeAndCostTest.java @@ -6,7 +6,7 @@ import java.time.Duration; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.time.DurationUtils; +import org.opentripplanner.utils.time.DurationUtils; class TimeAndCostTest { diff --git a/application/src/test/java/org/opentripplanner/framework/token/TestTokenSchemaConstants.java b/application/src/test/java/org/opentripplanner/framework/token/TestTokenSchemaConstants.java index 09ac58a0d2d..94303a28e14 100644 --- a/application/src/test/java/org/opentripplanner/framework/token/TestTokenSchemaConstants.java +++ b/application/src/test/java/org/opentripplanner/framework/token/TestTokenSchemaConstants.java @@ -3,7 +3,7 @@ import java.time.Duration; import java.time.Instant; import java.time.Month; -import org.opentripplanner.framework.time.DurationUtils; +import org.opentripplanner.utils.time.DurationUtils; public interface TestTokenSchemaConstants { // Token field names. These are used to reference a specific field value in theString BYTE_FIELD = "AByte"; diff --git a/application/src/test/java/org/opentripplanner/generate/doc/BuildConfigurationDocTest.java b/application/src/test/java/org/opentripplanner/generate/doc/BuildConfigurationDocTest.java index 8189f18f20e..a44d013fd03 100644 --- a/application/src/test/java/org/opentripplanner/generate/doc/BuildConfigurationDocTest.java +++ b/application/src/test/java/org/opentripplanner/generate/doc/BuildConfigurationDocTest.java @@ -3,13 +3,13 @@ import static org.opentripplanner.framework.io.FileUtils.assertFileEquals; import static org.opentripplanner.framework.io.FileUtils.readFile; import static org.opentripplanner.framework.io.FileUtils.writeFile; -import static org.opentripplanner.framework.text.MarkdownFormatter.HEADER_3; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.TEMPLATE_PATH; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.USER_DOC_PATH; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceJsonExample; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceParametersDetails; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceParametersTable; import static org.opentripplanner.standalone.config.framework.json.JsonSupport.jsonNodeFromResource; +import static org.opentripplanner.utils.text.MarkdownFormatter.HEADER_3; import java.io.File; import org.junit.jupiter.api.Test; diff --git a/application/src/test/java/org/opentripplanner/generate/doc/EmissionsConfigurationDocTest.java b/application/src/test/java/org/opentripplanner/generate/doc/EmissionsConfigurationDocTest.java index 5010c78d527..94f0679cdfc 100644 --- a/application/src/test/java/org/opentripplanner/generate/doc/EmissionsConfigurationDocTest.java +++ b/application/src/test/java/org/opentripplanner/generate/doc/EmissionsConfigurationDocTest.java @@ -3,11 +3,11 @@ import static org.opentripplanner.framework.io.FileUtils.assertFileEquals; import static org.opentripplanner.framework.io.FileUtils.readFile; import static org.opentripplanner.framework.io.FileUtils.writeFile; -import static org.opentripplanner.framework.text.MarkdownFormatter.HEADER_4; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.TEMPLATE_PATH; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.USER_DOC_PATH; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceSection; import static org.opentripplanner.standalone.config.framework.json.JsonSupport.jsonNodeFromResource; +import static org.opentripplanner.utils.text.MarkdownFormatter.HEADER_4; import java.io.File; import org.junit.jupiter.api.Test; diff --git a/application/src/test/java/org/opentripplanner/generate/doc/FlexConfigurationDocTest.java b/application/src/test/java/org/opentripplanner/generate/doc/FlexConfigurationDocTest.java index e18090466b9..1958d200ca3 100644 --- a/application/src/test/java/org/opentripplanner/generate/doc/FlexConfigurationDocTest.java +++ b/application/src/test/java/org/opentripplanner/generate/doc/FlexConfigurationDocTest.java @@ -3,11 +3,11 @@ import static org.opentripplanner.framework.io.FileUtils.assertFileEquals; import static org.opentripplanner.framework.io.FileUtils.readFile; import static org.opentripplanner.framework.io.FileUtils.writeFile; -import static org.opentripplanner.framework.text.MarkdownFormatter.HEADER_4; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.TEMPLATE_PATH; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.USER_DOC_PATH; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceSection; import static org.opentripplanner.standalone.config.framework.json.JsonSupport.jsonNodeFromResource; +import static org.opentripplanner.utils.text.MarkdownFormatter.HEADER_4; import java.io.File; import org.junit.jupiter.api.Test; diff --git a/application/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java b/application/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java index 91c6f5c530a..e2844437ca5 100644 --- a/application/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java +++ b/application/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java @@ -18,13 +18,13 @@ import java.util.Set; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; -import org.opentripplanner.framework.text.Table; -import org.opentripplanner.framework.text.TableBuilder; import org.opentripplanner.generate.doc.framework.GeneratesDocumentation; import org.opentripplanner.osm.tagmapping.OsmTagMapper; import org.opentripplanner.osm.tagmapping.OsmTagMapperSource; import org.opentripplanner.osm.wayproperty.SafetyFeatures; import org.opentripplanner.osm.wayproperty.WayPropertySet; +import org.opentripplanner.utils.text.Table; +import org.opentripplanner.utils.text.TableBuilder; @GeneratesDocumentation public class OsmMapperDocTest { diff --git a/application/src/test/java/org/opentripplanner/generate/doc/RideHailingDocTest.java b/application/src/test/java/org/opentripplanner/generate/doc/RideHailingDocTest.java index 2d04e002413..fe959d9138d 100644 --- a/application/src/test/java/org/opentripplanner/generate/doc/RideHailingDocTest.java +++ b/application/src/test/java/org/opentripplanner/generate/doc/RideHailingDocTest.java @@ -4,11 +4,11 @@ import static org.opentripplanner.framework.io.FileUtils.assertFileEquals; import static org.opentripplanner.framework.io.FileUtils.readFile; import static org.opentripplanner.framework.io.FileUtils.writeFile; -import static org.opentripplanner.framework.text.MarkdownFormatter.HEADER_4; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.TEMPLATE_PATH; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.USER_DOC_PATH; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceSection; import static org.opentripplanner.standalone.config.framework.json.JsonSupport.jsonNodeFromResource; +import static org.opentripplanner.utils.text.MarkdownFormatter.HEADER_4; import java.io.File; import org.junit.jupiter.api.Test; diff --git a/application/src/test/java/org/opentripplanner/generate/doc/RouteRequestDocTest.java b/application/src/test/java/org/opentripplanner/generate/doc/RouteRequestDocTest.java index b4725c5e2a1..c51660a9a60 100644 --- a/application/src/test/java/org/opentripplanner/generate/doc/RouteRequestDocTest.java +++ b/application/src/test/java/org/opentripplanner/generate/doc/RouteRequestDocTest.java @@ -4,13 +4,13 @@ import static org.opentripplanner.framework.io.FileUtils.assertFileEquals; import static org.opentripplanner.framework.io.FileUtils.readFile; import static org.opentripplanner.framework.io.FileUtils.writeFile; -import static org.opentripplanner.framework.text.MarkdownFormatter.HEADER_3; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.TEMPLATE_PATH; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.USER_DOC_PATH; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceJsonExample; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceParametersDetails; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceParametersTable; import static org.opentripplanner.standalone.config.framework.json.JsonSupport.jsonNodeFromResource; +import static org.opentripplanner.utils.text.MarkdownFormatter.HEADER_3; import java.io.File; import org.junit.jupiter.api.Test; diff --git a/application/src/test/java/org/opentripplanner/generate/doc/RouterConfigurationDocTest.java b/application/src/test/java/org/opentripplanner/generate/doc/RouterConfigurationDocTest.java index 77490c506fd..cdb10e28c6a 100644 --- a/application/src/test/java/org/opentripplanner/generate/doc/RouterConfigurationDocTest.java +++ b/application/src/test/java/org/opentripplanner/generate/doc/RouterConfigurationDocTest.java @@ -4,13 +4,13 @@ import static org.opentripplanner.framework.io.FileUtils.assertFileEquals; import static org.opentripplanner.framework.io.FileUtils.readFile; import static org.opentripplanner.framework.io.FileUtils.writeFile; -import static org.opentripplanner.framework.text.MarkdownFormatter.HEADER_3; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.TEMPLATE_PATH; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.USER_DOC_PATH; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceJsonExample; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceParametersDetails; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceParametersTable; import static org.opentripplanner.standalone.config.framework.json.JsonSupport.jsonNodeFromResource; +import static org.opentripplanner.utils.text.MarkdownFormatter.HEADER_3; import java.io.File; import org.junit.jupiter.api.Test; diff --git a/application/src/test/java/org/opentripplanner/generate/doc/SiriAzureConfigDocTest.java b/application/src/test/java/org/opentripplanner/generate/doc/SiriAzureConfigDocTest.java index fcf93770f38..003b29ebcbb 100644 --- a/application/src/test/java/org/opentripplanner/generate/doc/SiriAzureConfigDocTest.java +++ b/application/src/test/java/org/opentripplanner/generate/doc/SiriAzureConfigDocTest.java @@ -4,11 +4,11 @@ import static org.opentripplanner.framework.io.FileUtils.assertFileEquals; import static org.opentripplanner.framework.io.FileUtils.readFile; import static org.opentripplanner.framework.io.FileUtils.writeFile; -import static org.opentripplanner.framework.text.MarkdownFormatter.HEADER_4; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.TEMPLATE_PATH; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.USER_DOC_PATH; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceSection; import static org.opentripplanner.standalone.config.framework.json.JsonSupport.jsonNodeFromResource; +import static org.opentripplanner.utils.text.MarkdownFormatter.HEADER_4; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.File; diff --git a/application/src/test/java/org/opentripplanner/generate/doc/SiriConfigDocTest.java b/application/src/test/java/org/opentripplanner/generate/doc/SiriConfigDocTest.java index 71df3027c7d..b53c5370b53 100644 --- a/application/src/test/java/org/opentripplanner/generate/doc/SiriConfigDocTest.java +++ b/application/src/test/java/org/opentripplanner/generate/doc/SiriConfigDocTest.java @@ -4,11 +4,11 @@ import static org.opentripplanner.framework.io.FileUtils.assertFileEquals; import static org.opentripplanner.framework.io.FileUtils.readFile; import static org.opentripplanner.framework.io.FileUtils.writeFile; -import static org.opentripplanner.framework.text.MarkdownFormatter.HEADER_4; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.TEMPLATE_PATH; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.USER_DOC_PATH; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceSection; import static org.opentripplanner.standalone.config.framework.json.JsonSupport.jsonNodeFromResource; +import static org.opentripplanner.utils.text.MarkdownFormatter.HEADER_4; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.File; diff --git a/application/src/test/java/org/opentripplanner/generate/doc/SiriGooglePubSubConfigDocTest.java b/application/src/test/java/org/opentripplanner/generate/doc/SiriGooglePubSubConfigDocTest.java index ce414b298d0..c6daed2e4b0 100644 --- a/application/src/test/java/org/opentripplanner/generate/doc/SiriGooglePubSubConfigDocTest.java +++ b/application/src/test/java/org/opentripplanner/generate/doc/SiriGooglePubSubConfigDocTest.java @@ -4,11 +4,11 @@ import static org.opentripplanner.framework.io.FileUtils.assertFileEquals; import static org.opentripplanner.framework.io.FileUtils.readFile; import static org.opentripplanner.framework.io.FileUtils.writeFile; -import static org.opentripplanner.framework.text.MarkdownFormatter.HEADER_4; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.TEMPLATE_PATH; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.USER_DOC_PATH; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceSection; import static org.opentripplanner.standalone.config.framework.json.JsonSupport.jsonNodeFromResource; +import static org.opentripplanner.utils.text.MarkdownFormatter.HEADER_4; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.File; diff --git a/application/src/test/java/org/opentripplanner/generate/doc/UpdaterConfigDocTest.java b/application/src/test/java/org/opentripplanner/generate/doc/UpdaterConfigDocTest.java index 7a3f2969c4d..234d4c68b33 100644 --- a/application/src/test/java/org/opentripplanner/generate/doc/UpdaterConfigDocTest.java +++ b/application/src/test/java/org/opentripplanner/generate/doc/UpdaterConfigDocTest.java @@ -4,11 +4,11 @@ import static org.opentripplanner.framework.io.FileUtils.assertFileEquals; import static org.opentripplanner.framework.io.FileUtils.readFile; import static org.opentripplanner.framework.io.FileUtils.writeFile; -import static org.opentripplanner.framework.text.MarkdownFormatter.HEADER_4; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.TEMPLATE_PATH; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.USER_DOC_PATH; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceSection; import static org.opentripplanner.standalone.config.framework.json.JsonSupport.jsonNodeFromResource; +import static org.opentripplanner.utils.text.MarkdownFormatter.HEADER_4; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.File; diff --git a/application/src/test/java/org/opentripplanner/generate/doc/VehicleParkingDocTest.java b/application/src/test/java/org/opentripplanner/generate/doc/VehicleParkingDocTest.java index caffafdf72b..cca0d45d0f5 100644 --- a/application/src/test/java/org/opentripplanner/generate/doc/VehicleParkingDocTest.java +++ b/application/src/test/java/org/opentripplanner/generate/doc/VehicleParkingDocTest.java @@ -4,11 +4,11 @@ import static org.opentripplanner.framework.io.FileUtils.assertFileEquals; import static org.opentripplanner.framework.io.FileUtils.readFile; import static org.opentripplanner.framework.io.FileUtils.writeFile; -import static org.opentripplanner.framework.text.MarkdownFormatter.HEADER_4; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.TEMPLATE_PATH; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.USER_DOC_PATH; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceSection; import static org.opentripplanner.standalone.config.framework.json.JsonSupport.jsonNodeFromResource; +import static org.opentripplanner.utils.text.MarkdownFormatter.HEADER_4; import java.io.File; import org.junit.jupiter.api.Test; diff --git a/application/src/test/java/org/opentripplanner/generate/doc/framework/AbstractTable.java b/application/src/test/java/org/opentripplanner/generate/doc/framework/AbstractTable.java index 1805b8e6dde..0af3cc938cf 100644 --- a/application/src/test/java/org/opentripplanner/generate/doc/framework/AbstractTable.java +++ b/application/src/test/java/org/opentripplanner/generate/doc/framework/AbstractTable.java @@ -1,18 +1,18 @@ package org.opentripplanner.generate.doc.framework; -import static org.opentripplanner.framework.text.MarkdownFormatter.code; -import static org.opentripplanner.framework.text.MarkdownFormatter.escapeInTable; import static org.opentripplanner.generate.doc.framework.NodeAdapterHelper.anchor; import static org.opentripplanner.standalone.config.framework.json.ConfigType.ENUM_MAP; import static org.opentripplanner.standalone.config.framework.json.ConfigType.ENUM_SET; +import static org.opentripplanner.utils.text.MarkdownFormatter.code; +import static org.opentripplanner.utils.text.MarkdownFormatter.escapeInTable; import java.util.List; -import org.opentripplanner.framework.text.MarkdownFormatter; -import org.opentripplanner.framework.text.Table; -import org.opentripplanner.framework.text.TableBuilder; import org.opentripplanner.standalone.config.framework.json.ConfigType; import org.opentripplanner.standalone.config.framework.json.NodeAdapter; import org.opentripplanner.standalone.config.framework.json.NodeInfo; +import org.opentripplanner.utils.text.MarkdownFormatter; +import org.opentripplanner.utils.text.Table; +import org.opentripplanner.utils.text.TableBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/test/java/org/opentripplanner/generate/doc/framework/DocBuilder.java b/application/src/test/java/org/opentripplanner/generate/doc/framework/DocBuilder.java index 16579075077..ea62f3a052c 100644 --- a/application/src/test/java/org/opentripplanner/generate/doc/framework/DocBuilder.java +++ b/application/src/test/java/org/opentripplanner/generate/doc/framework/DocBuilder.java @@ -1,12 +1,12 @@ package org.opentripplanner.generate.doc.framework; -import static org.opentripplanner.framework.text.MarkdownFormatter.NEW_LINE; +import static org.opentripplanner.utils.text.MarkdownFormatter.NEW_LINE; import com.fasterxml.jackson.databind.JsonNode; import java.util.List; import java.util.stream.Collectors; -import org.opentripplanner.framework.text.MarkdownFormatter; import org.opentripplanner.standalone.config.framework.json.EnumMapper; +import org.opentripplanner.utils.text.MarkdownFormatter; /** * Builder for creating a new document diff --git a/application/src/test/java/org/opentripplanner/generate/doc/framework/DocBuilderTest.java b/application/src/test/java/org/opentripplanner/generate/doc/framework/DocBuilderTest.java index 8885a400af8..1a9796e9aac 100644 --- a/application/src/test/java/org/opentripplanner/generate/doc/framework/DocBuilderTest.java +++ b/application/src/test/java/org/opentripplanner/generate/doc/framework/DocBuilderTest.java @@ -1,7 +1,7 @@ package org.opentripplanner.generate.doc.framework; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.framework.text.MarkdownFormatter.HEADER_1; +import static org.opentripplanner.utils.text.MarkdownFormatter.HEADER_1; import java.util.Arrays; import org.junit.jupiter.api.Test; diff --git a/application/src/test/java/org/opentripplanner/generate/doc/framework/ParameterDetailsList.java b/application/src/test/java/org/opentripplanner/generate/doc/framework/ParameterDetailsList.java index 6593c7c0359..ea165d3dc16 100644 --- a/application/src/test/java/org/opentripplanner/generate/doc/framework/ParameterDetailsList.java +++ b/application/src/test/java/org/opentripplanner/generate/doc/framework/ParameterDetailsList.java @@ -5,11 +5,11 @@ import static org.opentripplanner.standalone.config.framework.json.ConfigType.ENUM_SET; import java.util.EnumSet; -import org.opentripplanner.framework.text.MarkdownFormatter; import org.opentripplanner.standalone.config.framework.json.ConfigType; import org.opentripplanner.standalone.config.framework.json.EnumMapper; import org.opentripplanner.standalone.config.framework.json.NodeAdapter; import org.opentripplanner.standalone.config.framework.json.NodeInfo; +import org.opentripplanner.utils.text.MarkdownFormatter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/test/java/org/opentripplanner/generate/doc/framework/ParameterSummaryTable.java b/application/src/test/java/org/opentripplanner/generate/doc/framework/ParameterSummaryTable.java index f95b76b8a0f..8712c0fe47d 100644 --- a/application/src/test/java/org/opentripplanner/generate/doc/framework/ParameterSummaryTable.java +++ b/application/src/test/java/org/opentripplanner/generate/doc/framework/ParameterSummaryTable.java @@ -1,14 +1,14 @@ package org.opentripplanner.generate.doc.framework; -import static org.opentripplanner.framework.text.Table.Align.Center; -import static org.opentripplanner.framework.text.Table.Align.Left; +import static org.opentripplanner.utils.text.Table.Align.Center; +import static org.opentripplanner.utils.text.Table.Align.Left; import java.util.List; -import org.opentripplanner.framework.text.MarkdownFormatter; -import org.opentripplanner.framework.text.Table; -import org.opentripplanner.framework.text.TableBuilder; import org.opentripplanner.standalone.config.framework.json.NodeAdapter; import org.opentripplanner.standalone.config.framework.json.NodeInfo; +import org.opentripplanner.utils.text.MarkdownFormatter; +import org.opentripplanner.utils.text.Table; +import org.opentripplanner.utils.text.TableBuilder; public class ParameterSummaryTable extends AbstractTable { diff --git a/application/src/test/java/org/opentripplanner/generate/doc/support/ConfigTypeTable.java b/application/src/test/java/org/opentripplanner/generate/doc/support/ConfigTypeTable.java index 85c9476549c..e85eee9eedb 100644 --- a/application/src/test/java/org/opentripplanner/generate/doc/support/ConfigTypeTable.java +++ b/application/src/test/java/org/opentripplanner/generate/doc/support/ConfigTypeTable.java @@ -1,8 +1,8 @@ package org.opentripplanner.generate.doc.support; -import org.opentripplanner.framework.text.MarkdownFormatter; -import org.opentripplanner.framework.text.Table; import org.opentripplanner.standalone.config.framework.json.ConfigType; +import org.opentripplanner.utils.text.MarkdownFormatter; +import org.opentripplanner.utils.text.Table; @SuppressWarnings("NewClassNamingConvention") public class ConfigTypeTable { diff --git a/application/src/test/java/org/opentripplanner/generate/doc/support/OTPFeatureTable.java b/application/src/test/java/org/opentripplanner/generate/doc/support/OTPFeatureTable.java index 22966028192..ccdc1337b87 100644 --- a/application/src/test/java/org/opentripplanner/generate/doc/support/OTPFeatureTable.java +++ b/application/src/test/java/org/opentripplanner/generate/doc/support/OTPFeatureTable.java @@ -1,12 +1,12 @@ package org.opentripplanner.generate.doc.support; -import static org.opentripplanner.framework.text.MarkdownFormatter.checkMark; -import static org.opentripplanner.framework.text.Table.Align.Center; -import static org.opentripplanner.framework.text.Table.Align.Left; +import static org.opentripplanner.utils.text.MarkdownFormatter.checkMark; +import static org.opentripplanner.utils.text.Table.Align.Center; +import static org.opentripplanner.utils.text.Table.Align.Left; import org.opentripplanner.framework.application.OTPFeature; -import org.opentripplanner.framework.text.MarkdownFormatter; -import org.opentripplanner.framework.text.Table; +import org.opentripplanner.utils.text.MarkdownFormatter; +import org.opentripplanner.utils.text.Table; @SuppressWarnings("NewClassNamingConvention") public class OTPFeatureTable { diff --git a/application/src/test/java/org/opentripplanner/graph_builder/issue/api/DataImportIssueSummaryTest.java b/application/src/test/java/org/opentripplanner/graph_builder/issue/api/DataImportIssueSummaryTest.java index 6524d53547e..989e2ca2016 100644 --- a/application/src/test/java/org/opentripplanner/graph_builder/issue/api/DataImportIssueSummaryTest.java +++ b/application/src/test/java/org/opentripplanner/graph_builder/issue/api/DataImportIssueSummaryTest.java @@ -5,7 +5,7 @@ import java.util.List; import java.util.Map; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.collection.ListUtils; +import org.opentripplanner.utils.collection.ListUtils; class DataImportIssueSummaryTest { diff --git a/application/src/test/java/org/opentripplanner/graph_builder/module/DirectTransferGeneratorTest.java b/application/src/test/java/org/opentripplanner/graph_builder/module/DirectTransferGeneratorTest.java index bb3144aa904..8a17e5258d8 100644 --- a/application/src/test/java/org/opentripplanner/graph_builder/module/DirectTransferGeneratorTest.java +++ b/application/src/test/java/org/opentripplanner/graph_builder/module/DirectTransferGeneratorTest.java @@ -16,7 +16,6 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.function.Executable; import org.opentripplanner.TestOtpModel; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.model.PathTransfer; import org.opentripplanner.routing.algorithm.GraphRoutingTest; @@ -31,6 +30,7 @@ import org.opentripplanner.transit.model.network.StopPattern; import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.site.StopLocation; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * This creates a graph with trip patterns diff --git a/application/src/test/java/org/opentripplanner/gtfs/mapping/ServiceCalendarDateMapperTest.java b/application/src/test/java/org/opentripplanner/gtfs/mapping/ServiceCalendarDateMapperTest.java index 320ef4ba555..f363b1c1cb1 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/mapping/ServiceCalendarDateMapperTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/mapping/ServiceCalendarDateMapperTest.java @@ -11,7 +11,7 @@ import org.onebusaway.gtfs.model.AgencyAndId; import org.onebusaway.gtfs.model.ServiceCalendarDate; import org.onebusaway.gtfs.model.calendar.ServiceDate; -import org.opentripplanner.framework.time.ServiceDateUtils; +import org.opentripplanner.utils.time.ServiceDateUtils; public class ServiceCalendarDateMapperTest { diff --git a/application/src/test/java/org/opentripplanner/gtfs/mapping/ServiceCalendarMapperTest.java b/application/src/test/java/org/opentripplanner/gtfs/mapping/ServiceCalendarMapperTest.java index 41d3c4c64cc..8a9265376f3 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/mapping/ServiceCalendarMapperTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/mapping/ServiceCalendarMapperTest.java @@ -12,7 +12,7 @@ import org.onebusaway.gtfs.model.AgencyAndId; import org.onebusaway.gtfs.model.ServiceCalendar; import org.onebusaway.gtfs.model.calendar.ServiceDate; -import org.opentripplanner.framework.time.ServiceDateUtils; +import org.opentripplanner.utils.time.ServiceDateUtils; public class ServiceCalendarMapperTest { diff --git a/application/src/test/java/org/opentripplanner/model/calendar/impl/CalendarServiceDataFactoryImplTest.java b/application/src/test/java/org/opentripplanner/model/calendar/impl/CalendarServiceDataFactoryImplTest.java index 9516ce03a32..1a322fde916 100644 --- a/application/src/test/java/org/opentripplanner/model/calendar/impl/CalendarServiceDataFactoryImplTest.java +++ b/application/src/test/java/org/opentripplanner/model/calendar/impl/CalendarServiceDataFactoryImplTest.java @@ -19,7 +19,6 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.opentripplanner.ConstantsForTests; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.gtfs.GtfsContext; import org.opentripplanner.gtfs.GtfsContextBuilder; @@ -30,6 +29,7 @@ import org.opentripplanner.model.impl.OtpTransitServiceBuilder; import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.time.ServiceDateUtils; /** * @author Thomas Gran (Capra) - tgr@capraconsulting.no (08.11.2017) diff --git a/application/src/test/java/org/opentripplanner/model/plan/PlanTestConstants.java b/application/src/test/java/org/opentripplanner/model/plan/PlanTestConstants.java index e5ec76af8af..adebe4f111c 100644 --- a/application/src/test/java/org/opentripplanner/model/plan/PlanTestConstants.java +++ b/application/src/test/java/org/opentripplanner/model/plan/PlanTestConstants.java @@ -1,9 +1,9 @@ package org.opentripplanner.model.plan; -import static org.opentripplanner.framework.time.TimeUtils.time; +import static org.opentripplanner.utils.time.TimeUtils.time; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; +import org.opentripplanner.utils.time.DurationUtils; public interface PlanTestConstants { int NOT_SET = -999_999; diff --git a/application/src/test/java/org/opentripplanner/model/plan/TestItineraryBuilder.java b/application/src/test/java/org/opentripplanner/model/plan/TestItineraryBuilder.java index d23759907c2..33eeae0a553 100644 --- a/application/src/test/java/org/opentripplanner/model/plan/TestItineraryBuilder.java +++ b/application/src/test/java/org/opentripplanner/model/plan/TestItineraryBuilder.java @@ -22,8 +22,6 @@ import org.opentripplanner.ext.ridehailing.model.RideHailingLeg; import org.opentripplanner.ext.ridehailing.model.RideHailingProvider; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.lang.IntUtils; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.model.StopTime; import org.opentripplanner.model.transfer.ConstrainedTransfer; import org.opentripplanner.model.transfer.TransferConstraint; @@ -41,6 +39,8 @@ import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.model.timetable.TripTimes; import org.opentripplanner.transit.model.timetable.TripTimesFactory; +import org.opentripplanner.utils.lang.IntUtils; +import org.opentripplanner.utils.time.TimeUtils; /** * This is a helper class to allow unit-testing on Itineraries. The builder does not necessarily diff --git a/application/src/test/java/org/opentripplanner/model/plan/paging/PagingSearchWindowAdjusterTest.java b/application/src/test/java/org/opentripplanner/model/plan/paging/PagingSearchWindowAdjusterTest.java index 22dcd49e63f..784fa4b5f99 100644 --- a/application/src/test/java/org/opentripplanner/model/plan/paging/PagingSearchWindowAdjusterTest.java +++ b/application/src/test/java/org/opentripplanner/model/plan/paging/PagingSearchWindowAdjusterTest.java @@ -1,7 +1,7 @@ package org.opentripplanner.model.plan.paging; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.framework.time.DurationUtils.duration; +import static org.opentripplanner.utils.time.DurationUtils.duration; import java.time.Duration; import java.time.Instant; diff --git a/application/src/test/java/org/opentripplanner/model/plan/paging/cursor/PageCursorFactoryTest.java b/application/src/test/java/org/opentripplanner/model/plan/paging/cursor/PageCursorFactoryTest.java index 7bf54d05bc2..910620872f3 100644 --- a/application/src/test/java/org/opentripplanner/model/plan/paging/cursor/PageCursorFactoryTest.java +++ b/application/src/test/java/org/opentripplanner/model/plan/paging/cursor/PageCursorFactoryTest.java @@ -10,10 +10,10 @@ import java.time.Duration; import java.time.Instant; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.ItinerarySortKey; import org.opentripplanner.model.plan.PlanTestConstants; +import org.opentripplanner.utils.time.TimeUtils; @SuppressWarnings("ConstantConditions") class PageCursorFactoryTest implements PlanTestConstants { diff --git a/application/src/test/java/org/opentripplanner/model/plan/paging/cursor/PageCursorSerializerTest.java b/application/src/test/java/org/opentripplanner/model/plan/paging/cursor/PageCursorSerializerTest.java index 20c0230f309..e60c2aa1a5b 100644 --- a/application/src/test/java/org/opentripplanner/model/plan/paging/cursor/PageCursorSerializerTest.java +++ b/application/src/test/java/org/opentripplanner/model/plan/paging/cursor/PageCursorSerializerTest.java @@ -8,8 +8,8 @@ import java.time.Duration; import java.time.Instant; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.model.plan.ItinerarySortKey; +import org.opentripplanner.utils.time.DurationUtils; class PageCursorSerializerTest { diff --git a/application/src/test/java/org/opentripplanner/model/plan/paging/cursor/PageCursorTest.java b/application/src/test/java/org/opentripplanner/model/plan/paging/cursor/PageCursorTest.java index f9896c66d6a..bd6037ef4a1 100644 --- a/application/src/test/java/org/opentripplanner/model/plan/paging/cursor/PageCursorTest.java +++ b/application/src/test/java/org/opentripplanner/model/plan/paging/cursor/PageCursorTest.java @@ -2,12 +2,12 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; -import static org.opentripplanner.framework.collection.ListSection.HEAD; -import static org.opentripplanner.framework.collection.ListSection.TAIL; import static org.opentripplanner.model.plan.SortOrder.STREET_AND_ARRIVAL_TIME; import static org.opentripplanner.model.plan.SortOrder.STREET_AND_DEPARTURE_TIME; import static org.opentripplanner.model.plan.paging.cursor.PageType.NEXT_PAGE; import static org.opentripplanner.model.plan.paging.cursor.PageType.PREVIOUS_PAGE; +import static org.opentripplanner.utils.collection.ListSection.HEAD; +import static org.opentripplanner.utils.collection.ListSection.TAIL; import java.time.Duration; import java.time.Instant; @@ -21,13 +21,13 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner._support.time.ZoneIds; -import org.opentripplanner.framework.collection.ListSection; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.Place; import org.opentripplanner.model.plan.PlanTestConstants; import org.opentripplanner.model.plan.SortOrder; import org.opentripplanner.model.plan.TestItineraryBuilder; import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; +import org.opentripplanner.utils.collection.ListSection; class PageCursorTest implements PlanTestConstants { diff --git a/application/src/test/java/org/opentripplanner/model/transfer/TransferConstraintTest.java b/application/src/test/java/org/opentripplanner/model/transfer/TransferConstraintTest.java index 100e3137f49..47ff414790e 100644 --- a/application/src/test/java/org/opentripplanner/model/transfer/TransferConstraintTest.java +++ b/application/src/test/java/org/opentripplanner/model/transfer/TransferConstraintTest.java @@ -10,7 +10,7 @@ import java.util.function.IntSupplier; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.time.DurationUtils; +import org.opentripplanner.utils.time.DurationUtils; public class TransferConstraintTest { diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/RaptorTestConstants.java b/application/src/test/java/org/opentripplanner/raptor/_data/RaptorTestConstants.java index 78489508dc4..0b5e47c977a 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/RaptorTestConstants.java +++ b/application/src/test/java/org/opentripplanner/raptor/_data/RaptorTestConstants.java @@ -1,7 +1,7 @@ package org.opentripplanner.raptor._data; -import static org.opentripplanner.framework.time.DurationUtils.durationInSeconds; -import static org.opentripplanner.framework.time.TimeUtils.hm2time; +import static org.opentripplanner.utils.time.DurationUtils.durationInSeconds; +import static org.opentripplanner.utils.time.TimeUtils.hm2time; import org.opentripplanner.raptor.spi.DefaultSlackProvider; import org.opentripplanner.raptor.spi.RaptorSlackProvider; diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilderTestRaptor.java b/application/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilderTestRaptor.java index de40c29d583..9b37057cdc6 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilderTestRaptor.java +++ b/application/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilderTestRaptor.java @@ -2,13 +2,12 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.opentripplanner.framework.time.DurationUtils.durationInSeconds; -import static org.opentripplanner.framework.time.TimeUtils.time; import static org.opentripplanner.model.transfer.TransferConstraint.REGULAR_TRANSFER; import static org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase.C1_CALCULATOR; import static org.opentripplanner.raptor._data.transit.TestAccessEgress.walk; +import static org.opentripplanner.utils.time.DurationUtils.durationInSeconds; +import static org.opentripplanner.utils.time.TimeUtils.time; -import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.opentripplanner.raptor._data.RaptorTestConstants; import org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase; diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java b/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java index 4a92264e87c..88aa857f76a 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java +++ b/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java @@ -1,8 +1,6 @@ package org.opentripplanner.raptor._data.stoparrival; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.framework.time.DurationUtils.durationToStr; -import static org.opentripplanner.framework.time.TimeUtils.time; import static org.opentripplanner.model.transfer.TransferConstraint.REGULAR_TRANSFER; import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.access; import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.bus; @@ -11,6 +9,8 @@ import static org.opentripplanner.raptor._data.transit.TestAccessEgress.flexWithOnBoard; import static org.opentripplanner.raptor._data.transit.TestTripPattern.pattern; import static org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter.toRaptorCost; +import static org.opentripplanner.utils.time.DurationUtils.durationToStr; +import static org.opentripplanner.utils.time.TimeUtils.time; import java.util.Arrays; import java.util.List; diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Egress.java b/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Egress.java index a244acdf720..302de528d9f 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Egress.java +++ b/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Egress.java @@ -1,11 +1,11 @@ package org.opentripplanner.raptor._data.stoparrival; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.model.PathLegType; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.api.view.ArrivalView; import org.opentripplanner.raptor.api.view.EgressPathView; +import org.opentripplanner.utils.time.TimeUtils; public class Egress extends AbstractStopArrival { diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java b/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java index 1e694e3d771..51639ecc72d 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java +++ b/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java @@ -1,15 +1,14 @@ package org.opentripplanner.raptor._data.stoparrival; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.framework.time.DurationUtils.durationInSeconds; -import static org.opentripplanner.framework.time.TimeUtils.time; import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.access; import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.bus; import static org.opentripplanner.raptor.api.model.RaptorValueFormatter.formatC1; import static org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter.toRaptorCost; +import static org.opentripplanner.utils.time.DurationUtils.durationInSeconds; +import static org.opentripplanner.utils.time.TimeUtils.time; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.raptor._data.RaptorTestConstants; import org.opentripplanner.raptor._data.transit.TestAccessEgress; import org.opentripplanner.raptor._data.transit.TestTransfer; @@ -24,6 +23,7 @@ import org.opentripplanner.raptor.spi.RaptorSlackProvider; import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.DefaultCostCalculator; import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter; +import org.opentripplanner.utils.time.TimeUtils; /** * This test case construct two Raptor paths for forward and reverse search, with and without diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestAccessEgress.java b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestAccessEgress.java index 8047ec0d4cb..c58240126de 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestAccessEgress.java +++ b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestAccessEgress.java @@ -9,9 +9,9 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.api.model.RaptorConstants; +import org.opentripplanner.utils.time.TimeUtils; /** * Simple implementation for {@link RaptorAccessEgress} for use in unit-tests. diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedBoardingSearch.java b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedBoardingSearch.java index 7812b9d2fce..5e8980dc50a 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedBoardingSearch.java +++ b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedBoardingSearch.java @@ -9,11 +9,11 @@ import java.util.function.BiPredicate; import java.util.stream.Collectors; import javax.annotation.Nullable; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.transfer.TransferConstraint; import org.opentripplanner.raptor.spi.RaptorBoardOrAlightEvent; import org.opentripplanner.raptor.spi.RaptorConstrainedBoardingSearch; import org.opentripplanner.raptor.spi.RaptorTimeTable; +import org.opentripplanner.utils.tostring.ToStringBuilder; public class TestConstrainedBoardingSearch implements RaptorConstrainedBoardingSearch { diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransfer.java b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransfer.java index 66233e4eb74..643585f8c5b 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransfer.java +++ b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransfer.java @@ -1,12 +1,12 @@ package org.opentripplanner.raptor._data.transit; import javax.annotation.Nullable; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.transfer.TransferConstraint; import org.opentripplanner.raptor.api.model.RaptorConstrainedTransfer; import org.opentripplanner.raptor.api.model.RaptorTransferConstraint; import org.opentripplanner.raptor.spi.RaptorBoardOrAlightEvent; import org.opentripplanner.routing.algorithm.raptoradapter.transit.constrainedtransfer.ConstrainedTransferBoarding; +import org.opentripplanner.utils.tostring.ToStringBuilder; class TestConstrainedTransfer implements RaptorConstrainedTransfer { diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestRoute.java b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestRoute.java index c3029b9ebfd..6a606876e0e 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestRoute.java +++ b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestRoute.java @@ -3,7 +3,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.transfer.TransferConstraint; import org.opentripplanner.raptor.api.model.SearchDirection; import org.opentripplanner.raptor.spi.RaptorConstrainedBoardingSearch; @@ -12,6 +11,7 @@ import org.opentripplanner.raptor.spi.RaptorTripScheduleSearch; import org.opentripplanner.routing.algorithm.raptoradapter.api.DefaultTripPattern; import org.opentripplanner.routing.algorithm.raptoradapter.transit.request.TripScheduleSearchFactory; +import org.opentripplanner.utils.tostring.ToStringBuilder; public class TestRoute implements RaptorRoute, RaptorTimeTable { diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferPoint.java b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferPoint.java index d3a0e4c3d4e..ef2271e51ae 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferPoint.java +++ b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferPoint.java @@ -1,7 +1,7 @@ package org.opentripplanner.raptor._data.transit; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.transfer.TransferPoint; +import org.opentripplanner.utils.tostring.ToStringBuilder; public class TestTransferPoint implements TransferPoint { diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripPattern.java b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripPattern.java index 63dcbeb5863..811c17cc568 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripPattern.java +++ b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripPattern.java @@ -1,8 +1,8 @@ package org.opentripplanner.raptor._data.transit; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.algorithm.raptoradapter.api.DefaultTripPattern; import org.opentripplanner.transit.model.network.Route; +import org.opentripplanner.utils.tostring.ToStringBuilder; public class TestTripPattern implements DefaultTripPattern { diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSchedule.java b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSchedule.java index ab8d26406ee..75062d9a61e 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSchedule.java +++ b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSchedule.java @@ -5,15 +5,15 @@ import java.time.LocalDate; import java.util.Arrays; import java.util.stream.IntStream; -import org.opentripplanner.framework.lang.IntUtils; -import org.opentripplanner.framework.time.TimeUtils; -import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.routing.algorithm.raptoradapter.api.DefaultTripPattern; import org.opentripplanner.routing.algorithm.raptoradapter.transit.TripSchedule; import org.opentripplanner.transit.model.basic.Accessibility; import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.timetable.TripTimes; +import org.opentripplanner.utils.lang.IntUtils; +import org.opentripplanner.utils.time.TimeUtils; +import org.opentripplanner.utils.tostring.ToStringBuilder; /** * An implementation of the {@link RaptorTripSchedule} for unit-testing. diff --git a/application/src/test/java/org/opentripplanner/raptor/api/path/PathTest.java b/application/src/test/java/org/opentripplanner/raptor/api/path/PathTest.java index de71574a952..7ea3c9805f5 100644 --- a/application/src/test/java/org/opentripplanner/raptor/api/path/PathTest.java +++ b/application/src/test/java/org/opentripplanner/raptor/api/path/PathTest.java @@ -3,8 +3,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; -import static org.opentripplanner.framework.time.TimeUtils.time; -import static org.opentripplanner.framework.time.TimeUtils.timeToStrCompact; import static org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase.ACCESS_START; import static org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase.BASIC_PATH_AS_DETAILED_STRING; import static org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase.BASIC_PATH_AS_STRING; @@ -13,6 +11,8 @@ import static org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase.TOTAL_C1; import static org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase.basicTripStops; import static org.opentripplanner.raptor._data.transit.TestTripPattern.pattern; +import static org.opentripplanner.utils.time.TimeUtils.time; +import static org.opentripplanner.utils.time.TimeUtils.timeToStrCompact; import java.util.List; import java.util.stream.Collectors; diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/B01_AccessTest.java b/application/src/test/java/org/opentripplanner/raptor/moduletests/B01_AccessTest.java index 37814d6c6dc..76583a38649 100644 --- a/application/src/test/java/org/opentripplanner/raptor/moduletests/B01_AccessTest.java +++ b/application/src/test/java/org/opentripplanner/raptor/moduletests/B01_AccessTest.java @@ -12,7 +12,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.raptor.RaptorService; import org.opentripplanner.raptor._data.RaptorTestConstants; import org.opentripplanner.raptor._data.transit.TestAccessEgress; @@ -22,6 +21,7 @@ import org.opentripplanner.raptor.configure.RaptorConfig; import org.opentripplanner.raptor.moduletests.support.ModuleTestDebugLogging; import org.opentripplanner.raptor.moduletests.support.RaptorModuleTestCase; +import org.opentripplanner.utils.time.DurationUtils; /** * FEATURE UNDER TEST diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/F02_EgressWithRidesTest.java b/application/src/test/java/org/opentripplanner/raptor/moduletests/F02_EgressWithRidesTest.java index 87b2237fac8..1b5164c79a4 100644 --- a/application/src/test/java/org/opentripplanner/raptor/moduletests/F02_EgressWithRidesTest.java +++ b/application/src/test/java/org/opentripplanner/raptor/moduletests/F02_EgressWithRidesTest.java @@ -17,7 +17,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.raptor.RaptorService; import org.opentripplanner.raptor._data.RaptorTestConstants; import org.opentripplanner.raptor._data.transit.TestTransitData; @@ -27,6 +26,7 @@ import org.opentripplanner.raptor.moduletests.support.ModuleTestDebugLogging; import org.opentripplanner.raptor.moduletests.support.RaptorModuleTestCase; import org.opentripplanner.raptor.spi.DefaultSlackProvider; +import org.opentripplanner.utils.time.DurationUtils; /** * FEATURE UNDER TEST diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/G01_AccessWithOpeningHoursTest.java b/application/src/test/java/org/opentripplanner/raptor/moduletests/G01_AccessWithOpeningHoursTest.java index 7f5e5421e79..bf3bf359001 100644 --- a/application/src/test/java/org/opentripplanner/raptor/moduletests/G01_AccessWithOpeningHoursTest.java +++ b/application/src/test/java/org/opentripplanner/raptor/moduletests/G01_AccessWithOpeningHoursTest.java @@ -19,7 +19,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.raptor.RaptorService; import org.opentripplanner.raptor._data.RaptorTestConstants; import org.opentripplanner.raptor._data.transit.TestTransitData; @@ -30,6 +29,7 @@ import org.opentripplanner.raptor.moduletests.support.ModuleTestDebugLogging; import org.opentripplanner.raptor.moduletests.support.RaptorModuleTestCase; import org.opentripplanner.raptor.moduletests.support.RaptorModuleTestCaseFactory; +import org.opentripplanner.utils.time.TimeUtils; /* * FEATURE UNDER TEST diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/G02_EgressWithOpeningHoursTest.java b/application/src/test/java/org/opentripplanner/raptor/moduletests/G02_EgressWithOpeningHoursTest.java index 9498f0b0080..994305cb0d5 100644 --- a/application/src/test/java/org/opentripplanner/raptor/moduletests/G02_EgressWithOpeningHoursTest.java +++ b/application/src/test/java/org/opentripplanner/raptor/moduletests/G02_EgressWithOpeningHoursTest.java @@ -1,7 +1,6 @@ package org.opentripplanner.raptor.moduletests; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.framework.time.TimeUtils.hm2time; import static org.opentripplanner.raptor._data.api.PathUtils.withoutCost; import static org.opentripplanner.raptor._data.transit.TestAccessEgress.walk; import static org.opentripplanner.raptor._data.transit.TestRoute.route; @@ -13,6 +12,7 @@ import static org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig.minDuration; import static org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig.multiCriteria; import static org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig.standard; +import static org.opentripplanner.utils.time.TimeUtils.hm2time; import java.time.Duration; import java.util.List; diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/L01_TimePenaltyAccessTest.java b/application/src/test/java/org/opentripplanner/raptor/moduletests/L01_TimePenaltyAccessTest.java index 778dd36a227..a4753cc2c17 100644 --- a/application/src/test/java/org/opentripplanner/raptor/moduletests/L01_TimePenaltyAccessTest.java +++ b/application/src/test/java/org/opentripplanner/raptor/moduletests/L01_TimePenaltyAccessTest.java @@ -1,7 +1,6 @@ package org.opentripplanner.raptor.moduletests; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.framework.time.TimeUtils.time; import static org.opentripplanner.raptor._data.api.PathUtils.withoutCost; import static org.opentripplanner.raptor._data.transit.TestAccessEgress.walk; import static org.opentripplanner.raptor._data.transit.TestRoute.route; @@ -11,6 +10,7 @@ import static org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig.TC_STANDARD_REV; import static org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig.TC_STANDARD_REV_ONE; import static org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig.multiCriteria; +import static org.opentripplanner.utils.time.TimeUtils.time; import java.time.Duration; import java.util.List; diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/L01_TimePenaltyEgressTest.java b/application/src/test/java/org/opentripplanner/raptor/moduletests/L01_TimePenaltyEgressTest.java index 1e6897475f4..d75b91c7aee 100644 --- a/application/src/test/java/org/opentripplanner/raptor/moduletests/L01_TimePenaltyEgressTest.java +++ b/application/src/test/java/org/opentripplanner/raptor/moduletests/L01_TimePenaltyEgressTest.java @@ -1,7 +1,6 @@ package org.opentripplanner.raptor.moduletests; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.framework.time.TimeUtils.time; import static org.opentripplanner.raptor._data.api.PathUtils.withoutCost; import static org.opentripplanner.raptor._data.transit.TestAccessEgress.walk; import static org.opentripplanner.raptor._data.transit.TestRoute.route; @@ -11,6 +10,7 @@ import static org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig.TC_STANDARD_REV; import static org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig.TC_STANDARD_REV_ONE; import static org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig.multiCriteria; +import static org.opentripplanner.utils.time.TimeUtils.time; import java.time.Duration; import java.util.List; diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/support/RaptorModuleTestCaseFactory.java b/application/src/test/java/org/opentripplanner/raptor/moduletests/support/RaptorModuleTestCaseFactory.java index 0f7554dccab..937acd7fcc4 100644 --- a/application/src/test/java/org/opentripplanner/raptor/moduletests/support/RaptorModuleTestCaseFactory.java +++ b/application/src/test/java/org/opentripplanner/raptor/moduletests/support/RaptorModuleTestCaseFactory.java @@ -7,10 +7,10 @@ import java.util.Arrays; import java.util.List; import java.util.function.Consumer; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.request.RaptorRequestBuilder; import org.opentripplanner.raptor.spi.UnknownPath; +import org.opentripplanner.utils.time.DurationUtils; /** * Factory for {@link RaptorModuleTestConfig}, create a list of test-cases. diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/StopArrivalFactoryC1Test.java b/application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/StopArrivalFactoryC1Test.java index d47edf1c58f..4d18cde5232 100644 --- a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/StopArrivalFactoryC1Test.java +++ b/application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/StopArrivalFactoryC1Test.java @@ -3,8 +3,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.raptor._data.transit.TestAccessEgress; import org.opentripplanner.raptor._data.transit.TestTransfer; import org.opentripplanner.raptor._data.transit.TestTripPattern; @@ -13,6 +11,8 @@ import org.opentripplanner.raptor.api.view.PatternRideView; import org.opentripplanner.raptor.rangeraptor.multicriteria.arrivals.McStopArrival; import org.opentripplanner.raptor.rangeraptor.multicriteria.ride.c1.PatternRideC1; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.time.TimeUtils; public class StopArrivalFactoryC1Test { diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/StopArrivalFactoryC2Test.java b/application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/StopArrivalFactoryC2Test.java index 4c78461b016..c71ca7fee11 100644 --- a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/StopArrivalFactoryC2Test.java +++ b/application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/StopArrivalFactoryC2Test.java @@ -3,8 +3,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.raptor._data.transit.TestAccessEgress; import org.opentripplanner.raptor._data.transit.TestTransfer; import org.opentripplanner.raptor._data.transit.TestTripPattern; @@ -13,6 +11,8 @@ import org.opentripplanner.raptor.rangeraptor.multicriteria.arrivals.McStopArrival; import org.opentripplanner.raptor.rangeraptor.multicriteria.ride.c2.PatternRideC2; import org.opentripplanner.raptor.spi.RaptorCostCalculator; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.time.TimeUtils; public class StopArrivalFactoryC2Test { diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/EgressPathsTest.java b/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/EgressPathsTest.java index 144904fa3e6..3939bbb865f 100644 --- a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/EgressPathsTest.java +++ b/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/EgressPathsTest.java @@ -10,9 +10,9 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.api.request.RaptorProfile; +import org.opentripplanner.utils.time.DurationUtils; class EgressPathsTest { diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculatorTest.java b/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculatorTest.java index ad7a269b856..bf1999d88fc 100644 --- a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculatorTest.java +++ b/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculatorTest.java @@ -3,10 +3,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.opentripplanner.framework.time.TimeUtils.hm2time; import static org.opentripplanner.raptor._data.RaptorTestConstants.D1m; import static org.opentripplanner.raptor._data.RaptorTestConstants.STOP_A; import static org.opentripplanner.raptor._data.RaptorTestConstants.STOP_B; +import static org.opentripplanner.utils.time.TimeUtils.hm2time; import org.junit.jupiter.api.Test; import org.opentripplanner.raptor._data.transit.TestAccessEgress; diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardTransitCalculatorTest.java b/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardTransitCalculatorTest.java index 10f5e18875b..5fb1cb5fade 100644 --- a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardTransitCalculatorTest.java +++ b/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardTransitCalculatorTest.java @@ -1,11 +1,11 @@ package org.opentripplanner.raptor.rangeraptor.transit; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.framework.time.TimeUtils.hm2time; import static org.opentripplanner.raptor._data.transit.TestAccessEgress.flex; import static org.opentripplanner.raptor._data.transit.TestAccessEgress.flexAndWalk; import static org.opentripplanner.raptor._data.transit.TestAccessEgress.free; import static org.opentripplanner.raptor._data.transit.TestAccessEgress.walk; +import static org.opentripplanner.utils.time.TimeUtils.hm2time; import org.junit.jupiter.api.Test; import org.opentripplanner.raptor._data.RaptorTestConstants; diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculatorTest.java b/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculatorTest.java index 3afecaf3e81..981fb058f9b 100644 --- a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculatorTest.java +++ b/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculatorTest.java @@ -3,10 +3,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.opentripplanner.framework.time.TimeUtils.hm2time; import static org.opentripplanner.raptor._data.RaptorTestConstants.D1m; import static org.opentripplanner.raptor._data.RaptorTestConstants.STOP_A; import static org.opentripplanner.raptor._data.RaptorTestConstants.STOP_B; +import static org.opentripplanner.utils.time.TimeUtils.hm2time; import org.junit.jupiter.api.Test; import org.opentripplanner.raptor._data.transit.TestTransfer; diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/TripTimesSearchTest.java b/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/TripTimesSearchTest.java index 50295b0341e..d70f58fd1c5 100644 --- a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/TripTimesSearchTest.java +++ b/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/TripTimesSearchTest.java @@ -2,7 +2,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.opentripplanner.framework.time.TimeUtils.timeToStrLong; import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.access; import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.bus; import static org.opentripplanner.raptor._data.transit.TestAccessEgress.free; @@ -11,13 +10,14 @@ import static org.opentripplanner.raptor.rangeraptor.transit.TripTimesSearch.findTripForwardSearchApproximateTime; import static org.opentripplanner.raptor.rangeraptor.transit.TripTimesSearch.findTripReverseSearch; import static org.opentripplanner.raptor.rangeraptor.transit.TripTimesSearch.findTripReverseSearchApproximateTime; +import static org.opentripplanner.utils.time.TimeUtils.timeToStrLong; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.raptor._data.RaptorTestConstants; import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.view.ArrivalView; import org.opentripplanner.raptor.spi.BoardAndAlightTime; +import org.opentripplanner.utils.time.TimeUtils; public class TripTimesSearchTest implements RaptorTestConstants { diff --git a/application/src/test/java/org/opentripplanner/raptor/spi/RaptorTripScheduleTest.java b/application/src/test/java/org/opentripplanner/raptor/spi/RaptorTripScheduleTest.java index 6b4392a13a9..9188617016a 100644 --- a/application/src/test/java/org/opentripplanner/raptor/spi/RaptorTripScheduleTest.java +++ b/application/src/test/java/org/opentripplanner/raptor/spi/RaptorTripScheduleTest.java @@ -1,7 +1,7 @@ package org.opentripplanner.raptor.spi; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.framework.time.TimeUtils.timeToStrLong; +import static org.opentripplanner.utils.time.TimeUtils.timeToStrLong; import org.junit.jupiter.api.Test; import org.opentripplanner.raptor._data.transit.TestTripPattern; diff --git a/application/src/test/java/org/opentripplanner/raptor/util/paretoset/ParetoSetTest.java b/application/src/test/java/org/opentripplanner/raptor/util/paretoset/ParetoSetTest.java index 1c410c13e1c..5f2d56cfcdd 100644 --- a/application/src/test/java/org/opentripplanner/raptor/util/paretoset/ParetoSetTest.java +++ b/application/src/test/java/org/opentripplanner/raptor/util/paretoset/ParetoSetTest.java @@ -12,7 +12,7 @@ import java.util.stream.Collectors; import java.util.stream.StreamSupport; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.lang.IntUtils; +import org.opentripplanner.utils.lang.IntUtils; public class ParetoSetTest { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/street/RemoveBikeRentalWithMostlyWalkingTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/street/RemoveBikeRentalWithMostlyWalkingTest.java index 4e47306601c..c1dc34413cd 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/street/RemoveBikeRentalWithMostlyWalkingTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/street/RemoveBikeRentalWithMostlyWalkingTest.java @@ -8,9 +8,9 @@ import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.model.plan.Itinerary; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.time.TimeUtils; public class RemoveBikeRentalWithMostlyWalkingTest { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/street/RemoveParkAndRideWithMostlyWalkingTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/street/RemoveParkAndRideWithMostlyWalkingTest.java index a4c90d1346f..88baabb1e2a 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/street/RemoveParkAndRideWithMostlyWalkingTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/street/RemoveParkAndRideWithMostlyWalkingTest.java @@ -8,9 +8,9 @@ import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.model.plan.Itinerary; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.time.TimeUtils; public class RemoveParkAndRideWithMostlyWalkingTest { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/street/RemoveWalkOnlyFilterTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/street/RemoveWalkOnlyFilterTest.java index 359423a842b..6281c4f744c 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/street/RemoveWalkOnlyFilterTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/street/RemoveWalkOnlyFilterTest.java @@ -8,9 +8,9 @@ import java.util.List; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.model.plan.Itinerary; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.time.TimeUtils; public class RemoveWalkOnlyFilterTest { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/FlexSearchWindowFilterTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/FlexSearchWindowFilterTest.java index 30c8872b859..dd51ccbcd19 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/FlexSearchWindowFilterTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/FlexSearchWindowFilterTest.java @@ -2,8 +2,8 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.framework.time.TimeUtils.time; import static org.opentripplanner.model.plan.TestItineraryBuilder.newItinerary; +import static org.opentripplanner.utils.time.TimeUtils.time; import java.time.Duration; import java.time.Instant; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/NumItinerariesFilterTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/NumItinerariesFilterTest.java index 622482fe4b3..1943104e1d0 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/NumItinerariesFilterTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/NumItinerariesFilterTest.java @@ -8,9 +8,9 @@ import java.util.List; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.collection.ListSection; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.paging.cursor.PageCursorInput; +import org.opentripplanner.utils.collection.ListSection; public class NumItinerariesFilterTest { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/OutsideSearchWindowFilterTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/OutsideSearchWindowFilterTest.java index 6e475ac5893..0e61d146d17 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/OutsideSearchWindowFilterTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/OutsideSearchWindowFilterTest.java @@ -4,8 +4,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.opentripplanner.framework.time.TimeUtils.time; import static org.opentripplanner.model.plan.TestItineraryBuilder.newItinerary; +import static org.opentripplanner.utils.time.TimeUtils.time; import java.time.Duration; import java.util.List; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/PagingFilterTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/PagingFilterTest.java index 713e72e344c..165cddd31f3 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/PagingFilterTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/PagingFilterTest.java @@ -1,10 +1,10 @@ package org.opentripplanner.routing.algorithm.filterchain.filters.system; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.framework.collection.ListUtils.first; -import static org.opentripplanner.framework.collection.ListUtils.last; import static org.opentripplanner.model.plan.Itinerary.toStr; import static org.opentripplanner.model.plan.TestItineraryBuilder.newItinerary; +import static org.opentripplanner.utils.collection.ListUtils.first; +import static org.opentripplanner.utils.collection.ListUtils.last; import java.util.ArrayList; import java.util.List; @@ -13,14 +13,14 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import org.opentripplanner._support.debug.TestDebug; -import org.opentripplanner.framework.collection.ListSection; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.Place; import org.opentripplanner.model.plan.PlanTestConstants; import org.opentripplanner.model.plan.SortOrder; import org.opentripplanner.routing.algorithm.filterchain.framework.sort.SortOrderComparator; import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; +import org.opentripplanner.utils.collection.ListSection; +import org.opentripplanner.utils.time.TimeUtils; public class PagingFilterTest implements PlanTestConstants { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/PagingServiceFactoryTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/PagingServiceFactoryTest.java index 369f58d6ef1..64797b9c5a1 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/PagingServiceFactoryTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/PagingServiceFactoryTest.java @@ -7,14 +7,14 @@ import java.time.Instant; import java.util.List; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.raptor._data.transit.TestAccessEgress; import org.opentripplanner.raptor.api.request.RaptorRequestBuilder; import org.opentripplanner.raptor.api.request.RaptorTuningParameters; import org.opentripplanner.raptor.api.request.SearchParams; import org.opentripplanner.routing.algorithm.raptoradapter.transit.TransitTuningParameters; import org.opentripplanner.routing.api.request.RouteRequest; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.time.TimeUtils; class PagingServiceFactoryTest { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapperTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapperTest.java index 4887b1e6f03..ede3166e22b 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapperTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapperTest.java @@ -24,7 +24,6 @@ import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.framework.model.Cost; import org.opentripplanner.framework.model.TimeAndCost; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.model.PickDrop; import org.opentripplanner.model.StopTime; import org.opentripplanner.model.plan.Leg; @@ -67,6 +66,7 @@ import org.opentripplanner.transit.model.timetable.booking.RoutingBookingInfo; import org.opentripplanner.transit.service.DefaultTransitService; import org.opentripplanner.transit.service.TimetableRepository; +import org.opentripplanner.utils.time.TimeUtils; public class RaptorPathToItineraryMapperTest { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/SnapshotTestBase.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/SnapshotTestBase.java index 98acfeeb7af..cab308c092b 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/SnapshotTestBase.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/SnapshotTestBase.java @@ -41,7 +41,6 @@ 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; import org.opentripplanner.model.plan.Leg; @@ -54,6 +53,7 @@ import org.opentripplanner.standalone.api.OtpServerRequestContext; import org.opentripplanner.transit.model.basic.MainAndSubMode; import org.opentripplanner.transit.model.basic.TransitMode; +import org.opentripplanner.utils.time.TimeUtils; /** * A base class for creating snapshots test of itinerary generation using the Portland graph. diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/AccessEgressPenaltyDecoratorTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/AccessEgressPenaltyDecoratorTest.java index 78b12a97b82..a1b58ce76fa 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/AccessEgressPenaltyDecoratorTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/AccessEgressPenaltyDecoratorTest.java @@ -10,7 +10,6 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.routing.algorithm.raptoradapter.transit.DefaultAccessEgress; import org.opentripplanner.routing.algorithm.raptoradapter.transit.RoutingAccessEgress; import org.opentripplanner.routing.api.request.StreetMode; @@ -19,6 +18,7 @@ import org.opentripplanner.routing.api.request.framework.TimePenalty; import org.opentripplanner.street.search.state.State; import org.opentripplanner.street.search.state.TestStateBuilder; +import org.opentripplanner.utils.time.DurationUtils; class AccessEgressPenaltyDecoratorTest { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitDataCreatorTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitDataCreatorTest.java index b81792877ae..7df9677082d 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitDataCreatorTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitDataCreatorTest.java @@ -10,7 +10,6 @@ import java.util.List; import org.junit.jupiter.api.Test; import org.opentripplanner._support.time.ZoneIds; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.model.StopTime; import org.opentripplanner.routing.algorithm.raptoradapter.transit.TripPatternForDate; import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; @@ -22,6 +21,7 @@ import org.opentripplanner.transit.model.network.grouppriority.TransitGroupPriorityService; import org.opentripplanner.transit.model.timetable.ScheduledTripTimes; import org.opentripplanner.transit.model.timetable.TripTimes; +import org.opentripplanner.utils.time.ServiceDateUtils; public class RaptorRoutingRequestTransitDataCreatorTest { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TestRouteData.java b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TestRouteData.java index 1d266ce9953..5c345e55931 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TestRouteData.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TestRouteData.java @@ -12,7 +12,6 @@ import java.util.Map; import java.util.stream.Collectors; import org.opentripplanner.framework.i18n.NonLocalizedString; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.model.StopTime; import org.opentripplanner.raptor.spi.RaptorTimeTable; import org.opentripplanner.routing.algorithm.raptoradapter.transit.TripPatternForDate; @@ -29,6 +28,7 @@ import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.model.timetable.TripTimes; import org.opentripplanner.transit.model.timetable.TripTimesFactory; +import org.opentripplanner.utils.time.TimeUtils; public class TestRouteData { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/MinSafeTransferTimeCalculatorTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/MinSafeTransferTimeCalculatorTest.java index ae10dd0d03e..9b0cf342c0b 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/MinSafeTransferTimeCalculatorTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/MinSafeTransferTimeCalculatorTest.java @@ -1,18 +1,18 @@ package org.opentripplanner.routing.algorithm.transferoptimization.model; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.framework.time.TimeUtils.time; import static org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase.C1_CALCULATOR; import static org.opentripplanner.routing.algorithm.transferoptimization.model.MinSafeTransferTimeCalculator.bound; +import static org.opentripplanner.utils.time.TimeUtils.time; import java.util.List; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.raptor._data.RaptorTestConstants; import org.opentripplanner.raptor._data.api.TestPathBuilder; import org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase; import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.path.RaptorPath; +import org.opentripplanner.utils.time.DurationUtils; public class MinSafeTransferTimeCalculatorTest implements RaptorTestConstants { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/TransferWaitTimeCostCalculatorTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/TransferWaitTimeCostCalculatorTest.java index 3d5ae037428..3a375f7968a 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/TransferWaitTimeCostCalculatorTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/TransferWaitTimeCostCalculatorTest.java @@ -2,7 +2,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.opentripplanner.framework.time.DurationUtils.durationInSeconds; +import static org.opentripplanner.utils.time.DurationUtils.durationInSeconds; import org.junit.jupiter.api.Test; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/TripStopTimeTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/TripStopTimeTest.java index 0c0d50dfe74..e81b51c4eaa 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/TripStopTimeTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/TripStopTimeTest.java @@ -1,13 +1,13 @@ package org.opentripplanner.routing.algorithm.transferoptimization.model; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.framework.time.TimeUtils.time; import static org.opentripplanner.routing.algorithm.transferoptimization.model.StopTime.stopTime; +import static org.opentripplanner.utils.time.TimeUtils.time; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.raptor._data.transit.TestTripPattern; import org.opentripplanner.raptor._data.transit.TestTripSchedule; +import org.opentripplanner.utils.time.TimeUtils; public class TripStopTimeTest { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughNoTransfersTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughNoTransfersTest.java index 926e6ebe15c..11552ea3d1e 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughNoTransfersTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughNoTransfersTest.java @@ -1,11 +1,11 @@ package org.opentripplanner.routing.algorithm.transferoptimization.model.passthrough; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.framework.time.TimeUtils.time; import static org.opentripplanner.routing.algorithm.transferoptimization.model.passthrough.TestCase.testCase; import static org.opentripplanner.routing.algorithm.transferoptimization.model.passthrough.TestUtils.domainService; import static org.opentripplanner.routing.algorithm.transferoptimization.model.passthrough.TestUtils.first; import static org.opentripplanner.routing.algorithm.transferoptimization.model.passthrough.TestUtils.pathBuilder; +import static org.opentripplanner.utils.time.TimeUtils.time; import java.util.List; import org.junit.jupiter.params.ParameterizedTest; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughOneTransferTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughOneTransferTest.java index ad41f43a586..acd99ab4bef 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughOneTransferTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughOneTransferTest.java @@ -1,12 +1,12 @@ package org.opentripplanner.routing.algorithm.transferoptimization.model.passthrough; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.framework.time.TimeUtils.time; import static org.opentripplanner.routing.algorithm.transferoptimization.model.passthrough.TestCase.testCase; import static org.opentripplanner.routing.algorithm.transferoptimization.model.passthrough.TestUtils.domainService; import static org.opentripplanner.routing.algorithm.transferoptimization.model.passthrough.TestUtils.pathBuilder; import static org.opentripplanner.routing.algorithm.transferoptimization.model.passthrough.TestUtils.pathFocus; import static org.opentripplanner.routing.algorithm.transferoptimization.model.passthrough.TestUtils.tx; +import static org.opentripplanner.utils.time.TimeUtils.time; import java.util.List; import java.util.stream.Collectors; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughTwoTransfersTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughTwoTransfersTest.java index e92e0ba0b3b..05da490c857 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughTwoTransfersTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughTwoTransfersTest.java @@ -1,11 +1,11 @@ package org.opentripplanner.routing.algorithm.transferoptimization.model.passthrough; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.framework.time.TimeUtils.time; import static org.opentripplanner.routing.algorithm.transferoptimization.model.passthrough.TestCase.testCase; import static org.opentripplanner.routing.algorithm.transferoptimization.model.passthrough.TestUtils.domainService; import static org.opentripplanner.routing.algorithm.transferoptimization.model.passthrough.TestUtils.pathBuilder; import static org.opentripplanner.routing.algorithm.transferoptimization.model.passthrough.TestUtils.tx; +import static org.opentripplanner.utils.time.TimeUtils.time; import java.util.List; import org.junit.jupiter.params.ParameterizedTest; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/WalkDurationForStopCombinations.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/WalkDurationForStopCombinations.java index cfd8f6c4e53..66bb1e02c17 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/WalkDurationForStopCombinations.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/WalkDurationForStopCombinations.java @@ -4,8 +4,8 @@ import java.util.Collection; import java.util.HashMap; import java.util.Map; -import org.opentripplanner.framework.lang.IntUtils; import org.opentripplanner.raptor.api.request.PassThroughPoint; +import org.opentripplanner.utils.lang.IntUtils; /** * This class is used to adjust the walk time - giving each path an unique generalized-cost. We want diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/OptimizePathDomainServiceConstrainedTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/OptimizePathDomainServiceConstrainedTest.java index a040da1d23f..109032a0110 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/OptimizePathDomainServiceConstrainedTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/OptimizePathDomainServiceConstrainedTest.java @@ -2,12 +2,12 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.opentripplanner.framework.time.TimeUtils.time; import static org.opentripplanner.model.transfer.TransferPriority.ALLOWED; import static org.opentripplanner.model.transfer.TransferPriority.NOT_ALLOWED; import static org.opentripplanner.model.transfer.TransferPriority.PREFERRED; import static org.opentripplanner.model.transfer.TransferPriority.RECOMMENDED; import static org.opentripplanner.routing.algorithm.transferoptimization.services.TransferGeneratorDummy.dummyTransferGenerator; +import static org.opentripplanner.utils.time.TimeUtils.time; import java.util.List; import org.junit.jupiter.api.Test; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/OptimizePathDomainServiceTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/OptimizePathDomainServiceTest.java index be927046c43..54c45b8a76b 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/OptimizePathDomainServiceTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/OptimizePathDomainServiceTest.java @@ -1,9 +1,9 @@ package org.opentripplanner.routing.algorithm.transferoptimization.services; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.framework.time.TimeUtils.time; import static org.opentripplanner.routing.algorithm.transferoptimization.services.TestTransferBuilder.tx; import static org.opentripplanner.routing.algorithm.transferoptimization.services.TransferGeneratorDummy.dummyTransferGenerator; +import static org.opentripplanner.utils.time.TimeUtils.time; import java.util.List; import javax.annotation.Nullable; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TestTransferBuilder.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TestTransferBuilder.java index 90dd9e5915e..d553bac75eb 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TestTransferBuilder.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TestTransferBuilder.java @@ -1,7 +1,6 @@ package org.opentripplanner.routing.algorithm.transferoptimization.services; import java.util.Objects; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.model.transfer.ConstrainedTransfer; import org.opentripplanner.model.transfer.TransferConstraint; import org.opentripplanner.model.transfer.TransferPriority; @@ -13,6 +12,7 @@ import org.opentripplanner.routing.algorithm.transferoptimization.model.TripToTripTransfer; import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.timetable.Trip; +import org.opentripplanner.utils.time.TimeUtils; /** * This builder is used to create a {@link ConstrainedTransfer} for use in unit-tests. It build a diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransferGeneratorTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransferGeneratorTest.java index 4283e5cca62..acaefbcf1d9 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransferGeneratorTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransferGeneratorTest.java @@ -16,7 +16,6 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.model.transfer.TransferConstraint; import org.opentripplanner.raptor._data.RaptorTestConstants; import org.opentripplanner.raptor._data.api.TestPathBuilder; @@ -29,6 +28,7 @@ import org.opentripplanner.raptor.api.path.TransitPathLeg; import org.opentripplanner.raptor.spi.DefaultSlackProvider; import org.opentripplanner.raptor.spi.RaptorSlackProvider; +import org.opentripplanner.utils.time.TimeUtils; public class TransferGeneratorTest implements RaptorTestConstants { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransitPathLegSelectorTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransitPathLegSelectorTest.java index d62f123e7d6..5ce84b4a00d 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransitPathLegSelectorTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransitPathLegSelectorTest.java @@ -8,7 +8,6 @@ import java.util.Set; import java.util.stream.Collectors; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.raptor._data.RaptorTestConstants; import org.opentripplanner.raptor._data.transit.TestAccessEgress; import org.opentripplanner.raptor._data.transit.TestTripSchedule; @@ -21,6 +20,7 @@ import org.opentripplanner.routing.algorithm.transferoptimization.model.OptimizedPathTail; import org.opentripplanner.routing.algorithm.transferoptimization.model.PathTailFilter; import org.opentripplanner.routing.algorithm.transferoptimization.model.costfilter.MinCostPathTailFilterFactory; +import org.opentripplanner.utils.time.TimeUtils; public class TransitPathLegSelectorTest implements RaptorTestConstants { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/via/ViaRoutingWorkerTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/via/ViaRoutingWorkerTest.java index 7b2a4d7e7a6..c11b25d4ac3 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/via/ViaRoutingWorkerTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/via/ViaRoutingWorkerTest.java @@ -10,7 +10,6 @@ import java.time.ZonedDateTime; import java.util.List; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.model.GenericLocation; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.Place; @@ -22,6 +21,7 @@ import org.opentripplanner.routing.api.response.RoutingResponse; import org.opentripplanner.routing.api.response.ViaRoutingResponseConnection; import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; +import org.opentripplanner.utils.time.TimeUtils; /** * Create search from point A to point B via point C. Search will start at 12:00 and will find two diff --git a/application/src/test/java/org/opentripplanner/routing/api/request/framework/CostLinearFunctionTest.java b/application/src/test/java/org/opentripplanner/routing/api/request/framework/CostLinearFunctionTest.java index e4f42fcd409..8d972896878 100644 --- a/application/src/test/java/org/opentripplanner/routing/api/request/framework/CostLinearFunctionTest.java +++ b/application/src/test/java/org/opentripplanner/routing/api/request/framework/CostLinearFunctionTest.java @@ -13,8 +13,8 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.framework.model.Cost; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.test.support.TestTableParser; +import org.opentripplanner.utils.time.DurationUtils; class CostLinearFunctionTest { diff --git a/application/src/test/java/org/opentripplanner/routing/api/request/framework/LinearFunctionSerializationTest.java b/application/src/test/java/org/opentripplanner/routing/api/request/framework/LinearFunctionSerializationTest.java index 46ef4b50e77..dbb33e1f97b 100644 --- a/application/src/test/java/org/opentripplanner/routing/api/request/framework/LinearFunctionSerializationTest.java +++ b/application/src/test/java/org/opentripplanner/routing/api/request/framework/LinearFunctionSerializationTest.java @@ -12,8 +12,8 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.test.support.TestTableParser; +import org.opentripplanner.utils.time.DurationUtils; class LinearFunctionSerializationTest { diff --git a/application/src/test/java/org/opentripplanner/routing/api/request/framework/TimeAndCostPenaltyTest.java b/application/src/test/java/org/opentripplanner/routing/api/request/framework/TimeAndCostPenaltyTest.java index 58370722e7c..c13fb0e8c63 100644 --- a/application/src/test/java/org/opentripplanner/routing/api/request/framework/TimeAndCostPenaltyTest.java +++ b/application/src/test/java/org/opentripplanner/routing/api/request/framework/TimeAndCostPenaltyTest.java @@ -8,7 +8,7 @@ import org.junit.jupiter.api.Test; import org.opentripplanner.framework.model.Cost; import org.opentripplanner.framework.model.TimeAndCost; -import org.opentripplanner.framework.time.DurationUtils; +import org.opentripplanner.utils.time.DurationUtils; class TimeAndCostPenaltyTest { diff --git a/application/src/test/java/org/opentripplanner/routing/api/request/framework/TimePenaltyTest.java b/application/src/test/java/org/opentripplanner/routing/api/request/framework/TimePenaltyTest.java index 087ffa1d637..7321653192e 100644 --- a/application/src/test/java/org/opentripplanner/routing/api/request/framework/TimePenaltyTest.java +++ b/application/src/test/java/org/opentripplanner/routing/api/request/framework/TimePenaltyTest.java @@ -7,7 +7,7 @@ import java.time.Duration; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.time.DurationUtils; +import org.opentripplanner.utils.time.DurationUtils; class TimePenaltyTest { diff --git a/application/src/test/java/org/opentripplanner/service/paging/PS1_LegacyMetaDataTest.java b/application/src/test/java/org/opentripplanner/service/paging/PS1_LegacyMetaDataTest.java index 609607d84ff..e87e2a5e406 100644 --- a/application/src/test/java/org/opentripplanner/service/paging/PS1_LegacyMetaDataTest.java +++ b/application/src/test/java/org/opentripplanner/service/paging/PS1_LegacyMetaDataTest.java @@ -5,7 +5,7 @@ import java.time.Duration; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.time.TimeUtils; +import org.opentripplanner.utils.time.TimeUtils; /** * This tests the entire paging service module. diff --git a/application/src/test/java/org/opentripplanner/service/paging/PS3_FewItinerariesOnSearchWindowLimitTest.java b/application/src/test/java/org/opentripplanner/service/paging/PS3_FewItinerariesOnSearchWindowLimitTest.java index 4db61579a47..fffcf93e5fb 100644 --- a/application/src/test/java/org/opentripplanner/service/paging/PS3_FewItinerariesOnSearchWindowLimitTest.java +++ b/application/src/test/java/org/opentripplanner/service/paging/PS3_FewItinerariesOnSearchWindowLimitTest.java @@ -11,12 +11,12 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.ItinerarySortKey; import org.opentripplanner.model.plan.SortOrder; import org.opentripplanner.model.plan.paging.cursor.PageCursor; import org.opentripplanner.model.plan.paging.cursor.PageType; +import org.opentripplanner.utils.time.TimeUtils; /** * This test focus on testing the paging with few itineraries. There should be no page-cuts. The diff --git a/application/src/test/java/org/opentripplanner/service/paging/TestDriver.java b/application/src/test/java/org/opentripplanner/service/paging/TestDriver.java index 928fbaaf01d..e5cbb02012d 100644 --- a/application/src/test/java/org/opentripplanner/service/paging/TestDriver.java +++ b/application/src/test/java/org/opentripplanner/service/paging/TestDriver.java @@ -5,8 +5,6 @@ import java.util.List; import javax.annotation.Nullable; import org.opentripplanner._support.debug.TestDebug; -import org.opentripplanner.framework.collection.ListSection; -import org.opentripplanner.framework.lang.Box; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.ItinerarySortKey; import org.opentripplanner.model.plan.SortOrder; @@ -15,6 +13,8 @@ import org.opentripplanner.routing.algorithm.filterchain.filters.system.NumItinerariesFilter; import org.opentripplanner.routing.algorithm.filterchain.filters.system.OutsideSearchWindowFilter; import org.opentripplanner.routing.algorithm.filterchain.filters.system.PagingFilter; +import org.opentripplanner.utils.collection.ListSection; +import org.opentripplanner.utils.lang.Box; /** * This class simulate/mock the context the paging is operating in. diff --git a/application/src/test/java/org/opentripplanner/service/paging/TestPagingModel.java b/application/src/test/java/org/opentripplanner/service/paging/TestPagingModel.java index c4db100b56f..9a30b5e8a90 100644 --- a/application/src/test/java/org/opentripplanner/service/paging/TestPagingModel.java +++ b/application/src/test/java/org/opentripplanner/service/paging/TestPagingModel.java @@ -1,13 +1,12 @@ package org.opentripplanner.service.paging; -import static org.opentripplanner.framework.time.TimeUtils.hm2time; import static org.opentripplanner.model.plan.SortOrder.STREET_AND_ARRIVAL_TIME; import static org.opentripplanner.model.plan.SortOrder.STREET_AND_DEPARTURE_TIME; +import static org.opentripplanner.utils.time.TimeUtils.hm2time; import java.time.Duration; import java.time.Instant; import java.util.List; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.Place; import org.opentripplanner.model.plan.SortOrder; @@ -15,6 +14,7 @@ import org.opentripplanner.model.plan.paging.cursor.PageCursor; import org.opentripplanner.routing.algorithm.filterchain.framework.sort.SortOrderComparator; import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; +import org.opentripplanner.utils.time.TimeUtils; class TestPagingModel { diff --git a/application/src/test/java/org/opentripplanner/standalone/config/OtpConfigLoaderTest.java b/application/src/test/java/org/opentripplanner/standalone/config/OtpConfigLoaderTest.java index c67983355e1..8dae448e2c6 100644 --- a/application/src/test/java/org/opentripplanner/standalone/config/OtpConfigLoaderTest.java +++ b/application/src/test/java/org/opentripplanner/standalone/config/OtpConfigLoaderTest.java @@ -15,8 +15,8 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.lang.StringUtils; import org.opentripplanner.standalone.config.framework.file.ConfigFileLoader; +import org.opentripplanner.utils.lang.StringUtils; public class OtpConfigLoaderTest { diff --git a/application/src/test/java/org/opentripplanner/standalone/config/framework/file/ConfigFileLoaderTest.java b/application/src/test/java/org/opentripplanner/standalone/config/framework/file/ConfigFileLoaderTest.java index 6cdba6e4b51..2e698efb64d 100644 --- a/application/src/test/java/org/opentripplanner/standalone/config/framework/file/ConfigFileLoaderTest.java +++ b/application/src/test/java/org/opentripplanner/standalone/config/framework/file/ConfigFileLoaderTest.java @@ -14,8 +14,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.opentripplanner.framework.application.OtpAppException; -import org.opentripplanner.framework.lang.StringUtils; import org.opentripplanner.standalone.config.OtpConfigLoader; +import org.opentripplanner.utils.lang.StringUtils; class ConfigFileLoaderTest { diff --git a/application/src/test/java/org/opentripplanner/standalone/config/framework/file/IncludeFileDirectiveTest.java b/application/src/test/java/org/opentripplanner/standalone/config/framework/file/IncludeFileDirectiveTest.java index cfdda47c160..0fc1199236d 100644 --- a/application/src/test/java/org/opentripplanner/standalone/config/framework/file/IncludeFileDirectiveTest.java +++ b/application/src/test/java/org/opentripplanner/standalone/config/framework/file/IncludeFileDirectiveTest.java @@ -8,7 +8,7 @@ import java.nio.file.Files; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.lang.StringUtils; +import org.opentripplanner.utils.lang.StringUtils; public class IncludeFileDirectiveTest { diff --git a/application/src/test/java/org/opentripplanner/transit/model/timetable/ScheduledTripTimesTest.java b/application/src/test/java/org/opentripplanner/transit/model/timetable/ScheduledTripTimesTest.java index 75bf99a3fcc..06469a34b2a 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/timetable/ScheduledTripTimesTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/timetable/ScheduledTripTimesTest.java @@ -10,11 +10,11 @@ import java.util.BitSet; import java.util.List; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.Accessibility; import org.opentripplanner.transit.model.framework.DataValidationException; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.utils.time.TimeUtils; class ScheduledTripTimesTest { diff --git a/application/src/test/java/org/opentripplanner/transit/model/timetable/booking/BookingTimeTest.java b/application/src/test/java/org/opentripplanner/transit/model/timetable/booking/BookingTimeTest.java index 5036defdb88..88b113aec53 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/timetable/booking/BookingTimeTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/timetable/booking/BookingTimeTest.java @@ -5,7 +5,7 @@ import java.time.LocalTime; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.time.TimeUtils; +import org.opentripplanner.utils.time.TimeUtils; class BookingTimeTest { diff --git a/application/src/test/java/org/opentripplanner/transit/model/timetable/booking/RoutingBookingInfoTest.java b/application/src/test/java/org/opentripplanner/transit/model/timetable/booking/RoutingBookingInfoTest.java index e0f507a7983..2b9dfaface8 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/timetable/booking/RoutingBookingInfoTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/timetable/booking/RoutingBookingInfoTest.java @@ -13,7 +13,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import org.opentripplanner.framework.time.TimeUtils; +import org.opentripplanner.utils.time.TimeUtils; class RoutingBookingInfoTest { diff --git a/application/src/test/java/org/opentripplanner/transit/speed_test/ResultPrinter.java b/application/src/test/java/org/opentripplanner/transit/speed_test/ResultPrinter.java index 29348a7e911..1d34c88f08e 100644 --- a/application/src/test/java/org/opentripplanner/transit/speed_test/ResultPrinter.java +++ b/application/src/test/java/org/opentripplanner/transit/speed_test/ResultPrinter.java @@ -1,17 +1,17 @@ package org.opentripplanner.transit.speed_test; -import static org.opentripplanner.framework.time.DurationUtils.msToSecondsStr; +import static org.opentripplanner.utils.time.DurationUtils.msToSecondsStr; import java.util.ArrayList; import java.util.List; import java.util.Map; -import org.opentripplanner.framework.lang.IntUtils; -import org.opentripplanner.framework.text.Table; import org.opentripplanner.transit.speed_test.model.SpeedTestProfile; import org.opentripplanner.transit.speed_test.model.testcase.TestCase; import org.opentripplanner.transit.speed_test.model.testcase.TestCaseFailedException; import org.opentripplanner.transit.speed_test.model.testcase.TestCases; import org.opentripplanner.transit.speed_test.model.timer.SpeedTestTimer; +import org.opentripplanner.utils.lang.IntUtils; +import org.opentripplanner.utils.text.Table; /** * Printing stuff clutters up the code, so it is convenient to put printing and formatting output diff --git a/application/src/test/java/org/opentripplanner/transit/speed_test/model/testcase/ItineraryResultMapper.java b/application/src/test/java/org/opentripplanner/transit/speed_test/model/testcase/ItineraryResultMapper.java index 24cbea4aaa0..18d742b895f 100644 --- a/application/src/test/java/org/opentripplanner/transit/speed_test/model/testcase/ItineraryResultMapper.java +++ b/application/src/test/java/org/opentripplanner/transit/speed_test/model/testcase/ItineraryResultMapper.java @@ -9,7 +9,6 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; -import org.opentripplanner.framework.lang.IntUtils; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.Leg; import org.opentripplanner.model.plan.StreetLeg; @@ -19,6 +18,7 @@ import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.organization.Agency; import org.opentripplanner.transit.model.site.StopLocation; +import org.opentripplanner.utils.lang.IntUtils; /** * Map an Itinerary to a result instance. We do this to normalize the Itinerary for the purpose of diff --git a/application/src/test/java/org/opentripplanner/transit/speed_test/model/testcase/Result.java b/application/src/test/java/org/opentripplanner/transit/speed_test/model/testcase/Result.java index d44c8e4d8cb..34c63d49dfb 100644 --- a/application/src/test/java/org/opentripplanner/transit/speed_test/model/testcase/Result.java +++ b/application/src/test/java/org/opentripplanner/transit/speed_test/model/testcase/Result.java @@ -4,10 +4,10 @@ import java.util.Collection; import java.util.Comparator; import java.util.List; -import org.opentripplanner.framework.collection.CompositeComparator; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.transit.model.basic.TransitMode; +import org.opentripplanner.utils.collection.CompositeComparator; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.time.TimeUtils; /** * This class is responsible for holding information about a test result - a single itinerary. The diff --git a/application/src/test/java/org/opentripplanner/transit/speed_test/model/testcase/TableTestReport.java b/application/src/test/java/org/opentripplanner/transit/speed_test/model/testcase/TableTestReport.java index 7534529492f..a746e744a96 100644 --- a/application/src/test/java/org/opentripplanner/transit/speed_test/model/testcase/TableTestReport.java +++ b/application/src/test/java/org/opentripplanner/transit/speed_test/model/testcase/TableTestReport.java @@ -1,16 +1,16 @@ package org.opentripplanner.transit.speed_test.model.testcase; -import static org.opentripplanner.framework.text.Table.Align.Center; -import static org.opentripplanner.framework.text.Table.Align.Left; -import static org.opentripplanner.framework.text.Table.Align.Right; +import static org.opentripplanner.utils.text.Table.Align.Center; +import static org.opentripplanner.utils.text.Table.Align.Left; +import static org.opentripplanner.utils.text.Table.Align.Right; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; -import org.opentripplanner.framework.text.Table; -import org.opentripplanner.framework.text.TableBuilder; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.routing.util.DiffEntry; +import org.opentripplanner.utils.text.Table; +import org.opentripplanner.utils.text.TableBuilder; +import org.opentripplanner.utils.time.TimeUtils; /** * This class is responsible for creating a test report as a table. The Table is easy to read and diff --git a/application/src/test/java/org/opentripplanner/transit/speed_test/model/testcase/TestCaseDefinition.java b/application/src/test/java/org/opentripplanner/transit/speed_test/model/testcase/TestCaseDefinition.java index 4a99798b10e..604a4bd1743 100644 --- a/application/src/test/java/org/opentripplanner/transit/speed_test/model/testcase/TestCaseDefinition.java +++ b/application/src/test/java/org/opentripplanner/transit/speed_test/model/testcase/TestCaseDefinition.java @@ -2,10 +2,10 @@ import java.time.Duration; import org.opentripplanner.api.parameter.QualifiedModeSet; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.time.TimeUtils; -import org.opentripplanner.framework.tostring.ValueObjectToStringBuilder; import org.opentripplanner.model.GenericLocation; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.time.TimeUtils; +import org.opentripplanner.utils.tostring.ValueObjectToStringBuilder; public record TestCaseDefinition( String id, diff --git a/application/src/test/java/org/opentripplanner/transit/speed_test/model/testcase/io/AbstractCsvFile.java b/application/src/test/java/org/opentripplanner/transit/speed_test/model/testcase/io/AbstractCsvFile.java index c703476290e..fe5287b13c3 100644 --- a/application/src/test/java/org/opentripplanner/transit/speed_test/model/testcase/io/AbstractCsvFile.java +++ b/application/src/test/java/org/opentripplanner/transit/speed_test/model/testcase/io/AbstractCsvFile.java @@ -14,9 +14,9 @@ import java.util.function.Function; import java.util.regex.Pattern; import java.util.stream.Collectors; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.transit.speed_test.model.testcase.TestCase; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.time.TimeUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/test/java/org/opentripplanner/updater/trip/TimetableSnapshotSourceTest.java b/application/src/test/java/org/opentripplanner/updater/trip/TimetableSnapshotSourceTest.java index e817c6e18bb..8e3c793666a 100644 --- a/application/src/test/java/org/opentripplanner/updater/trip/TimetableSnapshotSourceTest.java +++ b/application/src/test/java/org/opentripplanner/updater/trip/TimetableSnapshotSourceTest.java @@ -24,7 +24,6 @@ import org.opentripplanner.ConstantsForTests; import org.opentripplanner.TestOtpModel; import org.opentripplanner._support.time.ZoneIds; -import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.model.Timetable; import org.opentripplanner.model.TimetableSnapshot; import org.opentripplanner.transit.model.framework.FeedScopedId; @@ -37,6 +36,7 @@ import org.opentripplanner.transit.service.TransitService; import org.opentripplanner.updater.GtfsRealtimeFuzzyTripMatcher; import org.opentripplanner.updater.TimetableSnapshotSourceParameters; +import org.opentripplanner.utils.time.ServiceDateUtils; public class TimetableSnapshotSourceTest { diff --git a/application/src/test/java/org/opentripplanner/updater/trip/TripInput.java b/application/src/test/java/org/opentripplanner/updater/trip/TripInput.java index e4d9309061a..eb4f3685659 100644 --- a/application/src/test/java/org/opentripplanner/updater/trip/TripInput.java +++ b/application/src/test/java/org/opentripplanner/updater/trip/TripInput.java @@ -2,9 +2,9 @@ import java.util.ArrayList; import java.util.List; -import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.site.RegularStop; +import org.opentripplanner.utils.time.TimeUtils; /** * A simple data structure that is used by the {@link RealtimeTestEnvironment} to create diff --git a/application/src/test/java/org/opentripplanner/updater/trip/TripUpdateBuilder.java b/application/src/test/java/org/opentripplanner/updater/trip/TripUpdateBuilder.java index 2960d92a9cd..e8218edfc1f 100644 --- a/application/src/test/java/org/opentripplanner/updater/trip/TripUpdateBuilder.java +++ b/application/src/test/java/org/opentripplanner/updater/trip/TripUpdateBuilder.java @@ -7,7 +7,7 @@ import java.time.LocalDate; import java.time.ZoneId; import java.time.ZonedDateTime; -import org.opentripplanner.framework.time.ServiceDateUtils; +import org.opentripplanner.utils.time.ServiceDateUtils; public class TripUpdateBuilder { diff --git a/utils/src/main/java/org/opentripplanner/utils/collection/CollectionUtils.java b/utils/src/main/java/org/opentripplanner/utils/collection/CollectionUtils.java index 27473dd1383..bb53ec11037 100644 --- a/utils/src/main/java/org/opentripplanner/utils/collection/CollectionUtils.java +++ b/utils/src/main/java/org/opentripplanner/utils/collection/CollectionUtils.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.collection; +package org.opentripplanner.utils.collection; import java.util.Collection; import java.util.Map; diff --git a/utils/src/main/java/org/opentripplanner/utils/collection/CollectionsView.java b/utils/src/main/java/org/opentripplanner/utils/collection/CollectionsView.java index 4ca6ae5f555..599846f9d86 100644 --- a/utils/src/main/java/org/opentripplanner/utils/collection/CollectionsView.java +++ b/utils/src/main/java/org/opentripplanner/utils/collection/CollectionsView.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.collection; +package org.opentripplanner.utils.collection; import java.io.Serializable; import java.util.AbstractCollection; diff --git a/utils/src/main/java/org/opentripplanner/utils/collection/CompositeComparator.java b/utils/src/main/java/org/opentripplanner/utils/collection/CompositeComparator.java index 286df07370a..0c2cf445504 100644 --- a/utils/src/main/java/org/opentripplanner/utils/collection/CompositeComparator.java +++ b/utils/src/main/java/org/opentripplanner/utils/collection/CompositeComparator.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.collection; +package org.opentripplanner.utils.collection; import java.util.Comparator; diff --git a/utils/src/main/java/org/opentripplanner/utils/collection/ListSection.java b/utils/src/main/java/org/opentripplanner/utils/collection/ListSection.java index d9878aa34b1..ce582f32e65 100644 --- a/utils/src/main/java/org/opentripplanner/utils/collection/ListSection.java +++ b/utils/src/main/java/org/opentripplanner/utils/collection/ListSection.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.collection; +package org.opentripplanner.utils.collection; /** * This enum is used to signal which part of a list an operation apply to. You may remove elements diff --git a/utils/src/main/java/org/opentripplanner/utils/collection/ListUtils.java b/utils/src/main/java/org/opentripplanner/utils/collection/ListUtils.java index 35b7e083695..c2f263d0044 100644 --- a/utils/src/main/java/org/opentripplanner/utils/collection/ListUtils.java +++ b/utils/src/main/java/org/opentripplanner/utils/collection/ListUtils.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.collection; +package org.opentripplanner.utils.collection; import java.util.ArrayList; import java.util.Arrays; diff --git a/utils/src/main/java/org/opentripplanner/utils/collection/MapUtils.java b/utils/src/main/java/org/opentripplanner/utils/collection/MapUtils.java index afd1e87aec2..0a67e01b9fb 100644 --- a/utils/src/main/java/org/opentripplanner/utils/collection/MapUtils.java +++ b/utils/src/main/java/org/opentripplanner/utils/collection/MapUtils.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.collection; +package org.opentripplanner.utils.collection; import java.util.Arrays; import java.util.Collection; diff --git a/utils/src/main/java/org/opentripplanner/utils/collection/SetUtils.java b/utils/src/main/java/org/opentripplanner/utils/collection/SetUtils.java index b8f773aab72..fec99c8b28c 100644 --- a/utils/src/main/java/org/opentripplanner/utils/collection/SetUtils.java +++ b/utils/src/main/java/org/opentripplanner/utils/collection/SetUtils.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.collection; +package org.opentripplanner.utils.collection; import java.util.Arrays; import java.util.Collection; diff --git a/utils/src/main/java/org/opentripplanner/utils/lang/ArrayUtils.java b/utils/src/main/java/org/opentripplanner/utils/lang/ArrayUtils.java index a3a67cb67cd..afd8e59ec0b 100644 --- a/utils/src/main/java/org/opentripplanner/utils/lang/ArrayUtils.java +++ b/utils/src/main/java/org/opentripplanner/utils/lang/ArrayUtils.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.lang; +package org.opentripplanner.utils.lang; import javax.annotation.Nullable; diff --git a/utils/src/main/java/org/opentripplanner/utils/lang/BitSetUtils.java b/utils/src/main/java/org/opentripplanner/utils/lang/BitSetUtils.java index 1f5bdb91fab..afb9654e56e 100644 --- a/utils/src/main/java/org/opentripplanner/utils/lang/BitSetUtils.java +++ b/utils/src/main/java/org/opentripplanner/utils/lang/BitSetUtils.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.lang; +package org.opentripplanner.utils.lang; /** * A compact bit set utility class. It rely on the client to store the bit set himself (either as a diff --git a/utils/src/main/java/org/opentripplanner/utils/lang/Box.java b/utils/src/main/java/org/opentripplanner/utils/lang/Box.java index ae54a3c5b7f..e7d32acdbe9 100644 --- a/utils/src/main/java/org/opentripplanner/utils/lang/Box.java +++ b/utils/src/main/java/org/opentripplanner/utils/lang/Box.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.lang; +package org.opentripplanner.utils.lang; import java.util.Objects; import javax.annotation.Nullable; diff --git a/utils/src/main/java/org/opentripplanner/utils/lang/DoubleUtils.java b/utils/src/main/java/org/opentripplanner/utils/lang/DoubleUtils.java index 0267e9e3b5d..a285ade8ad5 100644 --- a/utils/src/main/java/org/opentripplanner/utils/lang/DoubleUtils.java +++ b/utils/src/main/java/org/opentripplanner/utils/lang/DoubleUtils.java @@ -1,6 +1,6 @@ -package org.opentripplanner.framework.lang; +package org.opentripplanner.utils.lang; -import static org.opentripplanner.framework.lang.OtpNumberFormat.formatTwoDecimals; +import static org.opentripplanner.utils.lang.OtpNumberFormat.formatTwoDecimals; import java.math.BigDecimal; import java.math.RoundingMode; diff --git a/utils/src/main/java/org/opentripplanner/utils/lang/IntBox.java b/utils/src/main/java/org/opentripplanner/utils/lang/IntBox.java index 3e7a828a526..c564f6f8e25 100644 --- a/utils/src/main/java/org/opentripplanner/utils/lang/IntBox.java +++ b/utils/src/main/java/org/opentripplanner/utils/lang/IntBox.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.lang; +package org.opentripplanner.utils.lang; /** * An IntBox is a writable container for an int. The most common use-case for this class is to diff --git a/utils/src/main/java/org/opentripplanner/utils/lang/IntRange.java b/utils/src/main/java/org/opentripplanner/utils/lang/IntRange.java index c8ff5b45d46..88477cbce27 100644 --- a/utils/src/main/java/org/opentripplanner/utils/lang/IntRange.java +++ b/utils/src/main/java/org/opentripplanner/utils/lang/IntRange.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.lang; +package org.opentripplanner.utils.lang; import java.util.Objects; import java.util.Optional; diff --git a/utils/src/main/java/org/opentripplanner/utils/lang/IntUtils.java b/utils/src/main/java/org/opentripplanner/utils/lang/IntUtils.java index de4904dcd7c..31dbd9fa72b 100644 --- a/utils/src/main/java/org/opentripplanner/utils/lang/IntUtils.java +++ b/utils/src/main/java/org/opentripplanner/utils/lang/IntUtils.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.lang; +package org.opentripplanner.utils.lang; import java.util.ArrayList; import java.util.Arrays; diff --git a/utils/src/main/java/org/opentripplanner/utils/lang/MemEfficientArrayBuilder.java b/utils/src/main/java/org/opentripplanner/utils/lang/MemEfficientArrayBuilder.java index 7bf36dd5b86..740cfa2e60c 100644 --- a/utils/src/main/java/org/opentripplanner/utils/lang/MemEfficientArrayBuilder.java +++ b/utils/src/main/java/org/opentripplanner/utils/lang/MemEfficientArrayBuilder.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.lang; +package org.opentripplanner.utils.lang; import java.util.Arrays; import java.util.Objects; diff --git a/utils/src/main/java/org/opentripplanner/utils/lang/ObjectUtils.java b/utils/src/main/java/org/opentripplanner/utils/lang/ObjectUtils.java index a3f18748987..da619cdeb79 100644 --- a/utils/src/main/java/org/opentripplanner/utils/lang/ObjectUtils.java +++ b/utils/src/main/java/org/opentripplanner/utils/lang/ObjectUtils.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.lang; +package org.opentripplanner.utils.lang; import java.util.function.Function; import java.util.function.Supplier; diff --git a/utils/src/main/java/org/opentripplanner/utils/lang/OtpNumberFormat.java b/utils/src/main/java/org/opentripplanner/utils/lang/OtpNumberFormat.java index 1ff2aca37a3..3dd1e0d76e7 100644 --- a/utils/src/main/java/org/opentripplanner/utils/lang/OtpNumberFormat.java +++ b/utils/src/main/java/org/opentripplanner/utils/lang/OtpNumberFormat.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.lang; +package org.opentripplanner.utils.lang; import java.math.BigInteger; import java.text.DecimalFormat; diff --git a/utils/src/main/java/org/opentripplanner/utils/lang/Sandbox.java b/utils/src/main/java/org/opentripplanner/utils/lang/Sandbox.java index 67c9644fc0f..5b4d83e7772 100644 --- a/utils/src/main/java/org/opentripplanner/utils/lang/Sandbox.java +++ b/utils/src/main/java/org/opentripplanner/utils/lang/Sandbox.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.lang; +package org.opentripplanner.utils.lang; import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.FIELD; diff --git a/utils/src/main/java/org/opentripplanner/utils/lang/StringUtils.java b/utils/src/main/java/org/opentripplanner/utils/lang/StringUtils.java index 5d18981e0e3..72eb2638c13 100644 --- a/utils/src/main/java/org/opentripplanner/utils/lang/StringUtils.java +++ b/utils/src/main/java/org/opentripplanner/utils/lang/StringUtils.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.lang; +package org.opentripplanner.utils.lang; import java.util.regex.Pattern; diff --git a/utils/src/main/java/org/opentripplanner/utils/logging/ProgressTracker.java b/utils/src/main/java/org/opentripplanner/utils/logging/ProgressTracker.java index 4be70e2abdf..4922186bfc6 100644 --- a/utils/src/main/java/org/opentripplanner/utils/logging/ProgressTracker.java +++ b/utils/src/main/java/org/opentripplanner/utils/logging/ProgressTracker.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.logging; +package org.opentripplanner.utils.logging; import java.io.InputStream; import java.io.OutputStream; @@ -7,8 +7,8 @@ import java.time.Instant; import java.util.concurrent.atomic.AtomicLong; import java.util.function.Consumer; -import org.opentripplanner.framework.text.FileSizeToTextConverter; -import org.opentripplanner.framework.time.DurationUtils; +import org.opentripplanner.utils.text.FileSizeToTextConverter; +import org.opentripplanner.utils.time.DurationUtils; /** * The progress tracker notify the caller based a time interval. diff --git a/utils/src/main/java/org/opentripplanner/utils/logging/ProgressTrackerInputStream.java b/utils/src/main/java/org/opentripplanner/utils/logging/ProgressTrackerInputStream.java index 1e5a5386275..6e3b71bfe66 100644 --- a/utils/src/main/java/org/opentripplanner/utils/logging/ProgressTrackerInputStream.java +++ b/utils/src/main/java/org/opentripplanner/utils/logging/ProgressTrackerInputStream.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.logging; +package org.opentripplanner.utils.logging; import java.io.IOException; import java.io.InputStream; diff --git a/utils/src/main/java/org/opentripplanner/utils/logging/ProgressTrackerOutputStream.java b/utils/src/main/java/org/opentripplanner/utils/logging/ProgressTrackerOutputStream.java index 38095634bdd..5f4583b8ed7 100644 --- a/utils/src/main/java/org/opentripplanner/utils/logging/ProgressTrackerOutputStream.java +++ b/utils/src/main/java/org/opentripplanner/utils/logging/ProgressTrackerOutputStream.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.logging; +package org.opentripplanner.utils.logging; import java.io.IOException; import java.io.OutputStream; diff --git a/utils/src/main/java/org/opentripplanner/utils/logging/Throttle.java b/utils/src/main/java/org/opentripplanner/utils/logging/Throttle.java index ed8a2c1bef4..393bef0c19a 100644 --- a/utils/src/main/java/org/opentripplanner/utils/logging/Throttle.java +++ b/utils/src/main/java/org/opentripplanner/utils/logging/Throttle.java @@ -1,7 +1,7 @@ -package org.opentripplanner.framework.logging; +package org.opentripplanner.utils.logging; import java.time.Duration; -import org.opentripplanner.framework.time.TimeUtils; +import org.opentripplanner.utils.time.TimeUtils; /** * This class can be used to throttle (logging) events. diff --git a/utils/src/main/java/org/opentripplanner/utils/text/CharacterEscapeFormatter.java b/utils/src/main/java/org/opentripplanner/utils/text/CharacterEscapeFormatter.java index 2bd5bf14b71..46faba6e806 100644 --- a/utils/src/main/java/org/opentripplanner/utils/text/CharacterEscapeFormatter.java +++ b/utils/src/main/java/org/opentripplanner/utils/text/CharacterEscapeFormatter.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.text; +package org.opentripplanner.utils.text; /** * This class is used to escape characters in a string, removing a special character from diff --git a/utils/src/main/java/org/opentripplanner/utils/text/FileSizeToTextConverter.java b/utils/src/main/java/org/opentripplanner/utils/text/FileSizeToTextConverter.java index e110d626480..41b04fd3194 100644 --- a/utils/src/main/java/org/opentripplanner/utils/text/FileSizeToTextConverter.java +++ b/utils/src/main/java/org/opentripplanner/utils/text/FileSizeToTextConverter.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.text; +package org.opentripplanner.utils.text; import java.util.Locale; diff --git a/utils/src/main/java/org/opentripplanner/utils/text/HexString.java b/utils/src/main/java/org/opentripplanner/utils/text/HexString.java index e85a139b624..16d5c56c58b 100644 --- a/utils/src/main/java/org/opentripplanner/utils/text/HexString.java +++ b/utils/src/main/java/org/opentripplanner/utils/text/HexString.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.text; +package org.opentripplanner.utils.text; /** * Converts a byte array to its hexadecimal representation diff --git a/utils/src/main/java/org/opentripplanner/utils/text/MarkdownFormatter.java b/utils/src/main/java/org/opentripplanner/utils/text/MarkdownFormatter.java index 6fdb495a0d5..95e54a1bb3f 100644 --- a/utils/src/main/java/org/opentripplanner/utils/text/MarkdownFormatter.java +++ b/utils/src/main/java/org/opentripplanner/utils/text/MarkdownFormatter.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.text; +package org.opentripplanner.utils.text; import javax.annotation.Nullable; diff --git a/utils/src/main/java/org/opentripplanner/utils/text/Table.java b/utils/src/main/java/org/opentripplanner/utils/text/Table.java index 940868b82e2..bf13c23bcf5 100644 --- a/utils/src/main/java/org/opentripplanner/utils/text/Table.java +++ b/utils/src/main/java/org/opentripplanner/utils/text/Table.java @@ -1,11 +1,11 @@ -package org.opentripplanner.framework.text; +package org.opentripplanner.utils.text; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; -import org.opentripplanner.framework.lang.ObjectUtils; -import org.opentripplanner.framework.lang.StringUtils; +import org.opentripplanner.utils.lang.ObjectUtils; +import org.opentripplanner.utils.lang.StringUtils; /** * This class is responsible for creating a pretty table that can be printed to a terminal window. diff --git a/utils/src/main/java/org/opentripplanner/utils/text/TableBuilder.java b/utils/src/main/java/org/opentripplanner/utils/text/TableBuilder.java index 12e80fd62a8..e573cce6c37 100644 --- a/utils/src/main/java/org/opentripplanner/utils/text/TableBuilder.java +++ b/utils/src/main/java/org/opentripplanner/utils/text/TableBuilder.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.text; +package org.opentripplanner.utils.text; import java.util.ArrayList; import java.util.Arrays; diff --git a/utils/src/main/java/org/opentripplanner/utils/text/TableRowFormatter.java b/utils/src/main/java/org/opentripplanner/utils/text/TableRowFormatter.java index 3e7e3c727f9..9db03403a0a 100644 --- a/utils/src/main/java/org/opentripplanner/utils/text/TableRowFormatter.java +++ b/utils/src/main/java/org/opentripplanner/utils/text/TableRowFormatter.java @@ -1,9 +1,9 @@ -package org.opentripplanner.framework.text; +package org.opentripplanner.utils.text; import java.util.List; import java.util.function.Function; -import org.opentripplanner.framework.lang.ObjectUtils; -import org.opentripplanner.framework.lang.StringUtils; +import org.opentripplanner.utils.lang.ObjectUtils; +import org.opentripplanner.utils.lang.StringUtils; class TableRowFormatter { diff --git a/utils/src/main/java/org/opentripplanner/utils/time/CountdownTimer.java b/utils/src/main/java/org/opentripplanner/utils/time/CountdownTimer.java index 5d6d89147a8..674e512c535 100644 --- a/utils/src/main/java/org/opentripplanner/utils/time/CountdownTimer.java +++ b/utils/src/main/java/org/opentripplanner/utils/time/CountdownTimer.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.time; +package org.opentripplanner.utils.time; import java.time.Duration; import java.util.function.LongSupplier; diff --git a/utils/src/main/java/org/opentripplanner/utils/time/DateUtils.java b/utils/src/main/java/org/opentripplanner/utils/time/DateUtils.java index 36f62fb0448..a72098e43ab 100644 --- a/utils/src/main/java/org/opentripplanner/utils/time/DateUtils.java +++ b/utils/src/main/java/org/opentripplanner/utils/time/DateUtils.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.time; +package org.opentripplanner.utils.time; import java.time.Duration; import java.time.Instant; diff --git a/utils/src/main/java/org/opentripplanner/utils/time/DurationUtils.java b/utils/src/main/java/org/opentripplanner/utils/time/DurationUtils.java index 362fe17410e..d73faecee03 100644 --- a/utils/src/main/java/org/opentripplanner/utils/time/DurationUtils.java +++ b/utils/src/main/java/org/opentripplanner/utils/time/DurationUtils.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.time; +package org.opentripplanner.utils.time; import static java.util.Locale.ROOT; diff --git a/utils/src/main/java/org/opentripplanner/utils/time/LocalDateUtils.java b/utils/src/main/java/org/opentripplanner/utils/time/LocalDateUtils.java index dd11065bb12..6b5bf1f8f2f 100644 --- a/utils/src/main/java/org/opentripplanner/utils/time/LocalDateUtils.java +++ b/utils/src/main/java/org/opentripplanner/utils/time/LocalDateUtils.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.time; +package org.opentripplanner.utils.time; import java.time.LocalDate; import java.time.Period; diff --git a/utils/src/main/java/org/opentripplanner/utils/time/OffsetDateTimeParser.java b/utils/src/main/java/org/opentripplanner/utils/time/OffsetDateTimeParser.java index 8b40697977a..1bf33c2959f 100644 --- a/utils/src/main/java/org/opentripplanner/utils/time/OffsetDateTimeParser.java +++ b/utils/src/main/java/org/opentripplanner/utils/time/OffsetDateTimeParser.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.time; +package org.opentripplanner.utils.time; import java.text.ParseException; import java.time.OffsetDateTime; diff --git a/utils/src/main/java/org/opentripplanner/utils/time/RelativeTime.java b/utils/src/main/java/org/opentripplanner/utils/time/RelativeTime.java index b01486f8d7f..b4b13a7c68b 100644 --- a/utils/src/main/java/org/opentripplanner/utils/time/RelativeTime.java +++ b/utils/src/main/java/org/opentripplanner/utils/time/RelativeTime.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.time; +package org.opentripplanner.utils.time; import java.time.LocalDate; import java.time.LocalTime; diff --git a/utils/src/main/java/org/opentripplanner/utils/time/ServiceDateUtils.java b/utils/src/main/java/org/opentripplanner/utils/time/ServiceDateUtils.java index a2652015155..e8243ec6355 100644 --- a/utils/src/main/java/org/opentripplanner/utils/time/ServiceDateUtils.java +++ b/utils/src/main/java/org/opentripplanner/utils/time/ServiceDateUtils.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.time; +package org.opentripplanner.utils.time; import java.text.ParseException; import java.time.Duration; diff --git a/utils/src/main/java/org/opentripplanner/utils/time/TimeUtils.java b/utils/src/main/java/org/opentripplanner/utils/time/TimeUtils.java index f2d2cf5de41..2c1bde17f1b 100644 --- a/utils/src/main/java/org/opentripplanner/utils/time/TimeUtils.java +++ b/utils/src/main/java/org/opentripplanner/utils/time/TimeUtils.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.time; +package org.opentripplanner.utils.time; import java.security.SecureRandom; import java.time.Duration; diff --git a/utils/src/main/java/org/opentripplanner/utils/tostring/MultiLineToStringBuilder.java b/utils/src/main/java/org/opentripplanner/utils/tostring/MultiLineToStringBuilder.java index 32f5762843a..a3d794aef63 100644 --- a/utils/src/main/java/org/opentripplanner/utils/tostring/MultiLineToStringBuilder.java +++ b/utils/src/main/java/org/opentripplanner/utils/tostring/MultiLineToStringBuilder.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.tostring; +package org.opentripplanner.utils.tostring; import java.time.Duration; import java.util.ArrayList; @@ -8,7 +8,7 @@ import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; -import org.opentripplanner.framework.time.DurationUtils; +import org.opentripplanner.utils.time.DurationUtils; /** * When debug logging it is much more readable if the logging is nicely formatted with line-breaks. diff --git a/utils/src/main/java/org/opentripplanner/utils/tostring/ToStringBuilder.java b/utils/src/main/java/org/opentripplanner/utils/tostring/ToStringBuilder.java index f600a2a31bc..de40951ff75 100644 --- a/utils/src/main/java/org/opentripplanner/utils/tostring/ToStringBuilder.java +++ b/utils/src/main/java/org/opentripplanner/utils/tostring/ToStringBuilder.java @@ -1,7 +1,7 @@ -package org.opentripplanner.framework.tostring; +package org.opentripplanner.utils.tostring; import static java.lang.Boolean.TRUE; -import static org.opentripplanner.framework.time.DurationUtils.durationToStr; +import static org.opentripplanner.utils.time.DurationUtils.durationToStr; import java.time.Duration; import java.time.Instant; @@ -16,10 +16,10 @@ import java.util.function.Supplier; import java.util.stream.Collectors; import javax.annotation.Nullable; -import org.opentripplanner.framework.lang.ObjectUtils; -import org.opentripplanner.framework.lang.OtpNumberFormat; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.time.TimeUtils; +import org.opentripplanner.utils.lang.ObjectUtils; +import org.opentripplanner.utils.lang.OtpNumberFormat; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.time.TimeUtils; /** * This toString builder which add elements to a compact string of the form: diff --git a/utils/src/main/java/org/opentripplanner/utils/tostring/ValueObjectToStringBuilder.java b/utils/src/main/java/org/opentripplanner/utils/tostring/ValueObjectToStringBuilder.java index 14584a8dd4a..e80323ee0fb 100644 --- a/utils/src/main/java/org/opentripplanner/utils/tostring/ValueObjectToStringBuilder.java +++ b/utils/src/main/java/org/opentripplanner/utils/tostring/ValueObjectToStringBuilder.java @@ -1,11 +1,11 @@ -package org.opentripplanner.framework.tostring; +package org.opentripplanner.utils.tostring; import java.time.Duration; import java.time.Instant; import java.util.function.Function; -import org.opentripplanner.framework.lang.OtpNumberFormat; -import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.framework.time.TimeUtils; +import org.opentripplanner.utils.lang.OtpNumberFormat; +import org.opentripplanner.utils.time.DurationUtils; +import org.opentripplanner.utils.time.TimeUtils; /** * Use this to-string-builder to build value objects. A [ValueObject](http://wiki.c2.com/?ValueObject) diff --git a/utils/src/test/java/org/opentripplanner/utils/collection/CollectionUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/collection/CollectionUtilsTest.java index 9cfe118f984..a79f91e3464 100644 --- a/utils/src/test/java/org/opentripplanner/utils/collection/CollectionUtilsTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/collection/CollectionUtilsTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.collection; +package org.opentripplanner.utils.collection; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; diff --git a/utils/src/test/java/org/opentripplanner/utils/collection/CollectionsViewTest.java b/utils/src/test/java/org/opentripplanner/utils/collection/CollectionsViewTest.java index 4196ff98e08..191540f3876 100644 --- a/utils/src/test/java/org/opentripplanner/utils/collection/CollectionsViewTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/collection/CollectionsViewTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.collection; +package org.opentripplanner.utils.collection; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; diff --git a/utils/src/test/java/org/opentripplanner/utils/collection/CompositeComparatorTest.java b/utils/src/test/java/org/opentripplanner/utils/collection/CompositeComparatorTest.java index 5329683d336..03dbb7d1c71 100644 --- a/utils/src/test/java/org/opentripplanner/utils/collection/CompositeComparatorTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/collection/CompositeComparatorTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.collection; +package org.opentripplanner.utils.collection; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/utils/src/test/java/org/opentripplanner/utils/collection/ListSectionTest.java b/utils/src/test/java/org/opentripplanner/utils/collection/ListSectionTest.java index 199804e4881..01ce5a2d336 100644 --- a/utils/src/test/java/org/opentripplanner/utils/collection/ListSectionTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/collection/ListSectionTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.collection; +package org.opentripplanner.utils.collection; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; diff --git a/utils/src/test/java/org/opentripplanner/utils/collection/ListUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/collection/ListUtilsTest.java index 33dce1f5574..602182a64b4 100644 --- a/utils/src/test/java/org/opentripplanner/utils/collection/ListUtilsTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/collection/ListUtilsTest.java @@ -1,9 +1,9 @@ -package org.opentripplanner.framework.collection; +package org.opentripplanner.utils.collection; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; -import static org.opentripplanner.framework.collection.ListUtils.first; -import static org.opentripplanner.framework.collection.ListUtils.last; +import static org.opentripplanner.utils.collection.ListUtils.first; +import static org.opentripplanner.utils.collection.ListUtils.last; import java.util.List; import org.junit.jupiter.api.Test; diff --git a/utils/src/test/java/org/opentripplanner/utils/collection/MapUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/collection/MapUtilsTest.java index 047a8e61d6b..100e56fec03 100644 --- a/utils/src/test/java/org/opentripplanner/utils/collection/MapUtilsTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/collection/MapUtilsTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.collection; +package org.opentripplanner.utils.collection; import static java.util.Collections.singleton; import static java.util.Collections.singletonList; @@ -6,7 +6,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.opentripplanner.framework.collection.MapUtils.mapToList; +import static org.opentripplanner.utils.collection.MapUtils.mapToList; import java.util.Collections; import java.util.Map; diff --git a/utils/src/test/java/org/opentripplanner/utils/collection/SetUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/collection/SetUtilsTest.java index 8e55e27e79b..e1c8d84eca3 100644 --- a/utils/src/test/java/org/opentripplanner/utils/collection/SetUtilsTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/collection/SetUtilsTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.collection; +package org.opentripplanner.utils.collection; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/utils/src/test/java/org/opentripplanner/utils/lang/ArrayUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/lang/ArrayUtilsTest.java index 8933555e75c..9d512af5770 100644 --- a/utils/src/test/java/org/opentripplanner/utils/lang/ArrayUtilsTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/lang/ArrayUtilsTest.java @@ -1,8 +1,8 @@ -package org.opentripplanner.framework.lang; +package org.opentripplanner.utils.lang; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.opentripplanner.framework.lang.ArrayUtils.hasContent; +import static org.opentripplanner.utils.lang.ArrayUtils.hasContent; import org.junit.jupiter.api.Test; diff --git a/utils/src/test/java/org/opentripplanner/utils/lang/BitSetUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/lang/BitSetUtilsTest.java index 83da400f69c..6327da849b4 100644 --- a/utils/src/test/java/org/opentripplanner/utils/lang/BitSetUtilsTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/lang/BitSetUtilsTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.lang; +package org.opentripplanner.utils.lang; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; diff --git a/utils/src/test/java/org/opentripplanner/utils/lang/BoxTest.java b/utils/src/test/java/org/opentripplanner/utils/lang/BoxTest.java index 7e072fd2f5a..b9f9218fe07 100644 --- a/utils/src/test/java/org/opentripplanner/utils/lang/BoxTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/lang/BoxTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.lang; +package org.opentripplanner.utils.lang; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; diff --git a/utils/src/test/java/org/opentripplanner/utils/lang/DoubleUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/lang/DoubleUtilsTest.java index cb3b0e8b1d6..415b5e939b9 100644 --- a/utils/src/test/java/org/opentripplanner/utils/lang/DoubleUtilsTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/lang/DoubleUtilsTest.java @@ -1,15 +1,15 @@ -package org.opentripplanner.framework.lang; +package org.opentripplanner.utils.lang; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.opentripplanner.framework.lang.DoubleUtils.requireInRange; -import static org.opentripplanner.framework.lang.DoubleUtils.roundTo1Decimal; -import static org.opentripplanner.framework.lang.DoubleUtils.roundTo2Decimals; -import static org.opentripplanner.framework.lang.DoubleUtils.roundTo3Decimals; -import static org.opentripplanner.framework.lang.DoubleUtils.roundTo4Decimals; -import static org.opentripplanner.framework.lang.DoubleUtils.roundToZeroDecimals; +import static org.opentripplanner.utils.lang.DoubleUtils.requireInRange; +import static org.opentripplanner.utils.lang.DoubleUtils.roundTo1Decimal; +import static org.opentripplanner.utils.lang.DoubleUtils.roundTo2Decimals; +import static org.opentripplanner.utils.lang.DoubleUtils.roundTo3Decimals; +import static org.opentripplanner.utils.lang.DoubleUtils.roundTo4Decimals; +import static org.opentripplanner.utils.lang.DoubleUtils.roundToZeroDecimals; import org.junit.jupiter.api.Test; diff --git a/utils/src/test/java/org/opentripplanner/utils/lang/IntBoxTest.java b/utils/src/test/java/org/opentripplanner/utils/lang/IntBoxTest.java index d2151b4bea7..1dea3cb7d79 100644 --- a/utils/src/test/java/org/opentripplanner/utils/lang/IntBoxTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/lang/IntBoxTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.lang; +package org.opentripplanner.utils.lang; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; diff --git a/utils/src/test/java/org/opentripplanner/utils/lang/IntRangeTest.java b/utils/src/test/java/org/opentripplanner/utils/lang/IntRangeTest.java index da6300b3953..f568cd5df36 100644 --- a/utils/src/test/java/org/opentripplanner/utils/lang/IntRangeTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/lang/IntRangeTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.lang; +package org.opentripplanner.utils.lang; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; diff --git a/utils/src/test/java/org/opentripplanner/utils/lang/IntUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/lang/IntUtilsTest.java index 3d5c92c9258..99b32f47f0a 100644 --- a/utils/src/test/java/org/opentripplanner/utils/lang/IntUtilsTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/lang/IntUtilsTest.java @@ -1,18 +1,18 @@ -package org.opentripplanner.framework.lang; +package org.opentripplanner.utils.lang; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.opentripplanner.framework.lang.IntUtils.concat; -import static org.opentripplanner.framework.lang.IntUtils.intArray; -import static org.opentripplanner.framework.lang.IntUtils.intArrayToString; -import static org.opentripplanner.framework.lang.IntUtils.intToString; -import static org.opentripplanner.framework.lang.IntUtils.requireInRange; -import static org.opentripplanner.framework.lang.IntUtils.requireNotNegative; -import static org.opentripplanner.framework.lang.IntUtils.requireNullOrNotNegative; -import static org.opentripplanner.framework.lang.IntUtils.shiftArray; -import static org.opentripplanner.framework.lang.IntUtils.standardDeviation; +import static org.opentripplanner.utils.lang.IntUtils.concat; +import static org.opentripplanner.utils.lang.IntUtils.intArray; +import static org.opentripplanner.utils.lang.IntUtils.intArrayToString; +import static org.opentripplanner.utils.lang.IntUtils.intToString; +import static org.opentripplanner.utils.lang.IntUtils.requireInRange; +import static org.opentripplanner.utils.lang.IntUtils.requireNotNegative; +import static org.opentripplanner.utils.lang.IntUtils.requireNullOrNotNegative; +import static org.opentripplanner.utils.lang.IntUtils.shiftArray; +import static org.opentripplanner.utils.lang.IntUtils.standardDeviation; import java.util.List; import org.junit.jupiter.api.Test; diff --git a/utils/src/test/java/org/opentripplanner/utils/lang/MemEfficientArrayBuilderTest.java b/utils/src/test/java/org/opentripplanner/utils/lang/MemEfficientArrayBuilderTest.java index 16468868fe7..99297b29f1d 100644 --- a/utils/src/test/java/org/opentripplanner/utils/lang/MemEfficientArrayBuilderTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/lang/MemEfficientArrayBuilderTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.lang; +package org.opentripplanner.utils.lang; import static java.time.DayOfWeek.MONDAY; import static java.time.DayOfWeek.SATURDAY; diff --git a/utils/src/test/java/org/opentripplanner/utils/lang/ObjectUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/lang/ObjectUtilsTest.java index 274fb3e8700..3f6283543fc 100644 --- a/utils/src/test/java/org/opentripplanner/utils/lang/ObjectUtilsTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/lang/ObjectUtilsTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.lang; +package org.opentripplanner.utils.lang; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; diff --git a/utils/src/test/java/org/opentripplanner/utils/lang/OtpNumberFormatTest.java b/utils/src/test/java/org/opentripplanner/utils/lang/OtpNumberFormatTest.java index af5d28af94b..b8cfe684692 100644 --- a/utils/src/test/java/org/opentripplanner/utils/lang/OtpNumberFormatTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/lang/OtpNumberFormatTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.lang; +package org.opentripplanner.utils.lang; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/utils/src/test/java/org/opentripplanner/utils/lang/StringUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/lang/StringUtilsTest.java index 0e67344b2bb..7e8f0a6217b 100644 --- a/utils/src/test/java/org/opentripplanner/utils/lang/StringUtilsTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/lang/StringUtilsTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.lang; +package org.opentripplanner.utils.lang; import static java.lang.Boolean.FALSE; import static java.lang.Boolean.TRUE; diff --git a/utils/src/test/java/org/opentripplanner/utils/logging/ProgressTrackerTest.java b/utils/src/test/java/org/opentripplanner/utils/logging/ProgressTrackerTest.java index fbbc7b9a7a6..c297aac136f 100644 --- a/utils/src/test/java/org/opentripplanner/utils/logging/ProgressTrackerTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/logging/ProgressTrackerTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.logging; +package org.opentripplanner.utils.logging; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; diff --git a/utils/src/test/java/org/opentripplanner/utils/logging/ThrottleTest.java b/utils/src/test/java/org/opentripplanner/utils/logging/ThrottleTest.java index c9155992daa..eec907588c6 100644 --- a/utils/src/test/java/org/opentripplanner/utils/logging/ThrottleTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/logging/ThrottleTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.logging; +package org.opentripplanner.utils.logging; import java.time.Duration; import java.util.ArrayList; diff --git a/utils/src/test/java/org/opentripplanner/utils/text/CharacterEscapeFormatterTest.java b/utils/src/test/java/org/opentripplanner/utils/text/CharacterEscapeFormatterTest.java index b33b06babb6..15dc7139f30 100644 --- a/utils/src/test/java/org/opentripplanner/utils/text/CharacterEscapeFormatterTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/text/CharacterEscapeFormatterTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.text; +package org.opentripplanner.utils.text; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; diff --git a/utils/src/test/java/org/opentripplanner/utils/text/FileSizeToTextConverterTest.java b/utils/src/test/java/org/opentripplanner/utils/text/FileSizeToTextConverterTest.java index 0d91792423b..b860ff3f09d 100644 --- a/utils/src/test/java/org/opentripplanner/utils/text/FileSizeToTextConverterTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/text/FileSizeToTextConverterTest.java @@ -1,7 +1,7 @@ -package org.opentripplanner.framework.text; +package org.opentripplanner.utils.text; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.framework.text.FileSizeToTextConverter.fileSizeToString; +import static org.opentripplanner.utils.text.FileSizeToTextConverter.fileSizeToString; import org.junit.jupiter.api.Test; diff --git a/utils/src/test/java/org/opentripplanner/utils/text/HexStringTest.java b/utils/src/test/java/org/opentripplanner/utils/text/HexStringTest.java index 2a565857155..7efc4e3fa61 100644 --- a/utils/src/test/java/org/opentripplanner/utils/text/HexStringTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/text/HexStringTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.text; +package org.opentripplanner.utils.text; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/utils/src/test/java/org/opentripplanner/utils/text/MarkdownFormatterTest.java b/utils/src/test/java/org/opentripplanner/utils/text/MarkdownFormatterTest.java index b31f7fd8a26..602d9e3b6c5 100644 --- a/utils/src/test/java/org/opentripplanner/utils/text/MarkdownFormatterTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/text/MarkdownFormatterTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.text; +package org.opentripplanner.utils.text; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/utils/src/test/java/org/opentripplanner/utils/text/TableTest.java b/utils/src/test/java/org/opentripplanner/utils/text/TableTest.java index f79a766c80c..98915faebb1 100644 --- a/utils/src/test/java/org/opentripplanner/utils/text/TableTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/text/TableTest.java @@ -1,10 +1,10 @@ -package org.opentripplanner.framework.text; +package org.opentripplanner.utils.text; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.opentripplanner.framework.text.Table.Align.Center; -import static org.opentripplanner.framework.text.Table.Align.Left; -import static org.opentripplanner.framework.text.Table.Align.Right; +import static org.opentripplanner.utils.text.Table.Align.Center; +import static org.opentripplanner.utils.text.Table.Align.Left; +import static org.opentripplanner.utils.text.Table.Align.Right; import org.junit.jupiter.api.Test; diff --git a/utils/src/test/java/org/opentripplanner/utils/time/CountdownTimerTest.java b/utils/src/test/java/org/opentripplanner/utils/time/CountdownTimerTest.java index 4d5bdd6fe1d..a30be79cbf9 100644 --- a/utils/src/test/java/org/opentripplanner/utils/time/CountdownTimerTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/time/CountdownTimerTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.time; +package org.opentripplanner.utils.time; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; diff --git a/utils/src/test/java/org/opentripplanner/utils/time/DateUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/time/DateUtilsTest.java index 6b2e493b735..ac153b9a2ba 100644 --- a/utils/src/test/java/org/opentripplanner/utils/time/DateUtilsTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/time/DateUtilsTest.java @@ -1,7 +1,7 @@ -package org.opentripplanner.framework.time; +package org.opentripplanner.utils.time; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.framework.time.DateUtils.secToHHMM; +import static org.opentripplanner.utils.time.DateUtils.secToHHMM; import java.time.LocalDate; import java.time.ZoneId; diff --git a/utils/src/test/java/org/opentripplanner/utils/time/DurationUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/time/DurationUtilsTest.java index de6ac046310..ef2e0f50901 100644 --- a/utils/src/test/java/org/opentripplanner/utils/time/DurationUtilsTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/time/DurationUtilsTest.java @@ -1,13 +1,13 @@ -package org.opentripplanner.framework.time; +package org.opentripplanner.utils.time; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.params.provider.Arguments.of; -import static org.opentripplanner.framework.time.DurationUtils.requireNonNegative; -import static org.opentripplanner.framework.time.DurationUtils.requireNonNegativeMax2days; -import static org.opentripplanner.framework.time.DurationUtils.requireNonNegativeMax2hours; -import static org.opentripplanner.framework.time.DurationUtils.requireNonNegativeMax30minutes; -import static org.opentripplanner.framework.time.DurationUtils.toIntMilliseconds; +import static org.opentripplanner.utils.time.DurationUtils.requireNonNegative; +import static org.opentripplanner.utils.time.DurationUtils.requireNonNegativeMax2days; +import static org.opentripplanner.utils.time.DurationUtils.requireNonNegativeMax2hours; +import static org.opentripplanner.utils.time.DurationUtils.requireNonNegativeMax30minutes; +import static org.opentripplanner.utils.time.DurationUtils.toIntMilliseconds; import java.time.Duration; import java.time.format.DateTimeParseException; diff --git a/utils/src/test/java/org/opentripplanner/utils/time/LocalDateUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/time/LocalDateUtilsTest.java index fa6a25ab3d7..4a0ae7e37d9 100644 --- a/utils/src/test/java/org/opentripplanner/utils/time/LocalDateUtilsTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/time/LocalDateUtilsTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.time; +package org.opentripplanner.utils.time; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/utils/src/test/java/org/opentripplanner/utils/time/OffsetDateTimeParserTest.java b/utils/src/test/java/org/opentripplanner/utils/time/OffsetDateTimeParserTest.java index d8944b9a5f0..a114cc96788 100644 --- a/utils/src/test/java/org/opentripplanner/utils/time/OffsetDateTimeParserTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/time/OffsetDateTimeParserTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.time; +package org.opentripplanner.utils.time; import static org.junit.jupiter.api.Assertions.assertTrue; diff --git a/utils/src/test/java/org/opentripplanner/utils/time/ServiceDateUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/time/ServiceDateUtilsTest.java index 92a67df9110..028b53b064a 100644 --- a/utils/src/test/java/org/opentripplanner/utils/time/ServiceDateUtilsTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/time/ServiceDateUtilsTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.time; +package org.opentripplanner.utils.time; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -6,7 +6,7 @@ import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.opentripplanner.framework.time.ServiceDateUtils.asStartOfService; +import static org.opentripplanner.utils.time.ServiceDateUtils.asStartOfService; import java.text.ParseException; import java.time.Duration; diff --git a/utils/src/test/java/org/opentripplanner/utils/time/TimeUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/time/TimeUtilsTest.java index 936102f3496..d5c0e519742 100644 --- a/utils/src/test/java/org/opentripplanner/utils/time/TimeUtilsTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/time/TimeUtilsTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.time; +package org.opentripplanner.utils.time; import static java.time.ZoneOffset.UTC; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/utils/src/test/java/org/opentripplanner/utils/time/ZoneIds.java b/utils/src/test/java/org/opentripplanner/utils/time/ZoneIds.java index e42dc718790..0e3244dcd36 100644 --- a/utils/src/test/java/org/opentripplanner/utils/time/ZoneIds.java +++ b/utils/src/test/java/org/opentripplanner/utils/time/ZoneIds.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.time; +package org.opentripplanner.utils.time; import java.time.ZoneId; diff --git a/utils/src/test/java/org/opentripplanner/utils/tostring/MultiLineToStringBuilderTest.java b/utils/src/test/java/org/opentripplanner/utils/tostring/MultiLineToStringBuilderTest.java index 495a8649cef..55b43517e18 100644 --- a/utils/src/test/java/org/opentripplanner/utils/tostring/MultiLineToStringBuilderTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/tostring/MultiLineToStringBuilderTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.tostring; +package org.opentripplanner.utils.tostring; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/utils/src/test/java/org/opentripplanner/utils/tostring/ToStringBuilderTest.java b/utils/src/test/java/org/opentripplanner/utils/tostring/ToStringBuilderTest.java index 59d1eea4d0b..477f48e7c63 100644 --- a/utils/src/test/java/org/opentripplanner/utils/tostring/ToStringBuilderTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/tostring/ToStringBuilderTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.tostring; +package org.opentripplanner.utils.tostring; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -13,8 +13,8 @@ import java.util.Objects; import java.util.function.Function; import org.junit.jupiter.api.Test; -import org.opentripplanner.framework.time.TimeUtils; -import org.opentripplanner.framework.time.ZoneIds; +import org.opentripplanner.utils.time.TimeUtils; +import org.opentripplanner.utils.time.ZoneIds; public class ToStringBuilderTest { diff --git a/utils/src/test/java/org/opentripplanner/utils/tostring/ValueObjectToStringBuilderTest.java b/utils/src/test/java/org/opentripplanner/utils/tostring/ValueObjectToStringBuilderTest.java index a59a0bf9b90..01a9beac141 100644 --- a/utils/src/test/java/org/opentripplanner/utils/tostring/ValueObjectToStringBuilderTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/tostring/ValueObjectToStringBuilderTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.framework.tostring; +package org.opentripplanner.utils.tostring; import static org.junit.jupiter.api.Assertions.assertEquals; From 031168ead5c2b8b123e1df04619ce3cead4c4ad0 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Tue, 29 Oct 2024 23:06:06 +0100 Subject: [PATCH 147/213] refactor: Fix broken architecture tests. --- .../OtpArchitectureModules.java | 18 +++++++--- .../framework/FrameworkArchitectureTest.java | 36 +++---------------- 2 files changed, 18 insertions(+), 36 deletions(-) diff --git a/application/src/test/java/org/opentripplanner/OtpArchitectureModules.java b/application/src/test/java/org/opentripplanner/OtpArchitectureModules.java index 72520acaa1c..8d6fc431f50 100644 --- a/application/src/test/java/org/opentripplanner/OtpArchitectureModules.java +++ b/application/src/test/java/org/opentripplanner/OtpArchitectureModules.java @@ -18,6 +18,9 @@ public interface OtpArchitectureModules { /* OTP Modules */ Package OTP_ROOT = Package.of("org.opentripplanner"); + + Package UTILS_PACKAGE = OTP_ROOT.subPackage("utils"); + Package DATASTORE = OTP_ROOT.subPackage("datastore"); Package FRAMEWORK = OTP_ROOT.subPackage("framework"); Module GEO_UTILS = Module.of(JTS_GEOM, FRAMEWORK.subPackage("geometry")); @@ -37,15 +40,20 @@ public interface OtpArchitectureModules { * This is a bag of TRUE util classes - no dependencies to other OTP classes or frameworks * (except true utilities like slf4j). */ + Module OTP_UTILS = Module.of( + UTILS_PACKAGE.subPackage("collection"), + UTILS_PACKAGE.subPackage("lang"), + UTILS_PACKAGE.subPackage("logging"), + UTILS_PACKAGE.subPackage("text"), + UTILS_PACKAGE.subPackage("time"), + UTILS_PACKAGE.subPackage("tostring") + ); + Module FRAMEWORK_UTILS = Module.of( + OTP_UTILS, FRAMEWORK.subPackage("application"), FRAMEWORK.subPackage("error"), FRAMEWORK.subPackage("i18n"), - FRAMEWORK.subPackage("lang"), - FRAMEWORK.subPackage("logging"), - FRAMEWORK.subPackage("text"), - FRAMEWORK.subPackage("time"), - FRAMEWORK.subPackage("tostring"), FRAMEWORK.subPackage("concurrent"), FRAMEWORK.subPackage("doc") ); diff --git a/application/src/test/java/org/opentripplanner/framework/FrameworkArchitectureTest.java b/application/src/test/java/org/opentripplanner/framework/FrameworkArchitectureTest.java index 9e44dd05dda..1bfc576d822 100644 --- a/application/src/test/java/org/opentripplanner/framework/FrameworkArchitectureTest.java +++ b/application/src/test/java/org/opentripplanner/framework/FrameworkArchitectureTest.java @@ -6,6 +6,7 @@ import static org.opentripplanner.OtpArchitectureModules.GNU_TROVE; import static org.opentripplanner.OtpArchitectureModules.JTS_GEOM; import static org.opentripplanner.OtpArchitectureModules.OPEN_GIS; +import static org.opentripplanner.OtpArchitectureModules.OTP_UTILS; import org.junit.jupiter.api.Test; import org.opentripplanner._support.arch.Module; @@ -27,16 +28,13 @@ public class FrameworkArchitectureTest { private static final Package GEOMETRY = FRAMEWORK.subPackage("geometry"); private static final Package I18N = FRAMEWORK.subPackage("i18n"); private static final Package IO = FRAMEWORK.subPackage("io"); - private static final Package LANG = FRAMEWORK.subPackage("lang"); private static final Package LOGGING = FRAMEWORK.subPackage("logging"); private static final Package RESOURCES = FRAMEWORK.subPackage("resources"); - private static final Package TEXT = FRAMEWORK.subPackage("text"); private static final Package TIME = FRAMEWORK.subPackage("time"); - private static final Package TO_STRING = FRAMEWORK.subPackage("tostring"); @Test void enforceApplicationPackageDependencies() { - APPLICATION.dependsOn(LANG).verify(); + APPLICATION.dependsOn(OTP_UTILS).verify(); } @Test @@ -52,16 +50,7 @@ void enforceFunctionalPackageDependencies() { @Test void enforceGeometryPackageDependencies() { GEOMETRY - .dependsOn( - GEO_JSON, - GEO_TOOLS, - GNU_TROVE, - JTS_GEOM, - OPEN_GIS, - LANG, - TO_STRING, - GUAVA_COLLECTIONS - ) + .dependsOn(GEO_JSON, GEO_TOOLS, GNU_TROVE, JTS_GEOM, OPEN_GIS, GUAVA_COLLECTIONS, OTP_UTILS) .verify(); } @@ -75,14 +64,9 @@ void enforceIoPackageDependencies() { IO.dependsOn(APACHE_HTTP, XML_MODULES).verify(); } - @Test - void enforceLangPackageDependencies() { - LANG.verify(); - } - @Test void enforceLoggingPackageDependencies() { - LOGGING.dependsOn(TEXT, TIME).verify(); + LOGGING.dependsOn(OTP_UTILS).verify(); } @Test @@ -90,18 +74,8 @@ void enforceResourcesPackageDependencies() { RESOURCES.verify(); } - @Test - void enforceTextPackageDependencies() { - TEXT.dependsOn(LANG).verify(); - } - @Test void enforceTimePackageDependencies() { - TIME.dependsOn(LOGGING).verify(); - } - - @Test - void enforceToStingPackageDependencies() { - TO_STRING.dependsOn(LANG, TIME).verify(); + TIME.dependsOn(OTP_UTILS).verify(); } } From 9890d0f30596ac3a9ec5c7db9a023a132ae35c6e Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Wed, 30 Oct 2024 00:44:22 +0100 Subject: [PATCH 148/213] code cleanup: Remove dependency on slf4j in otp-utils. --- utils/pom.xml | 6 --- .../opentripplanner/utils/time/DateUtils.java | 38 +----------------- .../utils/time/DateUtilsTest.java | 39 ------------------- 3 files changed, 2 insertions(+), 81 deletions(-) diff --git a/utils/pom.xml b/utils/pom.xml index 1cace007d00..7a223488dd0 100644 --- a/utils/pom.xml +++ b/utils/pom.xml @@ -19,12 +19,6 @@ jsr305 - - - org.slf4j - slf4j-api - - diff --git a/utils/src/main/java/org/opentripplanner/utils/time/DateUtils.java b/utils/src/main/java/org/opentripplanner/utils/time/DateUtils.java index a72098e43ab..e773b4e89ea 100644 --- a/utils/src/main/java/org/opentripplanner/utils/time/DateUtils.java +++ b/utils/src/main/java/org/opentripplanner/utils/time/DateUtils.java @@ -11,16 +11,12 @@ import java.time.format.DateTimeParseException; import java.util.List; import javax.annotation.Nullable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * @author Frank Purcell (p u r c e l l f @ t r i m e t . o r g) October 20, 2009 */ public class DateUtils { - private static final Logger LOG = LoggerFactory.getLogger(DateUtils.class); - private static final int SANITY_CHECK_CUTOFF_YEAR = 1000; // NOTE: don't change the order of these strings...the simplest should be on the @@ -53,9 +49,6 @@ public class DateUtils { */ @Nullable public static ZonedDateTime toZonedDateTime(String date, String time, ZoneId tz) { - //LOG.debug("JVM default timezone is {}", TimeZone.getDefault()); - LOG.debug("Parsing date {} and time {}", date, time); - LOG.debug("using timezone {}", tz); ZonedDateTime retVal = ZonedDateTime.ofInstant(Instant.now(), tz); if (date != null) { LocalDate localDate = parseDate(date); @@ -80,7 +73,6 @@ public static ZonedDateTime toZonedDateTime(String date, String time, ZoneId tz) retVal = LocalDateTime.of(retVal.toLocalDate(), localTime).atZone(tz); } } - LOG.debug("resulting date is {}", retVal); return retVal; } @@ -138,30 +130,6 @@ public static int getIntegerFromString(String input) { } } - /** - * Converts the given time in seconds to a String in the format h:mm. - * - * @param seconds the time in seconds. - * @return a String representing the time in the format h:mm - */ - public static String secToHHMM(int seconds) { - int min; - String sign = ""; - - if (seconds >= 0) { - min = seconds / 60; - sign = ""; - } else { - min = -seconds / 60; - sign = "-"; - } - - int mm = min % 60; - int hh = min / 60; - - return String.format("%s%d:%02d", sign, hh, mm); - } - public static String trim(String str) { String retVal = str; try { @@ -227,11 +195,9 @@ public static LocalTime parseTime(String time) { if (hms.length > 2) { sec = Integer.parseInt(trim(hms[2])); } - return LocalTime.of(hour, min, sec); - } catch (Exception ignore) { - LOG.info("Time '{}' didn't parse", time); - return null; + } catch (Exception e) { + throw new RuntimeException("Could not parse time: " + time, e); } } } diff --git a/utils/src/test/java/org/opentripplanner/utils/time/DateUtilsTest.java b/utils/src/test/java/org/opentripplanner/utils/time/DateUtilsTest.java index ac153b9a2ba..75621b8fadb 100644 --- a/utils/src/test/java/org/opentripplanner/utils/time/DateUtilsTest.java +++ b/utils/src/test/java/org/opentripplanner/utils/time/DateUtilsTest.java @@ -1,7 +1,6 @@ package org.opentripplanner.utils.time; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.utils.time.DateUtils.secToHHMM; import java.time.LocalDate; import java.time.ZoneId; @@ -10,24 +9,6 @@ public class DateUtilsTest { - // Create some time constants: T_(_)? - private static final int T00_00 = 0; - private static final int T00_00_01 = 1; - private static final int T00_00_59 = 59; - private static final int T00_01 = 60; - private static final int T00_05 = 300; - private static final int T08_07 = (8 * 60 + 7) * 60; - private static final int T08_47 = (8 * 60 + 47) * 60; - private static final int T35_00 = 35 * 3600; - - // Create some negative time constants: N_(_)? - private static final int N00_00_01 = -1; - private static final int N00_00_59 = -59; - private static final int N00_05 = -300; - private static final int N08_00 = -8 * 3600; - private static final int N08_07 = -(8 * 60 + 7) * 60; - private static final int N08_47 = -(8 * 60 + 47) * 60; - public static final ZoneId UTC = ZoneIds.UTC; @Test @@ -40,24 +21,4 @@ public final void testToDate() { assertEquals(LocalDate.now(UTC).toString(), date.toLocalDate().toString()); assertEquals(0, date.toEpochSecond() % TimeUtils.ONE_DAY_SECONDS); } - - @Test - public final void testSecToHHMM() { - assertEquals("0:00", secToHHMM(T00_00), "Handle zero"); - assertEquals("0:00", secToHHMM(T00_00_01), "Skip seconds(1 sec)"); - assertEquals("0:00", secToHHMM(T00_00_59), "Skip seconds(59 sec), round down"); - assertEquals("0:01", secToHHMM(T00_01), "1 minute with leading zero"); - assertEquals("0:05", secToHHMM(T00_05), "5 minutes"); - assertEquals("8:07", secToHHMM(T08_07), "Hour and min with leading zero on minute"); - assertEquals("8:47", secToHHMM(T08_47), "8 hours and 47 minutes"); - assertEquals("35:00", secToHHMM(T35_00), "allow ServiceTime beyond 24 hours"); - - // Negative times - assertEquals("-0:00", secToHHMM(N00_00_01), "1 sec - round to minus zero"); - assertEquals("-0:00", secToHHMM(N00_00_59), "59 sec - round down with minus sign"); - assertEquals("-0:05", secToHHMM(N00_05), "minus 5 min"); - assertEquals("-8:00", secToHHMM(N08_00)); - assertEquals("-8:07", secToHHMM(N08_07)); - assertEquals("-8:47", secToHHMM(N08_47)); - } } From b5ceab872d29f5d90de030dc83f355fcfaf0994d Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Wed, 30 Oct 2024 17:16:48 +0000 Subject: [PATCH 149/213] add failing test for #6102 --- .../request/TripPatternForDatesTest.java | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripPatternForDatesTest.java diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripPatternForDatesTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripPatternForDatesTest.java new file mode 100644 index 00000000000..9189a5b932a --- /dev/null +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripPatternForDatesTest.java @@ -0,0 +1,119 @@ +package org.opentripplanner.routing.algorithm.raptoradapter.transit.request; + +import static org.junit.jupiter.api.Assertions.*; + +import java.time.LocalDate; +import java.util.BitSet; +import java.util.List; +import org.junit.jupiter.api.Test; +import org.opentripplanner.model.Frequency; +import org.opentripplanner.model.StopTime; +import org.opentripplanner.raptor.api.model.SearchDirection; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.TripPatternForDate; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; +import org.opentripplanner.transit.model.framework.Deduplicator; +import org.opentripplanner.transit.model.network.Route; +import org.opentripplanner.transit.model.network.RoutingTripPattern; +import org.opentripplanner.transit.model.network.StopPattern; +import org.opentripplanner.transit.model.network.TripPattern; +import org.opentripplanner.transit.model.timetable.FrequencyEntry; +import org.opentripplanner.transit.model.timetable.TripTimes; +import org.opentripplanner.transit.model.timetable.TripTimesFactory; + +class TripPatternForDatesTest { + + private static final int FREQUENCY_START = 7 * 60 * 60; + private static final int FREQUENCY_END = 23 * 60 * 60; + private static final int HEADWAY = 300; + private static final Route ROUTE = TimetableRepositoryForTest.route("1").build(); + private static final LocalDate SERVICE_DATE = LocalDate.of(2024, 11, 1); + + @Test + void forwardSearchInRange() { + var result = getTestSubjectWithExactFrequency() + .createCustomizedTripSearch(SearchDirection.FORWARD) + .search(FREQUENCY_END - HEADWAY, 0); + assertTrue(result.time() >= FREQUENCY_END - HEADWAY); + assertTrue(result.time() < FREQUENCY_END); + } + + @Test + void forwardSearchOutOfRange() { + var result = getTestSubjectWithExactFrequency() + .createCustomizedTripSearch(SearchDirection.FORWARD) + .search(FREQUENCY_END, 0); + assertTrue(result.empty()); + } + + @Test + void reverseSearchInRange() { + var result = getTestSubjectWithExactFrequency() + .createCustomizedTripSearch(SearchDirection.REVERSE) + .search(FREQUENCY_START, 0); + assertEquals(FREQUENCY_START, result.time()); + } + + @Test + void reverseSearchOutOfRange() { + var result = getTestSubjectWithExactFrequency() + .createCustomizedTripSearch(SearchDirection.REVERSE) + .search(FREQUENCY_START - 1, 0); + assertTrue(result.empty()); + } + + private static TripPatternForDates getTestSubjectWithExactFrequency() { + var testModel = TimetableRepositoryForTest.of(); + var stop1 = testModel.stop("FEED:STOP1", 0, 0).build(); + var stop2 = testModel.stop("FEED:STOP2", 0, 0).build(); + + var stopTime1 = new StopTime(); + stopTime1.setStop(stop1); + stopTime1.setArrivalTime(0); + stopTime1.setDepartureTime(0); + stopTime1.setStopSequence(0); + var stopTime2 = new StopTime(); + stopTime2.setStop(stop2); + stopTime2.setArrivalTime(300); + stopTime2.setDepartureTime(300); + stopTime2.setStopSequence(1); + StopPattern stopPattern = new StopPattern(List.of(stopTime1, stopTime2)); + RoutingTripPattern tripPattern = TripPattern + .of(TimetableRepositoryForTest.id("P1")) + .withRoute(ROUTE) + .withStopPattern(stopPattern) + .build() + .getRoutingTripPattern(); + + final TripTimes tripTimes = TripTimesFactory.tripTimes( + TimetableRepositoryForTest.trip("1").withRoute(ROUTE).build(), + List.of(stopTime1, stopTime2), + new Deduplicator() + ); + + var frequency = new Frequency(); + frequency.setStartTime(FREQUENCY_START); + frequency.setEndTime(FREQUENCY_END); + frequency.setHeadwaySecs(HEADWAY); + frequency.setExactTimes(1); + + var boardingAndAlightingPossible = new BitSet(2); + boardingAndAlightingPossible.set(0); + boardingAndAlightingPossible.set(1); + + return new TripPatternForDates( + tripPattern, + new TripPatternForDate[] { + new TripPatternForDate( + tripPattern, + List.of(tripTimes), + List.of(new FrequencyEntry(frequency, tripTimes)), + SERVICE_DATE + ), + }, + new int[] { 0 }, + boardingAndAlightingPossible, + boardingAndAlightingPossible, + 0 + ); + } +} From d93be2538ca1fafe30d18024de5323e7a584d3d7 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Thu, 31 Oct 2024 10:24:13 +0000 Subject: [PATCH 150/213] minimal fix for #6102 --- .../transit/frequency/TripFrequencyAlightSearch.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/frequency/TripFrequencyAlightSearch.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/frequency/TripFrequencyAlightSearch.java index 2f020e22cf5..ff97fd9bdaa 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/frequency/TripFrequencyAlightSearch.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/frequency/TripFrequencyAlightSearch.java @@ -60,6 +60,6 @@ public RaptorBoardOrAlightEvent search( } } } - return null; + return RaptorBoardOrAlightEvent.empty(earliestBoardTime); } } From 719ec93c36510af186ab7dcd15924e82358a90fd Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Thu, 31 Oct 2024 15:11:27 +0100 Subject: [PATCH 151/213] Revert "Allow bike walking through bicycle no thru traffic areas" --- .../street/model/edge/StreetEdge.java | 15 ---- .../street/integration/BikeWalkingTest.java | 69 ------------------- 2 files changed, 84 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/street/model/edge/StreetEdge.java b/application/src/main/java/org/opentripplanner/street/model/edge/StreetEdge.java index 505d2a95a3a..92244fe2af2 100644 --- a/application/src/main/java/org/opentripplanner/street/model/edge/StreetEdge.java +++ b/application/src/main/java/org/opentripplanner/street/model/edge/StreetEdge.java @@ -381,21 +381,6 @@ else if (s0.currentMode() == TraverseMode.BICYCLE) { State state = editor != null ? editor.makeState() : null; - // Add an explicit bike-walking state for no-thru-traffic edges, so that dismounting and walking - // is an option to avoid the restriction - if ( - s0.getBackMode() == TraverseMode.BICYCLE && - canTraverse(TraverseMode.BICYCLE) && - isBicycleNoThruTraffic() && - !s0.hasEnteredNoThruTrafficArea() - ) { - var bikeWalk = doTraverse(s0, TraverseMode.WALK, true); - if (bikeWalk != null) { - State forkState = bikeWalk.makeState(); - return State.ofNullable(forkState, state); - } - } - // we are transitioning into a no-drop-off zone therefore we add a second state for dropping // off the vehicle and walking if (state != null && !fromv.rentalDropOffBanned(s0) && tov.rentalDropOffBanned(s0)) { diff --git a/application/src/test/java/org/opentripplanner/street/integration/BikeWalkingTest.java b/application/src/test/java/org/opentripplanner/street/integration/BikeWalkingTest.java index 1d4ec2f3f79..41ec677b3bb 100644 --- a/application/src/test/java/org/opentripplanner/street/integration/BikeWalkingTest.java +++ b/application/src/test/java/org/opentripplanner/street/integration/BikeWalkingTest.java @@ -295,75 +295,6 @@ public void testElevatorBiking() { ); } - @Test - public void testBicycleBicycleNoThruTrafficStart() { - CD.setBicycleNoThruTraffic(true); - - assertPath( - C, - F, - StreetMode.BIKE, - List.of( - "null - 0 / 0.0 - null", - "BICYCLE - 5 / 10.0 - CD street", - "BICYCLE - 5 / 10.0 - DE street", - "BICYCLE - 5 / 10.0 - EF street" - ), - List.of( - "null - 0 / 0.0 - null", - "BICYCLE - 5 / 10.0 - CD street", - "BICYCLE - 5 / 10.0 - DE street", - "BICYCLE - 5 / 10.0 - EF street" - ) - ); - } - - @Test - public void testBicycleBicycleNoThruTrafficMiddle() { - DE.setBicycleNoThruTraffic(true); - - assertPath( - C, - F, - StreetMode.BIKE, - List.of( - "null - 0 / 0.0 - null", - "BICYCLE - 5 / 10.0 - CD street", - "🚲WALK - 120 / 1100.0 - DE street", - "BICYCLE - 105 / 1010.0 - EF street" - ), - List.of( - "null - 0 / 0.0 - null", - "BICYCLE - 105 / 1010.0 - CD street", - "🚲WALK - 120 / 1100.0 - DE street", - "BICYCLE - 5 / 10.0 - EF street" - ) - ); - } - - @Test - public void testBicycleBicycleNoThruTrafficEnd() { - EF.setBicycleNoThruTraffic(true); - - assertPath( - C, - F, - StreetMode.BIKE, - List.of( - "null - 0 / 0.0 - null", - "BICYCLE - 5 / 10.0 - CD street", - "BICYCLE - 5 / 10.0 - DE street", - "BICYCLE - 5 / 10.0 - EF street" - ), - List.of( - "null - 0 / 0.0 - null", - "BICYCLE - 5 / 10.0 - CD street", - "BICYCLE - 5 / 10.0 - DE street", - "BICYCLE - 5 / 10.0 - EF street" - ) - ); - } - @BeforeEach protected void setUp() throws Exception { // Generate a very simple graph From 6e1b813caf87a37be43d999b7a6d5d2f6b522159 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Thu, 31 Oct 2024 15:19:40 +0000 Subject: [PATCH 152/213] Add changelog entry for #6119 [ci skip] --- doc/user/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/user/Changelog.md b/doc/user/Changelog.md index 4ed08a6fafe..38fd7fa12e1 100644 --- a/doc/user/Changelog.md +++ b/doc/user/Changelog.md @@ -26,6 +26,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Disable protocol upgrades for the HTTP client by default. [#6194](https://github.com/opentripplanner/OpenTripPlanner/pull/6194) - Fix max search-window when paging [#6189](https://github.com/opentripplanner/OpenTripPlanner/pull/6189) - Add car ferry functionality [#5966](https://github.com/opentripplanner/OpenTripPlanner/pull/5966) +- Make indoor=area and indoor=corridor routable for UK OSM tag mapper [#6119](https://github.com/opentripplanner/OpenTripPlanner/pull/6119) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.6.0 (2024-09-18) From 06cf46dcf43b9cb9b8b785efa8db02e98b73a7d2 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Thu, 31 Oct 2024 15:27:09 +0000 Subject: [PATCH 153/213] remove the feature flag --- .../parameter/QualifiedModeSetTest.java | 2 +- .../api/parameter/ApiRequestMode.java | 4 ---- .../framework/application/OTPFeature.java | 8 ------- .../gtfs/mapping/TransitModeMapper.java | 2 +- .../LegacyRouteRequestMapperTest.java | 24 ------------------- .../gtfs/mapping/TransitModeMapperTest.java | 14 ++--------- doc/user/Configuration.md | 1 - 7 files changed, 4 insertions(+), 51 deletions(-) diff --git a/application/src/ext-test/java/org/opentripplanner/ext/restapi/parameter/QualifiedModeSetTest.java b/application/src/ext-test/java/org/opentripplanner/ext/restapi/parameter/QualifiedModeSetTest.java index ad344713a74..7c3bf410192 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/restapi/parameter/QualifiedModeSetTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/restapi/parameter/QualifiedModeSetTest.java @@ -231,7 +231,7 @@ void carHail() { @Test void carHailWithTransit() { var modeSet = new QualifiedModeSet("CAR_HAIL,BUS,RAIL"); - assertEquals(Set.of(COACH, BUS, RAIL), Set.copyOf(modeSet.getTransitModes())); + assertEquals(Set.of(BUS, RAIL), Set.copyOf(modeSet.getTransitModes())); assertEquals(WALK, modeSet.getRequestModes().directMode); assertEquals(CAR_HAILING, modeSet.getRequestModes().accessMode); diff --git a/application/src/main/java/org/opentripplanner/api/parameter/ApiRequestMode.java b/application/src/main/java/org/opentripplanner/api/parameter/ApiRequestMode.java index c78e5dfb66f..5681bd1d76d 100644 --- a/application/src/main/java/org/opentripplanner/api/parameter/ApiRequestMode.java +++ b/application/src/main/java/org/opentripplanner/api/parameter/ApiRequestMode.java @@ -42,10 +42,6 @@ public enum ApiRequestMode { } public Collection getTransitModes() { - if (this == BUS && OTPFeature.GtfsCoach.isOff()) { - return List.of(TransitMode.BUS, TransitMode.COACH); - } - return transitModes; } } diff --git a/application/src/main/java/org/opentripplanner/framework/application/OTPFeature.java b/application/src/main/java/org/opentripplanner/framework/application/OTPFeature.java index c8816981974..324f5397673 100644 --- a/application/src/main/java/org/opentripplanner/framework/application/OTPFeature.java +++ b/application/src/main/java/org/opentripplanner/framework/application/OTPFeature.java @@ -38,14 +38,6 @@ public enum OTPFeature { "Should there be a transfer leg when transferring on the very same stop. Note that for in-seat/interlined transfers no transfer leg will be generated." ), FloatingBike(true, false, "Enable floating bike routing."), - GtfsCoach( - false, - false, - """ - When parsing GTFS data, treat GTFS route type 200 to 299 as coach routes instead of bus routes. - When using the GTFS GraphQL API, do not return coach routes when only BUS is specified as a mode. - """ - ), GtfsGraphQlApi(true, false, "Enable the [GTFS GraphQL API](apis/GTFS-GraphQL-API.md)."), GtfsGraphQlApiRentalStationFuzzyMatching( false, diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/TransitModeMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/TransitModeMapper.java index 1b5044e3530..aef5399475e 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/TransitModeMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/TransitModeMapper.java @@ -21,7 +21,7 @@ public static TransitMode mapMode(int routeType) { // Railway Service return TransitMode.RAIL; } else if (routeType >= 200 && routeType < 300) { //Coach Service - return OTPFeature.GtfsCoach.isOn() ? TransitMode.COACH : TransitMode.BUS; + return TransitMode.COACH; } else if (routeType >= 300 && routeType < 500) { //Suburban Railway Service and Urban Railway service if (routeType >= 401 && routeType <= 402) { return TransitMode.SUBWAY; diff --git a/application/src/test/java/org/opentripplanner/apis/gtfs/mapping/routerequest/LegacyRouteRequestMapperTest.java b/application/src/test/java/org/opentripplanner/apis/gtfs/mapping/routerequest/LegacyRouteRequestMapperTest.java index b42ea828462..78f287f78ac 100644 --- a/application/src/test/java/org/opentripplanner/apis/gtfs/mapping/routerequest/LegacyRouteRequestMapperTest.java +++ b/application/src/test/java/org/opentripplanner/apis/gtfs/mapping/routerequest/LegacyRouteRequestMapperTest.java @@ -27,7 +27,6 @@ import org.opentripplanner.apis.gtfs.TestRoutingService; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes; import org.opentripplanner.ext.fares.impl.DefaultFareService; -import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.model.plan.PlanTestConstants; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.preference.TimeSlopeSafetyTriangle; @@ -134,19 +133,6 @@ static Stream transportModesCases() { return Stream.of( of(List.of(), "[ExcludeAllTransitFilter{}]"), of(List.of(mode("BICYCLE")), "[ExcludeAllTransitFilter{}]"), - of( - List.of(mode("BUS")), - "[TransitFilterRequest{select: [SelectRequest{transportModes: [BUS, COACH]}]}]" - ), - of( - List.of(mode("BUS"), mode("MONORAIL")), - "[TransitFilterRequest{select: [SelectRequest{transportModes: [BUS, COACH, MONORAIL]}]}]" - ) - ); - } - - static Stream transportModesCasesWithCoach() { - return Stream.of( of( List.of(mode("BUS")), "[TransitFilterRequest{select: [SelectRequest{transportModes: [BUS]}]}]" @@ -165,16 +151,6 @@ static Stream transportModesCasesWithCoach() { @ParameterizedTest @MethodSource("transportModesCases") void modes(List> modes, String expectedFilters) { - OTPFeature.GtfsCoach.testOff(() -> testModes(modes, expectedFilters)); - } - - @ParameterizedTest - @MethodSource("transportModesCasesWithCoach") - void modesWithCoach(List> modes, String expectedFilters) { - OTPFeature.GtfsCoach.testOn(() -> testModes(modes, expectedFilters)); - } - - private void testModes(List> modes, String expectedFilters) { Map arguments = Map.of("transportModes", modes); var routeRequest = LegacyRouteRequestMapper.toRouteRequest( diff --git a/application/src/test/java/org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java b/application/src/test/java/org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java index ac1da483c86..d5086d153b6 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java @@ -45,6 +45,8 @@ static Stream testCases() { // https://groups.google.com/g/gtfs-changes/c/keT5rTPS7Y0/m/71uMz2l6ke0J?pli=1 Arguments.of(100, RAIL), Arguments.of(199, RAIL), + Arguments.of(200, COACH), + Arguments.of(299, COACH), Arguments.of(400, RAIL), Arguments.of(401, SUBWAY), Arguments.of(402, SUBWAY), @@ -86,16 +88,4 @@ static Stream testCases() { void map(int mode, TransitMode expectedMode) { assertEquals(expectedMode, TransitModeMapper.mapMode(mode)); } - - @Test - void testCoachFeatureFlag() { - OTPFeature.GtfsCoach.testOff(() -> { - assertEquals(BUS, TransitModeMapper.mapMode(200)); - assertEquals(BUS, TransitModeMapper.mapMode(299)); - }); - OTPFeature.GtfsCoach.testOn(() -> { - assertEquals(COACH, TransitModeMapper.mapMode(200)); - assertEquals(COACH, TransitModeMapper.mapMode(299)); - }); - } } diff --git a/doc/user/Configuration.md b/doc/user/Configuration.md index 1ae152d331c..bca974f8617 100644 --- a/doc/user/Configuration.md +++ b/doc/user/Configuration.md @@ -228,7 +228,6 @@ Here is a list of all features which can be toggled on/off and their default val | `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. | ✓️ | | | `ExtraTransferLegOnSameStop` | Should there be a transfer leg when transferring on the very same stop. Note that for in-seat/interlined transfers no transfer leg will be generated. | | | | `FloatingBike` | Enable floating bike routing. | ✓️ | | -| `GtfsCoach` | When parsing GTFS data, treat GTFS route type 200 to 299 as coach routes instead of bus routes. When using the GTFS GraphQL API, do not return coach routes when only BUS is specified as a mode. | | | | `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. | | | From c97579db3363841506a62e60adfb27891fd3b818 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Fri, 1 Nov 2024 08:40:24 +0000 Subject: [PATCH 154/213] Add changelog entry for #6214 [ci skip] --- doc/user/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/user/Changelog.md b/doc/user/Changelog.md index 38fd7fa12e1..ff9e4617fe7 100644 --- a/doc/user/Changelog.md +++ b/doc/user/Changelog.md @@ -27,6 +27,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Fix max search-window when paging [#6189](https://github.com/opentripplanner/OpenTripPlanner/pull/6189) - Add car ferry functionality [#5966](https://github.com/opentripplanner/OpenTripPlanner/pull/5966) - Make indoor=area and indoor=corridor routable for UK OSM tag mapper [#6119](https://github.com/opentripplanner/OpenTripPlanner/pull/6119) +- Revert [#6214](https://github.com/opentripplanner/OpenTripPlanner/pull/6214) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.6.0 (2024-09-18) From 8abf67dad7ad971775415e15a03f0ef034491ca8 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Fri, 1 Nov 2024 10:03:33 +0000 Subject: [PATCH 155/213] Add changelog entry for #6183 [ci skip] --- doc/user/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/user/Changelog.md b/doc/user/Changelog.md index ff9e4617fe7..acd9af48136 100644 --- a/doc/user/Changelog.md +++ b/doc/user/Changelog.md @@ -28,6 +28,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Add car ferry functionality [#5966](https://github.com/opentripplanner/OpenTripPlanner/pull/5966) - Make indoor=area and indoor=corridor routable for UK OSM tag mapper [#6119](https://github.com/opentripplanner/OpenTripPlanner/pull/6119) - Revert [#6214](https://github.com/opentripplanner/OpenTripPlanner/pull/6214) +- Remove reading agency and route brandingUrl from GTFS data [#6183](https://github.com/opentripplanner/OpenTripPlanner/pull/6183) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.6.0 (2024-09-18) From f2e759ce3b811e6f4bbac00ad8f738cc3b26a318 Mon Sep 17 00:00:00 2001 From: OTP Serialization Version Bot Date: Fri, 1 Nov 2024 10:03:56 +0000 Subject: [PATCH 156/213] Bump serialization version id for #6183 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9b19d252bd9..f840a971ea2 100644 --- a/pom.xml +++ b/pom.xml @@ -58,7 +58,7 @@ - 168 + 169 32.0 2.52 From 94e07bcd76033d7b13afdfaed7ffaf7928ec3fa6 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sat, 2 Nov 2024 09:39:23 +0100 Subject: [PATCH 157/213] Replace matchPackagePrefixes with wildcard matchPackageNames [ci skip] --- renovate.json5 | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/renovate.json5 b/renovate.json5 index 3514f3d9aff..4ca7db1444a 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -58,10 +58,8 @@ "me.fabriciorby:maven-surefire-junit5-tree-reporter", "com.google.truth:truth", "org.jacoco:jacoco-maven-plugin", // coverage plugin - "org.apache.commons:commons-compress" // only used by tests - ], - "matchPackagePrefixes": [ - "org.junit.jupiter:", + "org.apache.commons:commons-compress", // only used by tests + "org.junit.jupiter:{/,}**" ], "automerge": true, "schedule": "on the 17th day of the month" @@ -95,8 +93,8 @@ { // https://github.com/graphql-java-kickstart/renovate-config/blob/main/default.json "description": "GraphQL Java (ignoring snapshot builds)", - "matchPackagePrefixes": [ - "com.graphql-java:" + "matchPackageNames": [ + "com.graphql-java:{/,}**" ], "allowedVersions": "/^[0-9]+\\.[0-9]+(\\.[0-9]+)?$/" }, @@ -119,8 +117,8 @@ }, { "description": "in order to keep review burden low, don't update these quite so frequently", - "matchPackagePrefixes": [ - "org.apache.lucene:", + "matchPackageNames": [ + "org.apache.lucene:{/,}**", ], "extends": [ "schedule:quarterly" @@ -141,16 +139,16 @@ { "description": "Automerge logging dependencies in a single PR", "groupName": "logging dependencies", - "matchPackagePrefixes": [ - "org.slf4j:", - "ch.qos.logback:" + "matchPackageNames": [ + "org.slf4j:{/,}**", + "ch.qos.logback:{/,}**" ], "automerge": true, "schedule": "on the 4th day of the month" }, { "description": "give some projects time to publish a changelog before opening the PR", - "matchPackagePrefixes": [ + "matchPackageNames": [ "com.google.dagger:", "com.fasterxml.jackson" ], @@ -158,8 +156,8 @@ }, { "description": "Geotools takes a while to publish a changelog and since it pulls in JTS it can change the serialization of the graph", - "matchPackagePrefixes": [ - "org.geotools:" + "matchPackageNames": [ + "org.geotools:{/,}**" ], "minimumReleaseAge": "1 week", "labels": ["skip changelog", "bump serialization id"] From b134db108dfec595aa4f47be6fba8865d885d759 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 3 Nov 2024 18:51:26 +0000 Subject: [PATCH 158/213] Update Debug UI dependencies (non-major) --- client/package-lock.json | 777 +++++++++------------------------------ client/package.json | 18 +- 2 files changed, 185 insertions(+), 610 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index c66bb81c6fd..e71b8f6d6c6 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -12,7 +12,7 @@ "@js-temporal/polyfill": "0.4.4", "bootstrap": "5.3.3", "graphql": "16.9.0", - "graphql-request": "7.1.0", + "graphql-request": "7.1.2", "maplibre-gl": "4.7.1", "react": "18.3.1", "react-bootstrap": "2.10.5", @@ -25,24 +25,24 @@ "@graphql-codegen/introspection": "4.0.3", "@parcel/watcher": "2.4.1", "@testing-library/react": "16.0.1", - "@types/react": "18.3.11", + "@types/react": "18.3.12", "@types/react-dom": "18.3.1", "@typescript-eslint/eslint-plugin": "7.18.0", "@typescript-eslint/parser": "7.18.0", - "@vitejs/plugin-react": "4.3.2", - "@vitest/coverage-v8": "2.1.3", + "@vitejs/plugin-react": "4.3.3", + "@vitest/coverage-v8": "2.1.4", "eslint": "8.57.1", "eslint-config-prettier": "9.1.0", "eslint-plugin-import": "2.31.0", - "eslint-plugin-jsx-a11y": "6.10.0", - "eslint-plugin-react": "7.37.1", + "eslint-plugin-jsx-a11y": "6.10.2", + "eslint-plugin-react": "7.37.2", "eslint-plugin-react-hooks": "5.0.0", - "eslint-plugin-react-refresh": "0.4.12", + "eslint-plugin-react-refresh": "0.4.14", "jsdom": "25.0.1", "prettier": "3.3.3", "typescript": "5.6.3", - "vite": "5.4.9", - "vitest": "2.1.3" + "vite": "5.4.10", + "vitest": "2.1.4" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -1163,120 +1163,6 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "node_modules/@dprint/darwin-arm64": { - "version": "0.46.3", - "resolved": "https://registry.npmjs.org/@dprint/darwin-arm64/-/darwin-arm64-0.46.3.tgz", - "integrity": "sha512-1ycDpGvclGHF3UG5V6peymPDg6ouNTqM6BjhVELQ6zwr+X98AMhq/1slgO8hwHtPcaS5qhTAS+PkzOmBJRegow==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/@dprint/darwin-x64": { - "version": "0.46.3", - "resolved": "https://registry.npmjs.org/@dprint/darwin-x64/-/darwin-x64-0.46.3.tgz", - "integrity": "sha512-v5IpLmrY836Q5hJAxZuX097ZNQvoZgO6JKO4bK4l6XDhhHAw2XTIUr41+FM5r36ENxyASMk0NpHjhcHtih3o0g==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/@dprint/formatter": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@dprint/formatter/-/formatter-0.3.0.tgz", - "integrity": "sha512-N9fxCxbaBOrDkteSOzaCqwWjso5iAe+WJPsHC021JfHNj2ThInPNEF13ORDKta3llq5D1TlclODCvOvipH7bWQ==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@dprint/linux-arm64-glibc": { - "version": "0.46.3", - "resolved": "https://registry.npmjs.org/@dprint/linux-arm64-glibc/-/linux-arm64-glibc-0.46.3.tgz", - "integrity": "sha512-9P13g1vgV8RfQH2qBGa8YAfaOeWA42RIhj7lmWRpkDFtwau96reMKwnBBn8bHUnc5e6bSsbPUOMb/X1KMUKz/g==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@dprint/linux-arm64-musl": { - "version": "0.46.3", - "resolved": "https://registry.npmjs.org/@dprint/linux-arm64-musl/-/linux-arm64-musl-0.46.3.tgz", - "integrity": "sha512-AAcdcMSZ6DEIoY9E0xQHjkZP+THP7EWsQge4TWzglSIjzn31YltglHAGYFcLB4CTJYpF0NsFDNFktzgkO+s0og==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@dprint/linux-x64-glibc": { - "version": "0.46.3", - "resolved": "https://registry.npmjs.org/@dprint/linux-x64-glibc/-/linux-x64-glibc-0.46.3.tgz", - "integrity": "sha512-c5cQ3G1rC64nBZ8Pd2LGWwzkEk4D7Ax9NrBbwYmNPvs6mFbGlJPC1+RD95x2WwIrIlMIciLG+Kxmt25PzBphmg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@dprint/linux-x64-musl": { - "version": "0.46.3", - "resolved": "https://registry.npmjs.org/@dprint/linux-x64-musl/-/linux-x64-musl-0.46.3.tgz", - "integrity": "sha512-ONtk2QtLcV0TqWOCOqzUFQixgk3JC+vnJLB5L6tQwT7BX5LzeircfE/1f4dg459iqejNC9MBXZkHnXqabvWSow==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@dprint/typescript": { - "version": "0.91.1", - "resolved": "https://registry.npmjs.org/@dprint/typescript/-/typescript-0.91.1.tgz", - "integrity": "sha512-BX3TneRLf3OuO/3tsxbseHqWbpCPOOb2vOm9OlKgSYIKqOsCHpz5kWx5iDuGrNwxWWMKife/1ccz87I5tBLaNA==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@dprint/win32-x64": { - "version": "0.46.3", - "resolved": "https://registry.npmjs.org/@dprint/win32-x64/-/win32-x64-0.46.3.tgz", - "integrity": "sha512-xvj4DSEilf0gGdT7CqnwNEgfWNuWqT6eIBxHDEUbmcn1vZ7IwirtqRq/nm3lmYtQaJ4EbtMQZvACHZwxC7G96w==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, "node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", @@ -2980,85 +2866,6 @@ "gl-style-validate": "dist/gl-style-validate.mjs" } }, - "node_modules/@molt/command": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@molt/command/-/command-0.9.0.tgz", - "integrity": "sha512-1JI8dAlpqlZoXyKWVQggX7geFNPxBpocHIXQCsnxDjKy+3WX4SGyZVJXuLlqRRrX7FmQCuuMAfx642ovXmPA9g==", - "license": "MIT", - "dependencies": { - "@molt/types": "0.2.0", - "alge": "0.8.1", - "chalk": "^5.3.0", - "lodash.camelcase": "^4.3.0", - "lodash.snakecase": "^4.1.1", - "readline-sync": "^1.4.10", - "string-length": "^6.0.0", - "strip-ansi": "^7.1.0", - "ts-toolbelt": "^9.6.0", - "type-fest": "^4.3.1", - "zod": "^3.22.2" - } - }, - "node_modules/@molt/command/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@molt/command/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@molt/command/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@molt/command/node_modules/type-fest": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.18.2.tgz", - "integrity": "sha512-+suCYpfJLAe4OXS6+PPXjW3urOS4IoP9waSiLuXfLgqZODKw/aWwASvzqE886wA0kQgGy0mIWyhd87VpqIy6Xg==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@molt/types": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@molt/types/-/types-0.2.0.tgz", - "integrity": "sha512-p6ChnEZDGjg9PYPec9BK6Yp5/DdSrYQvXTBAtgrnqX6N36cZy37ql1c8Tc5LclfIYBNG7EZp8NBcRTYJwyi84g==", - "license": "MIT", - "dependencies": { - "ts-toolbelt": "^9.6.0" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3862,9 +3669,9 @@ "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" }, "node_modules/@types/react": { - "version": "18.3.11", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.11.tgz", - "integrity": "sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==", + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -4124,9 +3931,9 @@ "dev": true }, "node_modules/@vitejs/plugin-react": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.2.tgz", - "integrity": "sha512-hieu+o05v4glEBucTcKMK3dlES0OeJlD9YVOAPraVMOInBCwzumaIFiUjr4bHK7NPgnAHgiskUoceKercrN8vg==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.3.tgz", + "integrity": "sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==", "dev": true, "license": "MIT", "dependencies": { @@ -4144,21 +3951,21 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.3.tgz", - "integrity": "sha512-2OJ3c7UPoFSmBZwqD2VEkUw6A/tzPF0LmW0ZZhhB8PFxuc+9IBG/FaSM+RLEenc7ljzFvGN+G0nGQoZnh7sy2A==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.4.tgz", + "integrity": "sha512-FPKQuJfR6VTfcNMcGpqInmtJuVXFSCd9HQltYncfR01AzXhLucMEtQ5SinPdZxsT5x/5BK7I5qFJ5/ApGCmyTQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.3.0", "@bcoe/v8-coverage": "^0.2.3", - "debug": "^4.3.6", + "debug": "^4.3.7", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-lib-source-maps": "^5.0.6", "istanbul-reports": "^3.1.7", - "magic-string": "^0.30.11", - "magicast": "^0.3.4", + "magic-string": "^0.30.12", + "magicast": "^0.3.5", "std-env": "^3.7.0", "test-exclude": "^7.0.1", "tinyrainbow": "^1.2.0" @@ -4167,8 +3974,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "2.1.3", - "vitest": "2.1.3" + "@vitest/browser": "2.1.4", + "vitest": "2.1.4" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -4177,15 +3984,15 @@ } }, "node_modules/@vitest/expect": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.3.tgz", - "integrity": "sha512-SNBoPubeCJhZ48agjXruCI57DvxcsivVDdWz+SSsmjTT4QN/DfHk3zB/xKsJqMs26bLZ/pNRLnCf0j679i0uWQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.4.tgz", + "integrity": "sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.1.3", - "@vitest/utils": "2.1.3", - "chai": "^5.1.1", + "@vitest/spy": "2.1.4", + "@vitest/utils": "2.1.4", + "chai": "^5.1.2", "tinyrainbow": "^1.2.0" }, "funding": { @@ -4193,22 +4000,21 @@ } }, "node_modules/@vitest/mocker": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.3.tgz", - "integrity": "sha512-eSpdY/eJDuOvuTA3ASzCjdithHa+GIF1L4PqtEELl6Qa3XafdMLBpBlZCIUCX2J+Q6sNmjmxtosAG62fK4BlqQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.4.tgz", + "integrity": "sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.1.3", + "@vitest/spy": "2.1.4", "estree-walker": "^3.0.3", - "magic-string": "^0.30.11" + "magic-string": "^0.30.12" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/spy": "2.1.3", - "msw": "^2.3.5", + "msw": "^2.4.9", "vite": "^5.0.0" }, "peerDependenciesMeta": { @@ -4221,9 +4027,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.3.tgz", - "integrity": "sha512-XH1XdtoLZCpqV59KRbPrIhFCOO0hErxrQCMcvnQete3Vibb9UeIOX02uFPfVn3Z9ZXsq78etlfyhnkmIZSzIwQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.4.tgz", + "integrity": "sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==", "dev": true, "license": "MIT", "dependencies": { @@ -4234,13 +4040,13 @@ } }, "node_modules/@vitest/runner": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.3.tgz", - "integrity": "sha512-JGzpWqmFJ4fq5ZKHtVO3Xuy1iF2rHGV4d/pdzgkYHm1+gOzNZtqjvyiaDGJytRyMU54qkxpNzCx+PErzJ1/JqQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.4.tgz", + "integrity": "sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "2.1.3", + "@vitest/utils": "2.1.4", "pathe": "^1.1.2" }, "funding": { @@ -4248,14 +4054,14 @@ } }, "node_modules/@vitest/snapshot": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.3.tgz", - "integrity": "sha512-qWC2mWc7VAXmjAkEKxrScWHWFyCQx/cmiZtuGqMi+WwqQJ2iURsVY4ZfAK6dVo6K2smKRU6l3BPwqEBvhnpQGg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.4.tgz", + "integrity": "sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.3", - "magic-string": "^0.30.11", + "@vitest/pretty-format": "2.1.4", + "magic-string": "^0.30.12", "pathe": "^1.1.2" }, "funding": { @@ -4263,27 +4069,27 @@ } }, "node_modules/@vitest/spy": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.3.tgz", - "integrity": "sha512-Nb2UzbcUswzeSP7JksMDaqsI43Sj5+Kry6ry6jQJT4b5gAK+NS9NED6mDb8FlMRCX8m5guaHCDZmqYMMWRy5nQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.4.tgz", + "integrity": "sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg==", "dev": true, "license": "MIT", "dependencies": { - "tinyspy": "^3.0.0" + "tinyspy": "^3.0.2" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/utils": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.3.tgz", - "integrity": "sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.4.tgz", + "integrity": "sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.3", - "loupe": "^3.1.1", + "@vitest/pretty-format": "2.1.4", + "loupe": "^3.1.2", "tinyrainbow": "^1.2.0" }, "funding": { @@ -4389,18 +4195,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/alge": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/alge/-/alge-0.8.1.tgz", - "integrity": "sha512-kiV9nTt+XIauAXsowVygDxMZLplZxDWt0W8plE/nB32/V2ziM/P/TxDbSVK7FYIUt2Xo16h3/htDh199LNPCKQ==", - "license": "MIT", - "dependencies": { - "lodash.ismatch": "^4.4.0", - "remeda": "^1.0.0", - "ts-toolbelt": "^9.6.0", - "zod": "^3.17.3" - } - }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -5021,9 +4815,9 @@ } }, "node_modules/chai": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", - "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", "dev": true, "license": "MIT", "dependencies": { @@ -5482,39 +5276,6 @@ "node": ">=6" } }, - "node_modules/deep-equal": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", - "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.5", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.2", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -5676,27 +5437,6 @@ "url": "https://dotenvx.com" } }, - "node_modules/dprint": { - "version": "0.46.3", - "resolved": "https://registry.npmjs.org/dprint/-/dprint-0.46.3.tgz", - "integrity": "sha512-ACEd7B7sO/uvPvV/nsHbtkIeMqeD2a8XGO1DokROtKDUmI5WbuflGZOwyjFCYwy4rkX6FXoYBzGdEQ6um7BjCA==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "dprint": "bin.js" - }, - "optionalDependencies": { - "@dprint/darwin-arm64": "0.46.3", - "@dprint/darwin-x64": "0.46.3", - "@dprint/linux-arm64-glibc": "0.46.3", - "@dprint/linux-arm64-musl": "0.46.3", - "@dprint/linux-x64-glibc": "0.46.3", - "@dprint/linux-x64-musl": "0.46.3", - "@dprint/win32-x64": "0.46.3" - } - }, "node_modules/dset": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.3.tgz", @@ -5835,31 +5575,10 @@ "node": ">= 0.4" } }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/es-iterator-helpers": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", - "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.1.0.tgz", + "integrity": "sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==", "dev": true, "license": "MIT", "dependencies": { @@ -5870,12 +5589,12 @@ "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", + "globalthis": "^1.0.4", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", "has-symbols": "^1.0.3", "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", + "iterator.prototype": "^1.1.3", "safe-array-concat": "^1.1.2" }, "engines": { @@ -6192,13 +5911,13 @@ } }, "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.0.tgz", - "integrity": "sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", "dev": true, "license": "MIT", "dependencies": { - "aria-query": "~5.1.3", + "aria-query": "^5.3.2", "array-includes": "^3.1.8", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", @@ -6206,14 +5925,13 @@ "axobject-query": "^4.1.0", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.19", "hasown": "^2.0.2", "jsx-ast-utils": "^3.3.5", "language-tags": "^1.0.9", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "safe-regex-test": "^1.0.3", - "string.prototype.includes": "^2.0.0" + "string.prototype.includes": "^2.0.1" }, "engines": { "node": ">=4.0" @@ -6223,13 +5941,13 @@ } }, "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "dev": true, "license": "Apache-2.0", - "dependencies": { - "deep-equal": "^2.0.5" + "engines": { + "node": ">= 0.4" } }, "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { @@ -6257,9 +5975,9 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.37.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.1.tgz", - "integrity": "sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg==", + "version": "7.37.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", + "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", "dev": true, "license": "MIT", "dependencies": { @@ -6268,7 +5986,7 @@ "array.prototype.flatmap": "^1.3.2", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.19", + "es-iterator-helpers": "^1.1.0", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", @@ -6303,9 +6021,9 @@ } }, "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.12", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.12.tgz", - "integrity": "sha512-9neVjoGv20FwYtCP6CB1dzR1vr57ZDNOXst21wd2xJ/cTlM2xLq0GWVlSNTdMn/4BtP6cHYBMCSp1wFBJ9jBsg==", + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.14.tgz", + "integrity": "sha512-aXvzCTK7ZBv1e7fahFuR3Z/fyQQSIQ711yPgYRj+Oj64tyTgO4iQIDmYXDBqvSWQ/FA4OSCsXOStlF+noU0/NA==", "dev": true, "license": "MIT", "peerDependencies": { @@ -6517,6 +6235,16 @@ "node": ">=0.10.0" } }, + "node_modules/expect-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", + "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", @@ -6873,16 +6601,6 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -7045,12 +6763,14 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, + "license": "MIT", "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -7149,34 +6869,15 @@ } }, "node_modules/graphql-request": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-7.1.0.tgz", - "integrity": "sha512-Ouu/lYVFhARS1aXeZoVJWnGT6grFJXTLwXJuK4mUGGRo0EUk1JkyYp43mdGmRgUVezpRm6V5Sq3t8jBDQcajng==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-7.1.2.tgz", + "integrity": "sha512-+XE3iuC55C2di5ZUrB4pjgwe+nIQBuXVIK9J98wrVwojzDW3GMdSBZfxUk8l4j9TieIpjpggclxhNEU9ebGF8w==", "license": "MIT", "dependencies": { - "@graphql-typed-document-node/core": "^3.2.0", - "@molt/command": "^0.9.0", - "zod": "^3.23.8" - }, - "bin": { - "graffle": "build/cli/generate.js" + "@graphql-typed-document-node/core": "^3.2.0" }, "peerDependencies": { - "@dprint/formatter": "^0.3.0", - "@dprint/typescript": "^0.91.1", - "dprint": "^0.46.2", "graphql": "14 - 16" - }, - "peerDependenciesMeta": { - "@dprint/formatter": { - "optional": true - }, - "@dprint/typescript": { - "optional": true - }, - "dprint": { - "optional": true - } } }, "node_modules/graphql-tag": { @@ -7532,23 +7233,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-array-buffer": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", @@ -7576,6 +7260,7 @@ "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7694,6 +7379,7 @@ "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -7715,6 +7401,7 @@ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -8092,16 +7779,20 @@ } }, "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", + "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", "reflect.getprototypeof": "^1.0.4", "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/jackspeak": { @@ -8434,30 +8125,12 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "license": "MIT" - }, - "node_modules/lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", - "license": "MIT" - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "license": "MIT" - }, "node_modules/lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", @@ -8527,14 +8200,11 @@ } }, "node_modules/loupe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz", - "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", + "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", "dev": true, - "license": "MIT", - "dependencies": { - "get-func-name": "^2.0.1" - } + "license": "MIT" }, "node_modules/lower-case": { "version": "2.0.2", @@ -8574,9 +8244,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.11", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", - "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "version": "0.30.12", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", + "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", "dev": true, "license": "MIT", "dependencies": { @@ -8584,14 +8254,14 @@ } }, "node_modules/magicast": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.4.tgz", - "integrity": "sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.24.4", - "@babel/types": "^7.24.0", + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", "source-map-js": "^1.2.0" } }, @@ -8960,23 +8630,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-is": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -9739,20 +9392,12 @@ "node": ">= 6" } }, - "node_modules/readline-sync": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", - "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==", - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/reflect.getprototypeof": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -9803,12 +9448,6 @@ "invariant": "^2.2.4" } }, - "node_modules/remeda": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/remeda/-/remeda-1.61.0.tgz", - "integrity": "sha512-caKfSz9rDeSKBQQnlJnVW3mbVdFgxgGWQKq1XlFokqjf+hQD5gxutLGTTY2A/x24UxVyJe9gH5fAkFI63ULw4A==", - "license": "MIT" - }, "node_modules/remedial": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/remedial/-/remedial-1.0.8.tgz", @@ -10373,19 +10012,6 @@ "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", "dev": true }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "internal-slot": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -10410,48 +10036,6 @@ "integrity": "sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==", "dev": true }, - "node_modules/string-length": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-6.0.0.tgz", - "integrity": "sha512-1U361pxZHEQ+FeSjzqRpV+cu2vTzYeWeafXFLykiFlv4Vc0n3njgU8HrMbyik5uwm77naWMuVG8fhEF+Ovb1Kg==", - "license": "MIT", - "dependencies": { - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-length/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-length/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -10496,14 +10080,18 @@ "dev": true }, "node_modules/string.prototype.includes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz", - "integrity": "sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", "dev": true, "license": "MIT", "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/string.prototype.matchall": { @@ -10742,16 +10330,16 @@ "license": "MIT" }, "node_modules/tinyexec": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.0.tgz", - "integrity": "sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", + "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", "dev": true, "license": "MIT" }, "node_modules/tinypool": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.0.tgz", - "integrity": "sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.1.tgz", + "integrity": "sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==", "dev": true, "license": "MIT", "engines": { @@ -10898,12 +10486,6 @@ "integrity": "sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA==", "dev": true }, - "node_modules/ts-toolbelt": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz", - "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", - "license": "Apache-2.0" - }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -11240,9 +10822,9 @@ } }, "node_modules/vite": { - "version": "5.4.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.9.tgz", - "integrity": "sha512-20OVpJHh0PAM0oSOELa5GaZNWeDjcAvQjGXy2Uyr+Tp+/D2/Hdz6NLgpJLsarPTA2QJ6v8mX2P1ZfbsSKvdMkg==", + "version": "5.4.10", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz", + "integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11300,14 +10882,14 @@ } }, "node_modules/vite-node": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.3.tgz", - "integrity": "sha512-I1JadzO+xYX887S39Do+paRePCKoiDrWRRjp9kkG5he0t7RXNvPAJPCQSJqbGN4uCrFFeS3Kj3sLqY8NMYBEdA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.4.tgz", + "integrity": "sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==", "dev": true, "license": "MIT", "dependencies": { "cac": "^6.7.14", - "debug": "^4.3.6", + "debug": "^4.3.7", "pathe": "^1.1.2", "vite": "^5.0.0" }, @@ -11322,30 +10904,31 @@ } }, "node_modules/vitest": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.3.tgz", - "integrity": "sha512-Zrxbg/WiIvUP2uEzelDNTXmEMJXuzJ1kCpbDvaKByFA9MNeO95V+7r/3ti0qzJzrxdyuUw5VduN7k+D3VmVOSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/expect": "2.1.3", - "@vitest/mocker": "2.1.3", - "@vitest/pretty-format": "^2.1.3", - "@vitest/runner": "2.1.3", - "@vitest/snapshot": "2.1.3", - "@vitest/spy": "2.1.3", - "@vitest/utils": "2.1.3", - "chai": "^5.1.1", - "debug": "^4.3.6", - "magic-string": "^0.30.11", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.4.tgz", + "integrity": "sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "2.1.4", + "@vitest/mocker": "2.1.4", + "@vitest/pretty-format": "^2.1.4", + "@vitest/runner": "2.1.4", + "@vitest/snapshot": "2.1.4", + "@vitest/spy": "2.1.4", + "@vitest/utils": "2.1.4", + "chai": "^5.1.2", + "debug": "^4.3.7", + "expect-type": "^1.1.0", + "magic-string": "^0.30.12", "pathe": "^1.1.2", "std-env": "^3.7.0", "tinybench": "^2.9.0", - "tinyexec": "^0.3.0", - "tinypool": "^1.0.0", + "tinyexec": "^0.3.1", + "tinypool": "^1.0.1", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "2.1.3", + "vite-node": "2.1.4", "why-is-node-running": "^2.3.0" }, "bin": { @@ -11360,8 +10943,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.1.3", - "@vitest/ui": "2.1.3", + "@vitest/browser": "2.1.4", + "@vitest/ui": "2.1.4", "happy-dom": "*", "jsdom": "*" }, @@ -11512,13 +11095,14 @@ } }, "node_modules/which-builtin-type": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", + "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", "dev": true, + "license": "MIT", "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.0.5", "is-finalizationregistry": "^1.0.2", @@ -11527,8 +11111,8 @@ "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -11744,15 +11328,6 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/zod": { - "version": "3.23.8", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", - "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } } } } diff --git a/client/package.json b/client/package.json index 8f133b3d4b0..56ff4cecb5f 100644 --- a/client/package.json +++ b/client/package.json @@ -21,7 +21,7 @@ "@js-temporal/polyfill": "0.4.4", "bootstrap": "5.3.3", "graphql": "16.9.0", - "graphql-request": "7.1.0", + "graphql-request": "7.1.2", "maplibre-gl": "4.7.1", "react": "18.3.1", "react-bootstrap": "2.10.5", @@ -34,23 +34,23 @@ "@graphql-codegen/introspection": "4.0.3", "@parcel/watcher": "2.4.1", "@testing-library/react": "16.0.1", - "@types/react": "18.3.11", + "@types/react": "18.3.12", "@types/react-dom": "18.3.1", "@typescript-eslint/eslint-plugin": "7.18.0", "@typescript-eslint/parser": "7.18.0", - "@vitejs/plugin-react": "4.3.2", - "@vitest/coverage-v8": "2.1.3", + "@vitejs/plugin-react": "4.3.3", + "@vitest/coverage-v8": "2.1.4", "eslint": "8.57.1", "eslint-config-prettier": "9.1.0", "eslint-plugin-import": "2.31.0", - "eslint-plugin-jsx-a11y": "6.10.0", - "eslint-plugin-react": "7.37.1", + "eslint-plugin-jsx-a11y": "6.10.2", + "eslint-plugin-react": "7.37.2", "eslint-plugin-react-hooks": "5.0.0", - "eslint-plugin-react-refresh": "0.4.12", + "eslint-plugin-react-refresh": "0.4.14", "jsdom": "25.0.1", "prettier": "3.3.3", "typescript": "5.6.3", - "vite": "5.4.9", - "vitest": "2.1.3" + "vite": "5.4.10", + "vitest": "2.1.4" } } From d88b9c701acf57d1555006378dff62939caa5ae9 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sun, 3 Nov 2024 21:07:52 +0100 Subject: [PATCH 159/213] Fix command for pruning container images [ci skip] --- .github/workflows/prune-container-images.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/prune-container-images.yml b/.github/workflows/prune-container-images.yml index 54c450cea90..c1653701c3b 100644 --- a/.github/workflows/prune-container-images.yml +++ b/.github/workflows/prune-container-images.yml @@ -18,5 +18,5 @@ jobs: run: | # remove all snapshot container images that have not been pulled for over a year # --keep-semver makes sure that any image with a x.y.z version scheme is unaffected by this - pip install prune-container-repo==0.0.4 --break-system-packages + pip install prune-container-repo==0.0.4 prune-container-repo -u ${CONTAINER_REGISTRY_USER} -r ${CONTAINER_REPO} --days=365 --keep-semver --activate From ec3f9cbf1282b5ec029a865538a88ae1eaf2300f Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sun, 3 Nov 2024 21:34:54 +0100 Subject: [PATCH 160/213] Fix container build after conversion to multi-module build, relates to #6217 --- .github/workflows/cibuild.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cibuild.yml b/.github/workflows/cibuild.yml index e778fe25679..66162ed6b3a 100644 --- a/.github/workflows/cibuild.yml +++ b/.github/workflows/cibuild.yml @@ -235,4 +235,6 @@ jobs: echo "Maven version ${version_with_snapshot} contains SNAPSHOT, adding date to container image tag" fi - mvn --batch-mode -P prettierSkip compile com.google.cloud.tools:jib-maven-plugin:build -Djib.to.tags=latest,$image_version + MAVEN_SKIP_ARGS="-P prettierSkip -Dmaven.test.skip=true -Dmaven.source.skip=true" + + mvn --batch-mode $MAVEN_SKIP_ARGS package com.google.cloud.tools:jib-maven-plugin:build -Djib.to.tags=latest,$image_version From 0c7d45fb4de6ca4b4e6fbd97ded0419b5bc6ea1b Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sun, 3 Nov 2024 21:42:56 +0100 Subject: [PATCH 161/213] Remove unneeded eslint-disable-line --- client/src/hooks/useServerInfo.ts | 2 +- client/src/hooks/useTripQuery.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/hooks/useServerInfo.ts b/client/src/hooks/useServerInfo.ts index 117c1357360..30107f336a5 100644 --- a/client/src/hooks/useServerInfo.ts +++ b/client/src/hooks/useServerInfo.ts @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react'; import { graphql } from '../gql'; -import { request } from 'graphql-request'; // eslint-disable-line import/no-unresolved +import { request } from 'graphql-request'; import { QueryType } from '../gql/graphql.ts'; import { getApiUrl } from '../util/getApiUrl.ts'; diff --git a/client/src/hooks/useTripQuery.ts b/client/src/hooks/useTripQuery.ts index 5ff6fc80a1f..515cfae290a 100644 --- a/client/src/hooks/useTripQuery.ts +++ b/client/src/hooks/useTripQuery.ts @@ -1,5 +1,5 @@ import { useCallback, useEffect, useState } from 'react'; -import { request } from 'graphql-request'; // eslint-disable-line import/no-unresolved +import { request } from 'graphql-request'; import { QueryType, TripQueryVariables } from '../gql/graphql.ts'; import { getApiUrl } from '../util/getApiUrl.ts'; import { query } from '../static/query/tripQuery.tsx'; From ce9118c879e215cf2f0d510c198acbab15a332d1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2024 01:32:55 +0000 Subject: [PATCH 162/213] Update dependency ch.qos.logback:logback-classic to v1.5.12 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d2655cbdcb6..2468ced4658 100644 --- a/pom.xml +++ b/pom.xml @@ -67,7 +67,7 @@ 5.11.2 1.13.5 5.6.0 - 1.5.8 + 1.5.12 9.12.0 2.0.16 2.0.15 From 98b0cc5cdd9c9ca0658bd2d551d3e45c5bac2d08 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Mon, 4 Nov 2024 07:18:01 +0000 Subject: [PATCH 163/213] Add changelog entry for #6211 [ci skip] --- doc/user/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/user/Changelog.md b/doc/user/Changelog.md index acd9af48136..b1064503a68 100644 --- a/doc/user/Changelog.md +++ b/doc/user/Changelog.md @@ -29,6 +29,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Make indoor=area and indoor=corridor routable for UK OSM tag mapper [#6119](https://github.com/opentripplanner/OpenTripPlanner/pull/6119) - Revert [#6214](https://github.com/opentripplanner/OpenTripPlanner/pull/6214) - Remove reading agency and route brandingUrl from GTFS data [#6183](https://github.com/opentripplanner/OpenTripPlanner/pull/6183) +- Fix NullPointerException when searching backwards with a frequency-based trip [#6211](https://github.com/opentripplanner/OpenTripPlanner/pull/6211) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.6.0 (2024-09-18) From 15727f57c376be3e63f4414bfefa85086d6f141e Mon Sep 17 00:00:00 2001 From: OTP Bot Date: Mon, 4 Nov 2024 11:24:29 +0000 Subject: [PATCH 164/213] Upgrade debug client to version 2024/11/2024-11-04T11:23 --- application/src/client/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/src/client/index.html b/application/src/client/index.html index caeb0a726dd..d43beb177ee 100644 --- a/application/src/client/index.html +++ b/application/src/client/index.html @@ -5,8 +5,8 @@ OTP Debug Client - - + +

    From 7a3099bde1488e43512d611f3c3a5603d05b82e0 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 4 Nov 2024 12:48:19 +0100 Subject: [PATCH 165/213] Fix @graphql/client-preset --- client/codegen.ts | 3 + client/package-lock.json | 235 +++++++++------------------------------ client/package.json | 2 +- renovate.json5 | 6 +- 4 files changed, 55 insertions(+), 191 deletions(-) diff --git a/client/codegen.ts b/client/codegen.ts index 60299a21a97..a8ad1e40c49 100644 --- a/client/codegen.ts +++ b/client/codegen.ts @@ -9,6 +9,9 @@ const config: CodegenConfig = { preset: 'client', plugins: [], }, + 'src/gql/types.generated.ts': { + plugins: ['typescript'], + }, }, }; diff --git a/client/package-lock.json b/client/package-lock.json index e71b8f6d6c6..a438e9403fd 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -21,7 +21,7 @@ }, "devDependencies": { "@graphql-codegen/cli": "5.0.3", - "@graphql-codegen/client-preset": "4.3.3", + "@graphql-codegen/client-preset": "4.5.0", "@graphql-codegen/introspection": "4.0.3", "@parcel/watcher": "2.4.1", "@testing-library/react": "16.0.1", @@ -1741,22 +1741,22 @@ } } }, - "node_modules/@graphql-codegen/cli/node_modules/@graphql-codegen/client-preset": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/client-preset/-/client-preset-4.4.0.tgz", - "integrity": "sha512-Q0NHFK7KXLhEaRC/k82ge0dHDfeHJEvvDeV0vV3+oSurHNa/lpxQtbK2BqknZe+JDfZ1YOOvYT93XsAkYD+SQg==", + "node_modules/@graphql-codegen/client-preset": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/client-preset/-/client-preset-4.5.0.tgz", + "integrity": "sha512-0fFGSjpDhB7Jp6v+FQWDIeNJhL8VEiy3zeazyus3mGUELPaRQsoos2NczkDWnyMjSB1NHn4GrI53DB4TXkTAog==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/template": "^7.20.7", "@graphql-codegen/add": "^5.0.3", - "@graphql-codegen/gql-tag-operations": "4.0.10", - "@graphql-codegen/plugin-helpers": "^5.0.4", - "@graphql-codegen/typed-document-node": "^5.0.10", - "@graphql-codegen/typescript": "^4.1.0", - "@graphql-codegen/typescript-operations": "^4.3.0", - "@graphql-codegen/visitor-plugin-common": "^5.4.0", + "@graphql-codegen/gql-tag-operations": "4.0.11", + "@graphql-codegen/plugin-helpers": "^5.1.0", + "@graphql-codegen/typed-document-node": "^5.0.11", + "@graphql-codegen/typescript": "^4.1.1", + "@graphql-codegen/typescript-operations": "^4.3.1", + "@graphql-codegen/visitor-plugin-common": "^5.5.0", "@graphql-tools/documents": "^1.0.0", "@graphql-tools/utils": "^10.0.0", "@graphql-typed-document-node/core": "3.2.0", @@ -1769,76 +1769,6 @@ "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@graphql-codegen/cli/node_modules/@graphql-codegen/gql-tag-operations": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-4.0.10.tgz", - "integrity": "sha512-WsBEVL3XQdBboFJJL5WxrUjkuo3B7Sa51R9NbT7PKBe0HCNstoouGZIvQJRUubttFCqTTyoFtNsoRSKB+rsRug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.4", - "@graphql-codegen/visitor-plugin-common": "5.4.0", - "@graphql-tools/utils": "^10.0.0", - "auto-bind": "~4.0.0", - "tslib": "~2.6.0" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" - } - }, - "node_modules/@graphql-codegen/cli/node_modules/@graphql-codegen/visitor-plugin-common": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.4.0.tgz", - "integrity": "sha512-tL7hOrO+4MiNfDiHewhRQCiH9GTAh0M9Y/BZxYGGEdnrfGgqK5pCxtjq7EY/L19VGIyU7hhzYTQ0r1HzEbB4Jw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.4", - "@graphql-tools/optimize": "^2.0.0", - "@graphql-tools/relay-operation-optimizer": "^7.0.0", - "@graphql-tools/utils": "^10.0.0", - "auto-bind": "~4.0.0", - "change-case-all": "1.0.15", - "dependency-graph": "^0.11.0", - "graphql-tag": "^2.11.0", - "parse-filepath": "^1.0.2", - "tslib": "~2.6.0" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" - } - }, - "node_modules/@graphql-codegen/client-preset": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@graphql-codegen/client-preset/-/client-preset-4.3.3.tgz", - "integrity": "sha512-IrDsSVe8bkKtxgVfKPHzjL9tYlv7KEpA59R4gZLqx/t2WIJncW1i0OMvoz9tgoZsFEs8OKKgXZbnwPZ/Qf1kEw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/template": "^7.20.7", - "@graphql-codegen/add": "^5.0.3", - "@graphql-codegen/gql-tag-operations": "4.0.9", - "@graphql-codegen/plugin-helpers": "^5.0.4", - "@graphql-codegen/typed-document-node": "^5.0.9", - "@graphql-codegen/typescript": "^4.0.9", - "@graphql-codegen/typescript-operations": "^4.2.3", - "@graphql-codegen/visitor-plugin-common": "^5.3.1", - "@graphql-tools/documents": "^1.0.0", - "@graphql-tools/utils": "^10.0.0", - "@graphql-typed-document-node/core": "3.2.0", - "tslib": "~2.6.0" - }, - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" - } - }, "node_modules/@graphql-codegen/core": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@graphql-codegen/core/-/core-4.0.2.tgz", @@ -1855,18 +1785,21 @@ } }, "node_modules/@graphql-codegen/gql-tag-operations": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-4.0.9.tgz", - "integrity": "sha512-lVgu1HClel896HqZAEjynatlU6eJrYOw+rh05DPgM150xvmb7Gz5TnRHA2vfwlDNIXDaToAIpz5RFfkjjnYM1Q==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-4.0.11.tgz", + "integrity": "sha512-EUQuBsYB5RtNlzBb/O0nJvbWC8HvPRWwVTHRf0ElOoQlJfRgfDom2GWmEM5hXa2afzMqB7AWxOH24ibOqiYnMQ==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.4", - "@graphql-codegen/visitor-plugin-common": "5.3.1", + "@graphql-codegen/plugin-helpers": "^5.1.0", + "@graphql-codegen/visitor-plugin-common": "5.5.0", "@graphql-tools/utils": "^10.0.0", "auto-bind": "~4.0.0", "tslib": "~2.6.0" }, + "engines": { + "node": ">=16" + }, "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } @@ -1886,9 +1819,9 @@ } }, "node_modules/@graphql-codegen/plugin-helpers": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-5.0.4.tgz", - "integrity": "sha512-MOIuHFNWUnFnqVmiXtrI+4UziMTYrcquljaI5f/T/Bc7oO7sXcfkAvgkNWEEi9xWreYwvuer3VHCuPI/lAFWbw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-5.1.0.tgz", + "integrity": "sha512-Y7cwEAkprbTKzVIe436TIw4w03jorsMruvCvu0HJkavaKMQbWY+lQ1RIuROgszDbxAyM35twB5/sUvYG5oW+yg==", "dev": true, "license": "MIT", "dependencies": { @@ -1899,15 +1832,19 @@ "lodash": "~4.17.0", "tslib": "~2.6.0" }, + "engines": { + "node": ">=16" + }, "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, "node_modules/@graphql-codegen/schema-ast": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@graphql-codegen/schema-ast/-/schema-ast-4.0.2.tgz", - "integrity": "sha512-5mVAOQQK3Oz7EtMl/l3vOQdc2aYClUzVDHHkMvZlunc+KlGgl81j8TLa+X7ANIllqU4fUEsQU3lJmk4hXP6K7Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/schema-ast/-/schema-ast-4.1.0.tgz", + "integrity": "sha512-kZVn0z+th9SvqxfKYgztA6PM7mhnSZaj4fiuBWvMTqA+QqQ9BBed6Pz41KuD/jr0gJtnlr2A4++/0VlpVbCTmQ==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.0.3", "@graphql-tools/utils": "^10.0.0", @@ -1918,14 +1855,14 @@ } }, "node_modules/@graphql-codegen/typed-document-node": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typed-document-node/-/typed-document-node-5.0.10.tgz", - "integrity": "sha512-YPDUNs6x0muoVWlbY2yEs0lGxFHMTszlGDh6klT/5rqiTDTZg3zz8Wd1ZTihkcH8+V6T0AT9qDWwcx9fcS2tvQ==", + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typed-document-node/-/typed-document-node-5.0.11.tgz", + "integrity": "sha512-btENKrSIUZ5UllS8sFhVZ+Y91VL0knK9gHxW/6/WzaCTxBQ+wOk07vQNeoWlvMrkl0QeUsGt6YvSo0SoPtsKdA==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.4", - "@graphql-codegen/visitor-plugin-common": "5.4.0", + "@graphql-codegen/plugin-helpers": "^5.1.0", + "@graphql-codegen/visitor-plugin-common": "5.5.0", "auto-bind": "~4.0.0", "change-case-all": "1.0.15", "tslib": "~2.6.0" @@ -1937,41 +1874,16 @@ "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@graphql-codegen/typed-document-node/node_modules/@graphql-codegen/visitor-plugin-common": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.4.0.tgz", - "integrity": "sha512-tL7hOrO+4MiNfDiHewhRQCiH9GTAh0M9Y/BZxYGGEdnrfGgqK5pCxtjq7EY/L19VGIyU7hhzYTQ0r1HzEbB4Jw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.4", - "@graphql-tools/optimize": "^2.0.0", - "@graphql-tools/relay-operation-optimizer": "^7.0.0", - "@graphql-tools/utils": "^10.0.0", - "auto-bind": "~4.0.0", - "change-case-all": "1.0.15", - "dependency-graph": "^0.11.0", - "graphql-tag": "^2.11.0", - "parse-filepath": "^1.0.2", - "tslib": "~2.6.0" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" - } - }, "node_modules/@graphql-codegen/typescript": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-4.1.0.tgz", - "integrity": "sha512-/fS53Nh6U6c58GTOxqfyKTLQfQv36P8II/vPw/fg0cdcWbALhRPls69P8vXUWjrElmLKzCrdusBWPp/r+AKUBQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-4.1.1.tgz", + "integrity": "sha512-+o5LOT71K9hdO4lDVnRGkkET5RdlKvxlQGug8dZgRGrhE2/xoPBsKfLhg9AoJGYMauNZxKj3blABQxHOKEku6Q==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.4", + "@graphql-codegen/plugin-helpers": "^5.1.0", "@graphql-codegen/schema-ast": "^4.0.2", - "@graphql-codegen/visitor-plugin-common": "5.4.0", + "@graphql-codegen/visitor-plugin-common": "5.5.0", "auto-bind": "~4.0.0", "tslib": "~2.6.0" }, @@ -1983,15 +1895,15 @@ } }, "node_modules/@graphql-codegen/typescript-operations": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-4.3.0.tgz", - "integrity": "sha512-ZORwMy8OgsiYd9EZUhTMd4/g5LvTFpx6Fh6dNN0cxFkqSc6KhjX0vhzWsyK8N9+ILaHSutT8UTrLMdJi35HzDQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-4.3.1.tgz", + "integrity": "sha512-yW5Iia6IK1VKiPm3oeukYMQN5pEBLwRlG8ZzQA9beeLQ8PskKyz6mjar6U7dJ2hc8pv/qT4R8kcJOQ2RloniAQ==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.4", - "@graphql-codegen/typescript": "^4.1.0", - "@graphql-codegen/visitor-plugin-common": "5.4.0", + "@graphql-codegen/plugin-helpers": "^5.1.0", + "@graphql-codegen/typescript": "^4.1.1", + "@graphql-codegen/visitor-plugin-common": "5.5.0", "auto-bind": "~4.0.0", "tslib": "~2.6.0" }, @@ -2002,39 +1914,14 @@ "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@graphql-codegen/typescript-operations/node_modules/@graphql-codegen/visitor-plugin-common": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.4.0.tgz", - "integrity": "sha512-tL7hOrO+4MiNfDiHewhRQCiH9GTAh0M9Y/BZxYGGEdnrfGgqK5pCxtjq7EY/L19VGIyU7hhzYTQ0r1HzEbB4Jw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.4", - "@graphql-tools/optimize": "^2.0.0", - "@graphql-tools/relay-operation-optimizer": "^7.0.0", - "@graphql-tools/utils": "^10.0.0", - "auto-bind": "~4.0.0", - "change-case-all": "1.0.15", - "dependency-graph": "^0.11.0", - "graphql-tag": "^2.11.0", - "parse-filepath": "^1.0.2", - "tslib": "~2.6.0" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" - } - }, - "node_modules/@graphql-codegen/typescript/node_modules/@graphql-codegen/visitor-plugin-common": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.4.0.tgz", - "integrity": "sha512-tL7hOrO+4MiNfDiHewhRQCiH9GTAh0M9Y/BZxYGGEdnrfGgqK5pCxtjq7EY/L19VGIyU7hhzYTQ0r1HzEbB4Jw==", + "node_modules/@graphql-codegen/visitor-plugin-common": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.5.0.tgz", + "integrity": "sha512-FSkxe/o4qKbpK+ipIT/jxZLYH0+3+XdIrJWsKlCW9wwJMF9mEJLJtzZNcxHSjz7+Eny6SUElAT2dqZ5XByxkog==", "dev": true, "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.4", + "@graphql-codegen/plugin-helpers": "^5.1.0", "@graphql-tools/optimize": "^2.0.0", "@graphql-tools/relay-operation-optimizer": "^7.0.0", "@graphql-tools/utils": "^10.0.0", @@ -2052,28 +1939,6 @@ "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@graphql-codegen/visitor-plugin-common": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.3.1.tgz", - "integrity": "sha512-MktoBdNZhSmugiDjmFl1z6rEUUaqyxtFJYWnDilE7onkPgyw//O0M+TuPBJPBWdyV6J2ond0Hdqtq+rkghgSIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.4", - "@graphql-tools/optimize": "^2.0.0", - "@graphql-tools/relay-operation-optimizer": "^7.0.0", - "@graphql-tools/utils": "^10.0.0", - "auto-bind": "~4.0.0", - "change-case-all": "1.0.15", - "dependency-graph": "^0.11.0", - "graphql-tag": "^2.11.0", - "parse-filepath": "^1.0.2", - "tslib": "~2.6.0" - }, - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" - } - }, "node_modules/@graphql-tools/apollo-engine-loader": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-8.0.1.tgz", diff --git a/client/package.json b/client/package.json index 56ff4cecb5f..9753fae9777 100644 --- a/client/package.json +++ b/client/package.json @@ -30,7 +30,7 @@ }, "devDependencies": { "@graphql-codegen/cli": "5.0.3", - "@graphql-codegen/client-preset": "4.3.3", + "@graphql-codegen/client-preset": "4.5.0", "@graphql-codegen/introspection": "4.0.3", "@parcel/watcher": "2.4.1", "@testing-library/react": "16.0.1", diff --git a/renovate.json5 b/renovate.json5 index 4ca7db1444a..b46a098392a 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -26,11 +26,7 @@ "com.azure.resourcemanager:azure-resourcemanager-servicebus", "com.azure:azure-core", "com.azure:azure-messaging-servicebus", - "com.azure:azure-identity", - // there is a breaking change in this package which is breaking our workflow, that cannot - // be reverted: https://github.com/dotansimha/graphql-code-generator/issues/10167 - // once that is resolved, we can remove this line - "@graphql-codegen/client-preset" + "com.azure:azure-identity" ], "enabled": false }, From ade4c97e3550c0b84709c7e91d69f0a63402580c Mon Sep 17 00:00:00 2001 From: OTP Bot Date: Mon, 4 Nov 2024 12:49:48 +0000 Subject: [PATCH 166/213] Upgrade debug client to version 2024/11/2024-11-04T12:49 --- application/src/client/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/src/client/index.html b/application/src/client/index.html index d43beb177ee..b5df7bb65aa 100644 --- a/application/src/client/index.html +++ b/application/src/client/index.html @@ -5,8 +5,8 @@ OTP Debug Client - - + +
    From 183117248598de09e43f62143fc849a8706bc32c Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Mon, 4 Nov 2024 14:22:29 +0100 Subject: [PATCH 167/213] refactor: Rename ToveUtils to TroveUtils --- .../collection/{ToveUtils.java => TroveUtils.java} | 2 +- .../graph_builder/module/osm/DisjointSet.java | 4 ++-- .../graph_builder/module/osm/OsmDatabase.java | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) rename application/src/main/java/org/opentripplanner/framework/collection/{ToveUtils.java => TroveUtils.java} (93%) diff --git a/application/src/main/java/org/opentripplanner/framework/collection/ToveUtils.java b/application/src/main/java/org/opentripplanner/framework/collection/TroveUtils.java similarity index 93% rename from application/src/main/java/org/opentripplanner/framework/collection/ToveUtils.java rename to application/src/main/java/org/opentripplanner/framework/collection/TroveUtils.java index 5958845e2b5..d3b59624eb9 100644 --- a/application/src/main/java/org/opentripplanner/framework/collection/ToveUtils.java +++ b/application/src/main/java/org/opentripplanner/framework/collection/TroveUtils.java @@ -4,7 +4,7 @@ import java.util.HashSet; import java.util.Set; -public class ToveUtils { +public class TroveUtils { public static void addToMapSet(TLongObjectMap> mapSet, long key, U value) { Set set = mapSet.get(key); diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/osm/DisjointSet.java b/application/src/main/java/org/opentripplanner/graph_builder/module/osm/DisjointSet.java index 369e5c20a14..d130a435eaf 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/osm/DisjointSet.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/osm/DisjointSet.java @@ -9,7 +9,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; -import org.opentripplanner.framework.collection.ToveUtils; +import org.opentripplanner.framework.collection.TroveUtils; /** Basic union-find data structure with path compression */ class DisjointSet { @@ -62,7 +62,7 @@ public boolean exists(T element) { public List> sets() { TLongObjectMap> out = new TLongObjectHashMap<>(); setMapping.forEachEntry((k, v) -> { - ToveUtils.addToMapSet(out, compact(v), k); + TroveUtils.addToMapSet(out, compact(v), k); return true; }); return new ArrayList<>(out.valueCollection()); diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java b/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java index 382b206a053..0781b73f076 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmDatabase.java @@ -24,7 +24,7 @@ import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.LineString; import org.locationtech.jts.geom.Point; -import org.opentripplanner.framework.collection.ToveUtils; +import org.opentripplanner.framework.collection.TroveUtils; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.framework.geometry.HashGridSpatialIndex; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; @@ -267,7 +267,7 @@ public void addWay(OsmWay way) { way .getNodeRefs() .forEach(node -> { - ToveUtils.addToMapSet(areasForNode, node, way); + TroveUtils.addToMapSet(areasForNode, node, way); return true; }); } @@ -738,7 +738,7 @@ private void processMultipolygonRelations() { while (wayNodeIterator.hasNext()) { long nodeId = wayNodeIterator.next(); if (nodesById.containsKey(nodeId)) { - ToveUtils.addToMapSet(areasForNode, nodeId, way); + TroveUtils.addToMapSet(areasForNode, nodeId, way); } else { // this area is missing some nodes, perhaps because it is on // the edge of the region, so we will simply not route on it. From 507baeff62db323141dacc5c3bccebe8f0fa71cf Mon Sep 17 00:00:00 2001 From: OTP Serialization Version Bot Date: Mon, 4 Nov 2024 16:58:42 +0000 Subject: [PATCH 168/213] Bump serialization version id for #6209 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 12febbac795..284153b6486 100644 --- a/pom.xml +++ b/pom.xml @@ -58,7 +58,7 @@ - 169 + 170 32.0 2.52 From 7521c88d1e0af51c9adb221b31c4779342a64e9b Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sat, 2 Nov 2024 22:23:48 +0100 Subject: [PATCH 169/213] Add global Maven settings # Conflicts: # .github/workflows/cibuild.yml --- .github/workflows/cibuild.yml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/.github/workflows/cibuild.yml b/.github/workflows/cibuild.yml index 66162ed6b3a..9e94fa17e5f 100644 --- a/.github/workflows/cibuild.yml +++ b/.github/workflows/cibuild.yml @@ -14,6 +14,12 @@ on: - master - dev-1.x - dev-2.x +env: + # Since version 3.9.0 of Maven it will automatically understand this environment variable. + # However, as of 2024-11 the latest versions of Ubuntu and Debian were on 3.8.8 so it will take some + # time until we can remove the $MAVEN_ARGS below. + MAVEN_ARGS: "--batch-mode --no-transfer-log" + jobs: build-linux: runs-on: ubuntu-latest @@ -61,7 +67,7 @@ jobs: if: github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev-1.x' || github.ref == 'refs/heads/dev-2.x') env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: mvn --batch-mode deploy --settings maven-settings.xml -DskipTests -DGITHUB_REPOSITORY=$GITHUB_REPOSITORY -P prettierSkip -P deployGitHub + run: mvn $MAVEN_ARGS deploy --settings maven-settings.xml -DskipTests -DGITHUB_REPOSITORY=$GITHUB_REPOSITORY -P prettierSkip -P deployGitHub build-windows: timeout-minutes: 20 @@ -79,7 +85,7 @@ jobs: - name: Configure Windows Pagefile uses: al-cheb/configure-pagefile-action@v1.4 - name: Run tests - run: mvn --batch-mode test -P prettierSkip + run: mvn $MAVEN_ARGS test -P prettierSkip docs: if: github.repository_owner == 'opentripplanner' @@ -192,7 +198,7 @@ jobs: distribution: temurin cache: maven - name: Compile Java code - run: mvn --batch-mode compile -DskipTests -P prettierSkip + run: mvn $MAVEN_ARGS compile -DskipTests -P prettierSkip container-image: if: github.repository_owner == 'opentripplanner' && github.event_name == 'push' && (github.ref == 'refs/heads/dev-2.x' || github.ref == 'refs/heads/master') @@ -237,4 +243,4 @@ jobs: MAVEN_SKIP_ARGS="-P prettierSkip -Dmaven.test.skip=true -Dmaven.source.skip=true" - mvn --batch-mode $MAVEN_SKIP_ARGS package com.google.cloud.tools:jib-maven-plugin:build -Djib.to.tags=latest,$image_version + mvn $MAVEN_ARGS $MAVEN_SKIP_ARGS package com.google.cloud.tools:jib-maven-plugin:build -Djib.to.tags=latest,$image_version From ff433a3847a014131539ec1f1815df8251afea31 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sat, 2 Nov 2024 22:54:26 +0100 Subject: [PATCH 170/213] Use MAVEN_ARGS to hide download logs --- .github/workflows/cibuild.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cibuild.yml b/.github/workflows/cibuild.yml index 9e94fa17e5f..09632ca50be 100644 --- a/.github/workflows/cibuild.yml +++ b/.github/workflows/cibuild.yml @@ -52,8 +52,8 @@ jobs: # https://github.com/actions/runner-images/issues/1499 # we set nodePath and npmPath to skip downloading the node binary, which frequently times out run: | - mvn --batch-mode jacoco:prepare-agent test jacoco:report -P prettierCheck -Dprettier.nodePath=node -Dprettier.npmPath=npm - mvn --batch-mode package -Dmaven.test.skip -P prettierSkip + mvn $MAVEN_ARGS jacoco:prepare-agent test jacoco:report -P prettierCheck -Dprettier.nodePath=node -Dprettier.npmPath=npm + mvn $MAVEN_ARGS package -Dmaven.test.skip -P prettierSkip - name: Send coverage data to codecov.io if: github.repository_owner == 'opentripplanner' From 34c7863634d0da7e53d302de99bc4822a4d803e0 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sat, 2 Nov 2024 22:59:11 +0100 Subject: [PATCH 171/213] Add Unicode theme --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 284153b6486..e043093c928 100644 --- a/pom.xml +++ b/pom.xml @@ -236,6 +236,7 @@ true true false + UNICODE From 2b45e355d0c8ea702d648988f281fb1af4bedde2 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 4 Nov 2024 08:32:05 +0100 Subject: [PATCH 172/213] Use correct command --- .github/workflows/cibuild.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cibuild.yml b/.github/workflows/cibuild.yml index 09632ca50be..e2796d28df5 100644 --- a/.github/workflows/cibuild.yml +++ b/.github/workflows/cibuild.yml @@ -18,7 +18,7 @@ env: # Since version 3.9.0 of Maven it will automatically understand this environment variable. # However, as of 2024-11 the latest versions of Ubuntu and Debian were on 3.8.8 so it will take some # time until we can remove the $MAVEN_ARGS below. - MAVEN_ARGS: "--batch-mode --no-transfer-log" + MAVEN_ARGS: "--batch-mode --no-transfer-progress" jobs: build-linux: From fae5108217f5790114df11f5ed29e1d8b102d5a1 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 4 Nov 2024 08:35:06 +0100 Subject: [PATCH 173/213] Enable colour --- .github/workflows/cibuild.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cibuild.yml b/.github/workflows/cibuild.yml index e2796d28df5..1be659deaa6 100644 --- a/.github/workflows/cibuild.yml +++ b/.github/workflows/cibuild.yml @@ -18,7 +18,7 @@ env: # Since version 3.9.0 of Maven it will automatically understand this environment variable. # However, as of 2024-11 the latest versions of Ubuntu and Debian were on 3.8.8 so it will take some # time until we can remove the $MAVEN_ARGS below. - MAVEN_ARGS: "--batch-mode --no-transfer-progress" + MAVEN_ARGS: "--no-transfer-progress -Dstyle.color=always" jobs: build-linux: From 9c1d4329fef5b3a7e52667a70af4bfb58dab6dae Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 4 Nov 2024 08:36:53 +0100 Subject: [PATCH 174/213] Use jacoco:report-aggregate --- .github/workflows/cibuild.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cibuild.yml b/.github/workflows/cibuild.yml index 1be659deaa6..90bd2731604 100644 --- a/.github/workflows/cibuild.yml +++ b/.github/workflows/cibuild.yml @@ -52,7 +52,7 @@ jobs: # https://github.com/actions/runner-images/issues/1499 # we set nodePath and npmPath to skip downloading the node binary, which frequently times out run: | - mvn $MAVEN_ARGS jacoco:prepare-agent test jacoco:report -P prettierCheck -Dprettier.nodePath=node -Dprettier.npmPath=npm + mvn $MAVEN_ARGS jacoco:prepare-agent test jacoco:report-aggregate -P prettierCheck -Dprettier.nodePath=node -Dprettier.npmPath=npm mvn $MAVEN_ARGS package -Dmaven.test.skip -P prettierSkip - name: Send coverage data to codecov.io From 325cb1246faa6cc02b2a48be684e249c33db4d8b Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 4 Nov 2024 08:58:17 +0100 Subject: [PATCH 175/213] Update path for aggregated jacoco results --- .github/workflows/cibuild.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cibuild.yml b/.github/workflows/cibuild.yml index 90bd2731604..2331179b832 100644 --- a/.github/workflows/cibuild.yml +++ b/.github/workflows/cibuild.yml @@ -59,7 +59,7 @@ jobs: if: github.repository_owner == 'opentripplanner' uses: codecov/codecov-action@v4 with: - files: target/site/jacoco/jacoco.xml + files: target/site/jacoco-aggregate/jacoco.xml token: ${{ secrets.CODECOV_TOKEN }} verbose: true From 56514dc604e2b42f86b2263b9197cd8fdfb9c9e5 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 4 Nov 2024 10:12:00 +0100 Subject: [PATCH 176/213] Remove hardcoded path --- .github/workflows/cibuild.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/cibuild.yml b/.github/workflows/cibuild.yml index 2331179b832..a44257b7bf3 100644 --- a/.github/workflows/cibuild.yml +++ b/.github/workflows/cibuild.yml @@ -52,14 +52,13 @@ jobs: # https://github.com/actions/runner-images/issues/1499 # we set nodePath and npmPath to skip downloading the node binary, which frequently times out run: | - mvn $MAVEN_ARGS jacoco:prepare-agent test jacoco:report-aggregate -P prettierCheck -Dprettier.nodePath=node -Dprettier.npmPath=npm + mvn $MAVEN_ARGS jacoco:prepare-agent test jacoco:report -P prettierCheck -Dprettier.nodePath=node -Dprettier.npmPath=npm mvn $MAVEN_ARGS package -Dmaven.test.skip -P prettierSkip - name: Send coverage data to codecov.io if: github.repository_owner == 'opentripplanner' uses: codecov/codecov-action@v4 with: - files: target/site/jacoco-aggregate/jacoco.xml token: ${{ secrets.CODECOV_TOKEN }} verbose: true From 28fbcf1f63909f4a9c0950757bae94a52c46b8cb Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 4 Nov 2024 14:12:51 +0100 Subject: [PATCH 177/213] Add test result uploads --- .github/workflows/cibuild.yml | 7 +++++++ pom.xml | 2 -- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cibuild.yml b/.github/workflows/cibuild.yml index a44257b7bf3..84bdf2e84f0 100644 --- a/.github/workflows/cibuild.yml +++ b/.github/workflows/cibuild.yml @@ -62,6 +62,13 @@ jobs: token: ${{ secrets.CODECOV_TOKEN }} verbose: true + - name: Upload test results to Codecov + # always upload test results, even when failed + if: ${{ !cancelled() }} + uses: codecov/test-results-action@v1 + with: + token: ${{ secrets.CODECOV_TOKEN }} + - name: Deploy to Github Package Registry if: github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev-1.x' || github.ref == 'refs/heads/dev-2.x') env: diff --git a/pom.xml b/pom.xml index e043093c928..03b94662123 100644 --- a/pom.xml +++ b/pom.xml @@ -221,8 +221,6 @@ --add-opens java.base/sun.invoke.util=ALL-UNNAMED --add-opens java.xml/org.xml.sax.helpers=ALL-UNNAMED - - true plain true From 10e609162e8b4db7cda08b7eca8fce0c46b43a31 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Tue, 29 Oct 2024 12:49:46 +0100 Subject: [PATCH 178/213] refactor: Move Raptor code into its own Maven module --- application/pom.xml | 5 ++ pom.xml | 1 + raptor/pom.xml | 59 +++++++++++++++++++ .../opentripplanner/raptor/RaptorService.java | 0 .../opentripplanner/raptor/RaptorTimeLine.svg | 0 .../raptor/api/debug/DebugEvent.java | 0 .../raptor/api/debug/DebugLogger.java | 0 .../raptor/api/debug/DebugTopic.java | 0 .../raptor/api/debug/RaptorTimers.java | 0 .../model/AbstractAccessEgressDecorator.java | 0 .../raptor/api/model/DominanceFunction.java | 0 .../model/GeneralizedCostRelaxFunction.java | 0 .../raptor/api/model/PathLegType.java | 0 .../raptor/api/model/RaptorAccessEgress.java | 0 .../raptor/api/model/RaptorConstants.java | 0 .../api/model/RaptorConstrainedTransfer.java | 0 .../api/model/RaptorStopNameResolver.java | 0 .../raptor/api/model/RaptorTransfer.java | 0 .../api/model/RaptorTransferConstraint.java | 0 .../raptor/api/model/RaptorTripPattern.java | 0 .../raptor/api/model/RaptorTripSchedule.java | 0 .../api/model/RaptorValueFormatter.java | 0 .../raptor/api/model/RelaxFunction.java | 0 .../raptor/api/model/SearchDirection.java | 0 .../raptor/api/model/TransitArrival.java | 0 .../raptor/api/path/AccessPathLeg.java | 0 .../raptor/api/path/EgressPathLeg.java | 0 .../raptor/api/path/PathLeg.java | 0 .../raptor/api/path/PathStringBuilder.java | 0 .../raptor/api/path/RaptorPath.java | 0 .../raptor/api/path/TransferPathLeg.java | 0 .../raptor/api/path/TransitPathLeg.java | 0 .../raptor/api/request/DebugRequest.java | 0 .../api/request/DebugRequestBuilder.java | 0 .../DynamicSearchWindowCoefficients.java | 0 .../api/request/MultiCriteriaRequest.java | 0 .../raptor/api/request/Optimization.java | 0 .../raptor/api/request/PassThroughPoint.java | 0 .../raptor/api/request/RaptorEnvironment.java | 0 .../raptor/api/request/RaptorProfile.java | 0 .../raptor/api/request/RaptorRequest.java | 0 .../api/request/RaptorRequestBuilder.java | 0 .../RaptorTransitGroupPriorityCalculator.java | 0 .../api/request/RaptorTuningParameters.java | 0 .../api/request/RaptorViaConnection.java | 0 .../raptor/api/request/RaptorViaLocation.java | 0 .../raptor/api/request/SearchParams.java | 0 .../api/request/SearchParamsBuilder.java | 0 .../raptor/api/response/RaptorResponse.java | 0 .../raptor/api/response/StopArrivals.java | 0 .../raptor/api/view/AccessPathView.java | 0 .../raptor/api/view/ArrivalView.java | 0 .../raptor/api/view/EgressPathView.java | 0 .../raptor/api/view/PatternRideView.java | 0 .../raptor/api/view/TransitPathView.java | 0 .../raptor/configure/RaptorConfig.java | 0 .../org/opentripplanner/raptor/package.md | 0 .../org/opentripplanner/raptor/path/Path.java | 0 .../raptor/path/PathBuilder.java | 0 .../raptor/path/PathBuilderLeg.java | 0 .../rangeraptor/DefaultRangeRaptorWorker.java | 0 .../raptor/rangeraptor/RangeRaptor.java | 0 .../RangeRaptorWorkerComposite.java | 0 .../rangeraptor/SystemErrDebugLogger.java | 0 .../rangeraptor/context/SearchContext.java | 0 .../context/SearchContextBuilder.java | 0 .../context/SearchContextViaLeg.java | 0 .../debug/AbstractDebugHandlerAdapter.java | 0 .../debug/DebugHandlerFactory.java | 0 .../debug/DebugHandlerPathAdapter.java | 0 .../debug/DebugHandlerPatternRideAdapter.java | 0 .../debug/DebugHandlerStopArrivalAdapter.java | 0 .../debug/ParetoSetDebugHandlerAdapter.java | 0 .../rangeraptor/internalapi/DebugHandler.java | 0 .../internalapi/HeuristicAtStop.java | 0 .../rangeraptor/internalapi/Heuristics.java | 0 .../internalapi/ParetoSetCost.java | 0 .../internalapi/ParetoSetTime.java | 0 .../internalapi/PassThroughPointsService.java | 0 .../internalapi/RangeRaptorWorker.java | 0 .../rangeraptor/internalapi/RaptorRouter.java | 0 .../internalapi/RaptorRouterResult.java | 0 .../internalapi/RaptorWorkerState.java | 0 .../internalapi/RoutingStrategy.java | 0 .../SingleCriteriaStopArrivals.java | 0 .../internalapi/SlackProvider.java | 0 .../internalapi/WorkerLifeCycle.java | 0 .../lifecycle/LifeCycleEventPublisher.java | 0 .../lifecycle/LifeCycleSubscriptions.java | 0 .../CalculateTransferToDestination.java | 0 .../DebugStopArrivalsStatistics.java | 0 .../McRangeRaptorWorkerState.java | 0 .../multicriteria/McRaptorRouterResult.java | 0 .../multicriteria/McStopArrivals.java | 0 .../MultiCriteriaRoutingStrategy.java | 0 .../multicriteria/StopArrivalParetoSet.java | 0 ...ViaConnectionStopArrivalEventListener.java | 0 .../ArrivalParetoSetComparatorFactory.java | 0 .../multicriteria/arrivals/McStopArrival.java | 0 .../arrivals/McStopArrivalFactory.java | 0 .../arrivals/c1/AccessStopArrival.java | 0 .../arrivals/c1/StopArrivalFactoryC1.java | 0 .../arrivals/c1/TransferStopArrival.java | 0 .../arrivals/c1/TransitStopArrival.java | 0 .../arrivals/c2/AbstractStopArrivalC2.java | 0 .../arrivals/c2/AccessStopArrivalC2.java | 0 .../arrivals/c2/StopArrivalFactoryC2.java | 0 .../arrivals/c2/TransferStopArrivalC2.java | 0 .../arrivals/c2/TransitStopArrivalC2.java | 0 .../configure/McRangeRaptorConfig.java | 0 .../heuristic/HeuristicsProvider.java | 0 .../BitSetPassThroughPointsService.java | 0 .../multicriteria/ride/PatternRide.java | 0 .../ride/PatternRideFactory.java | 0 .../multicriteria/ride/c1/PatternRideC1.java | 0 .../ride/c2/PassThroughRideFactory.java | 0 .../multicriteria/ride/c2/PatternRideC2.java | 0 .../c2/TransitGroupPriorityRideFactory.java | 0 .../path/BoardAndAlightTimeSearch.java | 0 .../rangeraptor/path/DestinationArrival.java | 0 .../path/DestinationArrivalPaths.java | 0 .../rangeraptor/path/ForwardPathMapper.java | 0 .../raptor/rangeraptor/path/PathMapper.java | 0 .../path/PathParetoSetComparators.java | 0 .../rangeraptor/path/ReversePathMapper.java | 0 .../path/configure/PathConfig.java | 0 .../standard/ArrivalTimeRoutingStrategy.java | 0 .../MinTravelDurationRoutingStrategy.java | 0 .../standard/StdRangeRaptorWorkerState.java | 0 .../standard/StdRaptorRouterResult.java | 0 .../rangeraptor/standard/StdWorkerState.java | 0 .../standard/besttimes/BestTimes.java | 0 .../BestTimesOnlyStopArrivalsState.java | 0 .../SimpleArrivedAtDestinationCheck.java | 0 .../SimpleBestNumberOfTransfers.java | 0 .../besttimes/UnknownPathFactory.java | 0 .../configure/StdRangeRaptorConfig.java | 0 .../configure/VerifyRequestIsValid.java | 0 .../debug/DebugStopArrivalsState.java | 0 .../standard/debug/StateDebugger.java | 0 .../heuristics/HeuristicsAdapter.java | 0 .../ArrivedAtDestinationCheck.java | 0 .../internalapi/BestNumberOfTransfers.java | 0 .../DestinationArrivalListener.java | 0 .../internalapi/StopArrivalsState.java | 0 .../stoparrivals/AccessStopArrivalState.java | 0 .../stoparrivals/DefaultStopArrivalState.java | 0 .../stoparrivals/EgressStopArrivalState.java | 0 .../stoparrivals/StdStopArrivals.java | 0 .../stoparrivals/StdStopArrivalsState.java | 0 .../stoparrivals/StopArrivalState.java | 0 .../path/EgressArrivalToPathAdapter.java | 0 .../standard/stoparrivals/view/Access.java | 0 .../view/StopArrivalViewAdapter.java | 0 .../stoparrivals/view/StopsCursor.java | 0 .../standard/stoparrivals/view/Transfer.java | 0 .../standard/stoparrivals/view/Transit.java | 0 .../IntArraySingleCriteriaArrivals.java | 0 .../support/TimeBasedBoardingSupport.java | 0 .../transit/AccessEgressFunctions.java | 0 .../rangeraptor/transit/AccessPaths.java | 0 .../transit/AccessWithPenalty.java | 0 .../rangeraptor/transit/EgressPaths.java | 0 .../transit/EgressWithPenalty.java | 0 .../ForwardRaptorTransitCalculator.java | 0 .../transit/ForwardTimeCalculator.java | 0 .../transit/ForwardTransitCalculator.java | 0 .../transit/RaptorSearchWindowCalculator.java | 0 .../transit/RaptorTransitCalculator.java | 0 .../ReverseRaptorTransitCalculator.java | 0 .../transit/ReverseTimeCalculator.java | 0 .../transit/ReverseTransitCalculator.java | 0 .../rangeraptor/transit/RoundTracker.java | 0 .../transit/SlackProviderAdapter.java | 0 .../rangeraptor/transit/TimeCalculator.java | 0 .../transit/TransitCalculator.java | 0 .../transit/TripScheduleExactMatchSearch.java | 0 .../rangeraptor/transit/TripTimesSearch.java | 0 .../rangeraptor/transit/ViaConnections.java | 0 .../raptor/service/DebugHeuristics.java | 0 .../raptor/service/DefaultStopArrivals.java | 0 .../DestinationNotReachedException.java | 0 .../raptor/service/HeuristicSearchTask.java | 0 .../service/HeuristicToRunResolver.java | 0 .../service/RangeRaptorDynamicSearch.java | 0 .../service/ViaRangeRaptorDynamicSearch.java | 0 .../raptor/spi/BoardAndAlightTime.java | 0 .../raptor/spi/DefaultSlackProvider.java | 0 .../raptor/spi/EmptyBoardOrAlightEvent.java | 0 .../opentripplanner/raptor/spi/Flyweight.java | 0 .../raptor/spi/IntIterator.java | 0 .../raptor/spi/RaptorBoardOrAlightEvent.java | 0 .../spi/RaptorConstrainedBoardingSearch.java | 0 .../raptor/spi/RaptorCostCalculator.java | 0 .../RaptorPathConstrainedTransferSearch.java | 0 .../raptor/spi/RaptorRoute.java | 0 .../raptor/spi/RaptorSlackProvider.java | 0 .../raptor/spi/RaptorTimeTable.java | 0 .../raptor/spi/RaptorTransitDataProvider.java | 0 .../raptor/spi/RaptorTripScheduleSearch.java | 0 .../raptor/spi/UnknownPath.java | 0 .../raptor/util/BitSetIterator.java | 0 .../raptor/util/CompareIntArrays.java | 0 .../raptor/util/IntIterators.java | 0 .../raptor/util/composite/CompositeUtil.java | 0 .../util/paretoset/ParetoComparator.java | 0 .../raptor/util/paretoset/ParetoSet.java | 0 .../paretoset/ParetoSetEventListener.java | 0 .../ParetoSetEventListenerComposite.java | 0 .../util/paretoset/ParetoSetWithMarker.java | 0 .../raptor/RaptorArchitectureTest.java | 0 .../raptor/_data/RaptorTestConstants.java | 0 .../raptor/_data/api/PathUtils.java | 0 .../raptor/_data/api/TestPathBuilder.java | 0 .../_data/api/TestPathBuilderTestRaptor.java | 0 .../raptor/_data/api/TestRaptorPath.java | 0 .../ride/TestPatterRideBuilder.java | 0 .../stoparrival/AbstractStopArrival.java | 0 .../raptor/_data/stoparrival/Access.java | 0 .../_data/stoparrival/BasicPathTestCase.java | 0 .../raptor/_data/stoparrival/Egress.java | 0 .../FlexAccessAndEgressPathTestCase.java | 0 .../_data/stoparrival/TestArrivals.java | 0 .../raptor/_data/stoparrival/Transfer.java | 0 .../raptor/_data/stoparrival/Transit.java | 0 .../_data/transit/TestAccessEgress.java | 0 .../TestConstrainedBoardingSearch.java | 0 .../transit/TestConstrainedTransfer.java | 0 .../raptor/_data/transit/TestRoute.java | 0 .../raptor/_data/transit/TestTransfer.java | 0 .../_data/transit/TestTransferPoint.java | 0 .../raptor/_data/transit/TestTransitData.java | 0 .../raptor/_data/transit/TestTripPattern.java | 0 .../_data/transit/TestTripSchedule.java | 0 .../transit/TestTripSearchTimetable.java | 0 .../GeneralizedCostRelaxFunctionTest.java | 0 .../raptor/api/path/PathTest.java | 0 .../raptor/api/path/RaptorPathTest.java | 0 .../api/request/MultiCriteriaRequestTest.java | 0 .../api/request/PassThroughPointTest.java | 0 .../raptor/api/request/RaptorRequestTest.java | 0 .../raptor/api/request/SearchParamsTest.java | 0 .../raptor/api/request/ViaLocationTest.java | 0 .../api/view/BoardAndAlightTimeTest.java | 0 .../moduletests/A01_SingleRouteTest.java | 0 .../raptor/moduletests/A04_BoardingTest.java | 0 .../raptor/moduletests/B01_AccessTest.java | 0 .../raptor/moduletests/B02_EgressTest.java | 0 .../moduletests/B03_AccessEgressTest.java | 0 .../B04_AccessEgressBoardingTest.java | 0 ...EgressStopBoardAlightTransferCostTest.java | 0 .../C01_TransferBoardAndAlightSlackTest.java | 0 .../C02_OnStreetTransfersTest.java | 0 ...3_OnBoardArrivalDominateTransfersTest.java | 0 ...SingeRouteBoardAlightRestrictionsTest.java | 0 .../D02_TransitModeReluctanceTest.java | 0 .../moduletests/D03_UnpreferredRouteTest.java | 0 .../E01_StaySeatedTransferTest.java | 0 .../E02_GuaranteedWalkTransferTest.java | 0 ...E03_NotAllowedConstrainedTransferTest.java | 0 .../moduletests/F01_AccessWithRidesTest.java | 0 .../moduletests/F02_EgressWithRidesTest.java | 0 ...gressWithRidesBoardAndAlightSlackTest.java | 0 ...04_AccessEgressWithRidesNoTransitTest.java | 0 ...5_OnBoardAccessEgressAndTransfersTest.java | 0 ...cessWithRidesMultipleOptimalPathsTest.java | 0 ...ressWithRidesMultipleOptimalPathsTest.java | 0 .../G01_AccessWithOpeningHoursTest.java | 0 .../G02_EgressWithOpeningHoursTest.java | 0 ...ssWithOpeningHoursMultipleOptionsTest.java | 0 ...ssWithOpeningHoursMultipleOptionsTest.java | 0 .../G05_ClosedAccessOpeningHoursTest.java | 0 .../G06_ClosedEgressOpeningHoursTest.java | 0 ..._GuaranteedTransferWithFlexAccessTest.java | 0 .../raptor/moduletests/I01_HeuristicTest.java | 0 .../moduletests/J01_PassThroughTest.java | 0 .../raptor/moduletests/J02_ViaSearchTest.java | 0 .../moduletests/K01_TransitPriorityTest.java | 0 .../K02_TransitPriorityDestinationTest.java | 0 .../L01_TimePenaltyAccessTest.java | 0 .../L01_TimePenaltyEgressTest.java | 0 .../raptor/moduletests/images/F11.svg | 0 .../raptor/moduletests/images/F12.svg | 0 .../moduletests/images/Samples.excalidraw | 0 .../raptor/moduletests/package-info.md | 0 .../moduletests/support/ExpectedList.java | 0 .../support/ModuleTestDebugLogging.java | 0 .../support/RaptorModuleTestCase.java | 0 .../support/RaptorModuleTestCaseFactory.java | 0 .../support/RaptorModuleTestConfig.java | 0 .../RaptorModuleTestConfigSetBuilder.java | 0 .../support/TestGroupPriorityCalculator.java | 0 .../opentripplanner/raptor/package-info.md | 0 .../context/SearchContextTest.java | 0 .../NoopPassThroughPointsServiceTest.java | 0 .../StopArrivalStateParetoSetTest.java | 0 ...ArrivalParetoSetComparatorFactoryTest.java | 0 .../arrivals/McStopArrivalTest.java | 0 .../arrivals/c1/AccessStopArrivalTest.java | 0 .../arrivals/c1/StopArrivalFactoryC1Test.java | 0 .../arrivals/c1/TransferStopArrivalTest.java | 0 .../arrivals/c1/TransitStopArrivalTest.java | 0 .../arrivals/c2/AccessStopArrivalC2Test.java | 0 .../arrivals/c2/StopArrivalFactoryC2Test.java | 0 .../c2/TransferStopArrivalC2Test.java | 0 .../arrivals/c2/TransitStopArrivalC2Test.java | 0 .../BitSetPassThroughPointsServiceTest.java | 0 .../ride/c1/PatternRideC1Test.java | 0 .../ride/c2/PatternRideC2Test.java | 0 .../path/DestinationArrivalTest.java | 0 .../rangeraptor/path/PathMapperTest.java | 0 .../path/PathParetoSetComparatorsTest.java | 0 .../SimpleArrivedAtDestinationCheckTest.java | 0 .../IntArraySingleCriteriaArrivalsTest.java | 0 .../transit/AccessEgressFunctionsTest.java | 0 .../rangeraptor/transit/AccessPathsTest.java | 0 .../transit/AccessWithPenaltyTest.java | 0 .../rangeraptor/transit/EgressPathsTest.java | 0 .../transit/EgressWithPenaltyTest.java | 0 .../ForwardRaptorTransitCalculatorTest.java | 0 .../transit/ForwardTimeCalculatorTest.java | 0 .../transit/ForwardTransitCalculatorTest.java | 0 .../RaptorSearchWindowCalculatorTest.java | 0 .../ReverseRaptorTransitCalculatorTest.java | 0 .../transit/ReverseTimeCalculatorTest.java | 0 .../transit/ReverseTransitCalculatorTest.java | 0 .../rangeraptor/transit/RoundTrackerTest.java | 0 .../transit/SlackProviderAdapterTest.java | 0 .../TripScheduleExactMatchSearchTest.java | 0 .../transit/TripTimesSearchTest.java | 0 .../service/HeuristicToRunResolverTest.java | 0 .../spi/EmptyBoardOrAlightEventTest.java | 0 .../raptor/spi/RaptorSlackProviderTest.java | 0 .../raptor/spi/RaptorTripPatternTest.java | 0 .../raptor/spi/RaptorTripScheduleTest.java | 0 .../raptor/spi/UnknownPathTest.java | 0 .../raptor/util/BitSetIteratorTest.java | 0 .../raptor/util/IntIteratorsTest.java | 0 .../raptor/util/PathStringBuilderTest.java | 0 .../util/composite/CompositeUtilTest.java | 0 .../ParetoSetEventListenerCompositeTest.java | 0 .../paretoset/ParetoSetEventListenerTest.java | 0 .../raptor/util/paretoset/ParetoSetTest.java | 0 .../paretoset/ParetoSetWithMarkerTest.java | 0 .../paretoset/TestParetoSetEventListener.java | 0 .../raptor/util/paretoset/TestVector.java | 0 346 files changed, 65 insertions(+) create mode 100644 raptor/pom.xml rename {application => raptor}/src/main/java/org/opentripplanner/raptor/RaptorService.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/RaptorTimeLine.svg (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/debug/DebugEvent.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/debug/DebugLogger.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/debug/DebugTopic.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/debug/RaptorTimers.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/model/AbstractAccessEgressDecorator.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/model/DominanceFunction.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/model/GeneralizedCostRelaxFunction.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/model/PathLegType.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/model/RaptorAccessEgress.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/model/RaptorConstants.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/model/RaptorConstrainedTransfer.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/model/RaptorStopNameResolver.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/model/RaptorTransfer.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/model/RaptorTransferConstraint.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/model/RaptorTripPattern.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/model/RaptorTripSchedule.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/model/RaptorValueFormatter.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/model/RelaxFunction.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/model/SearchDirection.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/model/TransitArrival.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/path/AccessPathLeg.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/path/EgressPathLeg.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/path/PathLeg.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/path/PathStringBuilder.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/path/RaptorPath.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/path/TransferPathLeg.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/path/TransitPathLeg.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/request/DebugRequest.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/request/DebugRequestBuilder.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/request/DynamicSearchWindowCoefficients.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/request/MultiCriteriaRequest.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/request/Optimization.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/request/PassThroughPoint.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/request/RaptorEnvironment.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/request/RaptorProfile.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/request/RaptorRequest.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/request/RaptorRequestBuilder.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/request/RaptorTransitGroupPriorityCalculator.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/request/RaptorTuningParameters.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/request/RaptorViaConnection.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/request/RaptorViaLocation.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/request/SearchParams.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/request/SearchParamsBuilder.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/response/RaptorResponse.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/response/StopArrivals.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/view/AccessPathView.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/view/ArrivalView.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/view/EgressPathView.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/view/PatternRideView.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/api/view/TransitPathView.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/package.md (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/path/Path.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/path/PathBuilder.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/path/PathBuilderLeg.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/DefaultRangeRaptorWorker.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/RangeRaptor.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/RangeRaptorWorkerComposite.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/SystemErrDebugLogger.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/context/SearchContext.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/context/SearchContextBuilder.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/context/SearchContextViaLeg.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/AbstractDebugHandlerAdapter.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/DebugHandlerFactory.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/DebugHandlerPathAdapter.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/DebugHandlerPatternRideAdapter.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/DebugHandlerStopArrivalAdapter.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/ParetoSetDebugHandlerAdapter.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/DebugHandler.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/HeuristicAtStop.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/Heuristics.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/ParetoSetCost.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/ParetoSetTime.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/PassThroughPointsService.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RangeRaptorWorker.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RaptorRouter.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RaptorRouterResult.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RaptorWorkerState.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RoutingStrategy.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/SingleCriteriaStopArrivals.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/SlackProvider.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/WorkerLifeCycle.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/lifecycle/LifeCycleEventPublisher.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/lifecycle/LifeCycleSubscriptions.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/CalculateTransferToDestination.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/DebugStopArrivalsStatistics.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/McRangeRaptorWorkerState.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/McRaptorRouterResult.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/McStopArrivals.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/MultiCriteriaRoutingStrategy.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/StopArrivalParetoSet.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ViaConnectionStopArrivalEventListener.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/ArrivalParetoSetComparatorFactory.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/McStopArrival.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/McStopArrivalFactory.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/AccessStopArrival.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/StopArrivalFactoryC1.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/TransferStopArrival.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/TransitStopArrival.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/AbstractStopArrivalC2.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/AccessStopArrivalC2.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/StopArrivalFactoryC2.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/TransferStopArrivalC2.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/TransitStopArrivalC2.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/configure/McRangeRaptorConfig.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/heuristic/HeuristicsProvider.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/passthrough/BitSetPassThroughPointsService.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/PatternRide.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/PatternRideFactory.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c1/PatternRideC1.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/PassThroughRideFactory.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/PatternRideC2.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/TransitGroupPriorityRideFactory.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/path/BoardAndAlightTimeSearch.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/path/DestinationArrival.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/path/DestinationArrivalPaths.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/path/ForwardPathMapper.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/path/PathMapper.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/path/PathParetoSetComparators.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/path/ReversePathMapper.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/path/configure/PathConfig.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/ArrivalTimeRoutingStrategy.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/MinTravelDurationRoutingStrategy.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/StdRangeRaptorWorkerState.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/StdRaptorRouterResult.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/StdWorkerState.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/BestTimes.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/BestTimesOnlyStopArrivalsState.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/SimpleArrivedAtDestinationCheck.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/SimpleBestNumberOfTransfers.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/UnknownPathFactory.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/configure/StdRangeRaptorConfig.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/configure/VerifyRequestIsValid.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/debug/DebugStopArrivalsState.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/debug/StateDebugger.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/heuristics/HeuristicsAdapter.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/internalapi/ArrivedAtDestinationCheck.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/internalapi/BestNumberOfTransfers.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/internalapi/DestinationArrivalListener.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/internalapi/StopArrivalsState.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/AccessStopArrivalState.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/DefaultStopArrivalState.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/EgressStopArrivalState.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/StdStopArrivals.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/StdStopArrivalsState.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/StopArrivalState.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/path/EgressArrivalToPathAdapter.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/Access.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/StopArrivalViewAdapter.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/StopsCursor.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/Transfer.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/Transit.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/support/IntArraySingleCriteriaArrivals.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/support/TimeBasedBoardingSupport.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/AccessEgressFunctions.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/AccessPaths.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/AccessWithPenalty.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/EgressPaths.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/EgressWithPenalty.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculator.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardTimeCalculator.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardTransitCalculator.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/RaptorSearchWindowCalculator.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/RaptorTransitCalculator.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculator.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseTimeCalculator.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseTransitCalculator.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/RoundTracker.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/SlackProviderAdapter.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TimeCalculator.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TransitCalculator.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TripScheduleExactMatchSearch.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TripTimesSearch.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ViaConnections.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/service/DebugHeuristics.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/service/DefaultStopArrivals.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/service/DestinationNotReachedException.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/service/HeuristicSearchTask.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/service/HeuristicToRunResolver.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/service/RangeRaptorDynamicSearch.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/service/ViaRangeRaptorDynamicSearch.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/spi/BoardAndAlightTime.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/spi/DefaultSlackProvider.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/spi/EmptyBoardOrAlightEvent.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/spi/Flyweight.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/spi/IntIterator.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/spi/RaptorBoardOrAlightEvent.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/spi/RaptorConstrainedBoardingSearch.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/spi/RaptorCostCalculator.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/spi/RaptorPathConstrainedTransferSearch.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/spi/RaptorRoute.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/spi/RaptorSlackProvider.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/spi/RaptorTimeTable.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/spi/RaptorTransitDataProvider.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/spi/RaptorTripScheduleSearch.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/spi/UnknownPath.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/util/BitSetIterator.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/util/CompareIntArrays.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/util/IntIterators.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/util/composite/CompositeUtil.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoComparator.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoSet.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoSetEventListener.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoSetEventListenerComposite.java (100%) rename {application => raptor}/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoSetWithMarker.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/RaptorArchitectureTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/_data/RaptorTestConstants.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/_data/api/PathUtils.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilder.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilderTestRaptor.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/_data/api/TestRaptorPath.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/_data/multicriteria/ride/TestPatterRideBuilder.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/_data/stoparrival/AbstractStopArrival.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Access.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Egress.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/_data/stoparrival/TestArrivals.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Transfer.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Transit.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/_data/transit/TestAccessEgress.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedBoardingSearch.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransfer.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/_data/transit/TestRoute.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransfer.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferPoint.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransitData.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripPattern.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSchedule.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSearchTimetable.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/api/model/GeneralizedCostRelaxFunctionTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/api/path/PathTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/api/path/RaptorPathTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/api/request/MultiCriteriaRequestTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/api/request/PassThroughPointTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/api/request/RaptorRequestTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/api/request/SearchParamsTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/api/request/ViaLocationTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/api/view/BoardAndAlightTimeTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/A01_SingleRouteTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/A04_BoardingTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/B01_AccessTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/B02_EgressTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/B03_AccessEgressTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/B04_AccessEgressBoardingTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/B05_EgressStopBoardAlightTransferCostTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/C01_TransferBoardAndAlightSlackTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/C02_OnStreetTransfersTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/C03_OnBoardArrivalDominateTransfersTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/D01_SingeRouteBoardAlightRestrictionsTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/D02_TransitModeReluctanceTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/D03_UnpreferredRouteTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/E01_StaySeatedTransferTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/E02_GuaranteedWalkTransferTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/E03_NotAllowedConstrainedTransferTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/F01_AccessWithRidesTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/F02_EgressWithRidesTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/F03_AccessEgressWithRidesBoardAndAlightSlackTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/F04_AccessEgressWithRidesNoTransitTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/F05_OnBoardAccessEgressAndTransfersTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/F11_AccessWithRidesMultipleOptimalPathsTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/F12_EgressWithRidesMultipleOptimalPathsTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/G01_AccessWithOpeningHoursTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/G02_EgressWithOpeningHoursTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/G03_AccessWithOpeningHoursMultipleOptionsTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/G04_EgressWithOpeningHoursMultipleOptionsTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/G05_ClosedAccessOpeningHoursTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/G06_ClosedEgressOpeningHoursTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/H11_GuaranteedTransferWithFlexAccessTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/I01_HeuristicTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/J01_PassThroughTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/J02_ViaSearchTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/K01_TransitPriorityTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/K02_TransitPriorityDestinationTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/L01_TimePenaltyAccessTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/L01_TimePenaltyEgressTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/images/F11.svg (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/images/F12.svg (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/images/Samples.excalidraw (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/package-info.md (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/support/ExpectedList.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/support/ModuleTestDebugLogging.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/support/RaptorModuleTestCase.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/support/RaptorModuleTestCaseFactory.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/support/RaptorModuleTestConfig.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/support/RaptorModuleTestConfigSetBuilder.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/moduletests/support/TestGroupPriorityCalculator.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/package-info.md (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/context/SearchContextTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/internalapi/NoopPassThroughPointsServiceTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/StopArrivalStateParetoSetTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/ArrivalParetoSetComparatorFactoryTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/McStopArrivalTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/AccessStopArrivalTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/StopArrivalFactoryC1Test.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/TransferStopArrivalTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/TransitStopArrivalTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/AccessStopArrivalC2Test.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/StopArrivalFactoryC2Test.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/TransferStopArrivalC2Test.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/TransitStopArrivalC2Test.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/passthrough/BitSetPassThroughPointsServiceTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c1/PatternRideC1Test.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/PatternRideC2Test.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/path/DestinationArrivalTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/path/PathMapperTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/path/PathParetoSetComparatorsTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/SimpleArrivedAtDestinationCheckTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/support/IntArraySingleCriteriaArrivalsTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/AccessEgressFunctionsTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/AccessPathsTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/AccessWithPenaltyTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/EgressPathsTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/EgressWithPenaltyTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculatorTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardTimeCalculatorTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardTransitCalculatorTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/RaptorSearchWindowCalculatorTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculatorTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseTimeCalculatorTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseTransitCalculatorTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/RoundTrackerTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/SlackProviderAdapterTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/TripScheduleExactMatchSearchTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/TripTimesSearchTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/service/HeuristicToRunResolverTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/spi/EmptyBoardOrAlightEventTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/spi/RaptorSlackProviderTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/spi/RaptorTripPatternTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/spi/RaptorTripScheduleTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/spi/UnknownPathTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/util/BitSetIteratorTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/util/IntIteratorsTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/util/PathStringBuilderTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/util/composite/CompositeUtilTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/util/paretoset/ParetoSetEventListenerCompositeTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/util/paretoset/ParetoSetEventListenerTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/util/paretoset/ParetoSetTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/util/paretoset/ParetoSetWithMarkerTest.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/util/paretoset/TestParetoSetEventListener.java (100%) rename {application => raptor}/src/test/java/org/opentripplanner/raptor/util/paretoset/TestVector.java (100%) diff --git a/application/pom.xml b/application/pom.xml index 73738e772d8..3fc0193d0af 100644 --- a/application/pom.xml +++ b/application/pom.xml @@ -23,6 +23,11 @@ otp-utils ${project.version} + + ${project.groupId} + otp-raptor + ${project.version} + diff --git a/pom.xml b/pom.xml index 284153b6486..abc70e5dc8c 100644 --- a/pom.xml +++ b/pom.xml @@ -97,6 +97,7 @@ application gtfs-realtime-protobuf utils + raptor diff --git a/raptor/pom.xml b/raptor/pom.xml new file mode 100644 index 00000000000..d2d93e36f9d --- /dev/null +++ b/raptor/pom.xml @@ -0,0 +1,59 @@ + + + 4.0.0 + + org.opentripplanner + otp-root + 2.7.0-SNAPSHOT + + + otp-raptor + OpenTripPlanner - Raptor + + + + + + ${project.groupId} + otp-utils + ${project.version} + + + + + + + com.google.code.findbugs + jsr305 + + + net.sf.trove4j + trove4j + + + + org.slf4j + slf4j-api + + + + + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.jupiter + junit-jupiter-params + test + + + com.tngtech.archunit + archunit + test + + + diff --git a/application/src/main/java/org/opentripplanner/raptor/RaptorService.java b/raptor/src/main/java/org/opentripplanner/raptor/RaptorService.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/RaptorService.java rename to raptor/src/main/java/org/opentripplanner/raptor/RaptorService.java diff --git a/application/src/main/java/org/opentripplanner/raptor/RaptorTimeLine.svg b/raptor/src/main/java/org/opentripplanner/raptor/RaptorTimeLine.svg similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/RaptorTimeLine.svg rename to raptor/src/main/java/org/opentripplanner/raptor/RaptorTimeLine.svg diff --git a/application/src/main/java/org/opentripplanner/raptor/api/debug/DebugEvent.java b/raptor/src/main/java/org/opentripplanner/raptor/api/debug/DebugEvent.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/debug/DebugEvent.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/debug/DebugEvent.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/debug/DebugLogger.java b/raptor/src/main/java/org/opentripplanner/raptor/api/debug/DebugLogger.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/debug/DebugLogger.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/debug/DebugLogger.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/debug/DebugTopic.java b/raptor/src/main/java/org/opentripplanner/raptor/api/debug/DebugTopic.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/debug/DebugTopic.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/debug/DebugTopic.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/debug/RaptorTimers.java b/raptor/src/main/java/org/opentripplanner/raptor/api/debug/RaptorTimers.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/debug/RaptorTimers.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/debug/RaptorTimers.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/model/AbstractAccessEgressDecorator.java b/raptor/src/main/java/org/opentripplanner/raptor/api/model/AbstractAccessEgressDecorator.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/model/AbstractAccessEgressDecorator.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/model/AbstractAccessEgressDecorator.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/model/DominanceFunction.java b/raptor/src/main/java/org/opentripplanner/raptor/api/model/DominanceFunction.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/model/DominanceFunction.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/model/DominanceFunction.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/model/GeneralizedCostRelaxFunction.java b/raptor/src/main/java/org/opentripplanner/raptor/api/model/GeneralizedCostRelaxFunction.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/model/GeneralizedCostRelaxFunction.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/model/GeneralizedCostRelaxFunction.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/model/PathLegType.java b/raptor/src/main/java/org/opentripplanner/raptor/api/model/PathLegType.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/model/PathLegType.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/model/PathLegType.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/model/RaptorAccessEgress.java b/raptor/src/main/java/org/opentripplanner/raptor/api/model/RaptorAccessEgress.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/model/RaptorAccessEgress.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/model/RaptorAccessEgress.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/model/RaptorConstants.java b/raptor/src/main/java/org/opentripplanner/raptor/api/model/RaptorConstants.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/model/RaptorConstants.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/model/RaptorConstants.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/model/RaptorConstrainedTransfer.java b/raptor/src/main/java/org/opentripplanner/raptor/api/model/RaptorConstrainedTransfer.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/model/RaptorConstrainedTransfer.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/model/RaptorConstrainedTransfer.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/model/RaptorStopNameResolver.java b/raptor/src/main/java/org/opentripplanner/raptor/api/model/RaptorStopNameResolver.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/model/RaptorStopNameResolver.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/model/RaptorStopNameResolver.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/model/RaptorTransfer.java b/raptor/src/main/java/org/opentripplanner/raptor/api/model/RaptorTransfer.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/model/RaptorTransfer.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/model/RaptorTransfer.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/model/RaptorTransferConstraint.java b/raptor/src/main/java/org/opentripplanner/raptor/api/model/RaptorTransferConstraint.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/model/RaptorTransferConstraint.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/model/RaptorTransferConstraint.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/model/RaptorTripPattern.java b/raptor/src/main/java/org/opentripplanner/raptor/api/model/RaptorTripPattern.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/model/RaptorTripPattern.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/model/RaptorTripPattern.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/model/RaptorTripSchedule.java b/raptor/src/main/java/org/opentripplanner/raptor/api/model/RaptorTripSchedule.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/model/RaptorTripSchedule.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/model/RaptorTripSchedule.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/model/RaptorValueFormatter.java b/raptor/src/main/java/org/opentripplanner/raptor/api/model/RaptorValueFormatter.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/model/RaptorValueFormatter.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/model/RaptorValueFormatter.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/model/RelaxFunction.java b/raptor/src/main/java/org/opentripplanner/raptor/api/model/RelaxFunction.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/model/RelaxFunction.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/model/RelaxFunction.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/model/SearchDirection.java b/raptor/src/main/java/org/opentripplanner/raptor/api/model/SearchDirection.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/model/SearchDirection.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/model/SearchDirection.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/model/TransitArrival.java b/raptor/src/main/java/org/opentripplanner/raptor/api/model/TransitArrival.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/model/TransitArrival.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/model/TransitArrival.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/path/AccessPathLeg.java b/raptor/src/main/java/org/opentripplanner/raptor/api/path/AccessPathLeg.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/path/AccessPathLeg.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/path/AccessPathLeg.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/path/EgressPathLeg.java b/raptor/src/main/java/org/opentripplanner/raptor/api/path/EgressPathLeg.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/path/EgressPathLeg.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/path/EgressPathLeg.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/path/PathLeg.java b/raptor/src/main/java/org/opentripplanner/raptor/api/path/PathLeg.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/path/PathLeg.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/path/PathLeg.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/path/PathStringBuilder.java b/raptor/src/main/java/org/opentripplanner/raptor/api/path/PathStringBuilder.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/path/PathStringBuilder.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/path/PathStringBuilder.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/path/RaptorPath.java b/raptor/src/main/java/org/opentripplanner/raptor/api/path/RaptorPath.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/path/RaptorPath.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/path/RaptorPath.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/path/TransferPathLeg.java b/raptor/src/main/java/org/opentripplanner/raptor/api/path/TransferPathLeg.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/path/TransferPathLeg.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/path/TransferPathLeg.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/path/TransitPathLeg.java b/raptor/src/main/java/org/opentripplanner/raptor/api/path/TransitPathLeg.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/path/TransitPathLeg.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/path/TransitPathLeg.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/DebugRequest.java b/raptor/src/main/java/org/opentripplanner/raptor/api/request/DebugRequest.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/request/DebugRequest.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/request/DebugRequest.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/DebugRequestBuilder.java b/raptor/src/main/java/org/opentripplanner/raptor/api/request/DebugRequestBuilder.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/request/DebugRequestBuilder.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/request/DebugRequestBuilder.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/DynamicSearchWindowCoefficients.java b/raptor/src/main/java/org/opentripplanner/raptor/api/request/DynamicSearchWindowCoefficients.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/request/DynamicSearchWindowCoefficients.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/request/DynamicSearchWindowCoefficients.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/MultiCriteriaRequest.java b/raptor/src/main/java/org/opentripplanner/raptor/api/request/MultiCriteriaRequest.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/request/MultiCriteriaRequest.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/request/MultiCriteriaRequest.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/Optimization.java b/raptor/src/main/java/org/opentripplanner/raptor/api/request/Optimization.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/request/Optimization.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/request/Optimization.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/PassThroughPoint.java b/raptor/src/main/java/org/opentripplanner/raptor/api/request/PassThroughPoint.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/request/PassThroughPoint.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/request/PassThroughPoint.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorEnvironment.java b/raptor/src/main/java/org/opentripplanner/raptor/api/request/RaptorEnvironment.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/request/RaptorEnvironment.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/request/RaptorEnvironment.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorProfile.java b/raptor/src/main/java/org/opentripplanner/raptor/api/request/RaptorProfile.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/request/RaptorProfile.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/request/RaptorProfile.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorRequest.java b/raptor/src/main/java/org/opentripplanner/raptor/api/request/RaptorRequest.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/request/RaptorRequest.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/request/RaptorRequest.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorRequestBuilder.java b/raptor/src/main/java/org/opentripplanner/raptor/api/request/RaptorRequestBuilder.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/request/RaptorRequestBuilder.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/request/RaptorRequestBuilder.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorTransitGroupPriorityCalculator.java b/raptor/src/main/java/org/opentripplanner/raptor/api/request/RaptorTransitGroupPriorityCalculator.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/request/RaptorTransitGroupPriorityCalculator.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/request/RaptorTransitGroupPriorityCalculator.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorTuningParameters.java b/raptor/src/main/java/org/opentripplanner/raptor/api/request/RaptorTuningParameters.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/request/RaptorTuningParameters.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/request/RaptorTuningParameters.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorViaConnection.java b/raptor/src/main/java/org/opentripplanner/raptor/api/request/RaptorViaConnection.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/request/RaptorViaConnection.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/request/RaptorViaConnection.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/RaptorViaLocation.java b/raptor/src/main/java/org/opentripplanner/raptor/api/request/RaptorViaLocation.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/request/RaptorViaLocation.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/request/RaptorViaLocation.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/SearchParams.java b/raptor/src/main/java/org/opentripplanner/raptor/api/request/SearchParams.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/request/SearchParams.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/request/SearchParams.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/request/SearchParamsBuilder.java b/raptor/src/main/java/org/opentripplanner/raptor/api/request/SearchParamsBuilder.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/request/SearchParamsBuilder.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/request/SearchParamsBuilder.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/response/RaptorResponse.java b/raptor/src/main/java/org/opentripplanner/raptor/api/response/RaptorResponse.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/response/RaptorResponse.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/response/RaptorResponse.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/response/StopArrivals.java b/raptor/src/main/java/org/opentripplanner/raptor/api/response/StopArrivals.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/response/StopArrivals.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/response/StopArrivals.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/view/AccessPathView.java b/raptor/src/main/java/org/opentripplanner/raptor/api/view/AccessPathView.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/view/AccessPathView.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/view/AccessPathView.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/view/ArrivalView.java b/raptor/src/main/java/org/opentripplanner/raptor/api/view/ArrivalView.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/view/ArrivalView.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/view/ArrivalView.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/view/EgressPathView.java b/raptor/src/main/java/org/opentripplanner/raptor/api/view/EgressPathView.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/view/EgressPathView.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/view/EgressPathView.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/view/PatternRideView.java b/raptor/src/main/java/org/opentripplanner/raptor/api/view/PatternRideView.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/view/PatternRideView.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/view/PatternRideView.java diff --git a/application/src/main/java/org/opentripplanner/raptor/api/view/TransitPathView.java b/raptor/src/main/java/org/opentripplanner/raptor/api/view/TransitPathView.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/api/view/TransitPathView.java rename to raptor/src/main/java/org/opentripplanner/raptor/api/view/TransitPathView.java diff --git a/application/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java b/raptor/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java rename to raptor/src/main/java/org/opentripplanner/raptor/configure/RaptorConfig.java diff --git a/application/src/main/java/org/opentripplanner/raptor/package.md b/raptor/src/main/java/org/opentripplanner/raptor/package.md similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/package.md rename to raptor/src/main/java/org/opentripplanner/raptor/package.md diff --git a/application/src/main/java/org/opentripplanner/raptor/path/Path.java b/raptor/src/main/java/org/opentripplanner/raptor/path/Path.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/path/Path.java rename to raptor/src/main/java/org/opentripplanner/raptor/path/Path.java diff --git a/application/src/main/java/org/opentripplanner/raptor/path/PathBuilder.java b/raptor/src/main/java/org/opentripplanner/raptor/path/PathBuilder.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/path/PathBuilder.java rename to raptor/src/main/java/org/opentripplanner/raptor/path/PathBuilder.java diff --git a/application/src/main/java/org/opentripplanner/raptor/path/PathBuilderLeg.java b/raptor/src/main/java/org/opentripplanner/raptor/path/PathBuilderLeg.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/path/PathBuilderLeg.java rename to raptor/src/main/java/org/opentripplanner/raptor/path/PathBuilderLeg.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/DefaultRangeRaptorWorker.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/DefaultRangeRaptorWorker.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/DefaultRangeRaptorWorker.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/DefaultRangeRaptorWorker.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/RangeRaptor.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/RangeRaptor.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/RangeRaptor.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/RangeRaptor.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/RangeRaptorWorkerComposite.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/RangeRaptorWorkerComposite.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/RangeRaptorWorkerComposite.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/RangeRaptorWorkerComposite.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/SystemErrDebugLogger.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/SystemErrDebugLogger.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/SystemErrDebugLogger.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/SystemErrDebugLogger.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/context/SearchContext.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/context/SearchContext.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/context/SearchContext.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/context/SearchContext.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/context/SearchContextBuilder.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/context/SearchContextBuilder.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/context/SearchContextBuilder.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/context/SearchContextBuilder.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/context/SearchContextViaLeg.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/context/SearchContextViaLeg.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/context/SearchContextViaLeg.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/context/SearchContextViaLeg.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/AbstractDebugHandlerAdapter.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/AbstractDebugHandlerAdapter.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/AbstractDebugHandlerAdapter.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/AbstractDebugHandlerAdapter.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/DebugHandlerFactory.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/DebugHandlerFactory.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/DebugHandlerFactory.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/DebugHandlerFactory.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/DebugHandlerPathAdapter.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/DebugHandlerPathAdapter.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/DebugHandlerPathAdapter.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/DebugHandlerPathAdapter.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/DebugHandlerPatternRideAdapter.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/DebugHandlerPatternRideAdapter.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/DebugHandlerPatternRideAdapter.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/DebugHandlerPatternRideAdapter.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/DebugHandlerStopArrivalAdapter.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/DebugHandlerStopArrivalAdapter.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/DebugHandlerStopArrivalAdapter.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/DebugHandlerStopArrivalAdapter.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/ParetoSetDebugHandlerAdapter.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/ParetoSetDebugHandlerAdapter.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/ParetoSetDebugHandlerAdapter.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/debug/ParetoSetDebugHandlerAdapter.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/DebugHandler.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/DebugHandler.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/DebugHandler.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/DebugHandler.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/HeuristicAtStop.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/HeuristicAtStop.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/HeuristicAtStop.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/HeuristicAtStop.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/Heuristics.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/Heuristics.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/Heuristics.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/Heuristics.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/ParetoSetCost.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/ParetoSetCost.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/ParetoSetCost.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/ParetoSetCost.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/ParetoSetTime.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/ParetoSetTime.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/ParetoSetTime.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/ParetoSetTime.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/PassThroughPointsService.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/PassThroughPointsService.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/PassThroughPointsService.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/PassThroughPointsService.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RangeRaptorWorker.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RangeRaptorWorker.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RangeRaptorWorker.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RangeRaptorWorker.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RaptorRouter.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RaptorRouter.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RaptorRouter.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RaptorRouter.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RaptorRouterResult.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RaptorRouterResult.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RaptorRouterResult.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RaptorRouterResult.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RaptorWorkerState.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RaptorWorkerState.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RaptorWorkerState.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RaptorWorkerState.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RoutingStrategy.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RoutingStrategy.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RoutingStrategy.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RoutingStrategy.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/SingleCriteriaStopArrivals.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/SingleCriteriaStopArrivals.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/SingleCriteriaStopArrivals.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/SingleCriteriaStopArrivals.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/SlackProvider.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/SlackProvider.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/SlackProvider.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/SlackProvider.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/WorkerLifeCycle.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/WorkerLifeCycle.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/WorkerLifeCycle.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/WorkerLifeCycle.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/lifecycle/LifeCycleEventPublisher.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/lifecycle/LifeCycleEventPublisher.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/lifecycle/LifeCycleEventPublisher.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/lifecycle/LifeCycleEventPublisher.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/lifecycle/LifeCycleSubscriptions.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/lifecycle/LifeCycleSubscriptions.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/lifecycle/LifeCycleSubscriptions.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/lifecycle/LifeCycleSubscriptions.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/CalculateTransferToDestination.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/CalculateTransferToDestination.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/CalculateTransferToDestination.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/CalculateTransferToDestination.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/DebugStopArrivalsStatistics.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/DebugStopArrivalsStatistics.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/DebugStopArrivalsStatistics.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/DebugStopArrivalsStatistics.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/McRangeRaptorWorkerState.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/McRangeRaptorWorkerState.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/McRangeRaptorWorkerState.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/McRangeRaptorWorkerState.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/McRaptorRouterResult.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/McRaptorRouterResult.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/McRaptorRouterResult.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/McRaptorRouterResult.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/McStopArrivals.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/McStopArrivals.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/McStopArrivals.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/McStopArrivals.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/MultiCriteriaRoutingStrategy.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/MultiCriteriaRoutingStrategy.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/MultiCriteriaRoutingStrategy.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/MultiCriteriaRoutingStrategy.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/StopArrivalParetoSet.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/StopArrivalParetoSet.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/StopArrivalParetoSet.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/StopArrivalParetoSet.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ViaConnectionStopArrivalEventListener.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ViaConnectionStopArrivalEventListener.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ViaConnectionStopArrivalEventListener.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ViaConnectionStopArrivalEventListener.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/ArrivalParetoSetComparatorFactory.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/ArrivalParetoSetComparatorFactory.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/ArrivalParetoSetComparatorFactory.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/ArrivalParetoSetComparatorFactory.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/McStopArrival.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/McStopArrival.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/McStopArrival.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/McStopArrival.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/McStopArrivalFactory.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/McStopArrivalFactory.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/McStopArrivalFactory.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/McStopArrivalFactory.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/AccessStopArrival.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/AccessStopArrival.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/AccessStopArrival.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/AccessStopArrival.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/StopArrivalFactoryC1.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/StopArrivalFactoryC1.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/StopArrivalFactoryC1.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/StopArrivalFactoryC1.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/TransferStopArrival.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/TransferStopArrival.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/TransferStopArrival.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/TransferStopArrival.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/TransitStopArrival.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/TransitStopArrival.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/TransitStopArrival.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/TransitStopArrival.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/AbstractStopArrivalC2.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/AbstractStopArrivalC2.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/AbstractStopArrivalC2.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/AbstractStopArrivalC2.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/AccessStopArrivalC2.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/AccessStopArrivalC2.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/AccessStopArrivalC2.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/AccessStopArrivalC2.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/StopArrivalFactoryC2.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/StopArrivalFactoryC2.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/StopArrivalFactoryC2.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/StopArrivalFactoryC2.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/TransferStopArrivalC2.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/TransferStopArrivalC2.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/TransferStopArrivalC2.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/TransferStopArrivalC2.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/TransitStopArrivalC2.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/TransitStopArrivalC2.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/TransitStopArrivalC2.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/TransitStopArrivalC2.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/configure/McRangeRaptorConfig.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/configure/McRangeRaptorConfig.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/configure/McRangeRaptorConfig.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/configure/McRangeRaptorConfig.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/heuristic/HeuristicsProvider.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/heuristic/HeuristicsProvider.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/heuristic/HeuristicsProvider.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/heuristic/HeuristicsProvider.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/passthrough/BitSetPassThroughPointsService.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/passthrough/BitSetPassThroughPointsService.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/passthrough/BitSetPassThroughPointsService.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/passthrough/BitSetPassThroughPointsService.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/PatternRide.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/PatternRide.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/PatternRide.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/PatternRide.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/PatternRideFactory.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/PatternRideFactory.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/PatternRideFactory.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/PatternRideFactory.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c1/PatternRideC1.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c1/PatternRideC1.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c1/PatternRideC1.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c1/PatternRideC1.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/PassThroughRideFactory.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/PassThroughRideFactory.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/PassThroughRideFactory.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/PassThroughRideFactory.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/PatternRideC2.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/PatternRideC2.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/PatternRideC2.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/PatternRideC2.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/TransitGroupPriorityRideFactory.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/TransitGroupPriorityRideFactory.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/TransitGroupPriorityRideFactory.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/TransitGroupPriorityRideFactory.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/path/BoardAndAlightTimeSearch.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/path/BoardAndAlightTimeSearch.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/path/BoardAndAlightTimeSearch.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/path/BoardAndAlightTimeSearch.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/path/DestinationArrival.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/path/DestinationArrival.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/path/DestinationArrival.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/path/DestinationArrival.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/path/DestinationArrivalPaths.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/path/DestinationArrivalPaths.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/path/DestinationArrivalPaths.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/path/DestinationArrivalPaths.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/path/ForwardPathMapper.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/path/ForwardPathMapper.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/path/ForwardPathMapper.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/path/ForwardPathMapper.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/path/PathMapper.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/path/PathMapper.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/path/PathMapper.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/path/PathMapper.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/path/PathParetoSetComparators.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/path/PathParetoSetComparators.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/path/PathParetoSetComparators.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/path/PathParetoSetComparators.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/path/ReversePathMapper.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/path/ReversePathMapper.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/path/ReversePathMapper.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/path/ReversePathMapper.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/path/configure/PathConfig.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/path/configure/PathConfig.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/path/configure/PathConfig.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/path/configure/PathConfig.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/ArrivalTimeRoutingStrategy.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/ArrivalTimeRoutingStrategy.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/ArrivalTimeRoutingStrategy.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/ArrivalTimeRoutingStrategy.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/MinTravelDurationRoutingStrategy.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/MinTravelDurationRoutingStrategy.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/MinTravelDurationRoutingStrategy.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/MinTravelDurationRoutingStrategy.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/StdRangeRaptorWorkerState.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/StdRangeRaptorWorkerState.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/StdRangeRaptorWorkerState.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/StdRangeRaptorWorkerState.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/StdRaptorRouterResult.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/StdRaptorRouterResult.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/StdRaptorRouterResult.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/StdRaptorRouterResult.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/StdWorkerState.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/StdWorkerState.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/StdWorkerState.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/StdWorkerState.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/BestTimes.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/BestTimes.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/BestTimes.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/BestTimes.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/BestTimesOnlyStopArrivalsState.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/BestTimesOnlyStopArrivalsState.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/BestTimesOnlyStopArrivalsState.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/BestTimesOnlyStopArrivalsState.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/SimpleArrivedAtDestinationCheck.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/SimpleArrivedAtDestinationCheck.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/SimpleArrivedAtDestinationCheck.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/SimpleArrivedAtDestinationCheck.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/SimpleBestNumberOfTransfers.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/SimpleBestNumberOfTransfers.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/SimpleBestNumberOfTransfers.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/SimpleBestNumberOfTransfers.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/UnknownPathFactory.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/UnknownPathFactory.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/UnknownPathFactory.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/UnknownPathFactory.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/configure/StdRangeRaptorConfig.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/configure/StdRangeRaptorConfig.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/configure/StdRangeRaptorConfig.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/configure/StdRangeRaptorConfig.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/configure/VerifyRequestIsValid.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/configure/VerifyRequestIsValid.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/configure/VerifyRequestIsValid.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/configure/VerifyRequestIsValid.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/debug/DebugStopArrivalsState.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/debug/DebugStopArrivalsState.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/debug/DebugStopArrivalsState.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/debug/DebugStopArrivalsState.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/debug/StateDebugger.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/debug/StateDebugger.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/debug/StateDebugger.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/debug/StateDebugger.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/heuristics/HeuristicsAdapter.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/heuristics/HeuristicsAdapter.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/heuristics/HeuristicsAdapter.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/heuristics/HeuristicsAdapter.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/internalapi/ArrivedAtDestinationCheck.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/internalapi/ArrivedAtDestinationCheck.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/internalapi/ArrivedAtDestinationCheck.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/internalapi/ArrivedAtDestinationCheck.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/internalapi/BestNumberOfTransfers.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/internalapi/BestNumberOfTransfers.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/internalapi/BestNumberOfTransfers.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/internalapi/BestNumberOfTransfers.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/internalapi/DestinationArrivalListener.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/internalapi/DestinationArrivalListener.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/internalapi/DestinationArrivalListener.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/internalapi/DestinationArrivalListener.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/internalapi/StopArrivalsState.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/internalapi/StopArrivalsState.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/internalapi/StopArrivalsState.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/internalapi/StopArrivalsState.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/AccessStopArrivalState.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/AccessStopArrivalState.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/AccessStopArrivalState.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/AccessStopArrivalState.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/DefaultStopArrivalState.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/DefaultStopArrivalState.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/DefaultStopArrivalState.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/DefaultStopArrivalState.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/EgressStopArrivalState.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/EgressStopArrivalState.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/EgressStopArrivalState.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/EgressStopArrivalState.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/StdStopArrivals.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/StdStopArrivals.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/StdStopArrivals.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/StdStopArrivals.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/StdStopArrivalsState.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/StdStopArrivalsState.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/StdStopArrivalsState.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/StdStopArrivalsState.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/StopArrivalState.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/StopArrivalState.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/StopArrivalState.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/StopArrivalState.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/path/EgressArrivalToPathAdapter.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/path/EgressArrivalToPathAdapter.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/path/EgressArrivalToPathAdapter.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/path/EgressArrivalToPathAdapter.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/Access.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/Access.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/Access.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/Access.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/StopArrivalViewAdapter.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/StopArrivalViewAdapter.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/StopArrivalViewAdapter.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/StopArrivalViewAdapter.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/StopsCursor.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/StopsCursor.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/StopsCursor.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/StopsCursor.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/Transfer.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/Transfer.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/Transfer.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/Transfer.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/Transit.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/Transit.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/Transit.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/standard/stoparrivals/view/Transit.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/support/IntArraySingleCriteriaArrivals.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/support/IntArraySingleCriteriaArrivals.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/support/IntArraySingleCriteriaArrivals.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/support/IntArraySingleCriteriaArrivals.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/support/TimeBasedBoardingSupport.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/support/TimeBasedBoardingSupport.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/support/TimeBasedBoardingSupport.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/support/TimeBasedBoardingSupport.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/AccessEgressFunctions.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/AccessEgressFunctions.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/AccessEgressFunctions.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/AccessEgressFunctions.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/AccessPaths.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/AccessPaths.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/AccessPaths.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/AccessPaths.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/AccessWithPenalty.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/AccessWithPenalty.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/AccessWithPenalty.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/AccessWithPenalty.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/EgressPaths.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/EgressPaths.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/EgressPaths.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/EgressPaths.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/EgressWithPenalty.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/EgressWithPenalty.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/EgressWithPenalty.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/EgressWithPenalty.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculator.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculator.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculator.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculator.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardTimeCalculator.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardTimeCalculator.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardTimeCalculator.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardTimeCalculator.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardTransitCalculator.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardTransitCalculator.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardTransitCalculator.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardTransitCalculator.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/RaptorSearchWindowCalculator.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/RaptorSearchWindowCalculator.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/RaptorSearchWindowCalculator.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/RaptorSearchWindowCalculator.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/RaptorTransitCalculator.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/RaptorTransitCalculator.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/RaptorTransitCalculator.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/RaptorTransitCalculator.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculator.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculator.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculator.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculator.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseTimeCalculator.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseTimeCalculator.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseTimeCalculator.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseTimeCalculator.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseTransitCalculator.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseTransitCalculator.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseTransitCalculator.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseTransitCalculator.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/RoundTracker.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/RoundTracker.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/RoundTracker.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/RoundTracker.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/SlackProviderAdapter.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/SlackProviderAdapter.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/SlackProviderAdapter.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/SlackProviderAdapter.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TimeCalculator.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TimeCalculator.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TimeCalculator.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TimeCalculator.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TransitCalculator.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TransitCalculator.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TransitCalculator.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TransitCalculator.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TripScheduleExactMatchSearch.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TripScheduleExactMatchSearch.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TripScheduleExactMatchSearch.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TripScheduleExactMatchSearch.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TripTimesSearch.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TripTimesSearch.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TripTimesSearch.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/TripTimesSearch.java diff --git a/application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ViaConnections.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ViaConnections.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ViaConnections.java rename to raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/ViaConnections.java diff --git a/application/src/main/java/org/opentripplanner/raptor/service/DebugHeuristics.java b/raptor/src/main/java/org/opentripplanner/raptor/service/DebugHeuristics.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/service/DebugHeuristics.java rename to raptor/src/main/java/org/opentripplanner/raptor/service/DebugHeuristics.java diff --git a/application/src/main/java/org/opentripplanner/raptor/service/DefaultStopArrivals.java b/raptor/src/main/java/org/opentripplanner/raptor/service/DefaultStopArrivals.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/service/DefaultStopArrivals.java rename to raptor/src/main/java/org/opentripplanner/raptor/service/DefaultStopArrivals.java diff --git a/application/src/main/java/org/opentripplanner/raptor/service/DestinationNotReachedException.java b/raptor/src/main/java/org/opentripplanner/raptor/service/DestinationNotReachedException.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/service/DestinationNotReachedException.java rename to raptor/src/main/java/org/opentripplanner/raptor/service/DestinationNotReachedException.java diff --git a/application/src/main/java/org/opentripplanner/raptor/service/HeuristicSearchTask.java b/raptor/src/main/java/org/opentripplanner/raptor/service/HeuristicSearchTask.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/service/HeuristicSearchTask.java rename to raptor/src/main/java/org/opentripplanner/raptor/service/HeuristicSearchTask.java diff --git a/application/src/main/java/org/opentripplanner/raptor/service/HeuristicToRunResolver.java b/raptor/src/main/java/org/opentripplanner/raptor/service/HeuristicToRunResolver.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/service/HeuristicToRunResolver.java rename to raptor/src/main/java/org/opentripplanner/raptor/service/HeuristicToRunResolver.java diff --git a/application/src/main/java/org/opentripplanner/raptor/service/RangeRaptorDynamicSearch.java b/raptor/src/main/java/org/opentripplanner/raptor/service/RangeRaptorDynamicSearch.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/service/RangeRaptorDynamicSearch.java rename to raptor/src/main/java/org/opentripplanner/raptor/service/RangeRaptorDynamicSearch.java diff --git a/application/src/main/java/org/opentripplanner/raptor/service/ViaRangeRaptorDynamicSearch.java b/raptor/src/main/java/org/opentripplanner/raptor/service/ViaRangeRaptorDynamicSearch.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/service/ViaRangeRaptorDynamicSearch.java rename to raptor/src/main/java/org/opentripplanner/raptor/service/ViaRangeRaptorDynamicSearch.java diff --git a/application/src/main/java/org/opentripplanner/raptor/spi/BoardAndAlightTime.java b/raptor/src/main/java/org/opentripplanner/raptor/spi/BoardAndAlightTime.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/spi/BoardAndAlightTime.java rename to raptor/src/main/java/org/opentripplanner/raptor/spi/BoardAndAlightTime.java diff --git a/application/src/main/java/org/opentripplanner/raptor/spi/DefaultSlackProvider.java b/raptor/src/main/java/org/opentripplanner/raptor/spi/DefaultSlackProvider.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/spi/DefaultSlackProvider.java rename to raptor/src/main/java/org/opentripplanner/raptor/spi/DefaultSlackProvider.java diff --git a/application/src/main/java/org/opentripplanner/raptor/spi/EmptyBoardOrAlightEvent.java b/raptor/src/main/java/org/opentripplanner/raptor/spi/EmptyBoardOrAlightEvent.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/spi/EmptyBoardOrAlightEvent.java rename to raptor/src/main/java/org/opentripplanner/raptor/spi/EmptyBoardOrAlightEvent.java diff --git a/application/src/main/java/org/opentripplanner/raptor/spi/Flyweight.java b/raptor/src/main/java/org/opentripplanner/raptor/spi/Flyweight.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/spi/Flyweight.java rename to raptor/src/main/java/org/opentripplanner/raptor/spi/Flyweight.java diff --git a/application/src/main/java/org/opentripplanner/raptor/spi/IntIterator.java b/raptor/src/main/java/org/opentripplanner/raptor/spi/IntIterator.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/spi/IntIterator.java rename to raptor/src/main/java/org/opentripplanner/raptor/spi/IntIterator.java diff --git a/application/src/main/java/org/opentripplanner/raptor/spi/RaptorBoardOrAlightEvent.java b/raptor/src/main/java/org/opentripplanner/raptor/spi/RaptorBoardOrAlightEvent.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/spi/RaptorBoardOrAlightEvent.java rename to raptor/src/main/java/org/opentripplanner/raptor/spi/RaptorBoardOrAlightEvent.java diff --git a/application/src/main/java/org/opentripplanner/raptor/spi/RaptorConstrainedBoardingSearch.java b/raptor/src/main/java/org/opentripplanner/raptor/spi/RaptorConstrainedBoardingSearch.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/spi/RaptorConstrainedBoardingSearch.java rename to raptor/src/main/java/org/opentripplanner/raptor/spi/RaptorConstrainedBoardingSearch.java diff --git a/application/src/main/java/org/opentripplanner/raptor/spi/RaptorCostCalculator.java b/raptor/src/main/java/org/opentripplanner/raptor/spi/RaptorCostCalculator.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/spi/RaptorCostCalculator.java rename to raptor/src/main/java/org/opentripplanner/raptor/spi/RaptorCostCalculator.java diff --git a/application/src/main/java/org/opentripplanner/raptor/spi/RaptorPathConstrainedTransferSearch.java b/raptor/src/main/java/org/opentripplanner/raptor/spi/RaptorPathConstrainedTransferSearch.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/spi/RaptorPathConstrainedTransferSearch.java rename to raptor/src/main/java/org/opentripplanner/raptor/spi/RaptorPathConstrainedTransferSearch.java diff --git a/application/src/main/java/org/opentripplanner/raptor/spi/RaptorRoute.java b/raptor/src/main/java/org/opentripplanner/raptor/spi/RaptorRoute.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/spi/RaptorRoute.java rename to raptor/src/main/java/org/opentripplanner/raptor/spi/RaptorRoute.java diff --git a/application/src/main/java/org/opentripplanner/raptor/spi/RaptorSlackProvider.java b/raptor/src/main/java/org/opentripplanner/raptor/spi/RaptorSlackProvider.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/spi/RaptorSlackProvider.java rename to raptor/src/main/java/org/opentripplanner/raptor/spi/RaptorSlackProvider.java diff --git a/application/src/main/java/org/opentripplanner/raptor/spi/RaptorTimeTable.java b/raptor/src/main/java/org/opentripplanner/raptor/spi/RaptorTimeTable.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/spi/RaptorTimeTable.java rename to raptor/src/main/java/org/opentripplanner/raptor/spi/RaptorTimeTable.java diff --git a/application/src/main/java/org/opentripplanner/raptor/spi/RaptorTransitDataProvider.java b/raptor/src/main/java/org/opentripplanner/raptor/spi/RaptorTransitDataProvider.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/spi/RaptorTransitDataProvider.java rename to raptor/src/main/java/org/opentripplanner/raptor/spi/RaptorTransitDataProvider.java diff --git a/application/src/main/java/org/opentripplanner/raptor/spi/RaptorTripScheduleSearch.java b/raptor/src/main/java/org/opentripplanner/raptor/spi/RaptorTripScheduleSearch.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/spi/RaptorTripScheduleSearch.java rename to raptor/src/main/java/org/opentripplanner/raptor/spi/RaptorTripScheduleSearch.java diff --git a/application/src/main/java/org/opentripplanner/raptor/spi/UnknownPath.java b/raptor/src/main/java/org/opentripplanner/raptor/spi/UnknownPath.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/spi/UnknownPath.java rename to raptor/src/main/java/org/opentripplanner/raptor/spi/UnknownPath.java diff --git a/application/src/main/java/org/opentripplanner/raptor/util/BitSetIterator.java b/raptor/src/main/java/org/opentripplanner/raptor/util/BitSetIterator.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/util/BitSetIterator.java rename to raptor/src/main/java/org/opentripplanner/raptor/util/BitSetIterator.java diff --git a/application/src/main/java/org/opentripplanner/raptor/util/CompareIntArrays.java b/raptor/src/main/java/org/opentripplanner/raptor/util/CompareIntArrays.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/util/CompareIntArrays.java rename to raptor/src/main/java/org/opentripplanner/raptor/util/CompareIntArrays.java diff --git a/application/src/main/java/org/opentripplanner/raptor/util/IntIterators.java b/raptor/src/main/java/org/opentripplanner/raptor/util/IntIterators.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/util/IntIterators.java rename to raptor/src/main/java/org/opentripplanner/raptor/util/IntIterators.java diff --git a/application/src/main/java/org/opentripplanner/raptor/util/composite/CompositeUtil.java b/raptor/src/main/java/org/opentripplanner/raptor/util/composite/CompositeUtil.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/util/composite/CompositeUtil.java rename to raptor/src/main/java/org/opentripplanner/raptor/util/composite/CompositeUtil.java diff --git a/application/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoComparator.java b/raptor/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoComparator.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoComparator.java rename to raptor/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoComparator.java diff --git a/application/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoSet.java b/raptor/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoSet.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoSet.java rename to raptor/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoSet.java diff --git a/application/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoSetEventListener.java b/raptor/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoSetEventListener.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoSetEventListener.java rename to raptor/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoSetEventListener.java diff --git a/application/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoSetEventListenerComposite.java b/raptor/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoSetEventListenerComposite.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoSetEventListenerComposite.java rename to raptor/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoSetEventListenerComposite.java diff --git a/application/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoSetWithMarker.java b/raptor/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoSetWithMarker.java similarity index 100% rename from application/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoSetWithMarker.java rename to raptor/src/main/java/org/opentripplanner/raptor/util/paretoset/ParetoSetWithMarker.java diff --git a/application/src/test/java/org/opentripplanner/raptor/RaptorArchitectureTest.java b/raptor/src/test/java/org/opentripplanner/raptor/RaptorArchitectureTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/RaptorArchitectureTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/RaptorArchitectureTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/RaptorTestConstants.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/RaptorTestConstants.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/_data/RaptorTestConstants.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/RaptorTestConstants.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/api/PathUtils.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/api/PathUtils.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/_data/api/PathUtils.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/api/PathUtils.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilder.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilder.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilder.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilder.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilderTestRaptor.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilderTestRaptor.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilderTestRaptor.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilderTestRaptor.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/api/TestRaptorPath.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/api/TestRaptorPath.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/_data/api/TestRaptorPath.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/api/TestRaptorPath.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/multicriteria/ride/TestPatterRideBuilder.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/multicriteria/ride/TestPatterRideBuilder.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/_data/multicriteria/ride/TestPatterRideBuilder.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/multicriteria/ride/TestPatterRideBuilder.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/AbstractStopArrival.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/AbstractStopArrival.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/AbstractStopArrival.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/AbstractStopArrival.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Access.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Access.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Access.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Access.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Egress.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Egress.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Egress.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Egress.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/TestArrivals.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/TestArrivals.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/TestArrivals.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/TestArrivals.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Transfer.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Transfer.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Transfer.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Transfer.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Transit.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Transit.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Transit.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Transit.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestAccessEgress.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestAccessEgress.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/_data/transit/TestAccessEgress.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestAccessEgress.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedBoardingSearch.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedBoardingSearch.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedBoardingSearch.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedBoardingSearch.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransfer.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransfer.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransfer.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransfer.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestRoute.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestRoute.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/_data/transit/TestRoute.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestRoute.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransfer.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransfer.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransfer.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransfer.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferPoint.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferPoint.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferPoint.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferPoint.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransitData.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransitData.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransitData.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransitData.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripPattern.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripPattern.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripPattern.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripPattern.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSchedule.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSchedule.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSchedule.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSchedule.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSearchTimetable.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSearchTimetable.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSearchTimetable.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSearchTimetable.java diff --git a/application/src/test/java/org/opentripplanner/raptor/api/model/GeneralizedCostRelaxFunctionTest.java b/raptor/src/test/java/org/opentripplanner/raptor/api/model/GeneralizedCostRelaxFunctionTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/api/model/GeneralizedCostRelaxFunctionTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/api/model/GeneralizedCostRelaxFunctionTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/api/path/PathTest.java b/raptor/src/test/java/org/opentripplanner/raptor/api/path/PathTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/api/path/PathTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/api/path/PathTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/api/path/RaptorPathTest.java b/raptor/src/test/java/org/opentripplanner/raptor/api/path/RaptorPathTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/api/path/RaptorPathTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/api/path/RaptorPathTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/api/request/MultiCriteriaRequestTest.java b/raptor/src/test/java/org/opentripplanner/raptor/api/request/MultiCriteriaRequestTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/api/request/MultiCriteriaRequestTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/api/request/MultiCriteriaRequestTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/api/request/PassThroughPointTest.java b/raptor/src/test/java/org/opentripplanner/raptor/api/request/PassThroughPointTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/api/request/PassThroughPointTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/api/request/PassThroughPointTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/api/request/RaptorRequestTest.java b/raptor/src/test/java/org/opentripplanner/raptor/api/request/RaptorRequestTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/api/request/RaptorRequestTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/api/request/RaptorRequestTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/api/request/SearchParamsTest.java b/raptor/src/test/java/org/opentripplanner/raptor/api/request/SearchParamsTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/api/request/SearchParamsTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/api/request/SearchParamsTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/api/request/ViaLocationTest.java b/raptor/src/test/java/org/opentripplanner/raptor/api/request/ViaLocationTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/api/request/ViaLocationTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/api/request/ViaLocationTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/api/view/BoardAndAlightTimeTest.java b/raptor/src/test/java/org/opentripplanner/raptor/api/view/BoardAndAlightTimeTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/api/view/BoardAndAlightTimeTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/api/view/BoardAndAlightTimeTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/A01_SingleRouteTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/A01_SingleRouteTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/A01_SingleRouteTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/A01_SingleRouteTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/A04_BoardingTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/A04_BoardingTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/A04_BoardingTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/A04_BoardingTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/B01_AccessTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/B01_AccessTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/B01_AccessTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/B01_AccessTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/B02_EgressTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/B02_EgressTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/B02_EgressTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/B02_EgressTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/B03_AccessEgressTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/B03_AccessEgressTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/B03_AccessEgressTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/B03_AccessEgressTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/B04_AccessEgressBoardingTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/B04_AccessEgressBoardingTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/B04_AccessEgressBoardingTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/B04_AccessEgressBoardingTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/B05_EgressStopBoardAlightTransferCostTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/B05_EgressStopBoardAlightTransferCostTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/B05_EgressStopBoardAlightTransferCostTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/B05_EgressStopBoardAlightTransferCostTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/C01_TransferBoardAndAlightSlackTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/C01_TransferBoardAndAlightSlackTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/C01_TransferBoardAndAlightSlackTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/C01_TransferBoardAndAlightSlackTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/C02_OnStreetTransfersTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/C02_OnStreetTransfersTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/C02_OnStreetTransfersTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/C02_OnStreetTransfersTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/C03_OnBoardArrivalDominateTransfersTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/C03_OnBoardArrivalDominateTransfersTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/C03_OnBoardArrivalDominateTransfersTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/C03_OnBoardArrivalDominateTransfersTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/D01_SingeRouteBoardAlightRestrictionsTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/D01_SingeRouteBoardAlightRestrictionsTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/D01_SingeRouteBoardAlightRestrictionsTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/D01_SingeRouteBoardAlightRestrictionsTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/D02_TransitModeReluctanceTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/D02_TransitModeReluctanceTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/D02_TransitModeReluctanceTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/D02_TransitModeReluctanceTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/D03_UnpreferredRouteTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/D03_UnpreferredRouteTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/D03_UnpreferredRouteTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/D03_UnpreferredRouteTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/E01_StaySeatedTransferTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/E01_StaySeatedTransferTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/E01_StaySeatedTransferTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/E01_StaySeatedTransferTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/E02_GuaranteedWalkTransferTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/E02_GuaranteedWalkTransferTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/E02_GuaranteedWalkTransferTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/E02_GuaranteedWalkTransferTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/E03_NotAllowedConstrainedTransferTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/E03_NotAllowedConstrainedTransferTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/E03_NotAllowedConstrainedTransferTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/E03_NotAllowedConstrainedTransferTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/F01_AccessWithRidesTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/F01_AccessWithRidesTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/F01_AccessWithRidesTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/F01_AccessWithRidesTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/F02_EgressWithRidesTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/F02_EgressWithRidesTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/F02_EgressWithRidesTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/F02_EgressWithRidesTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/F03_AccessEgressWithRidesBoardAndAlightSlackTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/F03_AccessEgressWithRidesBoardAndAlightSlackTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/F03_AccessEgressWithRidesBoardAndAlightSlackTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/F03_AccessEgressWithRidesBoardAndAlightSlackTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/F04_AccessEgressWithRidesNoTransitTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/F04_AccessEgressWithRidesNoTransitTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/F04_AccessEgressWithRidesNoTransitTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/F04_AccessEgressWithRidesNoTransitTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/F05_OnBoardAccessEgressAndTransfersTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/F05_OnBoardAccessEgressAndTransfersTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/F05_OnBoardAccessEgressAndTransfersTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/F05_OnBoardAccessEgressAndTransfersTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/F11_AccessWithRidesMultipleOptimalPathsTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/F11_AccessWithRidesMultipleOptimalPathsTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/F11_AccessWithRidesMultipleOptimalPathsTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/F11_AccessWithRidesMultipleOptimalPathsTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/F12_EgressWithRidesMultipleOptimalPathsTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/F12_EgressWithRidesMultipleOptimalPathsTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/F12_EgressWithRidesMultipleOptimalPathsTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/F12_EgressWithRidesMultipleOptimalPathsTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/G01_AccessWithOpeningHoursTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/G01_AccessWithOpeningHoursTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/G01_AccessWithOpeningHoursTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/G01_AccessWithOpeningHoursTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/G02_EgressWithOpeningHoursTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/G02_EgressWithOpeningHoursTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/G02_EgressWithOpeningHoursTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/G02_EgressWithOpeningHoursTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/G03_AccessWithOpeningHoursMultipleOptionsTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/G03_AccessWithOpeningHoursMultipleOptionsTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/G03_AccessWithOpeningHoursMultipleOptionsTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/G03_AccessWithOpeningHoursMultipleOptionsTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/G04_EgressWithOpeningHoursMultipleOptionsTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/G04_EgressWithOpeningHoursMultipleOptionsTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/G04_EgressWithOpeningHoursMultipleOptionsTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/G04_EgressWithOpeningHoursMultipleOptionsTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/G05_ClosedAccessOpeningHoursTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/G05_ClosedAccessOpeningHoursTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/G05_ClosedAccessOpeningHoursTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/G05_ClosedAccessOpeningHoursTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/G06_ClosedEgressOpeningHoursTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/G06_ClosedEgressOpeningHoursTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/G06_ClosedEgressOpeningHoursTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/G06_ClosedEgressOpeningHoursTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/H11_GuaranteedTransferWithFlexAccessTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/H11_GuaranteedTransferWithFlexAccessTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/H11_GuaranteedTransferWithFlexAccessTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/H11_GuaranteedTransferWithFlexAccessTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/I01_HeuristicTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/I01_HeuristicTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/I01_HeuristicTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/I01_HeuristicTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/J01_PassThroughTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/J01_PassThroughTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/J01_PassThroughTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/J01_PassThroughTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/J02_ViaSearchTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/J02_ViaSearchTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/J02_ViaSearchTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/J02_ViaSearchTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/K01_TransitPriorityTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/K01_TransitPriorityTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/K01_TransitPriorityTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/K01_TransitPriorityTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/K02_TransitPriorityDestinationTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/K02_TransitPriorityDestinationTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/K02_TransitPriorityDestinationTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/K02_TransitPriorityDestinationTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/L01_TimePenaltyAccessTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/L01_TimePenaltyAccessTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/L01_TimePenaltyAccessTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/L01_TimePenaltyAccessTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/L01_TimePenaltyEgressTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/L01_TimePenaltyEgressTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/L01_TimePenaltyEgressTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/L01_TimePenaltyEgressTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/images/F11.svg b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/images/F11.svg similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/images/F11.svg rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/images/F11.svg diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/images/F12.svg b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/images/F12.svg similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/images/F12.svg rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/images/F12.svg diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/images/Samples.excalidraw b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/images/Samples.excalidraw similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/images/Samples.excalidraw rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/images/Samples.excalidraw diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/package-info.md b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/package-info.md similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/package-info.md rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/package-info.md diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/support/ExpectedList.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/support/ExpectedList.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/support/ExpectedList.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/support/ExpectedList.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/support/ModuleTestDebugLogging.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/support/ModuleTestDebugLogging.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/support/ModuleTestDebugLogging.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/support/ModuleTestDebugLogging.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/support/RaptorModuleTestCase.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/support/RaptorModuleTestCase.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/support/RaptorModuleTestCase.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/support/RaptorModuleTestCase.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/support/RaptorModuleTestCaseFactory.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/support/RaptorModuleTestCaseFactory.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/support/RaptorModuleTestCaseFactory.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/support/RaptorModuleTestCaseFactory.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/support/RaptorModuleTestConfig.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/support/RaptorModuleTestConfig.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/support/RaptorModuleTestConfig.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/support/RaptorModuleTestConfig.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/support/RaptorModuleTestConfigSetBuilder.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/support/RaptorModuleTestConfigSetBuilder.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/support/RaptorModuleTestConfigSetBuilder.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/support/RaptorModuleTestConfigSetBuilder.java diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/support/TestGroupPriorityCalculator.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/support/TestGroupPriorityCalculator.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/moduletests/support/TestGroupPriorityCalculator.java rename to raptor/src/test/java/org/opentripplanner/raptor/moduletests/support/TestGroupPriorityCalculator.java diff --git a/application/src/test/java/org/opentripplanner/raptor/package-info.md b/raptor/src/test/java/org/opentripplanner/raptor/package-info.md similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/package-info.md rename to raptor/src/test/java/org/opentripplanner/raptor/package-info.md diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/context/SearchContextTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/context/SearchContextTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/context/SearchContextTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/context/SearchContextTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/internalapi/NoopPassThroughPointsServiceTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/internalapi/NoopPassThroughPointsServiceTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/internalapi/NoopPassThroughPointsServiceTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/internalapi/NoopPassThroughPointsServiceTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/StopArrivalStateParetoSetTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/StopArrivalStateParetoSetTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/StopArrivalStateParetoSetTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/StopArrivalStateParetoSetTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/ArrivalParetoSetComparatorFactoryTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/ArrivalParetoSetComparatorFactoryTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/ArrivalParetoSetComparatorFactoryTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/ArrivalParetoSetComparatorFactoryTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/McStopArrivalTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/McStopArrivalTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/McStopArrivalTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/McStopArrivalTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/AccessStopArrivalTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/AccessStopArrivalTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/AccessStopArrivalTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/AccessStopArrivalTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/StopArrivalFactoryC1Test.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/StopArrivalFactoryC1Test.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/StopArrivalFactoryC1Test.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/StopArrivalFactoryC1Test.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/TransferStopArrivalTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/TransferStopArrivalTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/TransferStopArrivalTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/TransferStopArrivalTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/TransitStopArrivalTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/TransitStopArrivalTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/TransitStopArrivalTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c1/TransitStopArrivalTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/AccessStopArrivalC2Test.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/AccessStopArrivalC2Test.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/AccessStopArrivalC2Test.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/AccessStopArrivalC2Test.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/StopArrivalFactoryC2Test.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/StopArrivalFactoryC2Test.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/StopArrivalFactoryC2Test.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/StopArrivalFactoryC2Test.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/TransferStopArrivalC2Test.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/TransferStopArrivalC2Test.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/TransferStopArrivalC2Test.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/TransferStopArrivalC2Test.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/TransitStopArrivalC2Test.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/TransitStopArrivalC2Test.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/TransitStopArrivalC2Test.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/arrivals/c2/TransitStopArrivalC2Test.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/passthrough/BitSetPassThroughPointsServiceTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/passthrough/BitSetPassThroughPointsServiceTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/passthrough/BitSetPassThroughPointsServiceTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/passthrough/BitSetPassThroughPointsServiceTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c1/PatternRideC1Test.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c1/PatternRideC1Test.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c1/PatternRideC1Test.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c1/PatternRideC1Test.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/PatternRideC2Test.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/PatternRideC2Test.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/PatternRideC2Test.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/PatternRideC2Test.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/path/DestinationArrivalTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/path/DestinationArrivalTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/path/DestinationArrivalTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/path/DestinationArrivalTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/path/PathMapperTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/path/PathMapperTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/path/PathMapperTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/path/PathMapperTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/path/PathParetoSetComparatorsTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/path/PathParetoSetComparatorsTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/path/PathParetoSetComparatorsTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/path/PathParetoSetComparatorsTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/SimpleArrivedAtDestinationCheckTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/SimpleArrivedAtDestinationCheckTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/SimpleArrivedAtDestinationCheckTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/standard/besttimes/SimpleArrivedAtDestinationCheckTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/support/IntArraySingleCriteriaArrivalsTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/support/IntArraySingleCriteriaArrivalsTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/support/IntArraySingleCriteriaArrivalsTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/support/IntArraySingleCriteriaArrivalsTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/AccessEgressFunctionsTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/AccessEgressFunctionsTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/AccessEgressFunctionsTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/AccessEgressFunctionsTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/AccessPathsTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/AccessPathsTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/AccessPathsTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/AccessPathsTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/AccessWithPenaltyTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/AccessWithPenaltyTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/AccessWithPenaltyTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/AccessWithPenaltyTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/EgressPathsTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/EgressPathsTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/EgressPathsTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/EgressPathsTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/EgressWithPenaltyTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/EgressWithPenaltyTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/EgressWithPenaltyTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/EgressWithPenaltyTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculatorTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculatorTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculatorTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardRaptorTransitCalculatorTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardTimeCalculatorTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardTimeCalculatorTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardTimeCalculatorTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardTimeCalculatorTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardTransitCalculatorTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardTransitCalculatorTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardTransitCalculatorTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ForwardTransitCalculatorTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/RaptorSearchWindowCalculatorTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/RaptorSearchWindowCalculatorTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/RaptorSearchWindowCalculatorTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/RaptorSearchWindowCalculatorTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculatorTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculatorTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculatorTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseRaptorTransitCalculatorTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseTimeCalculatorTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseTimeCalculatorTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseTimeCalculatorTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseTimeCalculatorTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseTransitCalculatorTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseTransitCalculatorTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseTransitCalculatorTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/ReverseTransitCalculatorTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/RoundTrackerTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/RoundTrackerTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/RoundTrackerTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/RoundTrackerTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/SlackProviderAdapterTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/SlackProviderAdapterTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/SlackProviderAdapterTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/SlackProviderAdapterTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/TripScheduleExactMatchSearchTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/TripScheduleExactMatchSearchTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/TripScheduleExactMatchSearchTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/TripScheduleExactMatchSearchTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/TripTimesSearchTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/TripTimesSearchTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/TripTimesSearchTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/transit/TripTimesSearchTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/service/HeuristicToRunResolverTest.java b/raptor/src/test/java/org/opentripplanner/raptor/service/HeuristicToRunResolverTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/service/HeuristicToRunResolverTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/service/HeuristicToRunResolverTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/spi/EmptyBoardOrAlightEventTest.java b/raptor/src/test/java/org/opentripplanner/raptor/spi/EmptyBoardOrAlightEventTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/spi/EmptyBoardOrAlightEventTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/spi/EmptyBoardOrAlightEventTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/spi/RaptorSlackProviderTest.java b/raptor/src/test/java/org/opentripplanner/raptor/spi/RaptorSlackProviderTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/spi/RaptorSlackProviderTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/spi/RaptorSlackProviderTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/spi/RaptorTripPatternTest.java b/raptor/src/test/java/org/opentripplanner/raptor/spi/RaptorTripPatternTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/spi/RaptorTripPatternTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/spi/RaptorTripPatternTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/spi/RaptorTripScheduleTest.java b/raptor/src/test/java/org/opentripplanner/raptor/spi/RaptorTripScheduleTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/spi/RaptorTripScheduleTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/spi/RaptorTripScheduleTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/spi/UnknownPathTest.java b/raptor/src/test/java/org/opentripplanner/raptor/spi/UnknownPathTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/spi/UnknownPathTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/spi/UnknownPathTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/util/BitSetIteratorTest.java b/raptor/src/test/java/org/opentripplanner/raptor/util/BitSetIteratorTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/util/BitSetIteratorTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/util/BitSetIteratorTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/util/IntIteratorsTest.java b/raptor/src/test/java/org/opentripplanner/raptor/util/IntIteratorsTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/util/IntIteratorsTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/util/IntIteratorsTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/util/PathStringBuilderTest.java b/raptor/src/test/java/org/opentripplanner/raptor/util/PathStringBuilderTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/util/PathStringBuilderTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/util/PathStringBuilderTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/util/composite/CompositeUtilTest.java b/raptor/src/test/java/org/opentripplanner/raptor/util/composite/CompositeUtilTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/util/composite/CompositeUtilTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/util/composite/CompositeUtilTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/util/paretoset/ParetoSetEventListenerCompositeTest.java b/raptor/src/test/java/org/opentripplanner/raptor/util/paretoset/ParetoSetEventListenerCompositeTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/util/paretoset/ParetoSetEventListenerCompositeTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/util/paretoset/ParetoSetEventListenerCompositeTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/util/paretoset/ParetoSetEventListenerTest.java b/raptor/src/test/java/org/opentripplanner/raptor/util/paretoset/ParetoSetEventListenerTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/util/paretoset/ParetoSetEventListenerTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/util/paretoset/ParetoSetEventListenerTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/util/paretoset/ParetoSetTest.java b/raptor/src/test/java/org/opentripplanner/raptor/util/paretoset/ParetoSetTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/util/paretoset/ParetoSetTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/util/paretoset/ParetoSetTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/util/paretoset/ParetoSetWithMarkerTest.java b/raptor/src/test/java/org/opentripplanner/raptor/util/paretoset/ParetoSetWithMarkerTest.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/util/paretoset/ParetoSetWithMarkerTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/util/paretoset/ParetoSetWithMarkerTest.java diff --git a/application/src/test/java/org/opentripplanner/raptor/util/paretoset/TestParetoSetEventListener.java b/raptor/src/test/java/org/opentripplanner/raptor/util/paretoset/TestParetoSetEventListener.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/util/paretoset/TestParetoSetEventListener.java rename to raptor/src/test/java/org/opentripplanner/raptor/util/paretoset/TestParetoSetEventListener.java diff --git a/application/src/test/java/org/opentripplanner/raptor/util/paretoset/TestVector.java b/raptor/src/test/java/org/opentripplanner/raptor/util/paretoset/TestVector.java similarity index 100% rename from application/src/test/java/org/opentripplanner/raptor/util/paretoset/TestVector.java rename to raptor/src/test/java/org/opentripplanner/raptor/util/paretoset/TestVector.java From 36e1b91d40cc8fcd54ac4ef65732ac57a6bdea47 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Sat, 2 Nov 2024 23:00:27 +0100 Subject: [PATCH 179/213] Add back Raptor test framework and deprecate it. --- .../raptor/_data/RaptorTestConstants.java | 92 ++++ .../raptor/_data/api/PathUtils.java | 61 +++ .../raptor/_data/api/TestPathBuilder.java | 157 ++++++ .../_data/api/TestPathBuilderTestRaptor.java | 99 ++++ .../stoparrival/AbstractStopArrival.java | 85 ++++ .../raptor/_data/stoparrival/Access.java | 37 ++ .../_data/stoparrival/BasicPathTestCase.java | 464 ++++++++++++++++++ .../raptor/_data/stoparrival/Egress.java | 54 ++ .../FlexAccessAndEgressPathTestCase.java | 388 +++++++++++++++ .../_data/stoparrival/TestArrivals.java | 110 +++++ .../raptor/_data/stoparrival/Transfer.java | 43 ++ .../raptor/_data/stoparrival/Transit.java | 57 +++ .../_data/transit/TestAccessEgress.java | 365 ++++++++++++++ .../TestConstrainedBoardingSearch.java | 128 +++++ .../transit/TestConstrainedTransfer.java | 97 ++++ .../raptor/_data/transit/TestRoute.java | 152 ++++++ .../raptor/_data/transit/TestTransfer.java | 52 ++ .../_data/transit/TestTransferPoint.java | 57 +++ .../raptor/_data/transit/TestTransitData.java | 385 +++++++++++++++ .../raptor/_data/transit/TestTripPattern.java | 171 +++++++ .../_data/transit/TestTripSchedule.java | 307 ++++++++++++ .../transit/TestTripSearchTimetable.java | 52 ++ 22 files changed, 3413 insertions(+) create mode 100644 application/src/test/java/org/opentripplanner/raptor/_data/RaptorTestConstants.java create mode 100644 application/src/test/java/org/opentripplanner/raptor/_data/api/PathUtils.java create mode 100644 application/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilder.java create mode 100644 application/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilderTestRaptor.java create mode 100644 application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/AbstractStopArrival.java create mode 100644 application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Access.java create mode 100644 application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java create mode 100644 application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Egress.java create mode 100644 application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java create mode 100644 application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/TestArrivals.java create mode 100644 application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Transfer.java create mode 100644 application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Transit.java create mode 100644 application/src/test/java/org/opentripplanner/raptor/_data/transit/TestAccessEgress.java create mode 100644 application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedBoardingSearch.java create mode 100644 application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransfer.java create mode 100644 application/src/test/java/org/opentripplanner/raptor/_data/transit/TestRoute.java create mode 100644 application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransfer.java create mode 100644 application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferPoint.java create mode 100644 application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransitData.java create mode 100644 application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripPattern.java create mode 100644 application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSchedule.java create mode 100644 application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSearchTimetable.java diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/RaptorTestConstants.java b/application/src/test/java/org/opentripplanner/raptor/_data/RaptorTestConstants.java new file mode 100644 index 00000000000..0daf604e197 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/raptor/_data/RaptorTestConstants.java @@ -0,0 +1,92 @@ +package org.opentripplanner.raptor._data; + +import static org.opentripplanner.utils.time.DurationUtils.durationInSeconds; +import static org.opentripplanner.utils.time.TimeUtils.hm2time; + +import org.opentripplanner.raptor.spi.DefaultSlackProvider; +import org.opentripplanner.raptor.spi.RaptorSlackProvider; + +/** + * @deprecated This was earlier part of Raptor and should not be used outside the Raptor + * module. Use the OTP model entities instead. + */ +@Deprecated +public interface RaptorTestConstants { + // Time duration(D) constants, all values are in seconds + int D0s = 0; + int D1s = 1; + int D10s = 10; + int D11s = 11; + int D20s = 20; + int D30s = 30; + int D40s = 40; + int D1m = durationInSeconds("1m"); + int D2m = durationInSeconds("2m"); + int D3m = durationInSeconds("3m"); + int D4m = durationInSeconds("4m"); + int D5m = durationInSeconds("5m"); + int D7m = durationInSeconds("7m"); + int D8m = durationInSeconds("8m"); + int D10m = durationInSeconds("10m"); + int D11m = durationInSeconds("11m"); + int D20m = durationInSeconds("20m"); + int D24h = durationInSeconds("24h"); + + /** + * There are 86400 seconds in a "normal" day(24 * 60 * 60). + */ + int SECONDS_IN_A_DAY = (int) D24h; + + // Time constants, all values are in seconds + int T00_00 = hm2time(0, 0); + int T00_02 = hm2time(0, 2); + int T00_10 = hm2time(0, 10); + int T00_30 = hm2time(0, 30); + int T00_40 = hm2time(0, 40); + int T01_00 = hm2time(1, 0); + + int TX_0 = 0; + int TX_1 = 1; + int TX_2 = 2; + + // Stop indexes - Note! There is no stop defined for index 0(zero)! You must + // account for that in the test if you use the stop index. + int STOP_A = 1; + int STOP_B = 2; + int STOP_C = 3; + int STOP_D = 4; + int STOP_E = 5; + int STOP_F = 6; + int STOP_G = 7; + int STOP_H = 8; + int STOP_I = 9; + int STOP_J = 10; + int STOP_K = 11; + int STOP_L = 12; + int STOP_M = 13; + + int NUM_STOPS = 14; + + // Stop position in pattern + int STOP_POS_0 = 0; + int STOP_POS_1 = 1; + + // Slack + int BOARD_SLACK = 45; + int ALIGHT_SLACK = 15; + int TRANSFER_SLACK = 60; + + RaptorSlackProvider SLACK_PROVIDER = new DefaultSlackProvider( + TRANSFER_SLACK, + BOARD_SLACK, + ALIGHT_SLACK + ); + + // FLEX + int ONE_RIDE = 1; + int TWO_RIDES = 2; + + default String stopIndexToName(int index) { + return Character.toString('A' + index - 1); + } +} diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/api/PathUtils.java b/application/src/test/java/org/opentripplanner/raptor/_data/api/PathUtils.java new file mode 100644 index 00000000000..445042b6139 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/raptor/_data/api/PathUtils.java @@ -0,0 +1,61 @@ +package org.opentripplanner.raptor._data.api; + +import java.util.Collection; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.opentripplanner.raptor._data.RaptorTestConstants; +import org.opentripplanner.raptor.api.path.RaptorPath; +import org.opentripplanner.raptor.api.response.RaptorResponse; + +/** + * This utility help converting a Raptor path to a string which is used in several unit tests for + * easy comparison. The Stop index(1..n) is translated to stop names(A..N) using {@link + * RaptorTestConstants#stopIndexToName(int)}. + * + * @deprecated This was earlier part of Raptor and should not be used outside the Raptor + * module. Use the OTP model entities instead. + */ +@Deprecated +public class PathUtils { + + private static final RaptorTestConstants TRANSLATOR = new RaptorTestConstants() {}; + + /** Util class, private constructor */ + private PathUtils() {} + + public static String pathsToString(RaptorResponse response) { + return pathsToString(response.paths()); + } + + public static String pathsToString(Collection> paths) { + return pathsToString(paths, p -> p.toString(TRANSLATOR::stopIndexToName)); + } + + public static String pathsToStringDetailed(RaptorResponse response) { + return pathsToStringDetailed(response.paths()); + } + + public static String pathsToStringDetailed(Collection> paths) { + return pathsToString(paths, p -> p.toStringDetailed(TRANSLATOR::stopIndexToName)); + } + + public static String join(String... paths) { + return String.join("\n", paths); + } + + public static String withoutCost(String path) { + return path.replaceAll(" C₁[\\d_]+", ""); + } + + public static String[] withoutCost(String... paths) { + return Stream.of(paths).map(path -> withoutCost(path)).toList().toArray(new String[0]); + } + + public static String pathsToString( + Collection> paths, + Function, String> mapToStr + ) { + return paths.stream().sorted().map(mapToStr).collect(Collectors.joining("\n")); + } +} diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilder.java b/application/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilder.java new file mode 100644 index 00000000000..5f98d73b38d --- /dev/null +++ b/application/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilder.java @@ -0,0 +1,157 @@ +package org.opentripplanner.raptor._data.api; + +import static org.opentripplanner.raptor.rangeraptor.transit.TripTimesSearch.findTripTimes; + +import javax.annotation.Nullable; +import org.opentripplanner.raptor._data.RaptorTestConstants; +import org.opentripplanner.raptor._data.transit.TestAccessEgress; +import org.opentripplanner.raptor._data.transit.TestTransfer; +import org.opentripplanner.raptor._data.transit.TestTripPattern; +import org.opentripplanner.raptor._data.transit.TestTripSchedule; +import org.opentripplanner.raptor.api.model.RaptorConstants; +import org.opentripplanner.raptor.api.model.RaptorStopNameResolver; +import org.opentripplanner.raptor.api.path.RaptorPath; +import org.opentripplanner.raptor.path.PathBuilder; +import org.opentripplanner.raptor.spi.DefaultSlackProvider; +import org.opentripplanner.raptor.spi.RaptorCostCalculator; +import org.opentripplanner.raptor.spi.RaptorSlackProvider; + +/** + * Utility to help build paths for testing. The path builder is "reusable", every time the {@code + * access(...)} methods are called the builder reset it self. + *

    + * If the {@code costCalculator} is null, paths will not include cost. + * + * @deprecated This was earlier part of Raptor and should not be used outside the Raptor + * module. Use the OTP model entities instead. + */ +@Deprecated +public class TestPathBuilder implements RaptorTestConstants { + + private static final int BOARD_ALIGHT_OFFSET = 30; + + @Nullable + private final RaptorCostCalculator costCalculator; + + private final RaptorSlackProvider slackProvider; + private PathBuilder builder; + private int startTime; + private int c2 = RaptorConstants.NOT_SET; + + public TestPathBuilder( + RaptorSlackProvider slackProvider, + @Nullable RaptorCostCalculator costCalculator + ) { + this.slackProvider = slackProvider; + this.costCalculator = costCalculator; + } + + /** + * Uses the slacks in {@link RaptorTestConstants}. + */ + public TestPathBuilder(@Nullable RaptorCostCalculator costCalculator) { + this(new DefaultSlackProvider(TRANSFER_SLACK, BOARD_SLACK, ALIGHT_SLACK), costCalculator); + } + + /** Assign c2 value for path. TODO: Add c2 value for each leg. */ + public TestPathBuilder c2(int c2) { + this.c2 = c2; + return this; + } + + /** + * Create access starting at the fixed given {@code starting}. Opening hours is used to enforce + * the access start time and prevent time-shifting it. + */ + public TestPathBuilder access(int startTime, int toStop, int duration) { + return access(startTime, TestAccessEgress.walk(toStop, duration)); + } + + /** Same as {@link #access(int, int, int)} , but with a free access - duration is 0s. */ + public TestPathBuilder access(int startTime, int toStop) { + return access(startTime, TestAccessEgress.free(toStop)); + } + + /** + * Create access with the given {@code startTime}, but allow the access to be time-shifted + * according to the opening hours of the given {@code transfer}. + */ + private TestPathBuilder access(int startTime, TestAccessEgress transfer) { + reset(startTime); + builder.access(transfer); + return this; + } + + public TestPathBuilder walk(int duration, int toStop) { + return walk(TestTransfer.transfer(toStop, duration)); + } + + public TestPathBuilder walk(int duration, int toStop, int cost) { + return walk(TestTransfer.transfer(toStop, duration, cost)); + } + + public TestPathBuilder walk(TestTransfer transfer) { + builder.transfer(transfer, transfer.stop()); + return this; + } + + public TestPathBuilder bus(TestTripSchedule trip, int alightStop) { + int boardStop = currentStop(); + // We use the startTime as earliest-board-time, this may cause problems for + // testing routes visiting the same stop more than once. Create a new factory + // method if this happens. + var baTime = findTripTimes(trip, boardStop, alightStop, startTime); + builder.transit(trip, baTime); + return this; + } + + public TestPathBuilder bus(String patternName, int fromTime, int duration, int toStop) { + int toTime = fromTime + duration; + int fromStop = currentStop(); + + TestTripSchedule trip = TestTripSchedule + .schedule(TestTripPattern.pattern(patternName, fromStop, toStop)) + .arrDepOffset(BOARD_ALIGHT_OFFSET) + .departures(fromTime, toTime + BOARD_ALIGHT_OFFSET) + .build(); + + return bus(trip, toStop); + } + + public RaptorPath egress(int duration) { + return egress( + duration == 0 + ? TestAccessEgress.free(currentStop()) + : TestAccessEgress.walk(currentStop(), duration) + ); + } + + public PathBuilder access(TestAccessEgress access) { + builder.access(access); + return builder; + } + + public RaptorPath egress(TestAccessEgress egress) { + builder.egress(egress); + builder.c2(c2); + return builder.build(); + } + + /* private methods */ + + int currentStop() { + return builder.tail().toStop(); + } + + private void reset(int startTime) { + this.startTime = startTime; + this.builder = + PathBuilder.tailPathBuilder( + slackProvider, + startTime, + costCalculator, + RaptorStopNameResolver.nullSafe(null), + null + ); + } +} diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilderTestRaptor.java b/application/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilderTestRaptor.java new file mode 100644 index 00000000000..dab85e2ad50 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilderTestRaptor.java @@ -0,0 +1,99 @@ +package org.opentripplanner.raptor._data.api; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.opentripplanner.model.transfer.TransferConstraint.REGULAR_TRANSFER; +import static org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase.C1_CALCULATOR; +import static org.opentripplanner.raptor._data.transit.TestAccessEgress.walk; +import static org.opentripplanner.utils.time.DurationUtils.durationInSeconds; +import static org.opentripplanner.utils.time.TimeUtils.time; + +import org.junit.jupiter.api.Test; +import org.opentripplanner.raptor._data.RaptorTestConstants; +import org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase; + +/** + * Test the PathBuilder to be sure that it works properly before using it in other tests. + * + * @deprecated This was earlier part of Raptor and should not be used outside the Raptor + * module. Use the OTP model entities instead. + */ +@Deprecated +public class TestPathBuilderTestRaptor implements RaptorTestConstants { + + private final TestPathBuilder subject = new TestPathBuilder(C1_CALCULATOR); + + @Test + public void testSimplePathWithOneTransit() { + int transitDuration = durationInSeconds("5m"); + + var path = subject + .access(time("10:00:15"), STOP_A, D1m) + .bus("L1", time("10:02"), transitDuration, STOP_B) + .egress(D2m); + + var transitLeg = path.accessLeg().nextLeg().asTransitLeg(); + int boardCost = C1_CALCULATOR.boardingCost( + true, + path.accessLeg().toTime(), + STOP_A, + transitLeg.fromTime(), + transitLeg.trip(), + REGULAR_TRANSFER + ); + + int transitCost = C1_CALCULATOR.transitArrivalCost( + boardCost, + ALIGHT_SLACK, + transitDuration, + BasicPathTestCase.TRIP_1, + STOP_B + ); + + int accessEgressCost = C1_CALCULATOR.costEgress(walk(STOP_B, D2m + D1m)); + + assertEquals(accessEgressCost + transitCost, path.c1()); + assertEquals( + "Walk 1m 10:00:15 10:01:15 C₁120 ~ A 45s " + + "~ BUS L1 10:02 10:07 5m C₁438 ~ B 15s " + + "~ Walk 2m 10:07:15 10:09:15 C₁210 " + + "[10:00:15 10:09:15 9m Tₓ0 C₁768]", + path.toStringDetailed(this::stopIndexToName) + ); + } + + @Test + public void testBasicPath() { + var path = subject + .c2(7) + .access(BasicPathTestCase.ACCESS_START, STOP_A, BasicPathTestCase.ACCESS_DURATION) + .bus( + BasicPathTestCase.LINE_11, + BasicPathTestCase.L11_START, + BasicPathTestCase.L11_DURATION, + STOP_B + ) + .walk(BasicPathTestCase.TX_DURATION, STOP_C, BasicPathTestCase.TX_C1) + .bus( + BasicPathTestCase.LINE_21, + BasicPathTestCase.L21_START, + BasicPathTestCase.L21_DURATION, + STOP_D + ) + .bus( + BasicPathTestCase.LINE_31, + BasicPathTestCase.L31_START, + BasicPathTestCase.L31_DURATION, + STOP_E + ) + .egress(BasicPathTestCase.EGRESS_DURATION); + + assertEquals(BasicPathTestCase.BASIC_PATH_AS_STRING, path.toString(this::stopIndexToName)); + assertEquals( + BasicPathTestCase.BASIC_PATH_AS_DETAILED_STRING, + path.toStringDetailed(this::stopIndexToName) + ); + assertEquals(BasicPathTestCase.TOTAL_C1, path.c1()); + assertTrue(path.isC2Set()); + } +} diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/AbstractStopArrival.java b/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/AbstractStopArrival.java new file mode 100644 index 00000000000..5c93578b4d3 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/AbstractStopArrival.java @@ -0,0 +1,85 @@ +package org.opentripplanner.raptor._data.stoparrival; + +import org.opentripplanner.raptor._data.transit.TestTripSchedule; +import org.opentripplanner.raptor.api.view.ArrivalView; + +/** + * @deprecated This was earlier part of Raptor and should not be used outside the Raptor + * module. Use the OTP model entities instead. + */ +@Deprecated +abstract class AbstractStopArrival implements ArrivalView { + + private final int round; + private final int stop; + private final int arrivalTime; + private final int c1; + private final int c2; + private final ArrivalView previous; + + AbstractStopArrival( + int round, + int stop, + int arrivalTime, + int extraCost, + int c2, + ArrivalView previous + ) { + this.round = round; + this.stop = stop; + this.arrivalTime = arrivalTime; + this.previous = previous; + this.c2 = c2; + + if (previous == null) { + this.c1 = extraCost; + } else { + this.c1 = previous.c1() + extraCost; + } + } + + AbstractStopArrival( + int round, + int stop, + int arrivalTime, + int extraCost, + ArrivalView previous + ) { + this(round, stop, arrivalTime, extraCost, previous.c2(), previous); + } + + @Override + public int stop() { + return stop; + } + + @Override + public int round() { + return round; + } + + @Override + public int arrivalTime() { + return arrivalTime; + } + + @Override + public int c1() { + return c1; + } + + @Override + public int c2() { + return c2; + } + + @Override + public ArrivalView previous() { + return previous; + } + + @Override + public String toString() { + return asString(); + } +} diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Access.java b/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Access.java new file mode 100644 index 00000000000..4c1aa5d3cf9 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Access.java @@ -0,0 +1,37 @@ +package org.opentripplanner.raptor._data.stoparrival; + +import static org.opentripplanner.raptor.api.model.PathLegType.ACCESS; + +import org.opentripplanner.raptor.api.model.PathLegType; +import org.opentripplanner.raptor.api.model.RaptorAccessEgress; +import org.opentripplanner.raptor.api.view.AccessPathView; + +/** + * @deprecated This was earlier part of Raptor and should not be used outside the Raptor + * module. Use the OTP model entities instead. + */ +@Deprecated +class Access extends AbstractStopArrival { + + private final RaptorAccessEgress access; + + Access(int stop, int arrivalTime, RaptorAccessEgress path, int c2) { + super(0, stop, arrivalTime, path.c1(), c2, null); + this.access = path; + } + + @Override + public PathLegType arrivedBy() { + return ACCESS; + } + + @Override + public AccessPathView accessPath() { + return () -> access; + } + + @Override + public boolean arrivedOnBoard() { + return access.stopReachedOnBoard(); + } +} diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java b/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java new file mode 100644 index 00000000000..b2b206f4177 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java @@ -0,0 +1,464 @@ +package org.opentripplanner.raptor._data.stoparrival; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.opentripplanner.model.transfer.TransferConstraint.REGULAR_TRANSFER; +import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.access; +import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.bus; +import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.egress; +import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.transfer; +import static org.opentripplanner.raptor._data.transit.TestAccessEgress.flexWithOnBoard; +import static org.opentripplanner.raptor._data.transit.TestTripPattern.pattern; +import static org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter.toRaptorCost; +import static org.opentripplanner.utils.time.DurationUtils.durationToStr; +import static org.opentripplanner.utils.time.TimeUtils.time; + +import java.util.Arrays; +import java.util.List; +import org.junit.jupiter.api.Test; +import org.opentripplanner.raptor._data.RaptorTestConstants; +import org.opentripplanner.raptor._data.transit.TestAccessEgress; +import org.opentripplanner.raptor._data.transit.TestTransfer; +import org.opentripplanner.raptor._data.transit.TestTripSchedule; +import org.opentripplanner.raptor.api.model.RaptorAccessEgress; +import org.opentripplanner.raptor.api.model.RaptorConstrainedTransfer; +import org.opentripplanner.raptor.api.model.RaptorTransfer; +import org.opentripplanner.raptor.api.path.AccessPathLeg; +import org.opentripplanner.raptor.api.path.EgressPathLeg; +import org.opentripplanner.raptor.api.path.PathLeg; +import org.opentripplanner.raptor.api.path.RaptorPath; +import org.opentripplanner.raptor.api.path.TransferPathLeg; +import org.opentripplanner.raptor.api.path.TransitPathLeg; +import org.opentripplanner.raptor.api.view.ArrivalView; +import org.opentripplanner.raptor.path.Path; +import org.opentripplanner.raptor.rangeraptor.internalapi.WorkerLifeCycle; +import org.opentripplanner.raptor.rangeraptor.lifecycle.LifeCycleSubscriptions; +import org.opentripplanner.raptor.rangeraptor.path.DestinationArrival; +import org.opentripplanner.raptor.spi.RaptorCostCalculator; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.DefaultCostCalculator; + +/** + * This class is used to create a journeys with stop arrivals. + *

    + * It creates different data structures representing the same 'basic' trip to be used in + * unit-tests: + *

    + *   ~
    + *   Origin 10:00:15
    + *   ~ Walk 3m ~ A
    + *   ~ BUS L11 10:04 10:35 ~ B
    + *   ~ Walk 3m45s ~ C
    + *   ~ BUS L21 11:00 11:23 ~ D
    + *   ~ BUS L31 11:40 11:52 ~ E
    + *   ~ Walk 7m45s
    + *   ~ Destination 12:00
    + *
    + *   Duration: 1h59m45s
    + *   Transfers: 2
    + *   Generalized-cost: $8154
    + * 
    + * The Trip has 2 transfers, 1 connected by walking and without. The trip start at 10:00 and ends at + * 12:00, total 2 hours. + * + * @deprecated This was earlier part of Raptor and should not be used outside the Raptor + * module. Use the OTP model entities instead. + */ +@Deprecated +public class BasicPathTestCase implements RaptorTestConstants { + + private static final RaptorConstrainedTransfer EMPTY_CONSTRAINTS = null; + + public static final String BASIC_PATH_AS_DETAILED_STRING = + "Walk 3m 10:00:15 10:03:15 C₁360 " + + "~ A 45s ~ " + + "BUS L11 10:04 10:35 31m C₁1_998 " + + "~ B 15s ~ " + + "Walk 3m45s 10:35:15 10:39 C₁450 " + + "~ C 21m ~ " + + "BUS L21 11:00 11:23 23m C₁2_640 " + + "~ D 17m ~ " + + "BUS L31 11:40 11:52 12m C₁1_776 " + + "~ E 15s ~ " + + "Walk 7m45s 11:52:15 12:00 C₁930 " + + "[10:00:15 12:00 1h59m45s Tₓ2 C₁8_154 C₂7]"; + + public static final String BASIC_PATH_AS_STRING = + "Walk 3m ~ A" + + " ~ BUS L11 10:04 10:35 ~ B" + + " ~ Walk 3m45s ~ C" + + " ~ BUS L21 11:00 11:23 ~ D" + + " ~ BUS L31 11:40 11:52 ~ E" + + " ~ Walk 7m45s " + + "[10:00:15 12:00 1h59m45s Tₓ2 C₁8_154 C₂7]"; + + private static final int BOARD_C1_SEC = 60; + private static final int TRANSFER_C1_SEC = 120; + private static final double[] TRANSIT_RELUCTANCE = new double[] { 1.0 }; + public static final int TRANSIT_RELUCTANCE_INDEX = 0; + public static final double WAIT_RELUCTANCE = 0.8; + private static final int C2 = 7; + + /** Stop cost for stop NA, A, C, E .. H is zero(0), B: 30s, and D: 60s. ?=0, A=1 .. H=8 */ + private static final int[] STOP_C1S = { 0, 0, 3_000, 0, 6_000, 0, 0, 0, 0, 0 }; + + // Some times which should not have eny effect on tests + private static final int VERY_EARLY = time("00:00"); + private static final int VERY_LATE = time("23:59"); + + public static final int RAPTOR_ITERATION_START_TIME = time("09:00"); + + // Access (Walk 3m15s ~ A) + public static final int ACCESS_START = time("10:00:15"); + public static final int ACCESS_END = time("10:03:15"); + public static final int ACCESS_DURATION = ACCESS_END - ACCESS_START; + public static final RaptorAccessEgress ACCESS_TRANSFER = TestAccessEgress.walk( + STOP_A, + ACCESS_DURATION + ); + public static final int ACCESS_C1 = ACCESS_TRANSFER.c1(); + public static final int ACCESS_C2 = 0; + + // Trip 1 (A ~ BUS L11 10:04 10:35 ~ B) + public static final int L11_START = time("10:04"); + private static final int L11_END = time("10:35"); + public static final int L11_DURATION = L11_END - L11_START; + private static final int L11_WAIT_DURATION = L11_START - ACCESS_END + ALIGHT_SLACK; + public static final int LINE_11_C1 = + STOP_C1S[STOP_A] + + STOP_C1S[STOP_B] + + toRaptorCost(BOARD_C1_SEC + WAIT_RELUCTANCE * L11_WAIT_DURATION + L11_DURATION); + public static final int LINE_11_C2 = 2; + + // Transfers (B ~ Walk 3m45s ~ C) + private static final int TX_START = time("10:35:15"); + private static final int TX_END = time("10:39:00"); + public static final int TX_DURATION = TX_END - TX_START; + public static final RaptorTransfer TX_TRANSFER = TestTransfer.transfer(STOP_C, TX_DURATION); + public static final int TX_C1 = TX_TRANSFER.c1(); + public static final int TX_C3 = 3; + + // Trip 2 (C ~ BUS L21 11:00 11:23 ~ D) + public static final int L21_START = time("11:00"); + private static final int L21_END = time("11:23"); + public static final int L21_DURATION = L21_END - L21_START; + private static final int L21_WAIT_DURATION = L21_START - TX_END + ALIGHT_SLACK; + public static final int LINE_21_C1 = + STOP_C1S[STOP_C] + + STOP_C1S[STOP_D] + + toRaptorCost( + BOARD_C1_SEC + TRANSFER_C1_SEC + WAIT_RELUCTANCE * L21_WAIT_DURATION + L21_DURATION + ); + public static final int LINE_21_C2 = 5; + + // Trip 3 (D ~ BUS L31 11:40 11:52 ~ E) + public static final int L31_START = time("11:40"); + private static final int L31_END = time("11:52"); + public static final int L31_DURATION = L31_END - L31_START; + private static final int L31_WAIT_DURATION = L31_START - (L21_END + ALIGHT_SLACK) + ALIGHT_SLACK; + public static final int LINE_31_C1 = + STOP_C1S[STOP_D] + + STOP_C1S[STOP_E] + + toRaptorCost( + BOARD_C1_SEC + TRANSFER_C1_SEC + WAIT_RELUCTANCE * L31_WAIT_DURATION + L31_DURATION + ); + public static final int LINE_31_C2 = 6; + + // Egress (E ~ Walk 7m45s ~ ) + public static final int EGRESS_START = time("11:52:15"); + public static final int EGRESS_END = time("12:00"); + public static final int EGRESS_DURATION = EGRESS_END - EGRESS_START; + public static final RaptorAccessEgress EGRESS_TRANSFER = TestAccessEgress.walk( + STOP_E, + EGRESS_DURATION + ); + public static final int EGRESS_C1 = EGRESS_TRANSFER.c1(); + public static final int EGRESS_C2 = 7; + + public static final int TRIP_DURATION = EGRESS_END - ACCESS_START; + + private static final RaptorAccessEgress ACCESS = TestAccessEgress.walk( + STOP_A, + ACCESS_DURATION, + ACCESS_C1 + ); + private static final RaptorAccessEgress EGRESS = TestAccessEgress.walk( + STOP_E, + EGRESS_DURATION, + EGRESS_C1 + ); + // this is of course not a real flex egress + private static final RaptorAccessEgress FLEX = flexWithOnBoard( + STOP_E, + EGRESS_DURATION, + EGRESS_C1 + ); + + public static final String LINE_11 = "L11"; + public static final String LINE_21 = "L21"; + public static final String LINE_31 = "L31"; + + public static final TestTripSchedule TRIP_1 = TestTripSchedule + .schedule(pattern(LINE_11, STOP_A, STOP_B)) + .times(L11_START, L11_END) + .transitReluctanceIndex(TRANSIT_RELUCTANCE_INDEX) + .build(); + + public static final TestTripSchedule TRIP_2 = TestTripSchedule + .schedule(pattern(LINE_21, STOP_C, STOP_D)) + .times(L21_START, L21_END) + .transitReluctanceIndex(TRANSIT_RELUCTANCE_INDEX) + .build(); + + public static final TestTripSchedule TRIP_3 = TestTripSchedule + .schedule(pattern(LINE_31, STOP_D, STOP_E)) + // The early arrival and late departure should not have any effect on tests + .arrivals(VERY_EARLY, L31_END) + .departures(L31_START, VERY_LATE) + .transitReluctanceIndex(TRANSIT_RELUCTANCE_INDEX) + .build(); + + public static final RaptorCostCalculator C1_CALCULATOR = new DefaultCostCalculator<>( + BOARD_C1_SEC, + TRANSFER_C1_SEC, + WAIT_RELUCTANCE, + TRANSIT_RELUCTANCE, + STOP_C1S + ); + + public static final int TOTAL_C1 = + ACCESS_C1 + LINE_11_C1 + TX_C1 + LINE_21_C1 + LINE_31_C1 + EGRESS_C1; + + /** Wait time between trip L11 and L21 including slack */ + public static final int WAIT_TIME_L11_L21 = L21_START - L11_END - TX_DURATION; + + /** Wait time between trip L21 and L31 including slack */ + public static final int WAIT_TIME_L21_L31 = L31_START - L21_END; + + public static WorkerLifeCycle lifeCycle() { + return new LifeCycleSubscriptions(); + } + + public static DestinationArrival basicTripByForwardSearch() { + ArrivalView prevArrival, egress; + prevArrival = access(STOP_A, ACCESS_START, ACCESS_END, ACCESS_C1, ACCESS_C2); + prevArrival = bus(1, STOP_B, L11_END, LINE_11_C1, LINE_11_C2, TRIP_1, prevArrival); + prevArrival = transfer(1, STOP_C, TX_START, TX_END, TX_C1, prevArrival); + prevArrival = bus(2, STOP_D, L21_END, LINE_21_C1, LINE_21_C2, TRIP_2, prevArrival); + prevArrival = bus(3, STOP_E, L31_END, LINE_31_C1, LINE_31_C2, TRIP_3, prevArrival); + egress = egress(EGRESS_START, EGRESS_END, EGRESS_C1, EGRESS_C2, prevArrival); + return new DestinationArrival<>( + egress.egressPath().egress(), + egress.previous(), + egress.arrivalTime(), + egress.egressPath().egress().c1(), + egress.c2() + ); + } + + /** + * This is the same itinerary as {@link #basicTripByForwardSearch()}, as found by a reverse + * search: + */ + public static DestinationArrival basicTripByReverseSearch() { + ArrivalView nextArrival, egress; + nextArrival = access(STOP_E, EGRESS_END, EGRESS_START, EGRESS_C1, EGRESS_C2); + // Board slack is subtracted from the arrival time to get the latest possible + nextArrival = bus(1, STOP_D, L31_START, LINE_31_C1, LINE_31_C2, TRIP_3, nextArrival); + nextArrival = bus(2, STOP_C, L21_START, LINE_21_C1, LINE_21_C2, TRIP_2, nextArrival); + nextArrival = transfer(2, STOP_B, TX_END, TX_START, TX_C1, nextArrival); + nextArrival = bus(3, STOP_A, L11_START, LINE_11_C1, LINE_11_C2, TRIP_1, nextArrival); + egress = egress(ACCESS_END, ACCESS_START, ACCESS_C1, ACCESS_C2, nextArrival); + return new DestinationArrival<>( + egress.egressPath().egress(), + egress.previous(), + egress.arrivalTime(), + egress.egressPath().egress().c1(), + egress.c2() + ); + } + + /** + * Both {@link #basicTripByForwardSearch()} and {@link #basicTripByReverseSearch()} should return + * the same trip, here returned as a path. + */ + public static RaptorPath basicTripAsPath() { + PathLeg leg6 = new EgressPathLeg<>( + EGRESS, + EGRESS_START, + EGRESS_END, + EGRESS_C1 + ); + TransitPathLeg leg5 = new TransitPathLeg<>( + TRIP_3, + L31_START, + L31_END, + TRIP_3.findDepartureStopPosition(L31_START, STOP_D), + TRIP_3.findArrivalStopPosition(L31_END, STOP_E), + EMPTY_CONSTRAINTS, + LINE_31_C1, + leg6 + ); + TransitPathLeg leg4 = new TransitPathLeg<>( + TRIP_2, + L21_START, + L21_END, + TRIP_2.findDepartureStopPosition(L21_START, STOP_C), + TRIP_2.findArrivalStopPosition(L21_END, STOP_D), + EMPTY_CONSTRAINTS, + LINE_21_C1, + leg5 + ); + var transfer = TestTransfer.transfer(STOP_C, TX_END - TX_START); + PathLeg leg3 = new TransferPathLeg<>( + STOP_B, + TX_START, + TX_END, + transfer.c1(), + transfer, + leg4.asTransitLeg() + ); + var leg2 = new TransitPathLeg<>( + TRIP_1, + L11_START, + L11_END, + TRIP_1.findDepartureStopPosition(L11_START, STOP_A), + TRIP_1.findArrivalStopPosition(L11_END, STOP_B), + EMPTY_CONSTRAINTS, + LINE_11_C1, + leg3 + ); + AccessPathLeg leg1 = new AccessPathLeg<>( + ACCESS, + ACCESS_START, + ACCESS_END, + ACCESS_C1, + leg2.asTransitLeg() + ); + return new Path<>(RAPTOR_ITERATION_START_TIME, leg1, TOTAL_C1, 7); + } + + public static RaptorPath flexTripAsPath() { + PathLeg leg6 = new EgressPathLeg<>(FLEX, EGRESS_START, EGRESS_END, EGRESS_C1); + var transfer = TestTransfer.transfer(STOP_E, TX_END - TX_START); + PathLeg leg3 = new TransferPathLeg<>( + STOP_B, + TX_START, + TX_END, + transfer.c1(), + transfer, + leg6 + ); + var leg2 = new TransitPathLeg<>( + TRIP_1, + L11_START, + L11_END, + TRIP_1.findDepartureStopPosition(L11_START, STOP_A), + TRIP_1.findArrivalStopPosition(L11_END, STOP_B), + EMPTY_CONSTRAINTS, + LINE_11_C1, + leg3 + ); + AccessPathLeg leg1 = new AccessPathLeg<>( + ACCESS, + ACCESS_START, + ACCESS_END, + ACCESS_C1, + leg2.asTransitLeg() + ); + return new Path<>(RAPTOR_ITERATION_START_TIME, leg1, TOTAL_C1, C2); + } + + public static List basicTripStops() { + return Arrays.asList(STOP_A, STOP_B, STOP_C, STOP_D, STOP_E); + } + + @Test + public void testSetup() { + // Assert test data is configured correct + assertEquals(ACCESS_END + BOARD_SLACK, L11_START); + assertEquals(BOARD_SLACK + ALIGHT_SLACK, L11_WAIT_DURATION); + assertEquals(L31_END + ALIGHT_SLACK, EGRESS_START); + assertEquals( + durationToStr(TRIP_DURATION), + durationToStr( + ACCESS_DURATION + + L11_DURATION + + L11_WAIT_DURATION + + TX_DURATION + + L21_DURATION + + L21_WAIT_DURATION + + L31_DURATION + + L31_WAIT_DURATION + + EGRESS_DURATION + ), + "Access: " + + durationToStr(ACCESS_DURATION) + + ", Line 11: " + + durationToStr(L11_DURATION) + + " (wait " + + durationToStr(L11_WAIT_DURATION) + + ")" + + ", Tx: " + + durationToStr(TX_DURATION) + + ", Line 21: " + + durationToStr(L21_DURATION) + + " (wait " + + durationToStr(L21_WAIT_DURATION) + + ")" + + ", Line 31: " + + durationToStr(L31_DURATION) + + " (wait " + + durationToStr(L31_WAIT_DURATION) + + ")" + + ", Egress: " + + durationToStr(EGRESS_DURATION) + ); + + // The calculator is not under test here, so we assert everything is as expected + assertEquals( + LINE_11_C1, + transitArrivalCost(ACCESS_END, TRIP_1, STOP_A, L11_START, STOP_B, L11_END) + ); + assertEquals( + LINE_21_C1, + transitArrivalCost(TX_END, TRIP_2, STOP_C, L21_START, STOP_D, L21_END) + ); + assertEquals( + LINE_31_C1, + transitArrivalCost(L21_END + ALIGHT_SLACK, TRIP_3, STOP_D, L31_START, STOP_E, L31_END) + ); + + assertEquals(BASIC_PATH_AS_STRING, basicTripAsPath().toString(this::stopIndexToName)); + + assertEquals( + BASIC_PATH_AS_DETAILED_STRING, + basicTripAsPath().toStringDetailed(this::stopIndexToName) + ); + } + + private static int transitArrivalCost( + int prevArrivalTime, + TestTripSchedule trip, + int boardStop, + int boardTime, + int alightStop, + int alightTime + ) { + boolean firstTransit = TRIP_1 == trip; + int boardCost = C1_CALCULATOR.boardingCost( + firstTransit, + prevArrivalTime, + boardStop, + boardTime, + trip, + REGULAR_TRANSFER + ); + + return C1_CALCULATOR.transitArrivalCost( + boardCost, + ALIGHT_SLACK, + alightTime - boardTime, + trip, + alightStop + ); + } +} diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Egress.java b/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Egress.java new file mode 100644 index 00000000000..24d621a75e8 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Egress.java @@ -0,0 +1,54 @@ +package org.opentripplanner.raptor._data.stoparrival; + +import org.opentripplanner.raptor._data.transit.TestTripSchedule; +import org.opentripplanner.raptor.api.model.PathLegType; +import org.opentripplanner.raptor.api.model.RaptorAccessEgress; +import org.opentripplanner.raptor.api.view.ArrivalView; +import org.opentripplanner.raptor.api.view.EgressPathView; +import org.opentripplanner.utils.time.TimeUtils; + +/** + * @deprecated This was earlier part of Raptor and should not be used outside the Raptor + * module. Use the OTP model entities instead. + */ +@Deprecated +public class Egress extends AbstractStopArrival { + + private final RaptorAccessEgress egressPath; + + public Egress( + int arrivalTime, + RaptorAccessEgress egressPath, + int c2, + ArrivalView previous + ) { + super(previous.round(), previous.stop(), arrivalTime, egressPath.c1(), c2, previous); + this.egressPath = egressPath; + } + + @Override + public EgressPathView egressPath() { + return () -> egressPath; + } + + @Override + public String toString() { + return String.format( + "Egress { round: %d, stop: %d, arrival-time: %s $%d }", + round(), + stop(), + TimeUtils.timeToStrCompact(arrivalTime()), + c1() + ); + } + + @Override + public PathLegType arrivedBy() { + return PathLegType.EGRESS; + } + + @Override + public boolean arrivedOnBoard() { + return egressPath.stopReachedOnBoard(); + } +} diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java b/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java new file mode 100644 index 00000000000..b498488df77 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java @@ -0,0 +1,388 @@ +package org.opentripplanner.raptor._data.stoparrival; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.access; +import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.bus; +import static org.opentripplanner.raptor.api.model.RaptorValueFormatter.formatC1; +import static org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter.toRaptorCost; +import static org.opentripplanner.utils.time.DurationUtils.durationInSeconds; +import static org.opentripplanner.utils.time.TimeUtils.time; + +import org.junit.jupiter.api.Test; +import org.opentripplanner.raptor._data.RaptorTestConstants; +import org.opentripplanner.raptor._data.transit.TestAccessEgress; +import org.opentripplanner.raptor._data.transit.TestTransfer; +import org.opentripplanner.raptor._data.transit.TestTripPattern; +import org.opentripplanner.raptor._data.transit.TestTripSchedule; +import org.opentripplanner.raptor.api.model.RaptorAccessEgress; +import org.opentripplanner.raptor.api.model.RaptorConstants; +import org.opentripplanner.raptor.api.model.RaptorTransfer; +import org.opentripplanner.raptor.api.view.ArrivalView; +import org.opentripplanner.raptor.rangeraptor.path.DestinationArrival; +import org.opentripplanner.raptor.spi.DefaultSlackProvider; +import org.opentripplanner.raptor.spi.RaptorSlackProvider; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.DefaultCostCalculator; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter; +import org.opentripplanner.utils.time.TimeUtils; + +/** + * This test case construct two Raptor paths for forward and reverse search, with and without + * opening hours for the flex access and egress. + *

    + * Case A with flex access and egress and one transit: + *

      + *
    1. Flex access
    2. + *
    3. Transit, BUS A
    4. + *
    5. Flex
    6. + *
    + *

    + * Case B with walking between transit and flex: + *

      + *
    1. Flex access
    2. + *
    3. Walk transfer
    4. + *
    5. Transit. BUS B
    6. + *
    7. Walk transfer
    8. + *
    9. Flex
    10. + *
    + * + * @deprecated This was earlier part of Raptor and should not be used outside the Raptor + * module. Use the OTP model entities instead. + */ +@Deprecated +public class FlexAccessAndEgressPathTestCase implements RaptorTestConstants { + + private static final int ZERO = 0; + // The transit reluctance is ignored, any value should work + private static final int TRANSIT_RELUCTANCE_INDEX = -1; + public static final double WAIT_RELUCTANCE = 0.8; + public static final int BOARD_C1_SEC = 60; + public static final int TRANSFER_C1_SEC = 120; + // The C1_CALCULATOR is not under test, so we use it to calculate correct cost values. + public static final DefaultCostCalculator C1_CALCULATOR = new DefaultCostCalculator<>( + BOARD_C1_SEC, + TRANSFER_C1_SEC, + WAIT_RELUCTANCE, + null, + null + ); + + public static final RaptorSlackProvider SLACK_PROVIDER = new DefaultSlackProvider( + TRANSFER_SLACK, + BOARD_SLACK, + ALIGHT_SLACK + ); + + // FLEX Access 5m tx 1 ~ A. Note! The actual times might get time-shifted. + public static final int ACCESS_DURATION = durationInSeconds("5m15s"); + public static final int ACCESS_C1 = toRaptorCost(600); + // Using transfer reluctance is incorrect, we should use the cost from the access path + public static final TestAccessEgress ACCESS = TestAccessEgress.flex( + STOP_A, + ACCESS_DURATION, + ONE_RIDE, + ACCESS_C1 + ); + // Alternative Flex access with restricted opening hours: 09:00 - 09:50 + public static final int ACCESS_OPEN = time("09:00"); + public static final int ACCESS_CLOSE = time("09:50"); + public static final TestAccessEgress ACCESS_W_OPENING_HOURS = ACCESS.openingHours( + ACCESS_OPEN, + ACCESS_CLOSE + ); + + // Transfers (A ~ Walk 1m ~ B) (Used in Case B only) + public static final int TX1_START = time("10:05:15"); + public static final int TX1_END = time("10:06:15"); + public static final int TX1_DURATION = TX1_END - TX1_START; + public static final RaptorTransfer TX1_TRANSFER = TestTransfer.transfer(STOP_B, TX1_DURATION); + public static final RaptorTransfer TX1_TRANSFER_REV = TestTransfer.transfer(STOP_A, TX1_DURATION); + public static final int TX1_C1 = TX1_TRANSFER.c1(); + + // Trip A (B ~ BUS L11 10:08 10:20 ~ C) + public static final int L1_START = time("10:08"); + public static final int L1_END = time("10:20"); + // The departure time with transfer_slack excluded + public static final int L1_STOP_ARR_TIME = L1_END + ALIGHT_SLACK; + public static final int L1_STOP_ARR_TIME_REV = L1_START - BOARD_SLACK; + + // Wait at least 1m45s (45s BOARD_SLACK and 60s TRANSFER_SLACK) + public static final int L1_TRANSIT_DURATION = L1_END - L1_START; + + // Transfers (C ~ Walk 2m ~ D) (Used in Case B only) + public static final int TX2_START = time("10:20:15"); + public static final int TX2_END = time("10:22:15"); + public static final int TX2_DURATION = TX2_END - TX2_START; + public static final RaptorTransfer TX2_TRANSFER = TestTransfer.transfer(STOP_D, TX2_DURATION); + public static final RaptorTransfer TX2_TRANSFER_REV = TestTransfer.transfer(STOP_C, TX2_DURATION); + public static final int TX2_C1 = TX2_TRANSFER.c1(); + + // Wait 15s (ALIGHT_SLACK) + // D ~ FLEX Egress 6m tx 1 . Note! The actual times might get time-shifted. + public static final int EGRESS_DURATION = durationInSeconds("6m"); + public static final int EGRESS_C1 = toRaptorCost(800); + // Using transfer reluctance is incorrect, we should use the cost from the egress path + public static final TestAccessEgress EGRESS = TestAccessEgress.flex( + STOP_D, + EGRESS_DURATION, + ONE_RIDE, + EGRESS_C1 + ); + public static final int EGRESS_OPENING = TimeUtils.time("10:30"); + public static final int EGRESS_CLOSING = TimeUtils.time("11:00"); + public static final TestAccessEgress EGRESS_W_OPENING_HOURS = EGRESS.openingHours( + EGRESS_OPENING, + EGRESS_CLOSING + ); + + public static final int EGRESS_C1_W_1M_SLACK = + EGRESS_C1 + toRaptorCost(TRANSFER_C1_SEC) + C1_CALCULATOR.waitCost(TRANSFER_SLACK); + public static final int EGRESS_C1_W_7M45S_SLACK = + EGRESS_C1_W_1M_SLACK + C1_CALCULATOR.waitCost(durationInSeconds("6m45s")); + public static final int EGRESS_C1_W_9M45S_SLACK = + EGRESS_C1_W_1M_SLACK + C1_CALCULATOR.waitCost(durationInSeconds("8m45s")); + + public static final String LINE_A = "A"; + public static final String LINE_B = "B"; + + public static final TestTripSchedule TRIP_A = TestTripSchedule + .schedule(TestTripPattern.pattern(LINE_A, STOP_A, STOP_D)) + .times(L1_START, L1_END) + .transitReluctanceIndex(TRANSIT_RELUCTANCE_INDEX) + .build(); + + public static final TestTripSchedule TRIP_B = TestTripSchedule + .schedule(TestTripPattern.pattern(LINE_B, STOP_B, STOP_C)) + .times(L1_START, L1_END) + .transitReluctanceIndex(TRANSIT_RELUCTANCE_INDEX) + .build(); + + public static final int L1_C1_EX_WAIT = C1_CALCULATOR.transitArrivalCost( + C1_CALCULATOR.boardingCostRegularTransfer(false, L1_START, STOP_B, L1_START), + ZERO, + L1_TRANSIT_DURATION, + TRIP_A, + STOP_C + ); + + private static final int TOT_C1_A = toRaptorCost(2564); + private static final int TOT_C1_W_OPENING_HOURS_A = toRaptorCost(3512); + private static final int TOT_C1_B = toRaptorCost(2924); + private static final int TOT_C1_W_OPENING_HOURS_B = toRaptorCost(3728); + // Wait before 12m45s + ALIGHT SLACK 15s + private static final int L1_C1_INC_WAIT_W_OPENING_HOURS_A = + L1_C1_EX_WAIT + C1_CALCULATOR.waitCost(durationInSeconds("13m")); + private static final int L1_C1_INC_WAIT_W_OPENING_HOURS_B = + L1_C1_EX_WAIT + C1_CALCULATOR.waitCost(durationInSeconds("12m")); + + /* TEST CASES WITH EXPECTED TO-STRING TEXTS */ + + public static DestinationArrival flexCaseAForwardSearch() { + return flexForwardSearch(ACCESS, EGRESS, LINE_A); + } + + public static String flexCaseAText() { + return String.format( + "Flex 5m15s 1x 10:01 10:06:15 %s ~ A 1m45s ~ " + + "BUS A 10:08 10:20 12m C₁996 ~ D 1m15s ~ " + + "Flex 6m 1x 10:21:15 10:27:15 %s " + + "[10:01 10:27:15 26m15s Tₓ2 %s]", + RaptorCostConverter.toString(ACCESS_C1), + RaptorCostConverter.toString(EGRESS_C1_W_1M_SLACK), + RaptorCostConverter.toString(TOT_C1_A) + ); + } + + public static DestinationArrival flexCaseBForwardSearch() { + return flexForwardSearch(ACCESS, EGRESS, LINE_B); + } + + public static String flexCaseBText() { + return String.format( + "Flex 5m15s 1x 10:00 10:05:15 %s ~ A 0s ~ " + + "Walk 1m 10:05:15 10:06:15 C₁120 ~ B 1m45s ~ " + + "BUS B 10:08 10:20 12m C₁996 ~ C 15s ~ " + + "Walk 2m 10:20:15 10:22:15 C₁240 ~ D 1m ~ " + + "Flex 6m 1x 10:23:15 10:29:15 %s" + + " [10:00 10:29:15 29m15s Tₓ2 %s]", + RaptorCostConverter.toString(ACCESS_C1), + RaptorCostConverter.toString(EGRESS_C1_W_1M_SLACK), + RaptorCostConverter.toString(TOT_C1_B) + ); + } + + public static DestinationArrival flexCaseAWithOpeningHoursForwardSearch() { + return flexForwardSearch(ACCESS_W_OPENING_HOURS, EGRESS_W_OPENING_HOURS, LINE_A); + } + + public static String flexCaseAWithOpeningHoursText() { + return String.format( + "Flex 5m15s 1x Open(9:00 9:50) 9:50 9:55:15 %s ~ A 12m45s ~ " + + "BUS A 10:08 10:20 12m %s ~ D 10m ~ " + + "Flex 6m 1x Open(10:30 11:00) 10:30 10:36 %s " + + "[9:50 10:36 46m Tₓ2 %s]", + formatC1(ACCESS_C1), + formatC1(L1_C1_INC_WAIT_W_OPENING_HOURS_A), + formatC1(EGRESS_C1_W_9M45S_SLACK), + formatC1(TOT_C1_W_OPENING_HOURS_A) + ); + } + + public static DestinationArrival flexCaseBWithOpeningHoursForwardSearch() { + return flexForwardSearch(ACCESS_W_OPENING_HOURS, EGRESS_W_OPENING_HOURS, LINE_B); + } + + public static String flexCaseBWithOpeningHoursText() { + return String.format( + "Flex 5m15s 1x Open(9:00 9:50) 9:50 9:55:15 %s ~ A 0s ~ " + + "Walk 1m 9:55:15 9:56:15 C₁120 ~ B 11m45s ~ " + + "BUS B 10:08 10:20 12m %s ~ C 15s ~ " + + "Walk 2m 10:20:15 10:22:15 C₁240 ~ D 7m45s ~ " + + "Flex 6m 1x Open(10:30 11:00) 10:30 10:36 %s" + + " [9:50 10:36 46m Tₓ2 %s]", + formatC1(ACCESS_C1), + formatC1(L1_C1_INC_WAIT_W_OPENING_HOURS_B), + formatC1(EGRESS_C1_W_7M45S_SLACK), + formatC1(TOT_C1_W_OPENING_HOURS_B) + ); + } + + public static DestinationArrival flexCaseAReverseSearch() { + return flexReverseSearch(ACCESS, EGRESS, LINE_A); + } + + public static DestinationArrival flexCaseBReverseSearch() { + return flexReverseSearch(ACCESS, EGRESS, LINE_B); + } + + public static DestinationArrival flexCaseAWithOpeningHoursReverseSearch() { + return flexReverseSearch(ACCESS_W_OPENING_HOURS, EGRESS_W_OPENING_HOURS, LINE_A); + } + + public static DestinationArrival flexCaseBWithOpeningHoursReverseSearch() { + return flexReverseSearch(ACCESS_W_OPENING_HOURS, EGRESS_W_OPENING_HOURS, LINE_B); + } + + @Test + public void testSetup() { + // Assert test data is configured correct + + // Assert all durations + assertEquals(TX1_END - TX1_START, TX1_DURATION); + assertEquals(L1_END - L1_START, L1_TRANSIT_DURATION); + assertEquals(TX2_END - TX2_START, TX2_DURATION); + + // Asset proper wait times + int txBoardSlack = TRANSFER_SLACK + BOARD_SLACK; + assertEquals(TX1_END + txBoardSlack, L1_START); + assertEquals(L1_END + ALIGHT_SLACK, TX2_START); + + // Assert cost + // The calculator is not under test here, so we assert everything is as expected + assertEquals(12000, TX1_C1); + assertEquals(90000, L1_C1_EX_WAIT); + assertEquals(24000, TX2_C1); + } + + /* PRIVATE METHODS */ + + private static DestinationArrival flexForwardSearch( + RaptorAccessEgress accessPath, + RaptorAccessEgress egressPath, + String line + ) { + int departureTime, arrivalTime, waitTime; + ArrivalView prevArrival; + + if (LINE_A.equals(line)) { + // The latest time the access can arrive is the same as the TX1 arrival time in case B + arrivalTime = accessPath.latestArrivalTime(TX1_END); + prevArrival = access(accessPath.stop(), arrivalTime, accessPath); + + int waitCost = costL1ForwardIncWait(prevArrival.arrivalTime()); + prevArrival = bus(2, STOP_D, L1_STOP_ARR_TIME, waitCost, 0, TRIP_A, prevArrival); + } else { + arrivalTime = accessPath.latestArrivalTime(TX1_START); + prevArrival = access(accessPath.stop(), arrivalTime, accessPath); + int timeShift = TX1_START - prevArrival.arrivalTime(); + + prevArrival = new Transfer(1, TX1_END - timeShift, TX1_TRANSFER, prevArrival); + + int waitCost = costL1ForwardIncWait(prevArrival.arrivalTime()); + prevArrival = bus(2, STOP_C, L1_STOP_ARR_TIME, waitCost, 0, TRIP_B, prevArrival); + + prevArrival = new Transfer(2, TX2_END, TX2_TRANSFER, prevArrival); + } + + // Egress + departureTime = prevArrival.arrivalTime() + TRANSFER_SLACK; + // Time-shift departure time + departureTime = egressPath.earliestDepartureTime(departureTime); + arrivalTime = departureTime + egressPath.durationInSeconds(); + waitTime = departureTime - prevArrival.arrivalTime(); + int additionalCost = + egressPath.c1() + toRaptorCost(waitTime * WAIT_RELUCTANCE + TRANSFER_C1_SEC); + + return new DestinationArrival<>( + egressPath, + prevArrival, + arrivalTime, + additionalCost, + RaptorConstants.NOT_SET + ); + } + + private static DestinationArrival flexReverseSearch( + RaptorAccessEgress accessPath, + RaptorAccessEgress egressPath, + String line + ) { + int departureTime, arrivalTime, cost; + ArrivalView prevArrival; + + if (LINE_A.equals(line)) { + arrivalTime = L1_END + ALIGHT_SLACK + TRANSFER_SLACK; + arrivalTime = egressPath.earliestDepartureTime(arrivalTime); + prevArrival = access(egressPath.stop(), arrivalTime, egressPath); + + cost = costL1ReverseIncWait(prevArrival.arrivalTime()); + prevArrival = bus(2, STOP_A, L1_STOP_ARR_TIME_REV, cost, 0, TRIP_A, prevArrival); + } else { + arrivalTime = L1_END + ALIGHT_SLACK + TX2_DURATION + TRANSFER_SLACK; + arrivalTime = egressPath.earliestDepartureTime(arrivalTime); + prevArrival = access(egressPath.stop(), arrivalTime, egressPath); + arrivalTime = prevArrival.arrivalTime() - TX2_DURATION; + prevArrival = new Transfer(1, arrivalTime, TX2_TRANSFER_REV, prevArrival); + cost = costL1ReverseIncWait(prevArrival.arrivalTime()); + prevArrival = bus(2, STOP_B, L1_STOP_ARR_TIME_REV, cost, 0, TRIP_B, prevArrival); + arrivalTime = prevArrival.arrivalTime() - TX1_DURATION; + prevArrival = new Transfer(2, arrivalTime, TX1_TRANSFER_REV, prevArrival); + } + + // Access + departureTime = prevArrival.arrivalTime() - TRANSFER_SLACK; + // Time-shift departure time + departureTime = accessPath.latestArrivalTime(departureTime); + arrivalTime = departureTime - accessPath.durationInSeconds(); + int waitTime = prevArrival.arrivalTime() - departureTime; + int additionalCost = + accessPath.c1() + toRaptorCost(waitTime * WAIT_RELUCTANCE + TRANSFER_C1_SEC); + + return new DestinationArrival<>( + accessPath, + prevArrival, + arrivalTime, + additionalCost, + RaptorConstants.NOT_SET + ); + } + + private static int costL1ForwardIncWait(int prevArrivalTime) { + int waitTime = L1_START - prevArrivalTime + ALIGHT_SLACK; + return toRaptorCost(waitTime * WAIT_RELUCTANCE) + L1_C1_EX_WAIT; + } + + private static int costL1ReverseIncWait(int prevArrivalTime) { + int waitTime = (prevArrivalTime - L1_END) + BOARD_SLACK; + return toRaptorCost(waitTime * WAIT_RELUCTANCE) + L1_C1_EX_WAIT; + } +} diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/TestArrivals.java b/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/TestArrivals.java new file mode 100644 index 00000000000..147140c6750 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/TestArrivals.java @@ -0,0 +1,110 @@ +package org.opentripplanner.raptor._data.stoparrival; + +import org.opentripplanner.raptor._data.transit.TestAccessEgress; +import org.opentripplanner.raptor._data.transit.TestTransfer; +import org.opentripplanner.raptor._data.transit.TestTripSchedule; +import org.opentripplanner.raptor.api.model.RaptorAccessEgress; +import org.opentripplanner.raptor.api.model.RaptorConstants; +import org.opentripplanner.raptor.api.model.RaptorTransfer; +import org.opentripplanner.raptor.api.view.ArrivalView; + +/** + * @deprecated This was earlier part of Raptor and should not be used outside the Raptor + * module. Use the OTP model entities instead. + */ +@Deprecated +public class TestArrivals { + + public static ArrivalView access( + int stop, + int arrivalTime, + RaptorAccessEgress path, + int c2 + ) { + return new Access(stop, arrivalTime, path, c2); + } + + public static ArrivalView access( + int stop, + int arrivalTime, + RaptorAccessEgress path + ) { + return access(stop, arrivalTime, path, RaptorConstants.NOT_SET); + } + + public static ArrivalView access( + int stop, + int departureTime, + int arrivalTime, + int c1, + int c2 + ) { + return access( + stop, + arrivalTime, + TestAccessEgress.walk(stop, Math.abs(arrivalTime - departureTime), c1), + c2 + ); + } + + public static ArrivalView access( + int stop, + int departureTime, + int arrivalTime, + int c1 + ) { + return access(stop, departureTime, arrivalTime, c1, RaptorConstants.NOT_SET); + } + + public static ArrivalView transfer( + int round, + int arrivalTime, + RaptorTransfer transfer, + ArrivalView previous + ) { + return new Transfer(round, arrivalTime, transfer, previous); + } + + public static ArrivalView transfer( + int round, + int stop, + int departureTime, + int arrivalTime, + int extraCost, + ArrivalView previous + ) { + return transfer( + round, + arrivalTime, + TestTransfer.transfer(stop, Math.abs(arrivalTime - departureTime), extraCost), + previous + ); + } + + public static ArrivalView bus( + int round, + int stop, + int arrivalTime, + int c1, + int c2, + TestTripSchedule trip, + ArrivalView previous + ) { + return new Transit(round, stop, arrivalTime, c1, c2, trip, previous); + } + + public static ArrivalView egress( + int departureTime, + int arrivalTime, + int c1, + int c2, + ArrivalView previous + ) { + return new Egress( + departureTime, + TestAccessEgress.walk(previous.stop(), Math.abs(arrivalTime - departureTime), c1), + c2, + previous + ); + } +} diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Transfer.java b/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Transfer.java new file mode 100644 index 00000000000..a68a89eb455 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Transfer.java @@ -0,0 +1,43 @@ +package org.opentripplanner.raptor._data.stoparrival; + +import static org.opentripplanner.raptor.api.model.PathLegType.TRANSFER; + +import org.opentripplanner.raptor._data.transit.TestTripSchedule; +import org.opentripplanner.raptor.api.model.PathLegType; +import org.opentripplanner.raptor.api.model.RaptorTransfer; +import org.opentripplanner.raptor.api.view.ArrivalView; + +/* + * @deprecated This was earlier part of Raptor and should not be used outside the Raptor + * module. Use the OTP model entities instead. + */ +@Deprecated +class Transfer extends AbstractStopArrival { + + private final RaptorTransfer transfer; + + Transfer( + int round, + int arrivalTime, + RaptorTransfer transfer, + ArrivalView previous + ) { + super(round, transfer.stop(), arrivalTime, transfer.c1(), previous.c2(), previous); + this.transfer = transfer; + } + + @Override + public PathLegType arrivedBy() { + return TRANSFER; + } + + @Override + public RaptorTransfer transfer() { + return transfer; + } + + @Override + public boolean arrivedOnBoard() { + return false; + } +} diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Transit.java b/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Transit.java new file mode 100644 index 00000000000..a6765e38ab4 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Transit.java @@ -0,0 +1,57 @@ +package org.opentripplanner.raptor._data.stoparrival; + +import static org.opentripplanner.raptor.api.model.PathLegType.TRANSIT; + +import org.opentripplanner.raptor._data.transit.TestTripSchedule; +import org.opentripplanner.raptor.api.model.PathLegType; +import org.opentripplanner.raptor.api.view.ArrivalView; +import org.opentripplanner.raptor.api.view.TransitPathView; + +/** + * + * @deprecated This was earlier part of Raptor and should not be used outside the Raptor + * module. Use the OTP model entities instead. + */ +@Deprecated +class Transit extends AbstractStopArrival implements TransitPathView { + + private final TestTripSchedule trip; + + Transit( + int round, + int stop, + int arrivalTime, + int c1, + int c2, + TestTripSchedule trip, + ArrivalView previous + ) { + super(round, stop, arrivalTime, c1, c2, previous); + this.trip = trip; + } + + @Override + public PathLegType arrivedBy() { + return TRANSIT; + } + + @Override + public TransitPathView transitPath() { + return this; + } + + @Override + public int boardStop() { + return previous().stop(); + } + + @Override + public TestTripSchedule trip() { + return trip; + } + + @Override + public boolean arrivedOnBoard() { + return true; + } +} diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestAccessEgress.java b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestAccessEgress.java new file mode 100644 index 00000000000..9eed82ba296 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestAccessEgress.java @@ -0,0 +1,365 @@ +package org.opentripplanner.raptor._data.transit; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.opentripplanner.raptor._data.RaptorTestConstants.SECONDS_IN_A_DAY; +import static org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter.toRaptorCost; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import org.opentripplanner.raptor.api.model.RaptorAccessEgress; +import org.opentripplanner.raptor.api.model.RaptorConstants; +import org.opentripplanner.utils.time.TimeUtils; + +/** + * Simple implementation for {@link RaptorAccessEgress} for use in unit-tests. + * + * @deprecated This was earlier part of Raptor and should not be used outside the Raptor + * module. Use the OTP model entities instead. + */ +@Deprecated +public class TestAccessEgress implements RaptorAccessEgress { + + public static final int DEFAULT_NUMBER_OF_RIDES = 0; + public static final boolean STOP_REACHED_ON_BOARD = true; + public static final boolean STOP_REACHED_ON_FOOT = false; + public static final double DEFAULT_WALK_RELUCTANCE = 2.0; + + private final int stop; + private final int durationInSeconds; + private final int c1; + private final int numberOfRides; + private final boolean stopReachedOnBoard; + private final boolean free; + private final Integer opening; + private final Integer closing; + private final boolean closed; + private final int timePenalty; + + private TestAccessEgress(Builder builder) { + this.stop = builder.stop; + this.durationInSeconds = builder.durationInSeconds; + this.numberOfRides = builder.numberOfRides; + this.stopReachedOnBoard = builder.stopReachedOnBoard; + this.free = builder.free; + this.opening = builder.opening; + this.closing = builder.closing; + this.closed = builder.closed; + this.timePenalty = builder.timePenalty; + this.c1 = builder.c1; + + if (free) { + assertEquals(0, durationInSeconds); + } else { + assertTrue(durationInSeconds > 0); + } + if (closed) { + assertNull(opening); + assertNull(closing); + } + assertTrue(numberOfRides >= 0); + } + + public static TestAccessEgress free(int stop) { + return new Builder(stop, 0).withFree().build(); + } + + /** + * @deprecated A stop cannot be both free and have a cost - This is not a valid + * access/egress. + */ + @Deprecated + public static TestAccessEgress free(int stop, int cost) { + return new Builder(stop, 0).withFree().withCost(cost).build(); + } + + public static TestAccessEgress walk(int stop, int durationInSeconds) { + return new Builder(stop, durationInSeconds).build(); + } + + public static TestAccessEgress walk(int stop, int durationInSeconds, double walkReluctance) { + return walk(stop, durationInSeconds, walkCost(durationInSeconds, walkReluctance)); + } + + public static TestAccessEgress walk(int stop, int durationInSeconds, int cost) { + return new Builder(stop, durationInSeconds).withCost(cost).build(); + } + + public static TestAccessEgress flexWithOnBoard(int stop, int durationInSeconds, int cost) { + return new Builder(stop, durationInSeconds) + .withCost(cost) + .withNRides(1) + .stopReachedOnBoard() + .build(); + } + + /** Create a new flex access and arrive stop onBoard with 1 ride/extra transfer. */ + public static TestAccessEgress flex(int stop, int durationInSeconds) { + return flex(stop, durationInSeconds, 1, walkCost(durationInSeconds)); + } + + /** Create a new flex access and arrive stop onBoard with 1 ride/extra transfer. */ + public static TestAccessEgress flex(int stop, int durationInSeconds, int nRides) { + return flex(stop, durationInSeconds, nRides, walkCost(durationInSeconds)); + } + + /** Create a new flex access and arrive stop onBoard. */ + public static TestAccessEgress flex(int stop, int durationInSeconds, int nRides, int cost) { + assert nRides > DEFAULT_NUMBER_OF_RIDES; + return new Builder(stop, durationInSeconds) + .stopReachedOnBoard() + .withNRides(nRides) + .withCost(cost) + .build(); + } + + /** Create a flex access arriving at given stop by walking with 1 ride/extra transfer. */ + public static TestAccessEgress flexAndWalk(int stop, int durationInSeconds) { + return flexAndWalk(stop, durationInSeconds, 1, walkCost(durationInSeconds)); + } + + /** Create a flex access arriving at given stop by walking with 1 ride/extra transfer. */ + public static TestAccessEgress flexAndWalk(int stop, int durationInSeconds, int nRides) { + return flexAndWalk(stop, durationInSeconds, nRides, walkCost(durationInSeconds)); + } + + /** Create a flex access arriving at given stop by walking. */ + public static TestAccessEgress flexAndWalk( + int stop, + int durationInSeconds, + int nRides, + int cost + ) { + assert nRides > DEFAULT_NUMBER_OF_RIDES; + return new Builder(stop, durationInSeconds).withNRides(nRides).withCost(cost).build(); + } + + public static Collection transfers(int... stopTimes) { + List legs = new ArrayList<>(); + for (int i = 0; i < stopTimes.length; i += 2) { + legs.add(walk(stopTimes[i], stopTimes[i + 1])); + } + return legs; + } + + public static int walkCost(int durationInSeconds) { + return walkCost(durationInSeconds, DEFAULT_WALK_RELUCTANCE); + } + + public static int walkCost(int durationInSeconds, double reluctance) { + return toRaptorCost(durationInSeconds * reluctance); + } + + /** + * Add opening and closing hours and return a new object. + *

    + * Opening and closing is specified as seconds since the start of "RAPTOR time" to limit the + * time periods that the access is traversable, which is repeatead every 24 hours. This allows + * access to only be traversable between given times like 08:00 and 16:00 every day. + */ + public TestAccessEgress openingHours(int opening, int closing) { + return copyOf().withOpeningHours(opening, closing).build(); + } + + /** Alias for {@code openingHours(TimeUtils.time(opening), TimeUtils.time(closing))} */ + public TestAccessEgress openingHours(String opening, String closing) { + return openingHours(TimeUtils.time(opening), TimeUtils.time(closing)); + } + + public TestAccessEgress openingHoursClosed() { + return copyOf().withClosed().build(); + } + + public TestAccessEgress withTimePenalty(int timePenalty) { + return this.copyOf().withTimePenalty(timePenalty).build(); + } + + public Builder copyOf() { + return new Builder(this); + } + + @Override + public int stop() { + return stop; + } + + @Override + public int c1() { + return c1; + } + + @Override + public int durationInSeconds() { + return durationInSeconds; + } + + @Override + public int timePenalty() { + return timePenalty; + } + + @Override + public int earliestDepartureTime(int requestedDepartureTime) { + if (!hasOpeningHours()) { + return requestedDepartureTime; + } + if (closed) { + return RaptorConstants.TIME_NOT_SET; + } + + int days = Math.floorDiv(requestedDepartureTime, SECONDS_IN_A_DAY); + int specificOpening = days * SECONDS_IN_A_DAY + opening; + int specificClosing = days * SECONDS_IN_A_DAY + closing; + + if (requestedDepartureTime < specificOpening) { + return specificOpening; + } else if (requestedDepartureTime > specificClosing) { + // return the opening time for the next day + return specificOpening + SECONDS_IN_A_DAY; + } + return requestedDepartureTime; + } + + @Override + public int latestArrivalTime(int requestedArrivalTime) { + if (!hasOpeningHours()) { + return requestedArrivalTime; + } + if (closed) { + return RaptorConstants.TIME_NOT_SET; + } + + // opening & closing is relative to the departure + int requestedDepartureTime = requestedArrivalTime - durationInSeconds(); + int days = Math.floorDiv(requestedDepartureTime, SECONDS_IN_A_DAY); + int specificOpening = days * SECONDS_IN_A_DAY + opening; + int specificClosing = days * SECONDS_IN_A_DAY + closing; + int closeAtArrival = specificClosing + durationInSeconds(); + + if (requestedDepartureTime < specificOpening) { + // return the closing for the previous day, offset with durationInSeconds() + return closeAtArrival - SECONDS_IN_A_DAY; + } else if (requestedArrivalTime > closeAtArrival) { + return closeAtArrival; + } + return requestedArrivalTime; + } + + @Override + public boolean hasOpeningHours() { + return closed || opening != null || closing != null; + } + + @Override + public int numberOfRides() { + return numberOfRides; + } + + @Override + public boolean stopReachedOnBoard() { + return stopReachedOnBoard; + } + + @Override + public boolean isFree() { + return this.free; + } + + @Override + public String toString() { + return asString(true, true, null); + } + + /** + * Do not use the builder, use the static factory methods. Only use the builder if you need to + * override the {@link TestAccessEgress class}. + */ + protected static class Builder { + + int stop; + int durationInSeconds; + int c1; + int numberOfRides = DEFAULT_NUMBER_OF_RIDES; + boolean stopReachedOnBoard = STOP_REACHED_ON_FOOT; + Integer opening = null; + Integer closing = null; + private boolean free = false; + private boolean closed = false; + private int timePenalty; + + Builder(int stop, int durationInSeconds) { + this.stop = stop; + this.durationInSeconds = durationInSeconds; + this.c1 = walkCost(durationInSeconds); + this.timePenalty = RaptorConstants.TIME_NOT_SET; + } + + Builder(TestAccessEgress original) { + this.free = original.free; + this.stop = original.stop; + this.durationInSeconds = original.durationInSeconds; + this.stopReachedOnBoard = original.stopReachedOnBoard; + this.c1 = original.c1; + this.numberOfRides = original.numberOfRides; + this.opening = original.opening; + this.closing = original.closing; + this.closed = original.closed; + this.timePenalty = original.timePenalty; + } + + Builder withFree() { + this.free = true; + this.durationInSeconds = 0; + return this; + } + + Builder withCost(int cost) { + this.c1 = cost; + return this; + } + + Builder withNRides(int numberOfRides) { + this.numberOfRides = numberOfRides; + return this; + } + + Builder stopReachedOnBoard() { + this.stopReachedOnBoard = STOP_REACHED_ON_BOARD; + return this; + } + + Builder withTimePenalty(int timePenalty) { + this.timePenalty = timePenalty; + return this; + } + + Builder withOpeningHours(int opening, int closing) { + if (opening > closing) { + throw new IllegalStateException( + "Must open before is close. Opens at " + + TimeUtils.timeToStrCompact(opening) + + " and close at " + + TimeUtils.timeToStrCompact(closing) + + "." + ); + } + this.closed = false; + this.opening = opening; + this.closing = closing; + return this; + } + + Builder withClosed() { + this.opening = null; + this.closing = null; + this.closed = true; + return this; + } + + TestAccessEgress build() { + return new TestAccessEgress(this); + } + } +} diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedBoardingSearch.java b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedBoardingSearch.java new file mode 100644 index 00000000000..ade301bc6b5 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedBoardingSearch.java @@ -0,0 +1,128 @@ +package org.opentripplanner.raptor._data.transit; + +import gnu.trove.map.TIntObjectMap; +import gnu.trove.map.hash.TIntObjectHashMap; +import java.util.ArrayList; +import java.util.BitSet; +import java.util.Collection; +import java.util.List; +import java.util.function.BiPredicate; +import java.util.stream.Collectors; +import javax.annotation.Nullable; +import org.opentripplanner.model.transfer.TransferConstraint; +import org.opentripplanner.raptor.spi.RaptorBoardOrAlightEvent; +import org.opentripplanner.raptor.spi.RaptorConstrainedBoardingSearch; +import org.opentripplanner.raptor.spi.RaptorTimeTable; +import org.opentripplanner.utils.tostring.ToStringBuilder; + +/** + * @deprecated This was earlier part of Raptor and should not be used outside the Raptor + * module. Use the OTP model entities instead. + */ +@Deprecated +public class TestConstrainedBoardingSearch + implements RaptorConstrainedBoardingSearch { + + /** Index of guaranteed transfers by fromStopPos */ + private final TIntObjectMap> transfersByFromStopPos = new TIntObjectHashMap<>(); + private final BitSet transfersByToStopPosExist = new BitSet(); + private final BiPredicate timeAfterOrEqual; + private int currentTargetStopPos; + + TestConstrainedBoardingSearch(boolean forward) { + this.timeAfterOrEqual = forward ? (a, b) -> a >= b : (a, b) -> a <= b; + } + + @Override + public boolean transferExistTargetStop(int targetStopPos) { + this.currentTargetStopPos = targetStopPos; + return transfersByFromStopPos.containsKey(targetStopPos); + } + + @Override + public boolean transferExistSourceStop(int targetStopPos) { + // This is only used to check for + return transfersByToStopPosExist.get(targetStopPos); + } + + @Nullable + @Override + public RaptorBoardOrAlightEvent find( + RaptorTimeTable targetTimetable, + int transferSlack, + TestTripSchedule sourceTrip, + int sourceStopIndex, + int prevTransitArrivalTime, + int earliestBoardTime + ) { + var list = transfersByFromStopPos.get(currentTargetStopPos); + for (TestConstrainedTransfer tx : list) { + var trip = tx.getSourceTrip(); + if (trip == sourceTrip) { + int stopPos = trip.findDepartureStopPosition(prevTransitArrivalTime, sourceStopIndex); + boolean boardAlightPossible = timeAfterOrEqual.test(tx.getTime(), prevTransitArrivalTime); + if (tx.getSourceStopPos() == stopPos && boardAlightPossible) { + return tx.boardingEvent(tx.isFacilitated() ? prevTransitArrivalTime : earliestBoardTime); + } + } + } + return RaptorBoardOrAlightEvent.empty(earliestBoardTime); + } + + /** + * Return boardings as a result for constrained transfers like a guaranteed transfer. + */ + public List constrainedBoardings() { + return transfersByFromStopPos + .valueCollection() + .stream() + .flatMap(Collection::stream) + .collect(Collectors.toList()); + } + + @Override + public String toString() { + return ToStringBuilder + .of(TestConstrainedBoardingSearch.class) + .addNum("currentTargetStopPos", currentTargetStopPos) + .addObj("index", transfersByFromStopPos) + .toString(); + } + + /** + * The the {@code source/target} is the trips in order of the search direction (forward or + * reverse). For reverse search it is the opposite from {@code from/to} in the result path. + */ + void addConstraintTransfers( + TestTripSchedule sourceTrip, + int sourceStopPos, + TestTripSchedule targetTrip, + int targetTripIndex, + int targetStopPos, + int targetTime, + TransferConstraint constraint + ) { + List list = transfersByFromStopPos.get(targetStopPos); + if (list == null) { + list = new ArrayList<>(); + transfersByFromStopPos.put(targetStopPos, list); + } + list.add( + new TestConstrainedTransfer( + constraint, + sourceTrip, + sourceStopPos, + targetTrip, + targetTripIndex, + targetStopPos, + targetTime + ) + ); + transfersByToStopPosExist.set(sourceStopPos); + } + + void clear() { + transfersByFromStopPos.clear(); + transfersByToStopPosExist.clear(); + } +} diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransfer.java b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransfer.java new file mode 100644 index 00000000000..d897a9d6982 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransfer.java @@ -0,0 +1,97 @@ +package org.opentripplanner.raptor._data.transit; + +import javax.annotation.Nullable; +import org.opentripplanner.model.transfer.TransferConstraint; +import org.opentripplanner.raptor.api.model.RaptorConstrainedTransfer; +import org.opentripplanner.raptor.api.model.RaptorTransferConstraint; +import org.opentripplanner.raptor.spi.RaptorBoardOrAlightEvent; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.constrainedtransfer.ConstrainedTransferBoarding; +import org.opentripplanner.utils.tostring.ToStringBuilder; + +/** + * @deprecated This was earlier part of Raptor and should not be used outside the Raptor + * module. Use the OTP model entities instead. + */ +@Deprecated +class TestConstrainedTransfer implements RaptorConstrainedTransfer { + + private final TransferConstraint transferConstraints; + private final TestTripSchedule sourceTrip; + private final int sourceStopPos; + private final TestTripSchedule targetTrip; + private final int targetTripIndex; + private final int targetStopPos; + private final int targetTime; + + TestConstrainedTransfer( + TransferConstraint transferConstraints, + TestTripSchedule sourceTrip, + int sourceStopPos, + TestTripSchedule targetTrip, + int targetTripIndex, + int targetStopPos, + int targetTime + ) { + this.transferConstraints = transferConstraints; + this.sourceTrip = sourceTrip; + this.sourceStopPos = sourceStopPos; + this.targetTrip = targetTrip; + this.targetTripIndex = targetTripIndex; + this.targetStopPos = targetStopPos; + this.targetTime = targetTime; + } + + public TestTripSchedule getTrip() { + return targetTrip; + } + + public int getStopPositionInPattern() { + return targetStopPos; + } + + public int getTime() { + return targetTime; + } + + public boolean isFacilitated() { + return transferConstraints.isFacilitated(); + } + + @Nullable + @Override + public RaptorTransferConstraint getTransferConstraint() { + return transferConstraints; + } + + @Override + public String toString() { + return ToStringBuilder + .of(TestConstrainedTransfer.class) + .addObj("sourceTrip", sourceTrip) + .addNum("sourceStopPos", sourceStopPos) + .addObj("targetTrip", targetTrip) + .addNum("targetTripIndex", targetTripIndex) + .addNum("targetStopPos", targetStopPos) + .addServiceTime("targetTime", targetTime) + .toString(); + } + + TestTripSchedule getSourceTrip() { + return sourceTrip; + } + + int getSourceStopPos() { + return sourceStopPos; + } + + RaptorBoardOrAlightEvent boardingEvent(int earliestBoardingTime) { + return new ConstrainedTransferBoarding<>( + transferConstraints, + targetTripIndex, + targetTrip, + targetStopPos, + targetTime, + earliestBoardingTime + ); + } +} diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestRoute.java b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestRoute.java new file mode 100644 index 00000000000..7c87bd8d402 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestRoute.java @@ -0,0 +1,152 @@ +package org.opentripplanner.raptor._data.transit; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import org.opentripplanner.model.transfer.TransferConstraint; +import org.opentripplanner.raptor.api.model.SearchDirection; +import org.opentripplanner.raptor.spi.RaptorConstrainedBoardingSearch; +import org.opentripplanner.raptor.spi.RaptorRoute; +import org.opentripplanner.raptor.spi.RaptorTimeTable; +import org.opentripplanner.raptor.spi.RaptorTripScheduleSearch; +import org.opentripplanner.routing.algorithm.raptoradapter.api.DefaultTripPattern; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.request.TripScheduleSearchFactory; +import org.opentripplanner.utils.tostring.ToStringBuilder; + +/** + * @deprecated This was earlier part of Raptor and should not be used outside the Raptor + * module. Use the OTP model entities instead. + */ +@Deprecated +public class TestRoute implements RaptorRoute, RaptorTimeTable { + + private final TestTripPattern pattern; + private final List schedules = new ArrayList<>(); + private final TestConstrainedBoardingSearch transferConstraintsForwardSearch = new TestConstrainedBoardingSearch( + true + ); + private final TestConstrainedBoardingSearch transferConstraintsReverseSearch = new TestConstrainedBoardingSearch( + false + ); + + private TestRoute(TestTripPattern pattern) { + this.pattern = pattern; + } + + public static TestRoute route(TestTripPattern pattern) { + return new TestRoute(pattern); + } + + public static TestRoute route(String name, int... stopIndexes) { + return route(TestTripPattern.pattern(name, stopIndexes)); + } + + /* RaptorRoute */ + + @Override + public RaptorTimeTable timetable() { + return this; + } + + @Override + public DefaultTripPattern pattern() { + return pattern; + } + + public RaptorConstrainedBoardingSearch transferConstraintsForwardSearch() { + return transferConstraintsForwardSearch; + } + + public RaptorConstrainedBoardingSearch transferConstraintsReverseSearch() { + return transferConstraintsReverseSearch; + } + + /* RaptorTimeTable */ + + @Override + public TestTripSchedule getTripSchedule(int index) { + return schedules.get(index); + } + + @Override + public int numberOfTripSchedules() { + return schedules.size(); + } + + @Override + public RaptorTripScheduleSearch tripSearch(SearchDirection direction) { + return TripScheduleSearchFactory.create(direction, new TestTripSearchTimetable(this)); + } + + public List listTransferConstraintsForwardSearch() { + return transferConstraintsForwardSearch.constrainedBoardings(); + } + + public TestRoute withTimetable(TestTripSchedule... trips) { + Collections.addAll(schedules, trips); + return this; + } + + public TestRoute withTimetable(TestTripSchedule.Builder... scheduleBuilders) { + for (TestTripSchedule.Builder builder : scheduleBuilders) { + var tripSchedule = builder.pattern(pattern).build(); + schedules.add(tripSchedule); + } + return this; + } + + @Override + public String toString() { + return ToStringBuilder + .of(TestRoute.class) + .addObj("pattern", pattern) + .addObj("schedules", schedules) + .toString(); + } + + void clearTransferConstraints() { + transferConstraintsForwardSearch.clear(); + transferConstraintsReverseSearch.clear(); + } + + /** + * Add a transfer constraint to the route by iterating over all trips and matching the provided + * {@code toTrip}(added to forward search) {@code fromTrip}(added to reverse search) with the rips + * in the route timetable. + */ + void addTransferConstraint( + TestTripSchedule fromTrip, + int fromStopPos, + TestTripSchedule toTrip, + int toStopPos, + TransferConstraint constraint + ) { + for (int i = 0; i < timetable().numberOfTripSchedules(); i++) { + var trip = timetable().getTripSchedule(i); + if (toTrip == trip) { + this.transferConstraintsForwardSearch.addConstraintTransfers( + fromTrip, + fromStopPos, + trip, + i, + toStopPos, + trip.arrival(toStopPos), + constraint + ); + } + // Reverse search transfer, the {@code source/target} is the trips in order of the + // reverse search, which is opposite from {@code from/to} in the result path. + if (fromTrip == trip) { + this.transferConstraintsReverseSearch.addConstraintTransfers( + toTrip, + toStopPos, + trip, + i, + fromStopPos, + trip.departure(fromStopPos), + constraint + ); + } + } + } +} diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransfer.java b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransfer.java new file mode 100644 index 00000000000..02c32530c53 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransfer.java @@ -0,0 +1,52 @@ +package org.opentripplanner.raptor._data.transit; + +import static org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter.toRaptorCost; + +import org.opentripplanner.raptor.api.model.RaptorTransfer; + +/** + * Simple implementation for {@link RaptorTransfer} for use in unit-tests. + * + * @deprecated This was earlier part of Raptor and should not be used outside the Raptor + * module. Use the OTP model entities instead. + */ +@Deprecated +public record TestTransfer(int stop, int durationInSeconds, int cost) implements RaptorTransfer { + public static final double DEFAULT_WALK_RELUCTANCE = 2.0; + + public static TestTransfer transfer(int stop, int durationInSeconds) { + return new TestTransfer(stop, durationInSeconds, walkCost(durationInSeconds)); + } + + public static TestTransfer transfer(int stop, int durationInSeconds, int cost) { + return new TestTransfer(stop, durationInSeconds, cost); + } + + public static int walkCost(int durationInSeconds) { + return walkCost(durationInSeconds, DEFAULT_WALK_RELUCTANCE); + } + + public static int walkCost(int durationInSeconds, double reluctance) { + return toRaptorCost(durationInSeconds * reluctance); + } + + @Override + public int stop() { + return stop; + } + + @Override + public int c1() { + return cost; + } + + @Override + public int durationInSeconds() { + return durationInSeconds; + } + + @Override + public String toString() { + return asString(); + } +} diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferPoint.java b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferPoint.java new file mode 100644 index 00000000000..70b99b533d2 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferPoint.java @@ -0,0 +1,57 @@ +package org.opentripplanner.raptor._data.transit; + +import org.opentripplanner.model.transfer.TransferPoint; +import org.opentripplanner.utils.tostring.ToStringBuilder; + +/** + * @deprecated This was earlier part of Raptor and should not be used outside the Raptor + * module. Use the OTP model entities instead. + */ +@Deprecated +public class TestTransferPoint implements TransferPoint { + + private final int stop; + // Wer need this because trip pattern can pass through same stop more than once + private final int stopPosition; + private final TestTripSchedule schedule; + private final boolean applyToAllTrips; + + public TestTransferPoint( + int stop, + int stopPosition, + TestTripSchedule schedule, + boolean applyToAllTrips + ) { + this.stop = stop; + this.stopPosition = stopPosition; + this.schedule = schedule; + this.applyToAllTrips = applyToAllTrips; + } + + @Override + public boolean appliesToAllTrips() { + return applyToAllTrips; + } + + @Override + public int getSpecificityRanking() { + return 2; + } + + public int getStopPosition() { + return this.stopPosition; + } + + public boolean matches(TestTripSchedule schedule, int stop, int stopPosition) { + return this.schedule == schedule && this.stop == stop && this.stopPosition == stopPosition; + } + + @Override + public String toString() { + return ToStringBuilder + .of() + .addNum("stop", stop) + .addObj("trip", schedule.pattern().debugInfo()) + .toString(); + } +} diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransitData.java b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransitData.java new file mode 100644 index 00000000000..f8f645ab73a --- /dev/null +++ b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransitData.java @@ -0,0 +1,385 @@ +package org.opentripplanner.raptor._data.transit; + +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 java.util.ArrayList; +import java.util.BitSet; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import javax.annotation.Nullable; +import org.opentripplanner.model.transfer.ConstrainedTransfer; +import org.opentripplanner.model.transfer.TransferConstraint; +import org.opentripplanner.raptor._data.RaptorTestConstants; +import org.opentripplanner.raptor.api.model.RaptorConstrainedTransfer; +import org.opentripplanner.raptor.api.model.RaptorStopNameResolver; +import org.opentripplanner.raptor.api.model.RaptorTransfer; +import org.opentripplanner.raptor.api.model.RaptorTripPattern; +import org.opentripplanner.raptor.api.request.RaptorRequestBuilder; +import org.opentripplanner.raptor.rangeraptor.SystemErrDebugLogger; +import org.opentripplanner.raptor.spi.DefaultSlackProvider; +import org.opentripplanner.raptor.spi.IntIterator; +import org.opentripplanner.raptor.spi.RaptorConstrainedBoardingSearch; +import org.opentripplanner.raptor.spi.RaptorCostCalculator; +import org.opentripplanner.raptor.spi.RaptorPathConstrainedTransferSearch; +import org.opentripplanner.raptor.spi.RaptorRoute; +import org.opentripplanner.raptor.spi.RaptorSlackProvider; +import org.opentripplanner.raptor.spi.RaptorTimeTable; +import org.opentripplanner.raptor.spi.RaptorTransitDataProvider; +import org.opentripplanner.raptor.util.BitSetIterator; +import org.opentripplanner.routing.algorithm.raptoradapter.api.DefaultTripPattern; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.DefaultRaptorTransfer; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.CostCalculatorFactory; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.GeneralizedCostParameters; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.GeneralizedCostParametersBuilder; +import org.opentripplanner.routing.algorithm.transferoptimization.model.TripStopTime; +import org.opentripplanner.routing.algorithm.transferoptimization.services.TransferServiceAdaptor; + +/** + * @deprecated This was earlier part of Raptor and should not be used outside the Raptor + * module. Use the OTP model entities instead. + */ +@Deprecated +@SuppressWarnings("UnusedReturnValue") +public class TestTransitData + implements RaptorTransitDataProvider, RaptorTestConstants { + + public static final TransferConstraint TX_GUARANTEED = TransferConstraint + .of() + .guaranteed() + .build(); + public static final TransferConstraint TX_NOT_ALLOWED = TransferConstraint + .of() + .notAllowed() + .build(); + public static final TransferConstraint TX_LONG_MIN_TIME = TransferConstraint + .of() + .minTransferTime(3600) + .build(); + + // Slack defaults: 1 minute for transfer-slack, 0 minutes for board- and alight-slack. + public static final RaptorSlackProvider SLACK_PROVIDER = new DefaultSlackProvider(60, 0, 0); + + private final List> transfersFromStop = new ArrayList<>(); + private final List> transfersToStop = new ArrayList<>(); + private final List> routeIndexesByStopIndex = new ArrayList<>(); + private final List routes = new ArrayList<>(); + private final List constrainedTransfers = new ArrayList<>(); + private final GeneralizedCostParametersBuilder costParamsBuilder = GeneralizedCostParameters.of(); + + private final int[] stopBoardAlightTransferCosts = new int[NUM_STOPS]; + + private RaptorSlackProvider slackProvider = SLACK_PROVIDER; + + @Override + public Iterator getTransfersFromStop(int fromStop) { + return transfersFromStop.get(fromStop).iterator(); + } + + @Override + public Iterator getTransfersToStop(int toStop) { + return transfersToStop.get(toStop).iterator(); + } + + @Override + public IntIterator routeIndexIterator(IntIterator stops) { + BitSet routes = new BitSet(); + while (stops.hasNext()) { + int stop = stops.next(); + for (int i : routeIndexesByStopIndex.get(stop)) { + routes.set(i); + } + } + return new BitSetIterator(routes); + } + + @Override + public RaptorRoute getRouteForIndex(int routeIndex) { + return this.routes.get(routeIndex); + } + + @Override + public int numberOfStops() { + return routeIndexesByStopIndex.size(); + } + + @Override + public RaptorCostCalculator multiCriteriaCostCalculator() { + return CostCalculatorFactory.createCostCalculator( + costParamsBuilder.build(), + stopBoardAlightTransferCosts() + ); + } + + @Override + public RaptorSlackProvider slackProvider() { + return slackProvider; + } + + public TestTransitData withSlackProvider(RaptorSlackProvider slackProvider) { + this.slackProvider = slackProvider; + return this; + } + + @Override + public RaptorPathConstrainedTransferSearch transferConstraintsSearch() { + return new RaptorPathConstrainedTransferSearch<>() { + @Nullable + @Override + public RaptorConstrainedTransfer findConstrainedTransfer( + TestTripSchedule fromTrip, + int fromStopPosition, + TestTripSchedule toTrip, + int toStopPosition + ) { + var list = routes + .stream() + .flatMap(r -> r.listTransferConstraintsForwardSearch().stream()) + .filter(tx -> tx.getSourceTrip().equals(fromTrip)) + .filter(tx -> tx.getSourceStopPos() == fromStopPosition) + .filter(tx -> tx.getTrip().equals(toTrip)) + .filter(tx -> tx.getStopPositionInPattern() == toStopPosition) + .toList(); + + if (list.isEmpty()) { + return null; + } + if (list.size() == 1) { + return list.get(0); + } + throw new IllegalStateException("More than on transfers found: " + list); + } + }; + } + + @Override + public RaptorStopNameResolver stopNameResolver() { + // Index is translated: 1->'A', 2->'B', 3->'C' ... + return this::stopIndexToName; + } + + @Override + public int getValidTransitDataStartTime() { + return this.routes.stream() + .mapToInt(route -> route.timetable().getTripSchedule(0).departure(0)) + .min() + .orElseThrow(); + } + + @Override + public int getValidTransitDataEndTime() { + return this.routes.stream() + .mapToInt(route -> { + RaptorTimeTable timetable = route.timetable(); + RaptorTripPattern pattern = route.pattern(); + return timetable + .getTripSchedule(timetable.numberOfTripSchedules() - 1) + .departure(pattern.numberOfStopsInPattern() - 1); + }) + .max() + .orElseThrow(); + } + + @Override + public RaptorConstrainedBoardingSearch transferConstraintsForwardSearch( + int routeIndex + ) { + return getRoute(routeIndex).transferConstraintsForwardSearch(); + } + + @Override + public RaptorConstrainedBoardingSearch transferConstraintsReverseSearch( + int routeIndex + ) { + return getRoute(routeIndex).transferConstraintsReverseSearch(); + } + + public TestRoute getRoute(int index) { + return routes.get(index); + } + + public void debugToStdErr(RaptorRequestBuilder request, boolean dryRun) { + var debug = request.debug(); + + if (debug.stops().isEmpty()) { + debug.addStops(stopsVisited()); + } + var logger = new SystemErrDebugLogger(true, dryRun); + + debug + .stopArrivalListener(logger::stopArrivalLister) + .patternRideDebugListener(logger::patternRideLister) + .pathFilteringListener(logger::pathFilteringListener) + .logger(logger); + } + + public TestTransitData withRoute(TestRoute route) { + this.routes.add(route); + int routeIndex = this.routes.indexOf(route); + ((TestTripPattern) route.pattern()).withPatternIndex(routeIndex); + var pattern = route.pattern(); + for (int i = 0; i < pattern.numberOfStopsInPattern(); ++i) { + int stopIndex = pattern.stopIndex(i); + expandNumOfStops(stopIndex); + routeIndexesByStopIndex.get(stopIndex).add(routeIndex); + } + return this; + } + + /** + * Same as: + *

    +   * withRoute(
    +   *   route(pattern(routeName, stopIndexes))
    +   *     .withTimetable(schedule().times(times))
    +   * )
    +   * 
    + */ + public TestTransitData withTransit(String routeName, String times, int... stopIndexes) { + return withRoute(route(pattern(routeName, stopIndexes)).withTimetable(schedule().times(times))); + } + + public TestTransitData withRoutes(TestRoute... routes) { + for (TestRoute route : routes) { + withRoute(route); + } + return this; + } + + public TestTransitData withTransfer(int fromStop, TestTransfer transfer) { + expandNumOfStops(Math.max(fromStop, transfer.stop())); + transfersFromStop.get(fromStop).add(transfer); + transfersToStop.get(transfer.stop()).add(DefaultRaptorTransfer.reverseOf(fromStop, transfer)); + return this; + } + + public TestTransitData withGuaranteedTransfer( + TestTripSchedule fromTrip, + int fromStop, + TestTripSchedule toTrip, + int toStop + ) { + return withConstrainedTransfer(fromTrip, fromStop, toTrip, toStop, TX_GUARANTEED); + } + + public void clearConstrainedTransfers() { + constrainedTransfers.clear(); + for (TestRoute route : routes) { + route.clearTransferConstraints(); + } + } + + /** + * Create constraint for a given transfer. If trip passes through the stop more than once + * constraint will be placed on stop position for the first visit. + * @param fromTrip initial trip + * @param fromStop initial stop index + * @param toTrip destination trip + * @param toStop destination trip index + * @param constraint constraint to set + */ + public TestTransitData withConstrainedTransfer( + TestTripSchedule fromTrip, + int fromStop, + TestTripSchedule toTrip, + int toStop, + TransferConstraint constraint + ) { + int fromStopPos = fromTrip.pattern().findStopPositionAfter(0, fromStop); + int toStopPos = toTrip.pattern().findStopPositionAfter(0, toStop); + + for (TestRoute route : routes) { + route.addTransferConstraint(fromTrip, fromStopPos, toTrip, toStopPos, constraint); + } + constrainedTransfers.add( + new ConstrainedTransfer( + null, + new TestTransferPoint(fromStop, fromStopPos, fromTrip, false), + new TestTransferPoint(toStop, toStopPos, toTrip, false), + constraint + ) + ); + return this; + } + + public TestTransitData withStopBoardAlightTransferCost(int stop, int boardAlightTransferCost) { + stopBoardAlightTransferCosts[stop] = boardAlightTransferCost; + return this; + } + + public GeneralizedCostParametersBuilder mcCostParamsBuilder() { + return costParamsBuilder; + } + + public ConstrainedTransfer findConstrainedTransfer( + TestTripSchedule fromTrip, + int fromStop, + int fromStopPosition, + TestTripSchedule toTrip, + int toStop, + int toStopPosition + ) { + for (ConstrainedTransfer tx : constrainedTransfers) { + if ( + ((TestTransferPoint) tx.getFrom()).matches(fromTrip, fromStop, fromStopPosition) && + ((TestTransferPoint) tx.getTo()).matches(toTrip, toStop, toStopPosition) + ) { + return tx; + } + } + return null; + } + + public TransferServiceAdaptor transferServiceAdaptor() { + return new TransferServiceAdaptor<>(null, null) { + @Override + protected ConstrainedTransfer findTransfer( + TripStopTime from, + TestTripSchedule toTrip, + int toStop, + int toStopPosition + ) { + return findConstrainedTransfer( + from.trip(), + from.stop(), + from.stopPosition(), + toTrip, + toStop, + toStopPosition + ); + } + }; + } + + public List getPatterns() { + return routes.stream().map(TestRoute::pattern).toList(); + } + + /* private methods */ + + private int[] stopBoardAlightTransferCosts() { + // Not implemented, no test for this yet. + return stopBoardAlightTransferCosts; + } + + private void expandNumOfStops(int stopIndex) { + for (int i = numberOfStops(); i <= stopIndex; ++i) { + transfersFromStop.add(new ArrayList<>()); + transfersToStop.add(new ArrayList<>()); + routeIndexesByStopIndex.add(new HashSet<>()); + } + } + + private List stopsVisited() { + final List stops = new ArrayList<>(); + for (int i = 0; i < routeIndexesByStopIndex.size(); i++) { + if (!routeIndexesByStopIndex.get(i).isEmpty()) { + stops.add(i); + } + } + return stops; + } +} diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripPattern.java b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripPattern.java new file mode 100644 index 00000000000..cf8496763d5 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripPattern.java @@ -0,0 +1,171 @@ +package org.opentripplanner.raptor._data.transit; + +import org.opentripplanner.routing.algorithm.raptoradapter.api.DefaultTripPattern; +import org.opentripplanner.transit.model.network.Route; +import org.opentripplanner.utils.tostring.ToStringBuilder; + +/** + * + * @deprecated This was earlier part of Raptor and should not be used outside the Raptor + * module. Use the OTP model entities instead. + */ +@Deprecated +public class TestTripPattern implements DefaultTripPattern { + + public static final byte BOARDING_MASK = 0b0001; + public static final byte ALIGHTING_MASK = 0b0010; + public static final byte WHEELCHAIR_MASK = 0b0100; + + private final String name; + private final int[] stopIndexes; + /** + * By caching the index, we avoid looking up the pattern during routing, this reduces memory lookups and + * improves the performance. + */ + private int slackIndex = 0; + + private int patternIndex = 0; + + private int priorityGroupId = 0; + + /** + *
    +   * 0 - 000 : No restriction
    +   * 1 - 001 : No Boarding
    +   * 2 - 010 : No Alighting
    +   * 4 - 100 : No wheelchair
    +   * 
    + */ + private final int[] restrictions; + + private Route route; + + private TestTripPattern(String name, int[] stopIndexes, int[] restrictions) { + this.name = name; + this.stopIndexes = stopIndexes; + this.restrictions = restrictions; + } + + public static TestTripPattern pattern(String name, int... stopIndexes) { + return new TestTripPattern(name, stopIndexes, new int[stopIndexes.length]); + } + + /** Create a pattern with name 'R1' and given stop indexes */ + public static TestTripPattern pattern(int... stopIndexes) { + return new TestTripPattern("R1", stopIndexes, new int[stopIndexes.length]); + } + + public TestTripPattern withSlackIndex(int index) { + this.slackIndex = index; + return this; + } + + TestTripPattern withPatternIndex(int index) { + this.patternIndex = index; + return this; + } + + public TestTripPattern withPriorityGroup(int priorityGroupId) { + this.priorityGroupId = priorityGroupId; + return this; + } + + public TestTripPattern withRoute(Route route) { + this.route = route; + return this; + } + + /** + *
    +   * Codes:
    +   *   B : Board
    +   *   A : Alight
    +   *   W : Wheelchair
    +   *   * : Board, Alight, Wheelchair
    +   *
    +   * Example:   B BA * AW
    +   * 
    + */ + public void restrictions(String codes) { + String[] split = codes.split(" "); + for (int i = 0; i < split.length; i++) { + String restriction = split[i]; + restrictions[i] = 0; + if (restriction.contains("*")) { + continue; + } + if (!restriction.contains("B")) { + restrictions[i] |= BOARDING_MASK; + } + if (!restriction.contains("A")) { + restrictions[i] |= ALIGHTING_MASK; + } + if (!restriction.contains("W")) { + restrictions[i] |= WHEELCHAIR_MASK; + } + } + } + + public String getName() { + return name; + } + + @Override + public int stopIndex(int stopPositionInPattern) { + return stopIndexes[stopPositionInPattern]; + } + + @Override + public boolean boardingPossibleAt(int stopPositionInPattern) { + return isNotRestricted(stopPositionInPattern, BOARDING_MASK); + } + + @Override + public boolean alightingPossibleAt(int stopPositionInPattern) { + return isNotRestricted(stopPositionInPattern, ALIGHTING_MASK); + } + + @Override + public int slackIndex() { + return slackIndex; + } + + @Override + public int priorityGroupId() { + return priorityGroupId; + } + + @Override + public int patternIndex() { + return patternIndex; + } + + @Override + public int numberOfStopsInPattern() { + return stopIndexes.length; + } + + @Override + public Route route() { + return route; + } + + @Override + public String debugInfo() { + return "BUS " + name; + } + + @Override + public String toString() { + return ToStringBuilder + .of(TestTripPattern.class) + .addStr("name", name) + .addInts("stops", stopIndexes) + .addInts("restrictions", restrictions) + .toString(); + } + + private boolean isNotRestricted(int index, int mask) { + return restrictions == null || (restrictions[index] & mask) == 0; + } +} diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSchedule.java b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSchedule.java new file mode 100644 index 00000000000..eb38028aa19 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSchedule.java @@ -0,0 +1,307 @@ +package org.opentripplanner.raptor._data.transit; + +import static org.opentripplanner.transit.model.basic.Accessibility.NO_INFORMATION; + +import java.time.LocalDate; +import java.util.Arrays; +import java.util.stream.IntStream; +import org.opentripplanner.raptor.api.model.RaptorTripSchedule; +import org.opentripplanner.routing.algorithm.raptoradapter.api.DefaultTripPattern; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.TripSchedule; +import org.opentripplanner.transit.model.basic.Accessibility; +import org.opentripplanner.transit.model.network.TripPattern; +import org.opentripplanner.transit.model.timetable.TripTimes; +import org.opentripplanner.utils.lang.IntUtils; +import org.opentripplanner.utils.time.TimeUtils; +import org.opentripplanner.utils.tostring.ToStringBuilder; + +/** + * An implementation of the {@link RaptorTripSchedule} for unit-testing. + *

    + * The {@link DefaultTripPattern} for this schedule return {@code stopIndex == stopPosInPattern + 1 } + * + * @deprecated This was earlier part of Raptor and should not be used outside the Raptor + * module. Use the OTP model entities instead. + */ +@Deprecated +public class TestTripSchedule implements TripSchedule { + + private static final int DEFAULT_DEPARTURE_DELAY = 10; + private final DefaultTripPattern pattern; + private final int[] arrivalTimes; + private final int[] departureTimes; + private final int transitReluctanceIndex; + private final Accessibility wheelchairBoarding; + private final TripPattern originalPattern; + + protected TestTripSchedule( + TestTripPattern pattern, + int[] arrivalTimes, + int[] departureTimes, + int transitReluctanceIndex, + Accessibility wheelchairBoarding, + TripPattern originalPattern + ) { + this.pattern = pattern; + this.arrivalTimes = arrivalTimes; + this.departureTimes = departureTimes; + this.transitReluctanceIndex = transitReluctanceIndex; + this.wheelchairBoarding = wheelchairBoarding; + this.originalPattern = originalPattern; + } + + public static TestTripSchedule.Builder schedule() { + return new TestTripSchedule.Builder(); + } + + public static TestTripSchedule.Builder schedule(TestTripPattern pattern) { + return schedule().pattern(pattern); + } + + public static TestTripSchedule.Builder schedule( + TestTripPattern pattern, + TripPattern originalPattern + ) { + return schedule().pattern(pattern).originalPattern(originalPattern); + } + + public static TestTripSchedule.Builder schedule(String times) { + return new TestTripSchedule.Builder().times(times); + } + + @Override + public int tripSortIndex() { + // We sort trips based on the departure from the first stop + return arrival(0); + } + + @Override + public int arrival(int stopPosInPattern) { + return arrivalTimes[stopPosInPattern]; + } + + @Override + public int departure(int stopPosInPattern) { + return departureTimes[stopPosInPattern]; + } + + @Override + public DefaultTripPattern pattern() { + return pattern; + } + + @Override + public int transitReluctanceFactorIndex() { + return transitReluctanceIndex; + } + + @Override + public Accessibility wheelchairBoarding() { + return wheelchairBoarding; + } + + public int size() { + return arrivalTimes.length; + } + + @Override + public String toString() { + if (Arrays.equals(arrivalTimes, departureTimes)) { + return ToStringBuilder + .of(TestTripSchedule.class) + .addServiceTimeSchedule("times", arrivalTimes) + .toString(); + } + return ToStringBuilder + .of(TestTripSchedule.class) + .addServiceTimeSchedule("arrivals", arrivalTimes) + .addServiceTimeSchedule("departures", departureTimes) + .toString(); + } + + @Override + public LocalDate getServiceDate() { + return null; + } + + @Override + public TripTimes getOriginalTripTimes() { + return null; + } + + @Override + public TripPattern getOriginalTripPattern() { + return this.originalPattern; + } + + @SuppressWarnings("UnusedReturnValue") + public static class Builder { + + private TestTripPattern pattern; + private int[] arrivalTimes; + private int[] departureTimes; + private int arrivalDepartureOffset = DEFAULT_DEPARTURE_DELAY; + private int transitReluctanceIndex = 0; + private Accessibility wheelchairBoarding = NO_INFORMATION; + private TripPattern originalPattern; + + public TestTripSchedule.Builder pattern(TestTripPattern pattern) { + this.pattern = pattern; + return this; + } + + public TestTripSchedule.Builder originalPattern(TripPattern pattern) { + this.originalPattern = pattern; + return this; + } + + public TestTripSchedule.Builder copy() { + var b = new TestTripSchedule.Builder(); + b.pattern = pattern; + b.arrivalTimes = arrivalTimes; + b.departureTimes = departureTimes; + b.arrivalDepartureOffset = arrivalDepartureOffset; + b.transitReluctanceIndex = transitReluctanceIndex; + b.wheelchairBoarding = wheelchairBoarding; + b.originalPattern = originalPattern; + return b; + } + + public TestTripSchedule.Builder pattern(String name, int... stops) { + return pattern(TestTripPattern.pattern(name, stops)); + } + + /** @param times departure and arrival times per stop. Example: "0:10, 0:20, 0:45 .." */ + public TestTripSchedule.Builder times(String times) { + return times(TimeUtils.times(times)); + } + + /** @param times departure and arrival times per stop in seconds past midnight. */ + public TestTripSchedule.Builder times(int... times) { + arrivals(times); + departures(times); + return this; + } + + /** @param arrivalTimes arrival times per stop. Example: "0:10, 0:20, 0:45 .. */ + public TestTripSchedule.Builder arrivals(String arrivalTimes) { + return this.arrivals(TimeUtils.times(arrivalTimes)); + } + + /** @param arrivalTimes arrival times per stop in seconds past midnight. */ + public TestTripSchedule.Builder arrivals(int... arrivalTimes) { + this.arrivalTimes = arrivalTimes; + return this; + } + + /** @param departureTimes departure times per stop. Example: "0:10, 0:20, 0:45 .. */ + public TestTripSchedule.Builder departures(String departureTimes) { + return this.departures(TimeUtils.times(departureTimes)); + } + + /** @param departureTimes departure times per stop in seconds past midnight. */ + public TestTripSchedule.Builder departures(int... departureTimes) { + this.departureTimes = departureTimes; + return this; + } + + /** + * The time between arrival and departure for each stop in the pattern. If not both arrival and + * departure times are set, this parameter is used to calculate the unset values. + *

    + * Unit: seconds. The default is 10 seconds. + */ + public TestTripSchedule.Builder arrDepOffset(int arrivalDepartureOffset) { + this.arrivalDepartureOffset = arrivalDepartureOffset; + return this; + } + + /** + * Shift all arrival/departure times by the given {@code offset}. Be careful, this + * method change the builder instance, use {@link #copy()} if you need the original. + *

    + * Offset unit is seconds. + */ + public TestTripSchedule.Builder shiftTimes(int offset) { + if (arrivalTimes == departureTimes) { + arrivalTimes = departureTimes = IntUtils.shiftArray(offset, arrivalTimes); + } else { + if (arrivalTimes != null) { + arrivalTimes = IntUtils.shiftArray(offset, arrivalTimes); + } + if (departureTimes != null) { + departureTimes = IntUtils.shiftArray(offset, departureTimes); + } + } + return this; + } + + /** + * Set the transit-reluctance-index. + *

    + * The default is 0. + */ + public TestTripSchedule.Builder transitReluctanceIndex(int transitReluctanceIndex) { + this.transitReluctanceIndex = transitReluctanceIndex; + return this; + } + + public TestTripSchedule.Builder wheelchairBoarding(Accessibility wcb) { + this.wheelchairBoarding = wcb; + return this; + } + + public TestTripSchedule.Builder[] repeat(int nTimes, int everySeconds) { + return IntStream + .range(0, nTimes) + .mapToObj(i -> copy().shiftTimes(i * everySeconds)) + .toArray(Builder[]::new); + } + + public TestTripSchedule build() { + if (arrivalTimes == null) { + arrivalTimes = copyWithOffset(departureTimes, -arrivalDepartureOffset); + } else if (departureTimes == null) { + departureTimes = copyWithOffset(arrivalTimes, arrivalDepartureOffset); + } + if (arrivalTimes.length != departureTimes.length) { + throw new IllegalStateException( + "Number of arrival and departure times do not match." + + " Arrivals: " + + arrivalTimes.length + + ", departures: " + + arrivalTimes.length + ); + } + if (pattern == null) { + pattern = TestTripPattern.pattern("DummyPattern", new int[arrivalTimes.length]); + } + if (arrivalTimes.length != pattern.numberOfStopsInPattern()) { + throw new IllegalStateException( + "Number of arrival and departure times do not match stops in pattern." + + " Arrivals/departures: " + + arrivalTimes.length + + ", stops: " + + pattern.numberOfStopsInPattern() + ); + } + + return new TestTripSchedule( + pattern, + arrivalTimes, + departureTimes, + transitReluctanceIndex, + wheelchairBoarding, + originalPattern + ); + } + + private static int[] copyWithOffset(int[] source, int offset) { + int[] target = new int[source.length]; + for (int i = 0; i < source.length; i++) { + target[i] = source[i] + offset; + } + return target; + } + } +} diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSearchTimetable.java b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSearchTimetable.java new file mode 100644 index 00000000000..645b33ff2f3 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSearchTimetable.java @@ -0,0 +1,52 @@ +package org.opentripplanner.raptor._data.transit; + +import java.util.function.IntUnaryOperator; +import org.opentripplanner.raptor.api.model.SearchDirection; +import org.opentripplanner.raptor.spi.RaptorTripScheduleSearch; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.request.TripScheduleSearchFactory; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.request.TripSearchTimetable; + +/** + * + * @deprecated This was earlier part of Raptor and should not be used outside the Raptor + * module. Use the OTP model entities instead. + */ +@Deprecated +public class TestTripSearchTimetable implements TripSearchTimetable { + + private final TestTripSchedule[] trips; + + public TestTripSearchTimetable(TestRoute route) { + int nTrips = route.timetable().numberOfTripSchedules(); + this.trips = new TestTripSchedule[nTrips]; + + for (int i = 0; i < nTrips; ++i) { + trips[i] = route.getTripSchedule(i); + } + } + + @Override + public TestTripSchedule getTripSchedule(int index) { + return trips[index]; + } + + @Override + public int numberOfTripSchedules() { + return trips.length; + } + + @Override + public IntUnaryOperator getArrivalTimes(int stopPositionInPattern) { + return (int tripIndex) -> trips[tripIndex].arrival(stopPositionInPattern); + } + + @Override + public IntUnaryOperator getDepartureTimes(int stopPositionInPattern) { + return (int tripIndex) -> trips[tripIndex].departure(stopPositionInPattern); + } + + @Override + public RaptorTripScheduleSearch tripSearch(SearchDirection direction) { + return TripScheduleSearchFactory.create(direction, this); + } +} From f9863404429004ef70fe7fe65e76b12a079bb4a7 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Sun, 3 Nov 2024 01:10:49 +0100 Subject: [PATCH 180/213] refactor: Change package name on raptor legacy test code --- .../_data/RaptorTestConstants.java | 2 +- .../_data/api/PathUtils.java | 4 +- .../_data/api/TestPathBuilder.java | 12 ++--- .../_data/api/TestPathBuilderTestRaptor.java | 12 ++--- .../stoparrival/AbstractStopArrival.java | 4 +- .../_data/stoparrival/Access.java | 2 +- .../_data/stoparrival/BasicPathTestCase.java | 52 +++++++++---------- .../_data/stoparrival/Egress.java | 4 +- .../FlexAccessAndEgressPathTestCase.java | 30 +++++------ .../_data/stoparrival/TestArrivals.java | 8 +-- .../_data/stoparrival/Transfer.java | 4 +- .../_data/stoparrival/Transit.java | 4 +- .../_data/transit/TestAccessEgress.java | 4 +- .../TestConstrainedBoardingSearch.java | 2 +- .../transit/TestConstrainedTransfer.java | 2 +- .../_data/transit/TestRoute.java | 2 +- .../_data/transit/TestTransfer.java | 2 +- .../_data/transit/TestTransferPoint.java | 2 +- .../_data/transit/TestTransitData.java | 10 ++-- .../_data/transit/TestTripPattern.java | 2 +- .../_data/transit/TestTripSchedule.java | 2 +- .../transit/TestTripSearchTimetable.java | 2 +- .../mapping/PagingServiceFactoryTest.java | 2 +- .../RaptorPathToItineraryMapperTest.java | 14 ++--- .../cost/DefaultCostCalculatorTest.java | 4 +- .../cost/PatternCostCalculatorTest.java | 8 +-- .../cost/WheelchairCostCalculatorTest.java | 2 +- .../GeneralizedCostParametersMapperTest.java | 6 +-- .../mappers/RaptorRequestMapperTest.java | 4 +- .../transit/request/TripAssert.java | 2 +- .../request/TripScheduleAlightSearchTest.java | 12 ++--- .../request/TripScheduleBoardSearchTest.java | 10 ++-- .../api/OptimizedPathTest.java | 4 +- .../MinSafeTransferTimeCalculatorTest.java | 10 ++-- .../model/OptimizedPathTailTest.java | 6 +-- .../model/TripStopTimeTest.java | 4 +- .../costfilter/MinCostPathTailFilterTest.java | 6 +-- .../PassThroughNoTransfersTest.java | 4 +- .../PassThroughOneTransferTest.java | 4 +- .../PassThroughTwoTransfersTest.java | 6 +-- .../model/passthrough/TestCase.java | 2 +- .../model/passthrough/TestUtils.java | 8 +-- ...imizePathDomainServiceConstrainedTest.java | 6 +-- .../OptimizePathDomainServiceTest.java | 8 +-- .../services/TestTransferBuilder.java | 2 +- .../services/TransferGeneratorDummy.java | 4 +- .../services/TransferGeneratorTest.java | 20 +++---- .../services/TransitPathLegSelectorTest.java | 6 +-- 48 files changed, 164 insertions(+), 168 deletions(-) rename application/src/test/java/org/opentripplanner/{raptor => raptorlegacy}/_data/RaptorTestConstants.java (97%) rename application/src/test/java/org/opentripplanner/{raptor => raptorlegacy}/_data/api/PathUtils.java (94%) rename application/src/test/java/org/opentripplanner/{raptor => raptorlegacy}/_data/api/TestPathBuilder.java (92%) rename application/src/test/java/org/opentripplanner/{raptor => raptorlegacy}/_data/api/TestPathBuilderTestRaptor.java (86%) rename application/src/test/java/org/opentripplanner/{raptor => raptorlegacy}/_data/stoparrival/AbstractStopArrival.java (92%) rename application/src/test/java/org/opentripplanner/{raptor => raptorlegacy}/_data/stoparrival/Access.java (93%) rename application/src/test/java/org/opentripplanner/{raptor => raptorlegacy}/_data/stoparrival/BasicPathTestCase.java (87%) rename application/src/test/java/org/opentripplanner/{raptor => raptorlegacy}/_data/stoparrival/Egress.java (90%) rename application/src/test/java/org/opentripplanner/{raptor => raptorlegacy}/_data/stoparrival/FlexAccessAndEgressPathTestCase.java (92%) rename application/src/test/java/org/opentripplanner/{raptor => raptorlegacy}/_data/stoparrival/TestArrivals.java (90%) rename application/src/test/java/org/opentripplanner/{raptor => raptorlegacy}/_data/stoparrival/Transfer.java (88%) rename application/src/test/java/org/opentripplanner/{raptor => raptorlegacy}/_data/stoparrival/Transit.java (89%) rename application/src/test/java/org/opentripplanner/{raptor => raptorlegacy}/_data/transit/TestAccessEgress.java (98%) rename application/src/test/java/org/opentripplanner/{raptor => raptorlegacy}/_data/transit/TestConstrainedBoardingSearch.java (98%) rename application/src/test/java/org/opentripplanner/{raptor => raptorlegacy}/_data/transit/TestConstrainedTransfer.java (97%) rename application/src/test/java/org/opentripplanner/{raptor => raptorlegacy}/_data/transit/TestRoute.java (98%) rename application/src/test/java/org/opentripplanner/{raptor => raptorlegacy}/_data/transit/TestTransfer.java (96%) rename application/src/test/java/org/opentripplanner/{raptor => raptorlegacy}/_data/transit/TestTransferPoint.java (96%) rename application/src/test/java/org/opentripplanner/{raptor => raptorlegacy}/_data/transit/TestTransitData.java (97%) rename application/src/test/java/org/opentripplanner/{raptor => raptorlegacy}/_data/transit/TestTripPattern.java (98%) rename application/src/test/java/org/opentripplanner/{raptor => raptorlegacy}/_data/transit/TestTripSchedule.java (99%) rename application/src/test/java/org/opentripplanner/{raptor => raptorlegacy}/_data/transit/TestTripSearchTimetable.java (96%) diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/RaptorTestConstants.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/RaptorTestConstants.java similarity index 97% rename from application/src/test/java/org/opentripplanner/raptor/_data/RaptorTestConstants.java rename to application/src/test/java/org/opentripplanner/raptorlegacy/_data/RaptorTestConstants.java index 0daf604e197..88a6b97bb75 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/RaptorTestConstants.java +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/RaptorTestConstants.java @@ -1,4 +1,4 @@ -package org.opentripplanner.raptor._data; +package org.opentripplanner.raptorlegacy._data; import static org.opentripplanner.utils.time.DurationUtils.durationInSeconds; import static org.opentripplanner.utils.time.TimeUtils.hm2time; diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/api/PathUtils.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/api/PathUtils.java similarity index 94% rename from application/src/test/java/org/opentripplanner/raptor/_data/api/PathUtils.java rename to application/src/test/java/org/opentripplanner/raptorlegacy/_data/api/PathUtils.java index 445042b6139..15e16217fa2 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/api/PathUtils.java +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/api/PathUtils.java @@ -1,12 +1,12 @@ -package org.opentripplanner.raptor._data.api; +package org.opentripplanner.raptorlegacy._data.api; import java.util.Collection; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; -import org.opentripplanner.raptor._data.RaptorTestConstants; import org.opentripplanner.raptor.api.path.RaptorPath; import org.opentripplanner.raptor.api.response.RaptorResponse; +import org.opentripplanner.raptorlegacy._data.RaptorTestConstants; /** * This utility help converting a Raptor path to a string which is used in several unit tests for diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilder.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/api/TestPathBuilder.java similarity index 92% rename from application/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilder.java rename to application/src/test/java/org/opentripplanner/raptorlegacy/_data/api/TestPathBuilder.java index 5f98d73b38d..a7fe2f9f3c8 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilder.java +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/api/TestPathBuilder.java @@ -1,13 +1,8 @@ -package org.opentripplanner.raptor._data.api; +package org.opentripplanner.raptorlegacy._data.api; import static org.opentripplanner.raptor.rangeraptor.transit.TripTimesSearch.findTripTimes; import javax.annotation.Nullable; -import org.opentripplanner.raptor._data.RaptorTestConstants; -import org.opentripplanner.raptor._data.transit.TestAccessEgress; -import org.opentripplanner.raptor._data.transit.TestTransfer; -import org.opentripplanner.raptor._data.transit.TestTripPattern; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.model.RaptorConstants; import org.opentripplanner.raptor.api.model.RaptorStopNameResolver; import org.opentripplanner.raptor.api.path.RaptorPath; @@ -15,6 +10,11 @@ import org.opentripplanner.raptor.spi.DefaultSlackProvider; import org.opentripplanner.raptor.spi.RaptorCostCalculator; import org.opentripplanner.raptor.spi.RaptorSlackProvider; +import org.opentripplanner.raptorlegacy._data.RaptorTestConstants; +import org.opentripplanner.raptorlegacy._data.transit.TestAccessEgress; +import org.opentripplanner.raptorlegacy._data.transit.TestTransfer; +import org.opentripplanner.raptorlegacy._data.transit.TestTripPattern; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; /** * Utility to help build paths for testing. The path builder is "reusable", every time the {@code diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilderTestRaptor.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/api/TestPathBuilderTestRaptor.java similarity index 86% rename from application/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilderTestRaptor.java rename to application/src/test/java/org/opentripplanner/raptorlegacy/_data/api/TestPathBuilderTestRaptor.java index dab85e2ad50..e68bf7ad7cf 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilderTestRaptor.java +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/api/TestPathBuilderTestRaptor.java @@ -1,16 +1,16 @@ -package org.opentripplanner.raptor._data.api; +package org.opentripplanner.raptorlegacy._data.api; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.opentripplanner.model.transfer.TransferConstraint.REGULAR_TRANSFER; -import static org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase.C1_CALCULATOR; -import static org.opentripplanner.raptor._data.transit.TestAccessEgress.walk; +import static org.opentripplanner.raptorlegacy._data.stoparrival.BasicPathTestCase.C1_CALCULATOR; import static org.opentripplanner.utils.time.DurationUtils.durationInSeconds; import static org.opentripplanner.utils.time.TimeUtils.time; import org.junit.jupiter.api.Test; -import org.opentripplanner.raptor._data.RaptorTestConstants; -import org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase; +import org.opentripplanner.raptorlegacy._data.RaptorTestConstants; +import org.opentripplanner.raptorlegacy._data.stoparrival.BasicPathTestCase; +import org.opentripplanner.raptorlegacy._data.transit.TestAccessEgress; /** * Test the PathBuilder to be sure that it works properly before using it in other tests. @@ -50,7 +50,7 @@ public void testSimplePathWithOneTransit() { STOP_B ); - int accessEgressCost = C1_CALCULATOR.costEgress(walk(STOP_B, D2m + D1m)); + int accessEgressCost = C1_CALCULATOR.costEgress(TestAccessEgress.walk(STOP_B, D2m + D1m)); assertEquals(accessEgressCost + transitCost, path.c1()); assertEquals( diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/AbstractStopArrival.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/AbstractStopArrival.java similarity index 92% rename from application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/AbstractStopArrival.java rename to application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/AbstractStopArrival.java index 5c93578b4d3..bb4edf3a6a7 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/AbstractStopArrival.java +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/AbstractStopArrival.java @@ -1,7 +1,7 @@ -package org.opentripplanner.raptor._data.stoparrival; +package org.opentripplanner.raptorlegacy._data.stoparrival; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.view.ArrivalView; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; /** * @deprecated This was earlier part of Raptor and should not be used outside the Raptor diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Access.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/Access.java similarity index 93% rename from application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Access.java rename to application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/Access.java index 4c1aa5d3cf9..bb2fa1f481b 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Access.java +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/Access.java @@ -1,4 +1,4 @@ -package org.opentripplanner.raptor._data.stoparrival; +package org.opentripplanner.raptorlegacy._data.stoparrival; import static org.opentripplanner.raptor.api.model.PathLegType.ACCESS; diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/BasicPathTestCase.java similarity index 87% rename from application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java rename to application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/BasicPathTestCase.java index b2b206f4177..bf74ca43bb8 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/BasicPathTestCase.java @@ -1,13 +1,7 @@ -package org.opentripplanner.raptor._data.stoparrival; +package org.opentripplanner.raptorlegacy._data.stoparrival; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.opentripplanner.model.transfer.TransferConstraint.REGULAR_TRANSFER; -import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.access; -import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.bus; -import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.egress; -import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.transfer; -import static org.opentripplanner.raptor._data.transit.TestAccessEgress.flexWithOnBoard; -import static org.opentripplanner.raptor._data.transit.TestTripPattern.pattern; import static org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter.toRaptorCost; import static org.opentripplanner.utils.time.DurationUtils.durationToStr; import static org.opentripplanner.utils.time.TimeUtils.time; @@ -15,10 +9,6 @@ import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.Test; -import org.opentripplanner.raptor._data.RaptorTestConstants; -import org.opentripplanner.raptor._data.transit.TestAccessEgress; -import org.opentripplanner.raptor._data.transit.TestTransfer; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.api.model.RaptorConstrainedTransfer; import org.opentripplanner.raptor.api.model.RaptorTransfer; @@ -34,6 +24,11 @@ import org.opentripplanner.raptor.rangeraptor.lifecycle.LifeCycleSubscriptions; import org.opentripplanner.raptor.rangeraptor.path.DestinationArrival; import org.opentripplanner.raptor.spi.RaptorCostCalculator; +import org.opentripplanner.raptorlegacy._data.RaptorTestConstants; +import org.opentripplanner.raptorlegacy._data.transit.TestAccessEgress; +import org.opentripplanner.raptorlegacy._data.transit.TestTransfer; +import org.opentripplanner.raptorlegacy._data.transit.TestTripPattern; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.DefaultCostCalculator; /** @@ -186,7 +181,7 @@ public class BasicPathTestCase implements RaptorTestConstants { EGRESS_C1 ); // this is of course not a real flex egress - private static final RaptorAccessEgress FLEX = flexWithOnBoard( + private static final RaptorAccessEgress FLEX = TestAccessEgress.flexWithOnBoard( STOP_E, EGRESS_DURATION, EGRESS_C1 @@ -197,19 +192,19 @@ public class BasicPathTestCase implements RaptorTestConstants { public static final String LINE_31 = "L31"; public static final TestTripSchedule TRIP_1 = TestTripSchedule - .schedule(pattern(LINE_11, STOP_A, STOP_B)) + .schedule(TestTripPattern.pattern(LINE_11, STOP_A, STOP_B)) .times(L11_START, L11_END) .transitReluctanceIndex(TRANSIT_RELUCTANCE_INDEX) .build(); public static final TestTripSchedule TRIP_2 = TestTripSchedule - .schedule(pattern(LINE_21, STOP_C, STOP_D)) + .schedule(TestTripPattern.pattern(LINE_21, STOP_C, STOP_D)) .times(L21_START, L21_END) .transitReluctanceIndex(TRANSIT_RELUCTANCE_INDEX) .build(); public static final TestTripSchedule TRIP_3 = TestTripSchedule - .schedule(pattern(LINE_31, STOP_D, STOP_E)) + .schedule(TestTripPattern.pattern(LINE_31, STOP_D, STOP_E)) // The early arrival and late departure should not have any effect on tests .arrivals(VERY_EARLY, L31_END) .departures(L31_START, VERY_LATE) @@ -239,12 +234,12 @@ public static WorkerLifeCycle lifeCycle() { public static DestinationArrival basicTripByForwardSearch() { ArrivalView prevArrival, egress; - prevArrival = access(STOP_A, ACCESS_START, ACCESS_END, ACCESS_C1, ACCESS_C2); - prevArrival = bus(1, STOP_B, L11_END, LINE_11_C1, LINE_11_C2, TRIP_1, prevArrival); - prevArrival = transfer(1, STOP_C, TX_START, TX_END, TX_C1, prevArrival); - prevArrival = bus(2, STOP_D, L21_END, LINE_21_C1, LINE_21_C2, TRIP_2, prevArrival); - prevArrival = bus(3, STOP_E, L31_END, LINE_31_C1, LINE_31_C2, TRIP_3, prevArrival); - egress = egress(EGRESS_START, EGRESS_END, EGRESS_C1, EGRESS_C2, prevArrival); + prevArrival = TestArrivals.access(STOP_A, ACCESS_START, ACCESS_END, ACCESS_C1, ACCESS_C2); + prevArrival = TestArrivals.bus(1, STOP_B, L11_END, LINE_11_C1, LINE_11_C2, TRIP_1, prevArrival); + prevArrival = TestArrivals.transfer(1, STOP_C, TX_START, TX_END, TX_C1, prevArrival); + prevArrival = TestArrivals.bus(2, STOP_D, L21_END, LINE_21_C1, LINE_21_C2, TRIP_2, prevArrival); + prevArrival = TestArrivals.bus(3, STOP_E, L31_END, LINE_31_C1, LINE_31_C2, TRIP_3, prevArrival); + egress = TestArrivals.egress(EGRESS_START, EGRESS_END, EGRESS_C1, EGRESS_C2, prevArrival); return new DestinationArrival<>( egress.egressPath().egress(), egress.previous(), @@ -260,13 +255,16 @@ public static DestinationArrival basicTripByForwardSearch() { */ public static DestinationArrival basicTripByReverseSearch() { ArrivalView nextArrival, egress; - nextArrival = access(STOP_E, EGRESS_END, EGRESS_START, EGRESS_C1, EGRESS_C2); + nextArrival = TestArrivals.access(STOP_E, EGRESS_END, EGRESS_START, EGRESS_C1, EGRESS_C2); // Board slack is subtracted from the arrival time to get the latest possible - nextArrival = bus(1, STOP_D, L31_START, LINE_31_C1, LINE_31_C2, TRIP_3, nextArrival); - nextArrival = bus(2, STOP_C, L21_START, LINE_21_C1, LINE_21_C2, TRIP_2, nextArrival); - nextArrival = transfer(2, STOP_B, TX_END, TX_START, TX_C1, nextArrival); - nextArrival = bus(3, STOP_A, L11_START, LINE_11_C1, LINE_11_C2, TRIP_1, nextArrival); - egress = egress(ACCESS_END, ACCESS_START, ACCESS_C1, ACCESS_C2, nextArrival); + nextArrival = + TestArrivals.bus(1, STOP_D, L31_START, LINE_31_C1, LINE_31_C2, TRIP_3, nextArrival); + nextArrival = + TestArrivals.bus(2, STOP_C, L21_START, LINE_21_C1, LINE_21_C2, TRIP_2, nextArrival); + nextArrival = TestArrivals.transfer(2, STOP_B, TX_END, TX_START, TX_C1, nextArrival); + nextArrival = + TestArrivals.bus(3, STOP_A, L11_START, LINE_11_C1, LINE_11_C2, TRIP_1, nextArrival); + egress = TestArrivals.egress(ACCESS_END, ACCESS_START, ACCESS_C1, ACCESS_C2, nextArrival); return new DestinationArrival<>( egress.egressPath().egress(), egress.previous(), diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Egress.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/Egress.java similarity index 90% rename from application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Egress.java rename to application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/Egress.java index 24d621a75e8..9b781b0beb0 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Egress.java +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/Egress.java @@ -1,10 +1,10 @@ -package org.opentripplanner.raptor._data.stoparrival; +package org.opentripplanner.raptorlegacy._data.stoparrival; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.model.PathLegType; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.api.view.ArrivalView; import org.opentripplanner.raptor.api.view.EgressPathView; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; import org.opentripplanner.utils.time.TimeUtils; /** diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/FlexAccessAndEgressPathTestCase.java similarity index 92% rename from application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java rename to application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/FlexAccessAndEgressPathTestCase.java index b498488df77..00611dee991 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/FlexAccessAndEgressPathTestCase.java @@ -1,19 +1,12 @@ -package org.opentripplanner.raptor._data.stoparrival; +package org.opentripplanner.raptorlegacy._data.stoparrival; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.access; -import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.bus; import static org.opentripplanner.raptor.api.model.RaptorValueFormatter.formatC1; import static org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter.toRaptorCost; import static org.opentripplanner.utils.time.DurationUtils.durationInSeconds; import static org.opentripplanner.utils.time.TimeUtils.time; import org.junit.jupiter.api.Test; -import org.opentripplanner.raptor._data.RaptorTestConstants; -import org.opentripplanner.raptor._data.transit.TestAccessEgress; -import org.opentripplanner.raptor._data.transit.TestTransfer; -import org.opentripplanner.raptor._data.transit.TestTripPattern; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.api.model.RaptorConstants; import org.opentripplanner.raptor.api.model.RaptorTransfer; @@ -21,6 +14,11 @@ import org.opentripplanner.raptor.rangeraptor.path.DestinationArrival; import org.opentripplanner.raptor.spi.DefaultSlackProvider; import org.opentripplanner.raptor.spi.RaptorSlackProvider; +import org.opentripplanner.raptorlegacy._data.RaptorTestConstants; +import org.opentripplanner.raptorlegacy._data.transit.TestAccessEgress; +import org.opentripplanner.raptorlegacy._data.transit.TestTransfer; +import org.opentripplanner.raptorlegacy._data.transit.TestTripPattern; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.DefaultCostCalculator; import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter; import org.opentripplanner.utils.time.TimeUtils; @@ -296,19 +294,19 @@ private static DestinationArrival flexForwardSearch( if (LINE_A.equals(line)) { // The latest time the access can arrive is the same as the TX1 arrival time in case B arrivalTime = accessPath.latestArrivalTime(TX1_END); - prevArrival = access(accessPath.stop(), arrivalTime, accessPath); + prevArrival = TestArrivals.access(accessPath.stop(), arrivalTime, accessPath); int waitCost = costL1ForwardIncWait(prevArrival.arrivalTime()); - prevArrival = bus(2, STOP_D, L1_STOP_ARR_TIME, waitCost, 0, TRIP_A, prevArrival); + prevArrival = TestArrivals.bus(2, STOP_D, L1_STOP_ARR_TIME, waitCost, 0, TRIP_A, prevArrival); } else { arrivalTime = accessPath.latestArrivalTime(TX1_START); - prevArrival = access(accessPath.stop(), arrivalTime, accessPath); + prevArrival = TestArrivals.access(accessPath.stop(), arrivalTime, accessPath); int timeShift = TX1_START - prevArrival.arrivalTime(); prevArrival = new Transfer(1, TX1_END - timeShift, TX1_TRANSFER, prevArrival); int waitCost = costL1ForwardIncWait(prevArrival.arrivalTime()); - prevArrival = bus(2, STOP_C, L1_STOP_ARR_TIME, waitCost, 0, TRIP_B, prevArrival); + prevArrival = TestArrivals.bus(2, STOP_C, L1_STOP_ARR_TIME, waitCost, 0, TRIP_B, prevArrival); prevArrival = new Transfer(2, TX2_END, TX2_TRANSFER, prevArrival); } @@ -342,18 +340,18 @@ private static DestinationArrival flexReverseSearch( if (LINE_A.equals(line)) { arrivalTime = L1_END + ALIGHT_SLACK + TRANSFER_SLACK; arrivalTime = egressPath.earliestDepartureTime(arrivalTime); - prevArrival = access(egressPath.stop(), arrivalTime, egressPath); + prevArrival = TestArrivals.access(egressPath.stop(), arrivalTime, egressPath); cost = costL1ReverseIncWait(prevArrival.arrivalTime()); - prevArrival = bus(2, STOP_A, L1_STOP_ARR_TIME_REV, cost, 0, TRIP_A, prevArrival); + prevArrival = TestArrivals.bus(2, STOP_A, L1_STOP_ARR_TIME_REV, cost, 0, TRIP_A, prevArrival); } else { arrivalTime = L1_END + ALIGHT_SLACK + TX2_DURATION + TRANSFER_SLACK; arrivalTime = egressPath.earliestDepartureTime(arrivalTime); - prevArrival = access(egressPath.stop(), arrivalTime, egressPath); + prevArrival = TestArrivals.access(egressPath.stop(), arrivalTime, egressPath); arrivalTime = prevArrival.arrivalTime() - TX2_DURATION; prevArrival = new Transfer(1, arrivalTime, TX2_TRANSFER_REV, prevArrival); cost = costL1ReverseIncWait(prevArrival.arrivalTime()); - prevArrival = bus(2, STOP_B, L1_STOP_ARR_TIME_REV, cost, 0, TRIP_B, prevArrival); + prevArrival = TestArrivals.bus(2, STOP_B, L1_STOP_ARR_TIME_REV, cost, 0, TRIP_B, prevArrival); arrivalTime = prevArrival.arrivalTime() - TX1_DURATION; prevArrival = new Transfer(2, arrivalTime, TX1_TRANSFER_REV, prevArrival); } diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/TestArrivals.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/TestArrivals.java similarity index 90% rename from application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/TestArrivals.java rename to application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/TestArrivals.java index 147140c6750..4ea0398efa4 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/TestArrivals.java +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/TestArrivals.java @@ -1,12 +1,12 @@ -package org.opentripplanner.raptor._data.stoparrival; +package org.opentripplanner.raptorlegacy._data.stoparrival; -import org.opentripplanner.raptor._data.transit.TestAccessEgress; -import org.opentripplanner.raptor._data.transit.TestTransfer; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.api.model.RaptorConstants; import org.opentripplanner.raptor.api.model.RaptorTransfer; import org.opentripplanner.raptor.api.view.ArrivalView; +import org.opentripplanner.raptorlegacy._data.transit.TestAccessEgress; +import org.opentripplanner.raptorlegacy._data.transit.TestTransfer; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; /** * @deprecated This was earlier part of Raptor and should not be used outside the Raptor diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Transfer.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/Transfer.java similarity index 88% rename from application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Transfer.java rename to application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/Transfer.java index a68a89eb455..56363c4fdde 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Transfer.java +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/Transfer.java @@ -1,11 +1,11 @@ -package org.opentripplanner.raptor._data.stoparrival; +package org.opentripplanner.raptorlegacy._data.stoparrival; import static org.opentripplanner.raptor.api.model.PathLegType.TRANSFER; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.model.PathLegType; import org.opentripplanner.raptor.api.model.RaptorTransfer; import org.opentripplanner.raptor.api.view.ArrivalView; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; /* * @deprecated This was earlier part of Raptor and should not be used outside the Raptor diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Transit.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/Transit.java similarity index 89% rename from application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Transit.java rename to application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/Transit.java index a6765e38ab4..5de1cdbd4dc 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/stoparrival/Transit.java +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/Transit.java @@ -1,11 +1,11 @@ -package org.opentripplanner.raptor._data.stoparrival; +package org.opentripplanner.raptorlegacy._data.stoparrival; import static org.opentripplanner.raptor.api.model.PathLegType.TRANSIT; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.model.PathLegType; import org.opentripplanner.raptor.api.view.ArrivalView; import org.opentripplanner.raptor.api.view.TransitPathView; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; /** * diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestAccessEgress.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestAccessEgress.java similarity index 98% rename from application/src/test/java/org/opentripplanner/raptor/_data/transit/TestAccessEgress.java rename to application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestAccessEgress.java index 9eed82ba296..b10c68303d4 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestAccessEgress.java +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestAccessEgress.java @@ -1,9 +1,9 @@ -package org.opentripplanner.raptor._data.transit; +package org.opentripplanner.raptorlegacy._data.transit; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.opentripplanner.raptor._data.RaptorTestConstants.SECONDS_IN_A_DAY; +import static org.opentripplanner.raptorlegacy._data.RaptorTestConstants.SECONDS_IN_A_DAY; import static org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter.toRaptorCost; import java.util.ArrayList; diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedBoardingSearch.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestConstrainedBoardingSearch.java similarity index 98% rename from application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedBoardingSearch.java rename to application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestConstrainedBoardingSearch.java index ade301bc6b5..2766f760067 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedBoardingSearch.java +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestConstrainedBoardingSearch.java @@ -1,4 +1,4 @@ -package org.opentripplanner.raptor._data.transit; +package org.opentripplanner.raptorlegacy._data.transit; import gnu.trove.map.TIntObjectMap; import gnu.trove.map.hash.TIntObjectHashMap; diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransfer.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestConstrainedTransfer.java similarity index 97% rename from application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransfer.java rename to application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestConstrainedTransfer.java index d897a9d6982..034a029787d 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransfer.java +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestConstrainedTransfer.java @@ -1,4 +1,4 @@ -package org.opentripplanner.raptor._data.transit; +package org.opentripplanner.raptorlegacy._data.transit; import javax.annotation.Nullable; import org.opentripplanner.model.transfer.TransferConstraint; diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestRoute.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestRoute.java similarity index 98% rename from application/src/test/java/org/opentripplanner/raptor/_data/transit/TestRoute.java rename to application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestRoute.java index 7c87bd8d402..715021521ef 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestRoute.java +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestRoute.java @@ -1,4 +1,4 @@ -package org.opentripplanner.raptor._data.transit; +package org.opentripplanner.raptorlegacy._data.transit; import java.util.ArrayList; import java.util.Collections; diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransfer.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestTransfer.java similarity index 96% rename from application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransfer.java rename to application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestTransfer.java index 02c32530c53..8d590c5101e 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransfer.java +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestTransfer.java @@ -1,4 +1,4 @@ -package org.opentripplanner.raptor._data.transit; +package org.opentripplanner.raptorlegacy._data.transit; import static org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter.toRaptorCost; diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferPoint.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestTransferPoint.java similarity index 96% rename from application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferPoint.java rename to application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestTransferPoint.java index 70b99b533d2..8c274f779d8 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferPoint.java +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestTransferPoint.java @@ -1,4 +1,4 @@ -package org.opentripplanner.raptor._data.transit; +package org.opentripplanner.raptorlegacy._data.transit; import org.opentripplanner.model.transfer.TransferPoint; import org.opentripplanner.utils.tostring.ToStringBuilder; diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransitData.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestTransitData.java similarity index 97% rename from application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransitData.java rename to application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestTransitData.java index f8f645ab73a..1cbf591c01d 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransitData.java +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestTransitData.java @@ -1,8 +1,8 @@ -package org.opentripplanner.raptor._data.transit; +package org.opentripplanner.raptorlegacy._data.transit; -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.raptorlegacy._data.transit.TestRoute.route; +import static org.opentripplanner.raptorlegacy._data.transit.TestTripPattern.pattern; +import static org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule.schedule; import java.util.ArrayList; import java.util.BitSet; @@ -13,7 +13,6 @@ import javax.annotation.Nullable; import org.opentripplanner.model.transfer.ConstrainedTransfer; import org.opentripplanner.model.transfer.TransferConstraint; -import org.opentripplanner.raptor._data.RaptorTestConstants; import org.opentripplanner.raptor.api.model.RaptorConstrainedTransfer; import org.opentripplanner.raptor.api.model.RaptorStopNameResolver; import org.opentripplanner.raptor.api.model.RaptorTransfer; @@ -30,6 +29,7 @@ import org.opentripplanner.raptor.spi.RaptorTimeTable; import org.opentripplanner.raptor.spi.RaptorTransitDataProvider; import org.opentripplanner.raptor.util.BitSetIterator; +import org.opentripplanner.raptorlegacy._data.RaptorTestConstants; import org.opentripplanner.routing.algorithm.raptoradapter.api.DefaultTripPattern; import org.opentripplanner.routing.algorithm.raptoradapter.transit.DefaultRaptorTransfer; import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.CostCalculatorFactory; diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripPattern.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestTripPattern.java similarity index 98% rename from application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripPattern.java rename to application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestTripPattern.java index cf8496763d5..f6d9aace021 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripPattern.java +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestTripPattern.java @@ -1,4 +1,4 @@ -package org.opentripplanner.raptor._data.transit; +package org.opentripplanner.raptorlegacy._data.transit; import org.opentripplanner.routing.algorithm.raptoradapter.api.DefaultTripPattern; import org.opentripplanner.transit.model.network.Route; diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSchedule.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestTripSchedule.java similarity index 99% rename from application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSchedule.java rename to application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestTripSchedule.java index eb38028aa19..0ef437cb3d0 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSchedule.java +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestTripSchedule.java @@ -1,4 +1,4 @@ -package org.opentripplanner.raptor._data.transit; +package org.opentripplanner.raptorlegacy._data.transit; import static org.opentripplanner.transit.model.basic.Accessibility.NO_INFORMATION; diff --git a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSearchTimetable.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestTripSearchTimetable.java similarity index 96% rename from application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSearchTimetable.java rename to application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestTripSearchTimetable.java index 645b33ff2f3..a486492a2c6 100644 --- a/application/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSearchTimetable.java +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestTripSearchTimetable.java @@ -1,4 +1,4 @@ -package org.opentripplanner.raptor._data.transit; +package org.opentripplanner.raptorlegacy._data.transit; import java.util.function.IntUnaryOperator; import org.opentripplanner.raptor.api.model.SearchDirection; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/PagingServiceFactoryTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/PagingServiceFactoryTest.java index 64797b9c5a1..0eb7bfae1d3 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/PagingServiceFactoryTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/PagingServiceFactoryTest.java @@ -7,10 +7,10 @@ import java.time.Instant; import java.util.List; import org.junit.jupiter.api.Test; -import org.opentripplanner.raptor._data.transit.TestAccessEgress; import org.opentripplanner.raptor.api.request.RaptorRequestBuilder; import org.opentripplanner.raptor.api.request.RaptorTuningParameters; import org.opentripplanner.raptor.api.request.SearchParams; +import org.opentripplanner.raptorlegacy._data.transit.TestAccessEgress; import org.opentripplanner.routing.algorithm.raptoradapter.transit.TransitTuningParameters; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.utils.time.DurationUtils; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapperTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapperTest.java index ede3166e22b..92d7e0824b0 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapperTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapperTest.java @@ -5,7 +5,7 @@ import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.opentripplanner.raptor._data.RaptorTestConstants.BOARD_SLACK; +import static org.opentripplanner.raptorlegacy._data.RaptorTestConstants.BOARD_SLACK; import java.time.Duration; import java.time.Instant; @@ -29,12 +29,6 @@ import org.opentripplanner.model.plan.Leg; import org.opentripplanner.model.plan.ScheduledTransitLeg; import org.opentripplanner.model.plan.StreetLeg; -import org.opentripplanner.raptor._data.api.TestPathBuilder; -import org.opentripplanner.raptor._data.transit.TestAccessEgress; -import org.opentripplanner.raptor._data.transit.TestRoute; -import org.opentripplanner.raptor._data.transit.TestTransitData; -import org.opentripplanner.raptor._data.transit.TestTripPattern; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.api.model.RaptorTransfer; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; @@ -45,6 +39,12 @@ import org.opentripplanner.raptor.api.path.TransferPathLeg; import org.opentripplanner.raptor.path.Path; import org.opentripplanner.raptor.spi.RaptorCostCalculator; +import org.opentripplanner.raptorlegacy._data.api.TestPathBuilder; +import org.opentripplanner.raptorlegacy._data.transit.TestAccessEgress; +import org.opentripplanner.raptorlegacy._data.transit.TestRoute; +import org.opentripplanner.raptorlegacy._data.transit.TestTransitData; +import org.opentripplanner.raptorlegacy._data.transit.TestTripPattern; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; import org.opentripplanner.routing.algorithm.raptoradapter.router.street.AccessEgressType; import org.opentripplanner.routing.algorithm.raptoradapter.transit.DefaultAccessEgress; import org.opentripplanner.routing.algorithm.raptoradapter.transit.DefaultRaptorTransfer; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/DefaultCostCalculatorTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/DefaultCostCalculatorTest.java index 3570d92bdbe..8560c932994 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/DefaultCostCalculatorTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/DefaultCostCalculatorTest.java @@ -3,8 +3,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; -import org.opentripplanner.raptor._data.transit.TestAccessEgress; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; +import org.opentripplanner.raptorlegacy._data.transit.TestAccessEgress; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; public class DefaultCostCalculatorTest { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/PatternCostCalculatorTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/PatternCostCalculatorTest.java index 1aaf3dcd8ef..1cf9a324de5 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/PatternCostCalculatorTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/PatternCostCalculatorTest.java @@ -3,7 +3,7 @@ import static graphql.Assert.assertFalse; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.opentripplanner.raptor._data.transit.TestRoute.route; +import static org.opentripplanner.raptorlegacy._data.transit.TestRoute.route; import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.agency; import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; @@ -16,11 +16,11 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.framework.model.Cost; -import org.opentripplanner.raptor._data.transit.TestTransitData; -import org.opentripplanner.raptor._data.transit.TestTripPattern; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.model.RaptorTransferConstraint; import org.opentripplanner.raptor.spi.RaptorCostCalculator; +import org.opentripplanner.raptorlegacy._data.transit.TestTransitData; +import org.opentripplanner.raptorlegacy._data.transit.TestTripPattern; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; import org.opentripplanner.routing.algorithm.raptoradapter.transit.mappers.GeneralizedCostParametersMapper; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.framework.CostLinearFunction; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/WheelchairCostCalculatorTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/WheelchairCostCalculatorTest.java index b7d3f255a9d..f13ecff2503 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/WheelchairCostCalculatorTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/WheelchairCostCalculatorTest.java @@ -6,9 +6,9 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.model.RaptorTransferConstraint; import org.opentripplanner.raptor.spi.RaptorCostCalculator; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; import org.opentripplanner.routing.api.request.preference.AccessibilityPreferences; import org.opentripplanner.transit.model.basic.Accessibility; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/GeneralizedCostParametersMapperTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/GeneralizedCostParametersMapperTest.java index 9f7458376cc..2620dd506bc 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/GeneralizedCostParametersMapperTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/GeneralizedCostParametersMapperTest.java @@ -10,9 +10,9 @@ import java.util.BitSet; import java.util.List; import org.junit.jupiter.api.Test; -import org.opentripplanner.raptor._data.transit.TestRoute; -import org.opentripplanner.raptor._data.transit.TestTransitData; -import org.opentripplanner.raptor._data.transit.TestTripPattern; +import org.opentripplanner.raptorlegacy._data.transit.TestRoute; +import org.opentripplanner.raptorlegacy._data.transit.TestTransitData; +import org.opentripplanner.raptorlegacy._data.transit.TestTripPattern; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.transit.model.framework.FeedScopedId; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/RaptorRequestMapperTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/RaptorRequestMapperTest.java index a8e00056a3f..03027b219d1 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/RaptorRequestMapperTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/RaptorRequestMapperTest.java @@ -12,10 +12,10 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import org.opentripplanner.raptor._data.transit.TestAccessEgress; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.api.request.RaptorRequest; +import org.opentripplanner.raptorlegacy._data.transit.TestAccessEgress; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.framework.CostLinearFunction; import org.opentripplanner.routing.api.request.via.PassThroughViaLocation; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripAssert.java b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripAssert.java index fa76a2790ed..37620d80bc3 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripAssert.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripAssert.java @@ -4,9 +4,9 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.spi.RaptorBoardOrAlightEvent; import org.opentripplanner.raptor.spi.RaptorTripScheduleSearch; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; class TripAssert { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripScheduleAlightSearchTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripScheduleAlightSearchTest.java index 8fddca9511f..55cb99b2f82 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripScheduleAlightSearchTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripScheduleAlightSearchTest.java @@ -1,18 +1,18 @@ package org.opentripplanner.routing.algorithm.raptoradapter.transit.request; -import static org.opentripplanner.raptor._data.transit.TestTripPattern.pattern; -import static org.opentripplanner.raptor._data.transit.TestTripSchedule.schedule; +import static org.opentripplanner.raptorlegacy._data.transit.TestTripPattern.pattern; +import static org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule.schedule; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.junit.jupiter.api.Test; -import org.opentripplanner.raptor._data.RaptorTestConstants; -import org.opentripplanner.raptor._data.transit.TestRoute; -import org.opentripplanner.raptor._data.transit.TestTripPattern; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.model.SearchDirection; import org.opentripplanner.raptor.spi.RaptorTripScheduleSearch; +import org.opentripplanner.raptorlegacy._data.RaptorTestConstants; +import org.opentripplanner.raptorlegacy._data.transit.TestRoute; +import org.opentripplanner.raptorlegacy._data.transit.TestTripPattern; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; public class TripScheduleAlightSearchTest implements RaptorTestConstants { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripScheduleBoardSearchTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripScheduleBoardSearchTest.java index dd3a7d64cf6..28811fcc42c 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripScheduleBoardSearchTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TripScheduleBoardSearchTest.java @@ -1,17 +1,17 @@ package org.opentripplanner.routing.algorithm.raptoradapter.transit.request; -import static org.opentripplanner.raptor._data.transit.TestTripSchedule.schedule; +import static org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule.schedule; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.junit.jupiter.api.Test; -import org.opentripplanner.raptor._data.RaptorTestConstants; -import org.opentripplanner.raptor._data.transit.TestRoute; -import org.opentripplanner.raptor._data.transit.TestTripPattern; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.model.SearchDirection; import org.opentripplanner.raptor.spi.RaptorTripScheduleSearch; +import org.opentripplanner.raptorlegacy._data.RaptorTestConstants; +import org.opentripplanner.raptorlegacy._data.transit.TestRoute; +import org.opentripplanner.raptorlegacy._data.transit.TestTripPattern; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; public class TripScheduleBoardSearchTest implements RaptorTestConstants { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/api/OptimizedPathTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/api/OptimizedPathTest.java index 788192c45b5..bc01a082740 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/api/OptimizedPathTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/api/OptimizedPathTest.java @@ -4,9 +4,9 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import org.junit.jupiter.api.Test; -import org.opentripplanner.raptor._data.RaptorTestConstants; -import org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase; import org.opentripplanner.raptor.api.model.RaptorValueFormatter; +import org.opentripplanner.raptorlegacy._data.RaptorTestConstants; +import org.opentripplanner.raptorlegacy._data.stoparrival.BasicPathTestCase; class OptimizedPathTest implements RaptorTestConstants { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/MinSafeTransferTimeCalculatorTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/MinSafeTransferTimeCalculatorTest.java index 9b0cf342c0b..d5d8f7c7c62 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/MinSafeTransferTimeCalculatorTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/MinSafeTransferTimeCalculatorTest.java @@ -1,17 +1,17 @@ package org.opentripplanner.routing.algorithm.transferoptimization.model; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase.C1_CALCULATOR; +import static org.opentripplanner.raptorlegacy._data.stoparrival.BasicPathTestCase.C1_CALCULATOR; import static org.opentripplanner.routing.algorithm.transferoptimization.model.MinSafeTransferTimeCalculator.bound; import static org.opentripplanner.utils.time.TimeUtils.time; import java.util.List; import org.junit.jupiter.api.Test; -import org.opentripplanner.raptor._data.RaptorTestConstants; -import org.opentripplanner.raptor._data.api.TestPathBuilder; -import org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.path.RaptorPath; +import org.opentripplanner.raptorlegacy._data.RaptorTestConstants; +import org.opentripplanner.raptorlegacy._data.api.TestPathBuilder; +import org.opentripplanner.raptorlegacy._data.stoparrival.BasicPathTestCase; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; import org.opentripplanner.utils.time.DurationUtils; public class MinSafeTransferTimeCalculatorTest implements RaptorTestConstants { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/OptimizedPathTailTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/OptimizedPathTailTest.java index 8c82f68a8bc..505b6581000 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/OptimizedPathTailTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/OptimizedPathTailTest.java @@ -4,11 +4,11 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.opentripplanner.raptor._data.RaptorTestConstants; -import org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.path.RaptorPath; import org.opentripplanner.raptor.api.path.TransitPathLeg; +import org.opentripplanner.raptorlegacy._data.RaptorTestConstants; +import org.opentripplanner.raptorlegacy._data.stoparrival.BasicPathTestCase; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; import org.opentripplanner.routing.algorithm.transferoptimization.services.TestTransferBuilder; class OptimizedPathTailTest implements RaptorTestConstants { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/TripStopTimeTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/TripStopTimeTest.java index e81b51c4eaa..640dd48d27d 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/TripStopTimeTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/TripStopTimeTest.java @@ -5,8 +5,8 @@ import static org.opentripplanner.utils.time.TimeUtils.time; import org.junit.jupiter.api.Test; -import org.opentripplanner.raptor._data.transit.TestTripPattern; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; +import org.opentripplanner.raptorlegacy._data.transit.TestTripPattern; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; import org.opentripplanner.utils.time.TimeUtils; public class TripStopTimeTest { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/costfilter/MinCostPathTailFilterTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/costfilter/MinCostPathTailFilterTest.java index 8ecf0006e48..e32559c2dad 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/costfilter/MinCostPathTailFilterTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/costfilter/MinCostPathTailFilterTest.java @@ -1,15 +1,15 @@ package org.opentripplanner.routing.algorithm.transferoptimization.model.costfilter; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase.C1_CALCULATOR; +import static org.opentripplanner.raptorlegacy._data.stoparrival.BasicPathTestCase.C1_CALCULATOR; import java.util.List; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; import org.junit.jupiter.api.Test; -import org.opentripplanner.raptor._data.RaptorTestConstants; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; +import org.opentripplanner.raptorlegacy._data.RaptorTestConstants; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; import org.opentripplanner.routing.algorithm.transferoptimization.model.OptimizedPathTail; import org.opentripplanner.routing.algorithm.transferoptimization.model.TransferWaitTimeCostCalculator; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughNoTransfersTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughNoTransfersTest.java index 11552ea3d1e..ff1f37ef5fa 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughNoTransfersTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughNoTransfersTest.java @@ -10,8 +10,8 @@ import java.util.List; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; -import org.opentripplanner.raptor._data.RaptorTestConstants; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; +import org.opentripplanner.raptorlegacy._data.RaptorTestConstants; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; /** * This test focus on the PASS-THROUGH functionality with a very simple scenario - one transit leg diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughOneTransferTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughOneTransferTest.java index acd99ab4bef..d1bc95f3b68 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughOneTransferTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughOneTransferTest.java @@ -12,8 +12,8 @@ import java.util.stream.Collectors; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; -import org.opentripplanner.raptor._data.RaptorTestConstants; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; +import org.opentripplanner.raptorlegacy._data.RaptorTestConstants; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; /** * This test focus on the PASS-THROUGH functionality with two transit legs and one transfer in the diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughTwoTransfersTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughTwoTransfersTest.java index 05da490c857..bed2bff0202 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughTwoTransfersTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/PassThroughTwoTransfersTest.java @@ -10,10 +10,10 @@ import java.util.List; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; -import org.opentripplanner.raptor._data.RaptorTestConstants; -import org.opentripplanner.raptor._data.api.PathUtils; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.path.RaptorPath; +import org.opentripplanner.raptorlegacy._data.RaptorTestConstants; +import org.opentripplanner.raptorlegacy._data.api.PathUtils; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; /** * This test focus on the PASS-THROUGH functionality with three transit legs and two transfer in diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/TestCase.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/TestCase.java index 3b2059cf4d9..8ca961dcab0 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/TestCase.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/TestCase.java @@ -1,8 +1,8 @@ package org.opentripplanner.routing.algorithm.transferoptimization.model.passthrough; import java.util.List; -import org.opentripplanner.raptor._data.RaptorTestConstants; import org.opentripplanner.raptor.api.request.PassThroughPoint; +import org.opentripplanner.raptorlegacy._data.RaptorTestConstants; record TestCase( String description, diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/TestUtils.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/TestUtils.java index 2faf0ee95c1..103e2c88f3f 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/TestUtils.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/model/passthrough/TestUtils.java @@ -4,12 +4,12 @@ import java.util.Collection; import java.util.List; -import org.opentripplanner.raptor._data.RaptorTestConstants; -import org.opentripplanner.raptor._data.api.TestPathBuilder; -import org.opentripplanner.raptor._data.transit.TestTransitData; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.request.PassThroughPoint; import org.opentripplanner.raptor.spi.RaptorCostCalculator; +import org.opentripplanner.raptorlegacy._data.RaptorTestConstants; +import org.opentripplanner.raptorlegacy._data.api.TestPathBuilder; +import org.opentripplanner.raptorlegacy._data.transit.TestTransitData; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.DefaultCostCalculator; import org.opentripplanner.routing.algorithm.transferoptimization.model.TripToTripTransfer; import org.opentripplanner.routing.algorithm.transferoptimization.model.costfilter.MinCostPathTailFilterFactory; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/OptimizePathDomainServiceConstrainedTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/OptimizePathDomainServiceConstrainedTest.java index 109032a0110..3cfba2330c1 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/OptimizePathDomainServiceConstrainedTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/OptimizePathDomainServiceConstrainedTest.java @@ -13,9 +13,9 @@ import org.junit.jupiter.api.Test; import org.opentripplanner.model.transfer.ConstrainedTransfer; import org.opentripplanner.model.transfer.TransferPriority; -import org.opentripplanner.raptor._data.RaptorTestConstants; -import org.opentripplanner.raptor._data.api.PathUtils; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; +import org.opentripplanner.raptorlegacy._data.RaptorTestConstants; +import org.opentripplanner.raptorlegacy._data.api.PathUtils; +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule; /** *

    diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/OptimizePathDomainServiceTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/OptimizePathDomainServiceTest.java
    index 54c45b8a76b..6a023138751 100644
    --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/OptimizePathDomainServiceTest.java
    +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/OptimizePathDomainServiceTest.java
    @@ -8,13 +8,13 @@
     import java.util.List;
     import javax.annotation.Nullable;
     import org.junit.jupiter.api.Test;
    -import org.opentripplanner.raptor._data.RaptorTestConstants;
    -import org.opentripplanner.raptor._data.api.PathUtils;
    -import org.opentripplanner.raptor._data.api.TestPathBuilder;
    -import org.opentripplanner.raptor._data.transit.TestTripSchedule;
     import org.opentripplanner.raptor.spi.DefaultSlackProvider;
     import org.opentripplanner.raptor.spi.RaptorCostCalculator;
     import org.opentripplanner.raptor.spi.RaptorSlackProvider;
    +import org.opentripplanner.raptorlegacy._data.RaptorTestConstants;
    +import org.opentripplanner.raptorlegacy._data.api.PathUtils;
    +import org.opentripplanner.raptorlegacy._data.api.TestPathBuilder;
    +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule;
     import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.DefaultCostCalculator;
     import org.opentripplanner.routing.algorithm.transferoptimization.model.TransferWaitTimeCostCalculator;
     import org.opentripplanner.routing.algorithm.transferoptimization.model.costfilter.MinCostPathTailFilterFactory;
    diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TestTransferBuilder.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TestTransferBuilder.java
    index d553bac75eb..f32b5366907 100644
    --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TestTransferBuilder.java
    +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TestTransferBuilder.java
    @@ -5,9 +5,9 @@
     import org.opentripplanner.model.transfer.TransferConstraint;
     import org.opentripplanner.model.transfer.TransferPriority;
     import org.opentripplanner.model.transfer.TripTransferPoint;
    -import org.opentripplanner.raptor._data.transit.TestTransfer;
     import org.opentripplanner.raptor.api.model.RaptorConstants;
     import org.opentripplanner.raptor.api.model.RaptorTripSchedule;
    +import org.opentripplanner.raptorlegacy._data.transit.TestTransfer;
     import org.opentripplanner.routing.algorithm.transferoptimization.model.TripStopTime;
     import org.opentripplanner.routing.algorithm.transferoptimization.model.TripToTripTransfer;
     import org.opentripplanner.transit.model._data.TimetableRepositoryForTest;
    diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransferGeneratorDummy.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransferGeneratorDummy.java
    index 4392e89a83d..e021a38a8de 100644
    --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransferGeneratorDummy.java
    +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransferGeneratorDummy.java
    @@ -2,9 +2,9 @@
     
     import java.util.Arrays;
     import java.util.List;
    -import org.opentripplanner.raptor._data.transit.TestTransitData;
    -import org.opentripplanner.raptor._data.transit.TestTripSchedule;
     import org.opentripplanner.raptor.api.path.TransitPathLeg;
    +import org.opentripplanner.raptorlegacy._data.transit.TestTransitData;
    +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule;
     import org.opentripplanner.routing.algorithm.transferoptimization.model.TripToTripTransfer;
     
     /**
    diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransferGeneratorTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransferGeneratorTest.java
    index acaefbcf1d9..4e1d89c6b49 100644
    --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransferGeneratorTest.java
    +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransferGeneratorTest.java
    @@ -2,9 +2,9 @@
     
     import static java.time.Duration.ofMinutes;
     import static org.junit.jupiter.api.Assertions.assertEquals;
    -import static org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase.C1_CALCULATOR;
    -import static org.opentripplanner.raptor._data.transit.TestRoute.route;
    -import static org.opentripplanner.raptor._data.transit.TestTripSchedule.schedule;
    +import static org.opentripplanner.raptorlegacy._data.stoparrival.BasicPathTestCase.C1_CALCULATOR;
    +import static org.opentripplanner.raptorlegacy._data.transit.TestRoute.route;
    +import static org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule.schedule;
     
     import java.time.Duration;
     import java.util.List;
    @@ -17,17 +17,17 @@
     import org.junit.jupiter.params.provider.Arguments;
     import org.junit.jupiter.params.provider.MethodSource;
     import org.opentripplanner.model.transfer.TransferConstraint;
    -import org.opentripplanner.raptor._data.RaptorTestConstants;
    -import org.opentripplanner.raptor._data.api.TestPathBuilder;
    -import org.opentripplanner.raptor._data.transit.TestRoute;
    -import org.opentripplanner.raptor._data.transit.TestTransfer;
    -import org.opentripplanner.raptor._data.transit.TestTransitData;
    -import org.opentripplanner.raptor._data.transit.TestTripPattern;
    -import org.opentripplanner.raptor._data.transit.TestTripSchedule;
     import org.opentripplanner.raptor.api.path.RaptorPath;
     import org.opentripplanner.raptor.api.path.TransitPathLeg;
     import org.opentripplanner.raptor.spi.DefaultSlackProvider;
     import org.opentripplanner.raptor.spi.RaptorSlackProvider;
    +import org.opentripplanner.raptorlegacy._data.RaptorTestConstants;
    +import org.opentripplanner.raptorlegacy._data.api.TestPathBuilder;
    +import org.opentripplanner.raptorlegacy._data.transit.TestRoute;
    +import org.opentripplanner.raptorlegacy._data.transit.TestTransfer;
    +import org.opentripplanner.raptorlegacy._data.transit.TestTransitData;
    +import org.opentripplanner.raptorlegacy._data.transit.TestTripPattern;
    +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule;
     import org.opentripplanner.utils.time.TimeUtils;
     
     public class TransferGeneratorTest implements RaptorTestConstants {
    diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransitPathLegSelectorTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransitPathLegSelectorTest.java
    index 5ce84b4a00d..5ca18f63cb9 100644
    --- a/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransitPathLegSelectorTest.java
    +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/transferoptimization/services/TransitPathLegSelectorTest.java
    @@ -8,14 +8,14 @@
     import java.util.Set;
     import java.util.stream.Collectors;
     import org.junit.jupiter.api.Test;
    -import org.opentripplanner.raptor._data.RaptorTestConstants;
    -import org.opentripplanner.raptor._data.transit.TestAccessEgress;
    -import org.opentripplanner.raptor._data.transit.TestTripSchedule;
     import org.opentripplanner.raptor.api.path.EgressPathLeg;
     import org.opentripplanner.raptor.api.path.TransitPathLeg;
     import org.opentripplanner.raptor.spi.DefaultSlackProvider;
     import org.opentripplanner.raptor.spi.RaptorCostCalculator;
     import org.opentripplanner.raptor.spi.RaptorSlackProvider;
    +import org.opentripplanner.raptorlegacy._data.RaptorTestConstants;
    +import org.opentripplanner.raptorlegacy._data.transit.TestAccessEgress;
    +import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule;
     import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.DefaultCostCalculator;
     import org.opentripplanner.routing.algorithm.transferoptimization.model.OptimizedPathTail;
     import org.opentripplanner.routing.algorithm.transferoptimization.model.PathTailFilter;
    
    From b02e6dc5e2ae9a78784e8fc6c2d192f033486011 Mon Sep 17 00:00:00 2001
    From: Thomas Gran 
    Date: Mon, 4 Nov 2024 09:00:47 +0100
    Subject: [PATCH 181/213] refactor: Use
     RaptorTransferConstraint.REGULAR_TRANSFER, not subclass.
    
    ---
     .../raptor/_data/api/TestPathBuilderTestRaptor.java             | 2 +-
     .../raptor/_data/stoparrival/BasicPathTestCase.java             | 2 +-
     2 files changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilderTestRaptor.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilderTestRaptor.java
    index 9b37057cdc6..e5a48ecd289 100644
    --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilderTestRaptor.java
    +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/api/TestPathBuilderTestRaptor.java
    @@ -2,9 +2,9 @@
     
     import static org.junit.jupiter.api.Assertions.assertEquals;
     import static org.junit.jupiter.api.Assertions.assertTrue;
    -import static org.opentripplanner.model.transfer.TransferConstraint.REGULAR_TRANSFER;
     import static org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase.C1_CALCULATOR;
     import static org.opentripplanner.raptor._data.transit.TestAccessEgress.walk;
    +import static org.opentripplanner.raptor.api.model.RaptorTransferConstraint.REGULAR_TRANSFER;
     import static org.opentripplanner.utils.time.DurationUtils.durationInSeconds;
     import static org.opentripplanner.utils.time.TimeUtils.time;
     
    diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java
    index 88aa857f76a..66e0fdfca1e 100644
    --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java
    +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java
    @@ -1,13 +1,13 @@
     package org.opentripplanner.raptor._data.stoparrival;
     
     import static org.junit.jupiter.api.Assertions.assertEquals;
    -import static org.opentripplanner.model.transfer.TransferConstraint.REGULAR_TRANSFER;
     import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.access;
     import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.bus;
     import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.egress;
     import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.transfer;
     import static org.opentripplanner.raptor._data.transit.TestAccessEgress.flexWithOnBoard;
     import static org.opentripplanner.raptor._data.transit.TestTripPattern.pattern;
    +import static org.opentripplanner.raptor.api.model.RaptorTransferConstraint.REGULAR_TRANSFER;
     import static org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter.toRaptorCost;
     import static org.opentripplanner.utils.time.DurationUtils.durationToStr;
     import static org.opentripplanner.utils.time.TimeUtils.time;
    
    From c86e6e6053dacd7caa4bbb6cfce4b0c65b8091cc Mon Sep 17 00:00:00 2001
    From: Thomas Gran 
    Date: Mon, 4 Nov 2024 09:14:32 +0100
    Subject: [PATCH 182/213] refactor: Move RaptorCostConverter into Raptor so it
     can be reused
    
    ---
     .../org/opentripplanner/model/plan/Itinerary.java    |  2 +-
     .../mapping/RaptorPathToItineraryMapper.java         |  2 +-
     .../raptoradapter/transit/DefaultAccessEgress.java   |  2 +-
     .../algorithm/raptoradapter/transit/Transfer.java    |  2 +-
     .../transit/cost/DefaultCostCalculator.java          |  1 +
     .../transit/cost/IndexBasedFactorStrategy.java       |  1 +
     .../transit/cost/RaptorCostLinearFunction.java       |  1 +
     .../transit/cost/SingleValueFactorStrategy.java      |  2 ++
     .../transit/cost/WheelchairCostCalculator.java       |  1 +
     .../transit/mappers/RaptorRequestMapper.java         |  2 +-
     .../transit/mappers/TransitLayerMapper.java          |  2 +-
     .../model/TransferWaitTimeCostCalculator.java        |  2 +-
     .../_data/stoparrival/BasicPathTestCase.java         |  2 +-
     .../stoparrival/FlexAccessAndEgressPathTestCase.java |  4 ++--
     .../raptorlegacy/_data/transit/TestAccessEgress.java |  2 +-
     .../raptorlegacy/_data/transit/TestTransfer.java     |  2 +-
     .../mapping/RaptorPathToItineraryMapperTest.java     |  2 +-
     .../raptoradapter/transit/TransferTest.java          |  2 +-
     .../transit/cost/DefaultCostCalculatorTest.java      |  1 +
     .../transit/cost/RaptorCostLinearFunctionTest.java   |  1 +
     .../transit/cost/WheelchairCostCalculatorTest.java   |  1 +
     .../raptor/api/model}/RaptorCostConverter.java       | 12 ++++++------
     .../raptor/_data/stoparrival/BasicPathTestCase.java  |  2 +-
     .../stoparrival/FlexAccessAndEgressPathTestCase.java |  5 ++---
     .../raptor/_data/transit/TestAccessEgress.java       |  2 +-
     .../raptor/_data/transit/TestTransfer.java           |  2 +-
     .../raptor/api/model}/RaptorCostConverterTest.java   |  3 ++-
     .../raptor/moduletests/F01_AccessWithRidesTest.java  |  2 +-
     .../F12_EgressWithRidesMultipleOptimalPathsTest.java |  2 +-
     .../H11_GuaranteedTransferWithFlexAccessTest.java    |  2 +-
     .../raptor/moduletests/K01_TransitPriorityTest.java  |  2 +-
     .../K02_TransitPriorityDestinationTest.java          |  2 +-
     32 files changed, 41 insertions(+), 32 deletions(-)
     rename {application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost => raptor/src/main/java/org/opentripplanner/raptor/api/model}/RaptorCostConverter.java (86%)
     rename {application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost => raptor/src/test/java/org/opentripplanner/raptor/api/model}/RaptorCostConverterTest.java (92%)
    
    diff --git a/application/src/main/java/org/opentripplanner/model/plan/Itinerary.java b/application/src/main/java/org/opentripplanner/model/plan/Itinerary.java
    index f707b97c131..5ff936f3118 100644
    --- a/application/src/main/java/org/opentripplanner/model/plan/Itinerary.java
    +++ b/application/src/main/java/org/opentripplanner/model/plan/Itinerary.java
    @@ -17,8 +17,8 @@
     import org.opentripplanner.model.SystemNotice;
     import org.opentripplanner.model.fare.ItineraryFares;
     import org.opentripplanner.raptor.api.model.RaptorConstants;
    +import org.opentripplanner.raptor.api.model.RaptorCostConverter;
     import org.opentripplanner.raptor.api.path.PathStringBuilder;
    -import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter;
     import org.opentripplanner.routing.api.request.RouteRequest;
     import org.opentripplanner.routing.api.request.preference.ItineraryFilterPreferences;
     import org.opentripplanner.utils.lang.DoubleUtils;
    diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapper.java b/application/src/main/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapper.java
    index a81dd4e7083..3819500e605 100644
    --- a/application/src/main/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapper.java
    +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapper.java
    @@ -1,6 +1,6 @@
     package org.opentripplanner.routing.algorithm.mapping;
     
    -import static org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter.toOtpDomainCost;
    +import static org.opentripplanner.raptor.api.model.RaptorCostConverter.toOtpDomainCost;
     
     import java.time.ZonedDateTime;
     import java.util.ArrayList;
    diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/DefaultAccessEgress.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/DefaultAccessEgress.java
    index 3f68d91321e..584e690d3ee 100644
    --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/DefaultAccessEgress.java
    +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/DefaultAccessEgress.java
    @@ -3,7 +3,7 @@
     import java.util.Objects;
     import org.opentripplanner.framework.model.TimeAndCost;
     import org.opentripplanner.raptor.api.model.RaptorConstants;
    -import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter;
    +import org.opentripplanner.raptor.api.model.RaptorCostConverter;
     import org.opentripplanner.street.search.state.State;
     
     /**
    diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/Transfer.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/Transfer.java
    index 175c782ab22..7a6e6568bb4 100644
    --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/Transfer.java
    +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/Transfer.java
    @@ -5,8 +5,8 @@
     import java.util.List;
     import java.util.Optional;
     import org.locationtech.jts.geom.Coordinate;
    +import org.opentripplanner.raptor.api.model.RaptorCostConverter;
     import org.opentripplanner.raptor.api.model.RaptorTransfer;
    -import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter;
     import org.opentripplanner.routing.api.request.preference.WalkPreferences;
     import org.opentripplanner.street.model.edge.Edge;
     import org.opentripplanner.street.search.request.StreetSearchRequest;
    diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/DefaultCostCalculator.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/DefaultCostCalculator.java
    index 43faa3f0c40..1d4827a4ef6 100644
    --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/DefaultCostCalculator.java
    +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/DefaultCostCalculator.java
    @@ -3,6 +3,7 @@
     import javax.annotation.Nullable;
     import org.opentripplanner.model.transfer.TransferConstraint;
     import org.opentripplanner.raptor.api.model.RaptorAccessEgress;
    +import org.opentripplanner.raptor.api.model.RaptorCostConverter;
     import org.opentripplanner.raptor.api.model.RaptorTransferConstraint;
     import org.opentripplanner.raptor.spi.RaptorCostCalculator;
     
    diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/IndexBasedFactorStrategy.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/IndexBasedFactorStrategy.java
    index 152f199248c..9fac19cd940 100644
    --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/IndexBasedFactorStrategy.java
    +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/IndexBasedFactorStrategy.java
    @@ -1,6 +1,7 @@
     package org.opentripplanner.routing.algorithm.raptoradapter.transit.cost;
     
     import java.util.Arrays;
    +import org.opentripplanner.raptor.api.model.RaptorCostConverter;
     
     /**
      * This class keep a facto for each index and the minimum factor for fast retrieval during Raptor
    diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/RaptorCostLinearFunction.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/RaptorCostLinearFunction.java
    index b636b26bebe..f231acf9270 100644
    --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/RaptorCostLinearFunction.java
    +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/RaptorCostLinearFunction.java
    @@ -2,6 +2,7 @@
     
     import java.util.Objects;
     import org.opentripplanner.framework.model.Cost;
    +import org.opentripplanner.raptor.api.model.RaptorCostConverter;
     import org.opentripplanner.routing.api.request.framework.CostLinearFunction;
     import org.opentripplanner.routing.api.request.framework.LinearFunctionSerialization;
     
    diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/SingleValueFactorStrategy.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/SingleValueFactorStrategy.java
    index 59cf04eb2db..3e5b868afdb 100644
    --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/SingleValueFactorStrategy.java
    +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/SingleValueFactorStrategy.java
    @@ -1,5 +1,7 @@
     package org.opentripplanner.routing.algorithm.raptoradapter.transit.cost;
     
    +import org.opentripplanner.raptor.api.model.RaptorCostConverter;
    +
     /**
      * This {@link FactorStrategy} keep a single value and use it every time the factor is needed. The
      * {@link #minFactor()} return the same value.
    diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/WheelchairCostCalculator.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/WheelchairCostCalculator.java
    index d68d2230a5c..693cac45031 100644
    --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/WheelchairCostCalculator.java
    +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/WheelchairCostCalculator.java
    @@ -1,6 +1,7 @@
     package org.opentripplanner.routing.algorithm.raptoradapter.transit.cost;
     
     import org.opentripplanner.raptor.api.model.RaptorAccessEgress;
    +import org.opentripplanner.raptor.api.model.RaptorCostConverter;
     import org.opentripplanner.raptor.api.model.RaptorTransferConstraint;
     import org.opentripplanner.raptor.spi.RaptorCostCalculator;
     import org.opentripplanner.routing.api.request.preference.AccessibilityPreferences;
    diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/RaptorRequestMapper.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/RaptorRequestMapper.java
    index 1074724a90c..ff0855f0128 100644
    --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/RaptorRequestMapper.java
    +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/RaptorRequestMapper.java
    @@ -12,6 +12,7 @@
     import org.opentripplanner.raptor.api.model.GeneralizedCostRelaxFunction;
     import org.opentripplanner.raptor.api.model.RaptorAccessEgress;
     import org.opentripplanner.raptor.api.model.RaptorConstants;
    +import org.opentripplanner.raptor.api.model.RaptorCostConverter;
     import org.opentripplanner.raptor.api.model.RaptorTripSchedule;
     import org.opentripplanner.raptor.api.model.RelaxFunction;
     import org.opentripplanner.raptor.api.request.DebugRequestBuilder;
    @@ -22,7 +23,6 @@
     import org.opentripplanner.raptor.api.request.RaptorViaLocation;
     import org.opentripplanner.raptor.rangeraptor.SystemErrDebugLogger;
     import org.opentripplanner.routing.algorithm.raptoradapter.router.performance.PerformanceTimersForRaptor;
    -import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter;
     import org.opentripplanner.routing.api.request.DebugEventType;
     import org.opentripplanner.routing.api.request.RouteRequest;
     import org.opentripplanner.routing.api.request.framework.CostLinearFunction;
    diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerMapper.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerMapper.java
    index b0d2b009a0f..a056efe87df 100644
    --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerMapper.java
    +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerMapper.java
    @@ -13,13 +13,13 @@
     import java.util.Set;
     import javax.annotation.Nullable;
     import org.opentripplanner.framework.application.OTPFeature;
    +import org.opentripplanner.raptor.api.model.RaptorCostConverter;
     import org.opentripplanner.routing.algorithm.raptoradapter.transit.Transfer;
     import org.opentripplanner.routing.algorithm.raptoradapter.transit.TransitLayer;
     import org.opentripplanner.routing.algorithm.raptoradapter.transit.TransitTuningParameters;
     import org.opentripplanner.routing.algorithm.raptoradapter.transit.TripPatternForDate;
     import org.opentripplanner.routing.algorithm.raptoradapter.transit.constrainedtransfer.ConstrainedTransfersForPatterns;
     import org.opentripplanner.routing.algorithm.raptoradapter.transit.constrainedtransfer.TransferIndexGenerator;
    -import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter;
     import org.opentripplanner.routing.algorithm.raptoradapter.transit.request.RaptorRequestTransferCache;
     import org.opentripplanner.transit.model.network.TripPattern;
     import org.opentripplanner.transit.model.site.StopTransferPriority;
    diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/TransferWaitTimeCostCalculator.java b/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/TransferWaitTimeCostCalculator.java
    index a5336999b09..ee33f1d86c3 100644
    --- a/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/TransferWaitTimeCostCalculator.java
    +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/transferoptimization/model/TransferWaitTimeCostCalculator.java
    @@ -1,6 +1,6 @@
     package org.opentripplanner.routing.algorithm.transferoptimization.model;
     
    -import static org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter.toRaptorCost;
    +import static org.opentripplanner.raptor.api.model.RaptorCostConverter.toRaptorCost;
     
     /**
      * This calculator uses the {@code minSafeTransferTime}(t0) and an inverse log function to calculate
    diff --git a/application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/BasicPathTestCase.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/BasicPathTestCase.java
    index bf74ca43bb8..0130625784b 100644
    --- a/application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/BasicPathTestCase.java
    +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/BasicPathTestCase.java
    @@ -2,7 +2,7 @@
     
     import static org.junit.jupiter.api.Assertions.assertEquals;
     import static org.opentripplanner.model.transfer.TransferConstraint.REGULAR_TRANSFER;
    -import static org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter.toRaptorCost;
    +import static org.opentripplanner.raptor.api.model.RaptorCostConverter.toRaptorCost;
     import static org.opentripplanner.utils.time.DurationUtils.durationToStr;
     import static org.opentripplanner.utils.time.TimeUtils.time;
     
    diff --git a/application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/FlexAccessAndEgressPathTestCase.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/FlexAccessAndEgressPathTestCase.java
    index 00611dee991..99dd81ebbb7 100644
    --- a/application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/FlexAccessAndEgressPathTestCase.java
    +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/stoparrival/FlexAccessAndEgressPathTestCase.java
    @@ -1,14 +1,15 @@
     package org.opentripplanner.raptorlegacy._data.stoparrival;
     
     import static org.junit.jupiter.api.Assertions.assertEquals;
    +import static org.opentripplanner.raptor.api.model.RaptorCostConverter.toRaptorCost;
     import static org.opentripplanner.raptor.api.model.RaptorValueFormatter.formatC1;
    -import static org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter.toRaptorCost;
     import static org.opentripplanner.utils.time.DurationUtils.durationInSeconds;
     import static org.opentripplanner.utils.time.TimeUtils.time;
     
     import org.junit.jupiter.api.Test;
     import org.opentripplanner.raptor.api.model.RaptorAccessEgress;
     import org.opentripplanner.raptor.api.model.RaptorConstants;
    +import org.opentripplanner.raptor.api.model.RaptorCostConverter;
     import org.opentripplanner.raptor.api.model.RaptorTransfer;
     import org.opentripplanner.raptor.api.view.ArrivalView;
     import org.opentripplanner.raptor.rangeraptor.path.DestinationArrival;
    @@ -20,7 +21,6 @@
     import org.opentripplanner.raptorlegacy._data.transit.TestTripPattern;
     import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule;
     import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.DefaultCostCalculator;
    -import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter;
     import org.opentripplanner.utils.time.TimeUtils;
     
     /**
    diff --git a/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestAccessEgress.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestAccessEgress.java
    index b10c68303d4..6fb26c22dfb 100644
    --- a/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestAccessEgress.java
    +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestAccessEgress.java
    @@ -3,8 +3,8 @@
     import static org.junit.jupiter.api.Assertions.assertEquals;
     import static org.junit.jupiter.api.Assertions.assertNull;
     import static org.junit.jupiter.api.Assertions.assertTrue;
    +import static org.opentripplanner.raptor.api.model.RaptorCostConverter.toRaptorCost;
     import static org.opentripplanner.raptorlegacy._data.RaptorTestConstants.SECONDS_IN_A_DAY;
    -import static org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter.toRaptorCost;
     
     import java.util.ArrayList;
     import java.util.Collection;
    diff --git a/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestTransfer.java b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestTransfer.java
    index 8d590c5101e..dead63d0135 100644
    --- a/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestTransfer.java
    +++ b/application/src/test/java/org/opentripplanner/raptorlegacy/_data/transit/TestTransfer.java
    @@ -1,6 +1,6 @@
     package org.opentripplanner.raptorlegacy._data.transit;
     
    -import static org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter.toRaptorCost;
    +import static org.opentripplanner.raptor.api.model.RaptorCostConverter.toRaptorCost;
     
     import org.opentripplanner.raptor.api.model.RaptorTransfer;
     
    diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapperTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapperTest.java
    index 92d7e0824b0..8f2fc45b875 100644
    --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapperTest.java
    +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapperTest.java
    @@ -30,6 +30,7 @@
     import org.opentripplanner.model.plan.ScheduledTransitLeg;
     import org.opentripplanner.model.plan.StreetLeg;
     import org.opentripplanner.raptor.api.model.RaptorAccessEgress;
    +import org.opentripplanner.raptor.api.model.RaptorCostConverter;
     import org.opentripplanner.raptor.api.model.RaptorTransfer;
     import org.opentripplanner.raptor.api.model.RaptorTripSchedule;
     import org.opentripplanner.raptor.api.path.AccessPathLeg;
    @@ -52,7 +53,6 @@
     import org.opentripplanner.routing.algorithm.raptoradapter.transit.Transfer;
     import org.opentripplanner.routing.algorithm.raptoradapter.transit.TransitLayer;
     import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.DefaultCostCalculator;
    -import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter;
     import org.opentripplanner.routing.api.request.RouteRequest;
     import org.opentripplanner.routing.graph.Graph;
     import org.opentripplanner.street.search.state.State;
    diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TransferTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TransferTest.java
    index dacd0dcac9c..8dc4d548c18 100644
    --- a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TransferTest.java
    +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TransferTest.java
    @@ -9,8 +9,8 @@
     import org.junit.jupiter.api.Nested;
     import org.junit.jupiter.api.Test;
     import org.opentripplanner._support.geometry.Coordinates;
    +import org.opentripplanner.raptor.api.model.RaptorCostConverter;
     import org.opentripplanner.raptor.api.model.RaptorTransfer;
    -import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter;
     import org.opentripplanner.street.model._data.StreetModelForTest;
     import org.opentripplanner.street.model.vertex.IntersectionVertex;
     import org.opentripplanner.street.search.request.StreetSearchRequest;
    diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/DefaultCostCalculatorTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/DefaultCostCalculatorTest.java
    index 8560c932994..ad31b250046 100644
    --- a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/DefaultCostCalculatorTest.java
    +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/DefaultCostCalculatorTest.java
    @@ -3,6 +3,7 @@
     import static org.junit.jupiter.api.Assertions.assertEquals;
     
     import org.junit.jupiter.api.Test;
    +import org.opentripplanner.raptor.api.model.RaptorCostConverter;
     import org.opentripplanner.raptorlegacy._data.transit.TestAccessEgress;
     import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule;
     
    diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/RaptorCostLinearFunctionTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/RaptorCostLinearFunctionTest.java
    index 2769a95b634..b38cefe232c 100644
    --- a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/RaptorCostLinearFunctionTest.java
    +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/RaptorCostLinearFunctionTest.java
    @@ -11,6 +11,7 @@
     import org.junit.jupiter.params.provider.Arguments;
     import org.junit.jupiter.params.provider.MethodSource;
     import org.opentripplanner.framework.model.Cost;
    +import org.opentripplanner.raptor.api.model.RaptorCostConverter;
     import org.opentripplanner.routing.api.request.framework.CostLinearFunction;
     import org.opentripplanner.test.support.TestTableParser;
     
    diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/WheelchairCostCalculatorTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/WheelchairCostCalculatorTest.java
    index f13ecff2503..76de708c817 100644
    --- a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/WheelchairCostCalculatorTest.java
    +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/WheelchairCostCalculatorTest.java
    @@ -6,6 +6,7 @@
     import org.junit.jupiter.params.ParameterizedTest;
     import org.junit.jupiter.params.provider.Arguments;
     import org.junit.jupiter.params.provider.MethodSource;
    +import org.opentripplanner.raptor.api.model.RaptorCostConverter;
     import org.opentripplanner.raptor.api.model.RaptorTransferConstraint;
     import org.opentripplanner.raptor.spi.RaptorCostCalculator;
     import org.opentripplanner.raptorlegacy._data.transit.TestTripSchedule;
    diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/RaptorCostConverter.java b/raptor/src/main/java/org/opentripplanner/raptor/api/model/RaptorCostConverter.java
    similarity index 86%
    rename from application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/RaptorCostConverter.java
    rename to raptor/src/main/java/org/opentripplanner/raptor/api/model/RaptorCostConverter.java
    index 210197f107b..3801c948e3e 100644
    --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/RaptorCostConverter.java
    +++ b/raptor/src/main/java/org/opentripplanner/raptor/api/model/RaptorCostConverter.java
    @@ -1,14 +1,14 @@
    -package org.opentripplanner.routing.algorithm.raptoradapter.transit.cost;
    +package org.opentripplanner.raptor.api.model;
     
     import java.time.Duration;
    -import org.opentripplanner.raptor.api.model.RaptorValueFormatter;
     
     /**
    - * Convert Raptor internal cost to OTP domain model cost, and back.
    + * Convert Raptor internal cost to OTP domain model cost, and back. This is provided by the Raptor
    + * module as a utility, but not used in Raptor except in unit-tests.
      * 

    - * Inside Raptor the a cost unit is 1/100 of a "transit second" using {@code int} as type. In the - * OTP internal domain the unit used for cost is one "transit second" with type {@code double}. Cost - * in raptor is calculated using ints to spped up the calculations and to save memory. + * Inside Raptor the cost unit is 1/100 of a "transit second" using {@code int} as type. In the + * OTP internal domain the unit used for cost is one "transit second" with type {@code double}. + * Cost in raptor is calculated using ints to speed up the calculations and to save memory. *

    * The reason for using 1/100 of a second resolution is that we want a cost factor of {@code 0.99} * to win over a cost factor of {@code 1.00}. diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java index 66e0fdfca1e..af827eaaa83 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java @@ -7,8 +7,8 @@ import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.transfer; import static org.opentripplanner.raptor._data.transit.TestAccessEgress.flexWithOnBoard; import static org.opentripplanner.raptor._data.transit.TestTripPattern.pattern; +import static org.opentripplanner.raptor.api.model.RaptorCostConverter.toRaptorCost; import static org.opentripplanner.raptor.api.model.RaptorTransferConstraint.REGULAR_TRANSFER; -import static org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter.toRaptorCost; import static org.opentripplanner.utils.time.DurationUtils.durationToStr; import static org.opentripplanner.utils.time.TimeUtils.time; diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java index 51639ecc72d..67264f0ce36 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java @@ -3,8 +3,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.access; import static org.opentripplanner.raptor._data.stoparrival.TestArrivals.bus; +import static org.opentripplanner.raptor.api.model.RaptorCostConverter.toRaptorCost; import static org.opentripplanner.raptor.api.model.RaptorValueFormatter.formatC1; -import static org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter.toRaptorCost; import static org.opentripplanner.utils.time.DurationUtils.durationInSeconds; import static org.opentripplanner.utils.time.TimeUtils.time; @@ -16,13 +16,12 @@ import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.api.model.RaptorConstants; +import org.opentripplanner.raptor.api.model.RaptorCostConverter; import org.opentripplanner.raptor.api.model.RaptorTransfer; import org.opentripplanner.raptor.api.view.ArrivalView; import org.opentripplanner.raptor.rangeraptor.path.DestinationArrival; import org.opentripplanner.raptor.spi.DefaultSlackProvider; import org.opentripplanner.raptor.spi.RaptorSlackProvider; -import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.DefaultCostCalculator; -import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter; import org.opentripplanner.utils.time.TimeUtils; /** diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestAccessEgress.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestAccessEgress.java index c58240126de..4714c92939c 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestAccessEgress.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestAccessEgress.java @@ -4,7 +4,7 @@ import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.opentripplanner.raptor._data.RaptorTestConstants.SECONDS_IN_A_DAY; -import static org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter.toRaptorCost; +import static org.opentripplanner.raptor.api.model.RaptorCostConverter.toRaptorCost; import java.util.ArrayList; import java.util.Collection; diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransfer.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransfer.java index 5645f6342d6..4c41fddb366 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransfer.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransfer.java @@ -1,6 +1,6 @@ package org.opentripplanner.raptor._data.transit; -import static org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter.toRaptorCost; +import static org.opentripplanner.raptor.api.model.RaptorCostConverter.toRaptorCost; import org.opentripplanner.raptor.api.model.RaptorTransfer; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/RaptorCostConverterTest.java b/raptor/src/test/java/org/opentripplanner/raptor/api/model/RaptorCostConverterTest.java similarity index 92% rename from application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/RaptorCostConverterTest.java rename to raptor/src/test/java/org/opentripplanner/raptor/api/model/RaptorCostConverterTest.java index 3827bdd31b6..c32daa8c82c 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/RaptorCostConverterTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/api/model/RaptorCostConverterTest.java @@ -1,9 +1,10 @@ -package org.opentripplanner.routing.algorithm.raptoradapter.transit.cost; +package org.opentripplanner.raptor.api.model; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; +import org.opentripplanner.raptor.api.model.RaptorCostConverter; public class RaptorCostConverterTest { diff --git a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/F01_AccessWithRidesTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/F01_AccessWithRidesTest.java index e93f464826c..96a5a04d7fd 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/F01_AccessWithRidesTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/F01_AccessWithRidesTest.java @@ -20,12 +20,12 @@ import org.opentripplanner.raptor._data.RaptorTestConstants; import org.opentripplanner.raptor._data.transit.TestTransitData; import org.opentripplanner.raptor._data.transit.TestTripSchedule; +import org.opentripplanner.raptor.api.model.RaptorCostConverter; import org.opentripplanner.raptor.api.request.RaptorRequestBuilder; import org.opentripplanner.raptor.configure.RaptorConfig; import org.opentripplanner.raptor.moduletests.support.ModuleTestDebugLogging; import org.opentripplanner.raptor.moduletests.support.RaptorModuleTestCase; import org.opentripplanner.raptor.spi.DefaultSlackProvider; -import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter; /** * FEATURE UNDER TEST diff --git a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/F12_EgressWithRidesMultipleOptimalPathsTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/F12_EgressWithRidesMultipleOptimalPathsTest.java index 1ec5399a668..40e4ffd567d 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/F12_EgressWithRidesMultipleOptimalPathsTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/F12_EgressWithRidesMultipleOptimalPathsTest.java @@ -25,12 +25,12 @@ import org.opentripplanner.raptor._data.transit.TestTransfer; import org.opentripplanner.raptor._data.transit.TestTransitData; import org.opentripplanner.raptor._data.transit.TestTripSchedule; +import org.opentripplanner.raptor.api.model.RaptorCostConverter; import org.opentripplanner.raptor.api.request.RaptorRequestBuilder; import org.opentripplanner.raptor.configure.RaptorConfig; import org.opentripplanner.raptor.moduletests.support.ModuleTestDebugLogging; import org.opentripplanner.raptor.moduletests.support.RaptorModuleTestCase; import org.opentripplanner.raptor.spi.DefaultSlackProvider; -import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter; /** * FEATURE UNDER TEST diff --git a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/H11_GuaranteedTransferWithFlexAccessTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/H11_GuaranteedTransferWithFlexAccessTest.java index 9cf2aaf7b82..b074f34fbaf 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/H11_GuaranteedTransferWithFlexAccessTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/H11_GuaranteedTransferWithFlexAccessTest.java @@ -20,11 +20,11 @@ import org.opentripplanner.raptor._data.transit.TestTransfer; import org.opentripplanner.raptor._data.transit.TestTransitData; import org.opentripplanner.raptor._data.transit.TestTripSchedule; +import org.opentripplanner.raptor.api.model.RaptorCostConverter; import org.opentripplanner.raptor.api.request.RaptorRequestBuilder; import org.opentripplanner.raptor.configure.RaptorConfig; import org.opentripplanner.raptor.moduletests.support.ModuleTestDebugLogging; import org.opentripplanner.raptor.moduletests.support.RaptorModuleTestCase; -import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter; /** * FEATURE UNDER TEST diff --git a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/K01_TransitPriorityTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/K01_TransitPriorityTest.java index f03eb5335a0..a1cfc005ca5 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/K01_TransitPriorityTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/K01_TransitPriorityTest.java @@ -20,12 +20,12 @@ import org.opentripplanner.raptor.RaptorService; import org.opentripplanner.raptor._data.transit.TestTransitData; import org.opentripplanner.raptor._data.transit.TestTripSchedule; +import org.opentripplanner.raptor.api.model.RaptorCostConverter; import org.opentripplanner.raptor.api.request.RaptorProfile; import org.opentripplanner.raptor.api.request.RaptorRequestBuilder; import org.opentripplanner.raptor.api.request.RaptorTransitGroupPriorityCalculator; import org.opentripplanner.raptor.configure.RaptorConfig; import org.opentripplanner.raptor.moduletests.support.TestGroupPriorityCalculator; -import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter; /** * FEATURE UNDER TEST diff --git a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/K02_TransitPriorityDestinationTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/K02_TransitPriorityDestinationTest.java index fb21128728c..cad92e6a3ad 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/K02_TransitPriorityDestinationTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/K02_TransitPriorityDestinationTest.java @@ -23,12 +23,12 @@ import org.opentripplanner.raptor.RaptorService; import org.opentripplanner.raptor._data.transit.TestTransitData; import org.opentripplanner.raptor._data.transit.TestTripSchedule; +import org.opentripplanner.raptor.api.model.RaptorCostConverter; import org.opentripplanner.raptor.api.request.RaptorProfile; import org.opentripplanner.raptor.api.request.RaptorRequestBuilder; import org.opentripplanner.raptor.api.request.RaptorTransitGroupPriorityCalculator; import org.opentripplanner.raptor.configure.RaptorConfig; import org.opentripplanner.raptor.moduletests.support.TestGroupPriorityCalculator; -import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter; /** * FEATURE UNDER TEST From ea9ea245024c94cca6971220ddf228f517639e00 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Mon, 4 Nov 2024 09:43:45 +0100 Subject: [PATCH 183/213] refactor: Create a TestCostCalculator for unit tests in Raptor --- .../_data/stoparrival/BasicPathTestCase.java | 5 +- .../FlexAccessAndEgressPathTestCase.java | 4 +- .../_data/transit/TestCostCalculator.java | 199 ++++++++++++++++++ .../raptor/_data/transit/TestRoute.java | 2 +- .../raptor/_data/transit/TestTransitData.java | 29 ++- .../_data/transit/TestTripScheduleSearch.java | 126 +++++++++++ .../transit/TestTripScheduleSearchTest.java | 175 +++++++++++++++ .../api/model/RaptorCostConverterTest.java | 1 - ...EgressStopBoardAlightTransferCostTest.java | 2 +- .../E01_StaySeatedTransferTest.java | 2 +- .../E02_GuaranteedWalkTransferTest.java | 2 +- ...E03_NotAllowedConstrainedTransferTest.java | 2 +- ..._GuaranteedTransferWithFlexAccessTest.java | 2 +- .../moduletests/J01_PassThroughTest.java | 4 +- .../raptor/moduletests/J02_ViaSearchTest.java | 2 +- .../rangeraptor/path/PathMapperTest.java | 4 +- .../path/PathParetoSetComparatorsTest.java | 1 - 17 files changed, 537 insertions(+), 25 deletions(-) create mode 100644 raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestCostCalculator.java create mode 100644 raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripScheduleSearch.java create mode 100644 raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripScheduleSearchTest.java diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java index af827eaaa83..7a8cbf702a8 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java @@ -17,6 +17,7 @@ import org.junit.jupiter.api.Test; import org.opentripplanner.raptor._data.RaptorTestConstants; import org.opentripplanner.raptor._data.transit.TestAccessEgress; +import org.opentripplanner.raptor._data.transit.TestCostCalculator; import org.opentripplanner.raptor._data.transit.TestTransfer; import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; @@ -34,7 +35,6 @@ import org.opentripplanner.raptor.rangeraptor.lifecycle.LifeCycleSubscriptions; import org.opentripplanner.raptor.rangeraptor.path.DestinationArrival; import org.opentripplanner.raptor.spi.RaptorCostCalculator; -import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.DefaultCostCalculator; /** * This class is used to create a journeys with stop arrivals. @@ -212,11 +212,10 @@ public class BasicPathTestCase implements RaptorTestConstants { .transitReluctanceIndex(TRANSIT_RELUCTANCE_INDEX) .build(); - public static final RaptorCostCalculator C1_CALCULATOR = new DefaultCostCalculator<>( + public static final RaptorCostCalculator C1_CALCULATOR = new TestCostCalculator( BOARD_C1_SEC, TRANSFER_C1_SEC, WAIT_RELUCTANCE, - TRANSIT_RELUCTANCE, STOP_C1S ); diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java index 67264f0ce36..3063805e548 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java @@ -11,6 +11,7 @@ import org.junit.jupiter.api.Test; import org.opentripplanner.raptor._data.RaptorTestConstants; import org.opentripplanner.raptor._data.transit.TestAccessEgress; +import org.opentripplanner.raptor._data.transit.TestCostCalculator; import org.opentripplanner.raptor._data.transit.TestTransfer; import org.opentripplanner.raptor._data.transit.TestTripPattern; import org.opentripplanner.raptor._data.transit.TestTripSchedule; @@ -53,11 +54,10 @@ public class FlexAccessAndEgressPathTestCase implements RaptorTestConstants { public static final int BOARD_C1_SEC = 60; public static final int TRANSFER_C1_SEC = 120; // The C1_CALCULATOR is not under test, so we use it to calculate correct cost values. - public static final DefaultCostCalculator C1_CALCULATOR = new DefaultCostCalculator<>( + public static final TestCostCalculator C1_CALCULATOR = new TestCostCalculator( BOARD_C1_SEC, TRANSFER_C1_SEC, WAIT_RELUCTANCE, - null, null ); diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestCostCalculator.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestCostCalculator.java new file mode 100644 index 00000000000..ab2d4ae3476 --- /dev/null +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestCostCalculator.java @@ -0,0 +1,199 @@ +package org.opentripplanner.raptor._data.transit; + +import javax.annotation.Nullable; +import org.opentripplanner.raptor.api.model.RaptorAccessEgress; +import org.opentripplanner.raptor.api.model.RaptorCostConverter; +import org.opentripplanner.raptor.api.model.RaptorTransferConstraint; +import org.opentripplanner.raptor.spi.RaptorCostCalculator; + +/** + * The responsibility for the cost calculator is to calculate the default multi-criteria cost. + *

    + * This class is immutable and thread safe. + */ +public final class TestCostCalculator implements RaptorCostCalculator { + + private static final int TRANSIT_RELUCTANCE = RaptorCostConverter.toRaptorCost(1); + + private final int boardCost; + private final int transferCost; + private final int waitFactor; + + /** + * Costs for boarding and alighting at a given stop during transfer. + * See TransitLayer.getStopBoardAlightTransferCosts() + */ + @Nullable + private final int[] stopBoardAlightTransferCosts; + + /** + * Cost unit: SECONDS - The unit for all input parameters are in the OTP TRANSIT model cost unit + * (in Raptor the unit for cost is centi-seconds). + * + * @param stopBoardAlightTransferCosts Unit centi-seconds. This parameter is used "as-is" and not + * transformed into the Raptor cast unit to avoid the transformation for each + * request. Use {@code null} to ignore stop cost. + */ + public TestCostCalculator( + int boardCost, + int transferCost, + double waitReluctanceFactor, + @Nullable int[] stopBoardAlightTransferCosts + ) { + this.boardCost = RaptorCostConverter.toRaptorCost(boardCost); + this.transferCost = RaptorCostConverter.toRaptorCost(transferCost); + this.waitFactor = RaptorCostConverter.toRaptorCost(waitReluctanceFactor); + this.stopBoardAlightTransferCosts = stopBoardAlightTransferCosts; + } + + @Override + public int boardingCost( + boolean firstBoarding, + int prevArrivalTime, + int boardStop, + int boardTime, + TestTripSchedule trip, + RaptorTransferConstraint transferConstraints + ) { + if (transferConstraints.isRegularTransfer()) { + return boardingCostRegularTransfer(firstBoarding, prevArrivalTime, boardStop, boardTime); + } else { + return boardingCostConstrainedTransfer( + prevArrivalTime, + boardStop, + boardTime, + firstBoarding, + transferConstraints + ); + } + } + + @Override + public int onTripRelativeRidingCost(int boardTime, TestTripSchedule tripScheduledBoarded) { + // The relative-transit-time is time spent on transit. We do not know the alight-stop, so + // it is impossible to calculate the "correct" time. But the only thing that maters is that + // the relative difference between to boardings are correct, assuming riding the same trip. + // So, we can use the negative board time as relative-transit-time. + return -boardTime * TRANSIT_RELUCTANCE; + } + + @Override + public int transitArrivalCost( + int boardCost, + int alightSlack, + int transitTime, + TestTripSchedule trip, + int toStop + ) { + int cost = boardCost + TRANSIT_RELUCTANCE * transitTime + waitFactor * alightSlack; + + // Add transfer cost on all alighting events. + // If it turns out to be the last one this cost will be removed during costEgress phase. + if (stopBoardAlightTransferCosts != null) { + cost += stopBoardAlightTransferCosts[toStop]; + } + + return cost; + } + + @Override + public int waitCost(int waitTimeInSeconds) { + return waitFactor * waitTimeInSeconds; + } + + @Override + public int calculateRemainingMinCost(int minTravelTime, int minNumTransfers, int fromStop) { + if (minNumTransfers > -1) { + return ( + boardCost + + ((boardCost + transferCost) * minNumTransfers) + + (TRANSIT_RELUCTANCE * minTravelTime) + ); + } else { + // Remove cost that was added during alighting similar as we do in the costEgress() method + return stopBoardAlightTransferCosts == null + ? (TRANSIT_RELUCTANCE * minTravelTime) + : (TRANSIT_RELUCTANCE * minTravelTime) - stopBoardAlightTransferCosts[fromStop]; + } + } + + @Override + public int costEgress(RaptorAccessEgress egress) { + if (egress.hasRides()) { + return egress.c1() + transferCost; + } else if (stopBoardAlightTransferCosts != null) { + // Remove cost that was added during alighting. + // We do not want to add this cost on last alighting since it should only be applied on transfers + // It has to be done here because during alighting we do not know yet if it will be + // a transfer or not. + return egress.c1() - stopBoardAlightTransferCosts[egress.stop()]; + } else { + return egress.c1(); + } + } + + /** This is public for test purposes only */ + public int boardingCostRegularTransfer( + boolean firstBoarding, + int prevArrivalTime, + int boardStop, + int boardTime + ) { + // Calculate the wait-time before the boarding which should be accounted for in the cost + // calculation. Any slack at the end of the last leg is not part of this, because it is + // already accounted for. If the previous leg is an access leg, then it is already + // time-shifted, which is important for this calculation to be correct. + final int boardWaitTime = boardTime - prevArrivalTime; + + int cost = waitFactor * boardWaitTime; + + cost += firstBoarding ? boardCost : (boardCost + transferCost); + + // If it's first boarding event then it is not a transfer + if (stopBoardAlightTransferCosts != null && !firstBoarding) { + cost += stopBoardAlightTransferCosts[boardStop]; + } + return cost; + } + + /* private methods */ + + private int boardingCostConstrainedTransfer( + int prevArrivalTime, + int boardStop, + int boardTime, + boolean firstBoarding, + RaptorTransferConstraint txConstraints + ) { + // This cast could be avoided, if we added another generic type to the Raptor component, + // but it would be rather messy, just to avoid a single cast. + var tx = (TestTransferConstraint) txConstraints; + + if (tx.isStaySeated()) { + final int boardWaitTime = boardTime - prevArrivalTime; + // For a stay-seated transfer the wait-time is spent on-board and we should use the + // transitReluctance, not the waitReluctance, to find the cost of the time since + // the stop arrival. So we take the time and multiply it with the transit reluctance. + // + // Note! if the boarding happens BEFORE the previous stop arrival, we will get a + // negative time - this is ok, so we allow it in this calculation. + // + // The previous stop arrival might have a small alight-slack, this should be replaced + // with "on-board" time, but the slack should be short and the differance between + // transit reluctance and wait reluctance is also small, so we ignore this. + // + return TRANSIT_RELUCTANCE * boardWaitTime; + } else if (tx.isGuaranteed()) { + // For a guaranteed transfer we skip board- and transfer-cost + final int boardWaitTime = boardTime - prevArrivalTime; + + // StopBoardAlightTransferCost is NOT added to the cost here. This is because a trip-to-trip + // constrained transfer take precedence over stop-to-stop transfer priority (NeTEx station + // transfer priority). + return waitFactor * boardWaitTime; + } + + // fallback to regular transfer + return boardingCostRegularTransfer(firstBoarding, prevArrivalTime, boardStop, boardTime); + } +} diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestRoute.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestRoute.java index 6a606876e0e..e32401abb3d 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestRoute.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestRoute.java @@ -70,7 +70,7 @@ public int numberOfTripSchedules() { @Override public RaptorTripScheduleSearch tripSearch(SearchDirection direction) { - return TripScheduleSearchFactory.create(direction, new TestTripSearchTimetable(this)); + return new TestTripScheduleSearch(direction, schedules); } public List listTransferConstraintsForwardSearch() { diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransitData.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransitData.java index 4f225106ba2..4e3a05f9694 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransitData.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransitData.java @@ -63,7 +63,9 @@ public class TestTransitData private final List> routeIndexesByStopIndex = new ArrayList<>(); private final List routes = new ArrayList<>(); private final List constrainedTransfers = new ArrayList<>(); - private final GeneralizedCostParametersBuilder costParamsBuilder = GeneralizedCostParameters.of(); + private int boardCostSec = 600; + private int transferCostSec = 0; + private double waitReluctance = 1.0; private final int[] stopBoardAlightTransferCosts = new int[NUM_STOPS]; @@ -103,8 +105,10 @@ public int numberOfStops() { @Override public RaptorCostCalculator multiCriteriaCostCalculator() { - return CostCalculatorFactory.createCostCalculator( - costParamsBuilder.build(), + return new TestCostCalculator( + boardCostSec, + transferCostSec, + waitReluctance, stopBoardAlightTransferCosts() ); } @@ -251,6 +255,11 @@ public TestTransitData withTransfer(int fromStop, TestTransfer transfer) { return this; } + public TestTransitData withTransferCost(int transferCostSec) { + this.transferCostSec = transferCostSec; + return this; + } + public TestTransitData withGuaranteedTransfer( TestTripSchedule fromTrip, int fromStop, @@ -305,10 +314,6 @@ public TestTransitData withStopBoardAlightTransferCost(int stop, int boardAlight return this; } - public GeneralizedCostParametersBuilder mcCostParamsBuilder() { - return costParamsBuilder; - } - public ConstrainedTransfer findConstrainedTransfer( TestTripSchedule fromTrip, int fromStop, @@ -353,6 +358,16 @@ public List getPatterns() { return routes.stream().map(TestRoute::pattern).toList(); } + public TestTransitData withBoardCost(int boardCostSec) { + this.boardCostSec = boardCostSec; + return this; + } + + public TestTransitData withWaitReluctance(double waitReluctance) { + this.waitReluctance = waitReluctance; + return this; + } + /* private methods */ private int[] stopBoardAlightTransferCosts() { diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripScheduleSearch.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripScheduleSearch.java new file mode 100644 index 00000000000..fa67697f58e --- /dev/null +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripScheduleSearch.java @@ -0,0 +1,126 @@ +package org.opentripplanner.raptor._data.transit; + +import static org.opentripplanner.raptor.api.model.RaptorConstants.NOT_FOUND; +import static org.opentripplanner.raptor.api.model.RaptorConstants.TIME_NOT_SET; + +import java.util.List; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.opentripplanner.raptor.api.model.RaptorConstants; +import org.opentripplanner.raptor.api.model.RaptorTransferConstraint; +import org.opentripplanner.raptor.api.model.SearchDirection; +import org.opentripplanner.raptor.spi.RaptorBoardOrAlightEvent; +import org.opentripplanner.raptor.spi.RaptorTripScheduleSearch; +import org.opentripplanner.utils.time.TimeUtils; +import org.opentripplanner.utils.tostring.ToStringBuilder; + +class TestTripScheduleSearch + implements + RaptorTripScheduleSearch, RaptorBoardOrAlightEvent { + + private final List trips; + private final SearchDirection direction; + + private int tripIndex; + private int stopPositionInPattern; + /** + * earliest-board-time in forward search, and latest-arrival-time for reverse search + */ + private int timeLimit; + private int time; + + public TestTripScheduleSearch(SearchDirection direction, List trips) { + this.trips = trips; + this.direction = direction; + this.tripIndex = NOT_FOUND; + this.time = TIME_NOT_SET; + } + + @Override + public RaptorBoardOrAlightEvent search( + int earliestBoardTime, + int stopPositionInPattern, + int tripIndexLimit + ) { + this.tripIndex = NOT_FOUND; + this.stopPositionInPattern = stopPositionInPattern; + this.timeLimit = earliestBoardTime; + + return direction.isForward() ? searchForward(tripIndexLimit) : searchInReverse(tripIndexLimit); + } + + private RaptorBoardOrAlightEvent searchForward(int tripIndexLimit) { + final int end = tripIndexLimit == UNBOUNDED_TRIP_INDEX ? trips.size() - 1 : tripIndexLimit - 1; + + for (int i = 0; i <= end; ++i) { + int departureTime = trips.get(i).departure(stopPositionInPattern); + if (timeLimit <= departureTime) { + this.time = departureTime; + this.tripIndex = i; + return this; + } + } + return RaptorBoardOrAlightEvent.empty(timeLimit); + } + + private RaptorBoardOrAlightEvent searchInReverse(int tripIndexLimit) { + final int end = tripIndexLimit == UNBOUNDED_TRIP_INDEX ? 0 : tripIndexLimit + 1; + + for (int i = trips.size() - 1; i >= end; --i) { + int arrivalTime = trips.get(i).arrival(stopPositionInPattern); + if (timeLimit >= arrivalTime) { + this.time = arrivalTime; + this.tripIndex = i; + return this; + } + } + return RaptorBoardOrAlightEvent.empty(timeLimit); + } + + @Override + public int tripIndex() { + return tripIndex; + } + + @Override + public TestTripSchedule trip() { + return trips.get(tripIndex); + } + + @Override + public int stopPositionInPattern() { + return stopPositionInPattern; + } + + @Override + public int time() { + return time; + } + + @Override + public int earliestBoardTime() { + return timeLimit; + } + + @Override + public RaptorTransferConstraint transferConstraint() { + return RaptorTransferConstraint.REGULAR_TRANSFER; + } + + @Override + public boolean empty() { + return tripIndex == NOT_FOUND; + } + + @Override + public String toString() { + return ToStringBuilder + .of(TestTripScheduleSearch.class) + .addBoolIfTrue("REVERSE", direction.isInReverse()) + .addNum("tripIndex", tripIndex, NOT_FOUND) + .addNum("stopPos", stopPositionInPattern) + .addServiceTime("timeLimit", timeLimit) + .addServiceTime("time", time, TIME_NOT_SET) + .toString(); + } +} diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripScheduleSearchTest.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripScheduleSearchTest.java new file mode 100644 index 00000000000..db4ff4610ba --- /dev/null +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripScheduleSearchTest.java @@ -0,0 +1,175 @@ +package org.opentripplanner.raptor._data.transit; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.opentripplanner.raptor.api.model.RaptorConstants.NOT_FOUND; +import static org.opentripplanner.raptor.api.model.SearchDirection.FORWARD; +import static org.opentripplanner.raptor.api.model.SearchDirection.REVERSE; + +import java.util.List; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.opentripplanner.raptor._data.RaptorTestConstants; +import org.opentripplanner.raptor.api.model.SearchDirection; +import org.opentripplanner.utils.time.TimeUtils; + +/** + * This tests another test class - we do it to make sure the + * {@link TestTripScheduleSearch} is following the Raptor SPI contract. + */ +class TestTripScheduleSearchTest implements RaptorTestConstants { + + private static final int NOT_DEFINED = -999_999; + private static final int T09_59_59 = TimeUtils.time("09:59:59"); + private static final int T10_00_00 = TimeUtils.time("10:00:00"); + private static final int T10_00_01 = TimeUtils.time("10:00:01"); + private static final int T10_09_59 = TimeUtils.time("10:09:59"); + private static final int T10_10_00 = TimeUtils.time("10:10:00"); + private static final int T10_10_01 = TimeUtils.time("10:10:01"); + private static final int T10_19_59 = TimeUtils.time("10:19:59"); + private static final int T10_20_00 = TimeUtils.time("10:20:00"); + private static final int T10_20_01 = TimeUtils.time("10:20:01"); + + private static final int TRIP_ONE = 0; + private static final int TRIP_TWO = 1; + + private static final TestTripPattern PATTERN = TestTripPattern.pattern("R1", STOP_A, STOP_B); + + private static final List ONE_TRIP = List.of( + TestTripSchedule.schedule(PATTERN).times("10:00 10:10").build() + ); + + private static final List TWO_TRIPS = List.of( + TestTripSchedule.schedule(PATTERN).times("10:00 10:10").build(), + TestTripSchedule.schedule(PATTERN).times("10:10 10:20").build() + ); + + static List tripSearchWithOneTripTestCases() { + return List.of( + Arguments.of(FORWARD, STOP_POS_0, T09_59_59, T10_00_00, Status.OK), + Arguments.of(FORWARD, STOP_POS_0, T10_00_00, T10_00_00, Status.OK), + Arguments.of(FORWARD, STOP_POS_0, T10_00_01, NOT_DEFINED, Status.EMPTY), + Arguments.of(FORWARD, STOP_POS_1, T10_09_59, T10_10_00, Status.OK), + Arguments.of(FORWARD, STOP_POS_1, T10_10_00, T10_10_00, Status.OK), + Arguments.of(FORWARD, STOP_POS_1, T10_10_01, NOT_DEFINED, Status.EMPTY), + Arguments.of(REVERSE, STOP_POS_0, T09_59_59, NOT_DEFINED, Status.EMPTY), + Arguments.of(REVERSE, STOP_POS_0, T10_00_00, T10_00_00, Status.OK), + Arguments.of(REVERSE, STOP_POS_0, T10_00_01, T10_00_00, Status.OK), + Arguments.of(REVERSE, STOP_POS_1, T10_09_59, NOT_DEFINED, Status.EMPTY), + Arguments.of(REVERSE, STOP_POS_1, T10_10_00, T10_10_00, Status.OK), + Arguments.of(REVERSE, STOP_POS_1, T10_10_01, T10_10_00, Status.OK) + ); + } + + @ParameterizedTest + @MethodSource("tripSearchWithOneTripTestCases") + void tripSearchWithOneTrip( + SearchDirection direction, + int stopPos, + int searchTime, + int expTime, + Status expStatus + ) { + var search = new TestTripScheduleSearch(direction, ONE_TRIP); + var result = search.search(searchTime, stopPos); + + if (expStatus == Status.EMPTY) { + assertTrue(result.empty()); + assertTime(searchTime, result.earliestBoardTime()); + assertEquals(NOT_FOUND, result.tripIndex()); + } else if (expStatus == Status.OK) { + assertFalse(result.empty()); + assertEquals(stopPos, result.stopPositionInPattern()); + assertTime(expTime, result.time()); + assertTime(searchTime, result.earliestBoardTime()); + assertEquals(0, result.tripIndex()); + } + + if (!result.empty()) { + // A second search fails if the first search succeeded + int tripIndex = result.tripIndex(); + var e = search.search(direction.isForward() ? T09_59_59 : T10_20_01, stopPos, tripIndex); + assertTrue(e.empty()); + } + } + + static List tripSearchWithTwoTripsTestCases() { + return List.of( + Arguments.of(FORWARD, STOP_POS_0, T09_59_59, T10_00_00, TRIP_ONE), + Arguments.of(FORWARD, STOP_POS_0, T10_00_00, T10_00_00, TRIP_ONE), + Arguments.of(FORWARD, STOP_POS_0, T10_00_01, T10_10_00, TRIP_TWO), + Arguments.of(FORWARD, STOP_POS_0, T10_09_59, T10_10_00, TRIP_TWO), + Arguments.of(FORWARD, STOP_POS_0, T10_10_00, T10_10_00, TRIP_TWO), + Arguments.of(FORWARD, STOP_POS_0, T10_10_01, NOT_DEFINED, NOT_FOUND), + Arguments.of(FORWARD, STOP_POS_1, T10_09_59, T10_10_00, TRIP_ONE), + Arguments.of(FORWARD, STOP_POS_1, T10_10_00, T10_10_00, TRIP_ONE), + Arguments.of(FORWARD, STOP_POS_1, T10_10_01, T10_20_00, TRIP_TWO), + Arguments.of(FORWARD, STOP_POS_1, T10_19_59, T10_20_00, TRIP_TWO), + Arguments.of(FORWARD, STOP_POS_1, T10_20_00, T10_20_00, TRIP_TWO), + Arguments.of(FORWARD, STOP_POS_1, T10_20_01, NOT_DEFINED, NOT_FOUND), + Arguments.of(REVERSE, STOP_POS_0, T09_59_59, NOT_DEFINED, NOT_FOUND), + Arguments.of(REVERSE, STOP_POS_0, T10_00_00, T10_00_00, TRIP_ONE), + Arguments.of(REVERSE, STOP_POS_0, T10_00_01, T10_00_00, TRIP_ONE), + Arguments.of(REVERSE, STOP_POS_0, T10_09_59, T10_00_00, TRIP_ONE), + Arguments.of(REVERSE, STOP_POS_0, T10_10_00, T10_10_00, TRIP_TWO), + Arguments.of(REVERSE, STOP_POS_0, T10_10_01, T10_10_00, TRIP_TWO), + Arguments.of(REVERSE, STOP_POS_1, T10_09_59, NOT_DEFINED, NOT_FOUND), + Arguments.of(REVERSE, STOP_POS_1, T10_10_00, T10_10_00, TRIP_ONE), + Arguments.of(REVERSE, STOP_POS_1, T10_10_01, T10_10_00, TRIP_ONE), + Arguments.of(REVERSE, STOP_POS_1, T10_19_59, T10_10_00, TRIP_ONE), + Arguments.of(REVERSE, STOP_POS_1, T10_20_00, T10_20_00, TRIP_TWO), + Arguments.of(REVERSE, STOP_POS_1, T10_20_01, T10_20_00, TRIP_TWO) + ); + } + + @ParameterizedTest + @MethodSource("tripSearchWithTwoTripsTestCases") + void tripSearchWithTwoTrips( + SearchDirection direction, + int stopPos, + int searchTime, + int expTime, + int expTripIndex + ) { + var search = new TestTripScheduleSearch(direction, TWO_TRIPS); + var result = search.search(searchTime, stopPos); + + if (expTripIndex == NOT_FOUND) { + assertTrue(result.empty()); + assertTime(searchTime, result.earliestBoardTime()); + assertEquals(NOT_FOUND, result.tripIndex()); + } else { + assertFalse(result.empty()); + assertEquals(stopPos, result.stopPositionInPattern()); + assertTime(expTime, result.time()); + assertTime(searchTime, result.earliestBoardTime()); + assertEquals(expTripIndex, result.tripIndex()); + } + + if (!result.empty()) { + int secondTrip = direction.isForward() ? TRIP_TWO : TRIP_ONE; + int firstTrip = direction.isForward() ? TRIP_ONE : TRIP_TWO; + int tripIndex = result.tripIndex(); + var e = search.search(direction.isForward() ? T09_59_59 : T10_20_01, stopPos, tripIndex); + + if (tripIndex == secondTrip) { + assertFalse(e.empty()); + assertEquals(firstTrip, result.tripIndex()); + } else { + assertTrue(e.empty()); + assertEquals(NOT_FOUND, result.tripIndex()); + } + } + } + + private static void assertTime(int expected, int actual) { + assertEquals(TimeUtils.timeToStrLong(expected), TimeUtils.timeToStrLong(actual)); + } + + private enum Status { + OK, + EMPTY, + } +} diff --git a/raptor/src/test/java/org/opentripplanner/raptor/api/model/RaptorCostConverterTest.java b/raptor/src/test/java/org/opentripplanner/raptor/api/model/RaptorCostConverterTest.java index c32daa8c82c..036ab4d4346 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/api/model/RaptorCostConverterTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/api/model/RaptorCostConverterTest.java @@ -4,7 +4,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; -import org.opentripplanner.raptor.api.model.RaptorCostConverter; public class RaptorCostConverterTest { diff --git a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/B05_EgressStopBoardAlightTransferCostTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/B05_EgressStopBoardAlightTransferCostTest.java index df38aabc483..7f2dd2f0072 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/B05_EgressStopBoardAlightTransferCostTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/B05_EgressStopBoardAlightTransferCostTest.java @@ -39,7 +39,7 @@ void setup() { .withRoute(route("R1", STOP_B, STOP_C).withTimetable(schedule("0:10, 0:14"))) .withRoute(route("R2", STOP_C, STOP_D).withTimetable(schedule("0:18, 0:20"))); - data.mcCostParamsBuilder().transferCost(0).boardCost(0); + data.withTransferCost(0).withBoardCost(0); data.withStopBoardAlightTransferCost(STOP_D, 60000); requestBuilder diff --git a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/E01_StaySeatedTransferTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/E01_StaySeatedTransferTest.java index d1d1f2191f5..00456f9a2a3 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/E01_StaySeatedTransferTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/E01_StaySeatedTransferTest.java @@ -64,7 +64,7 @@ public void setup() { STOP_B, TransferConstraint.of().staySeated().build() ); - data.mcCostParamsBuilder().transferCost(100); + data.withTransferCost(100); // NOTE! No search-window is set. requestBuilder diff --git a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/E02_GuaranteedWalkTransferTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/E02_GuaranteedWalkTransferTest.java index c448560c7fb..cd2b1f3c25e 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/E02_GuaranteedWalkTransferTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/E02_GuaranteedWalkTransferTest.java @@ -61,7 +61,7 @@ public void setup() { data.withRoutes(r1, r2); data.withGuaranteedTransfer(tripA, STOP_B, tripB, STOP_C); data.withTransfer(STOP_B, TestTransfer.transfer(STOP_C, 30)); - data.mcCostParamsBuilder().transferCost(100); + data.withTransferCost(100); // NOTE! No search-window is set. requestBuilder diff --git a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/E03_NotAllowedConstrainedTransferTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/E03_NotAllowedConstrainedTransferTest.java index 0866042548d..1a324796784 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/E03_NotAllowedConstrainedTransferTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/E03_NotAllowedConstrainedTransferTest.java @@ -64,7 +64,7 @@ public void setup() { // transit model, a not-allowed transfer should apply to ALL trips if constraint is passed // to raptor. data.withConstrainedTransfer(tripR1a, STOP_B, tripR2a, STOP_B, TestTransitData.TX_NOT_ALLOWED); - data.mcCostParamsBuilder().transferCost(100); + data.withTransferCost(100); // NOTE! No search-window set requestBuilder diff --git a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/H11_GuaranteedTransferWithFlexAccessTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/H11_GuaranteedTransferWithFlexAccessTest.java index b074f34fbaf..64e4f728d09 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/H11_GuaranteedTransferWithFlexAccessTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/H11_GuaranteedTransferWithFlexAccessTest.java @@ -54,7 +54,7 @@ public void setup() { data.withRoutes(r1, r2); data.withGuaranteedTransfer(tripA, STOP_C, tripB, STOP_C); data.withTransfer(STOP_A, TestTransfer.transfer(STOP_B, D10m)); - data.mcCostParamsBuilder().transferCost(100); + data.withTransferCost(100); requestBuilder .searchParams() diff --git a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/J01_PassThroughTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/J01_PassThroughTest.java index d37a1adf61f..c7c3b60310f 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/J01_PassThroughTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/J01_PassThroughTest.java @@ -163,7 +163,7 @@ void passThroughPointInTheMiddle() { var r2 = route("R2", STOP_A, STOP_C, STOP_D).withTimetable(schedule("0:02 0:10 0:50")); data.withRoutes(r1, r2); - data.mcCostParamsBuilder().transferCost(100); + data.withTransferCost(100); var requestBuilder = prepareRequest(); @@ -195,7 +195,7 @@ void multiplePassThroughPoints() { .withTimetable(schedule("0:15 0:20 0:30 0:50")); data.withRoutes(r1, r2); - data.mcCostParamsBuilder().transferCost(100); + data.withTransferCost(100); var requestBuilder = prepareRequest(); diff --git a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/J02_ViaSearchTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/J02_ViaSearchTest.java index 581cd117cb1..e7ca107a39a 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/J02_ViaSearchTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/J02_ViaSearchTest.java @@ -258,7 +258,7 @@ void multipleViaPoints() { ) ); - data.mcCostParamsBuilder().transferCost(100); + data.withTransferCost(100); var requestBuilder = prepareRequest(); diff --git a/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/path/PathMapperTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/path/PathMapperTest.java index bac2c1b0431..8e11dc7dcd2 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/path/PathMapperTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/path/PathMapperTest.java @@ -22,16 +22,16 @@ import org.junit.jupiter.api.Test; import org.opentripplanner.raptor._data.RaptorTestConstants; import org.opentripplanner.raptor._data.stoparrival.FlexAccessAndEgressPathTestCase; +import org.opentripplanner.raptor._data.transit.TestCostCalculator; import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.path.RaptorPath; import org.opentripplanner.raptor.spi.RaptorSlackProvider; -import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.DefaultCostCalculator; public class PathMapperTest implements RaptorTestConstants { private static final RaptorSlackProvider FLEX_SLACK_PROVIDER = FlexAccessAndEgressPathTestCase.SLACK_PROVIDER; - private static final DefaultCostCalculator FLEX_COST_CALCULATOR = + private static final TestCostCalculator FLEX_COST_CALCULATOR = FlexAccessAndEgressPathTestCase.C1_CALCULATOR; /* BASIC CASES */ diff --git a/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/path/PathParetoSetComparatorsTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/path/PathParetoSetComparatorsTest.java index 296103499a1..00558b6f63d 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/path/PathParetoSetComparatorsTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/path/PathParetoSetComparatorsTest.java @@ -21,7 +21,6 @@ import org.opentripplanner.raptor.api.model.GeneralizedCostRelaxFunction; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.api.model.RelaxFunction; -import org.opentripplanner.raptor.api.model.SearchDirection; import org.opentripplanner.raptor.api.path.RaptorPath; import org.opentripplanner.raptor.rangeraptor.internalapi.ParetoSetCost; import org.opentripplanner.raptor.rangeraptor.internalapi.ParetoSetTime; From 4428329acba7fc2d23a28fa5e49c58a975dfdc4b Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Mon, 4 Nov 2024 10:14:21 +0100 Subject: [PATCH 184/213] refactor: Add toString() to EmptyBoardOrAlightEvent --- .../opentripplanner/raptor/spi/EmptyBoardOrAlightEvent.java | 6 ++++++ .../raptor/spi/EmptyBoardOrAlightEventTest.java | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/raptor/src/main/java/org/opentripplanner/raptor/spi/EmptyBoardOrAlightEvent.java b/raptor/src/main/java/org/opentripplanner/raptor/spi/EmptyBoardOrAlightEvent.java index 07984903f2a..4c0b76d99f9 100644 --- a/raptor/src/main/java/org/opentripplanner/raptor/spi/EmptyBoardOrAlightEvent.java +++ b/raptor/src/main/java/org/opentripplanner/raptor/spi/EmptyBoardOrAlightEvent.java @@ -4,6 +4,7 @@ import org.opentripplanner.raptor.api.model.RaptorConstants; import org.opentripplanner.raptor.api.model.RaptorTransferConstraint; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; +import org.opentripplanner.utils.time.TimeUtils; record EmptyBoardOrAlightEvent(int earliestBoardTime) implements RaptorBoardOrAlightEvent { @@ -44,4 +45,9 @@ public void boardWithFallback( ) { alternativeBoardingFallback.accept(this); } + + @Override + public String toString() { + return "EmptyBoardOrAlightEvent(" + TimeUtils.timeToStrLong(earliestBoardTime) + ")"; + } } diff --git a/raptor/src/test/java/org/opentripplanner/raptor/spi/EmptyBoardOrAlightEventTest.java b/raptor/src/test/java/org/opentripplanner/raptor/spi/EmptyBoardOrAlightEventTest.java index 0ae5a09aa18..76c05386f18 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/spi/EmptyBoardOrAlightEventTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/spi/EmptyBoardOrAlightEventTest.java @@ -15,6 +15,6 @@ void testEmptyBoardOrAlightEvent() { assertTrue(subject.empty()); assertEquals(300, subject.earliestBoardTime()); assertEquals(RaptorTransferConstraint.REGULAR_TRANSFER, subject.transferConstraint()); - assertEquals("EmptyBoardOrAlightEvent[earliestBoardTime=300]", subject.toString()); + assertEquals("EmptyBoardOrAlightEvent(00:05:00)", subject.toString()); } } From 32823404a97de72120c9ed981ffa7f479f762e7e Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Mon, 4 Nov 2024 10:23:26 +0100 Subject: [PATCH 185/213] refactor: Fix RaptorArchitectureTest --- .../raptor/RaptorArchitectureTest.java | 44 ++++----- .../raptor/_support/arch/ArchComponent.java | 35 +++++++ .../raptor/_support/arch/Module.java | 23 +++++ .../raptor/_support/arch/Package.java | 91 +++++++++++++++++++ 4 files changed, 172 insertions(+), 21 deletions(-) create mode 100644 raptor/src/test/java/org/opentripplanner/raptor/_support/arch/ArchComponent.java create mode 100644 raptor/src/test/java/org/opentripplanner/raptor/_support/arch/Module.java create mode 100644 raptor/src/test/java/org/opentripplanner/raptor/_support/arch/Package.java diff --git a/raptor/src/test/java/org/opentripplanner/raptor/RaptorArchitectureTest.java b/raptor/src/test/java/org/opentripplanner/raptor/RaptorArchitectureTest.java index 657e060c30b..009812b22b5 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/RaptorArchitectureTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/RaptorArchitectureTest.java @@ -1,21 +1,23 @@ package org.opentripplanner.raptor; import static com.tngtech.archunit.library.dependencies.SlicesRuleDefinition.slices; -import static org.opentripplanner.OtpArchitectureModules.FRAMEWORK_UTILS; -import static org.opentripplanner.OtpArchitectureModules.GNU_TROVE; -import static org.opentripplanner.OtpArchitectureModules.OTP_ROOT; -import static org.opentripplanner.OtpArchitectureModules.RAPTOR_API; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import org.opentripplanner._support.arch.ArchComponent; -import org.opentripplanner._support.arch.Module; -import org.opentripplanner._support.arch.Package; +import org.opentripplanner.raptor._support.arch.ArchComponent; +import org.opentripplanner.raptor._support.arch.Module; +import org.opentripplanner.raptor._support.arch.Package; public class RaptorArchitectureTest { + private static final Package OTP_ROOT = Package.of("org.opentripplanner"); + private static final Package GNU_TROVE = Package.of("gnu.trove.."); + private static final Package OTP_UTILS = OTP_ROOT.subPackage("utils.."); + + /* The Raptor module, all packages that other paths of OTP may use. */ private static final Package RAPTOR = OTP_ROOT.subPackage("raptor"); + private static final Package RAPTOR_API = RAPTOR.subPackage("api.."); private static final Package API = RAPTOR.subPackage("api"); private static final Package API_MODEL = API.subPackage("model"); private static final Package API_PATH = API.subPackage("path"); @@ -49,7 +51,7 @@ public class RaptorArchitectureTest { * Packages used by standard-range-raptor and multi-criteria-range-raptor. */ private static final Module RR_SHARED_PACKAGES = Module.of( - FRAMEWORK_UTILS, + OTP_UTILS, GNU_TROVE, RAPTOR_API, RAPTOR_SPI, @@ -64,37 +66,37 @@ public class RaptorArchitectureTest { @Test void enforcePackageDependenciesRaptorAPI() { - API_MODEL.dependsOn(FRAMEWORK_UTILS).verify(); - API_PATH.dependsOn(FRAMEWORK_UTILS, API_MODEL).verify(); - var debug = API.subPackage("debug").dependsOn(FRAMEWORK_UTILS).verify(); - var view = API.subPackage("view").dependsOn(FRAMEWORK_UTILS, API_MODEL).verify(); + API_MODEL.dependsOn(OTP_UTILS).verify(); + API_PATH.dependsOn(OTP_UTILS, API_MODEL).verify(); + var debug = API.subPackage("debug").dependsOn(OTP_UTILS).verify(); + var view = API.subPackage("view").dependsOn(OTP_UTILS, API_MODEL).verify(); var request = API .subPackage("request") - .dependsOn(FRAMEWORK_UTILS, debug, API_MODEL, API_PATH, view) + .dependsOn(OTP_UTILS, debug, API_MODEL, API_PATH, view) .verify(); - API.subPackage("response").dependsOn(FRAMEWORK_UTILS, API_MODEL, API_PATH, request).verify(); + API.subPackage("response").dependsOn(OTP_UTILS, API_MODEL, API_PATH, request).verify(); } @Test void enforcePackageDependenciesRaptorSPI() { - RAPTOR.subPackage("spi").dependsOn(FRAMEWORK_UTILS, API_MODEL, API_PATH).verify(); + RAPTOR.subPackage("spi").dependsOn(OTP_UTILS, API_MODEL, API_PATH).verify(); } @Test void enforcePackageDependenciesUtil() { - RAPTOR_UTIL.dependsOn(FRAMEWORK_UTILS, RAPTOR_SPI).verify(); + RAPTOR_UTIL.dependsOn(OTP_UTILS, RAPTOR_SPI).verify(); RAPTOR_UTIL_PARETO_SET.dependsOn(RAPTOR_UTIL_COMPOSITE).verify(); RAPTOR_UTIL_COMPOSITE.verify(); } @Test void enforcePackageDependenciesRaptorPath() { - RAPTOR_PATH.dependsOn(FRAMEWORK_UTILS, API_PATH, API_MODEL, RAPTOR_SPI, RR_TRANSIT).verify(); + RAPTOR_PATH.dependsOn(OTP_UTILS, API_PATH, API_MODEL, RAPTOR_SPI, RR_TRANSIT).verify(); } @Test void enforcePackageDependenciesInRangeRaptorSharedPackages() { - RR_INTERNAL_API.dependsOn(FRAMEWORK_UTILS, RAPTOR_API, RAPTOR_SPI).verify(); + RR_INTERNAL_API.dependsOn(OTP_UTILS, RAPTOR_API, RAPTOR_SPI).verify(); RR_DEBUG.dependsOn(RR_SHARED_PACKAGES).verify(); RR_LIFECYCLE.dependsOn(RR_SHARED_PACKAGES).verify(); RR_TRANSIT.dependsOn(RR_SHARED_PACKAGES, RR_DEBUG, RR_LIFECYCLE).verify(); @@ -200,7 +202,7 @@ void enforcePackageDependenciesInMultiCriteriaImplementation() { void enforcePackageDependenciesInRaptorService() { SERVICE .dependsOn( - FRAMEWORK_UTILS, + OTP_UTILS, RAPTOR_API, RAPTOR_SPI, RAPTOR_UTIL, @@ -216,6 +218,7 @@ void enforcePackageDependenciesInRaptorService() { void enforcePackageDependenciesInConfigure() { CONFIGURE .dependsOn( + OTP_UTILS, RAPTOR_API, RAPTOR_SPI, RANGE_RAPTOR, @@ -223,8 +226,7 @@ void enforcePackageDependenciesInConfigure() { RR_TRANSIT, RR_CONTEXT, RR_STD_CONFIGURE, - RR_MC_CONFIGURE, - FRAMEWORK_UTILS + RR_MC_CONFIGURE ) .verify(); } diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_support/arch/ArchComponent.java b/raptor/src/test/java/org/opentripplanner/raptor/_support/arch/ArchComponent.java new file mode 100644 index 00000000000..eb95bfaf708 --- /dev/null +++ b/raptor/src/test/java/org/opentripplanner/raptor/_support/arch/ArchComponent.java @@ -0,0 +1,35 @@ +package org.opentripplanner.raptor._support.arch; + +import com.tngtech.archunit.core.domain.JavaClasses; +import com.tngtech.archunit.core.importer.ClassFileImporter; +import com.tngtech.archunit.core.importer.ImportOption; +import java.util.Collection; + +public interface ArchComponent { + /** + * ArchUnit cached set of classes in OTP. It takes a bit of time to build the set of + * classes, so it is nice to avoid this for every test. ArchUnit also support JUnit5 + * with a @ArchTest annotation which cache and inject the classes, but the test become + * slightly more complex by using it and chasing it here works fine. + */ + JavaClasses OTP_CLASSES = new ClassFileImporter() + .withImportOption(new ImportOption.DoNotIncludeTests()) + .importPackages("org.opentripplanner"); + + /** + * All Java packages in {@code java.*} and {@code javax.*} + */ + Module JAVA_PACKAGES = Module.of( + Package.of("java.."), + Package.of("javax.(*).."), + Package.of("jakarta.(*)..") + ); + + Module LOG_FRAMEWORK = Module.of(Package.of("org.slf4j")); + + Collection packages(); + + default Collection packageIdentifiers() { + return packages().stream().map(Package::packageIdentifier).toList(); + } +} diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_support/arch/Module.java b/raptor/src/test/java/org/opentripplanner/raptor/_support/arch/Module.java new file mode 100644 index 00000000000..c6b16a8faf5 --- /dev/null +++ b/raptor/src/test/java/org/opentripplanner/raptor/_support/arch/Module.java @@ -0,0 +1,23 @@ +package org.opentripplanner.raptor._support.arch; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +public class Module implements ArchComponent { + + private final List packages; + + private Module(List packages) { + this.packages = packages; + } + + public static Module of(ArchComponent... components) { + return new Module(Arrays.stream(components).flatMap(c -> c.packages().stream()).toList()); + } + + @Override + public Collection packages() { + return packages; + } +} diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_support/arch/Package.java b/raptor/src/test/java/org/opentripplanner/raptor/_support/arch/Package.java new file mode 100644 index 00000000000..d87daf06448 --- /dev/null +++ b/raptor/src/test/java/org/opentripplanner/raptor/_support/arch/Package.java @@ -0,0 +1,91 @@ +package org.opentripplanner.raptor._support.arch; + +import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes; + +import com.tngtech.archunit.lang.ArchRule; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +@SuppressWarnings("UnusedReturnValue") +public class Package implements ArchComponent { + + private final String packageIdentifier; + private final Set allowedPackages = new HashSet<>(); + + private Package(String packageIdentifier) { + this.packageIdentifier = packageIdentifier; + } + + public static Package of(String packageIdentifier) { + return new Package(packageIdentifier); + } + + public Package subPackage(String packageIdentifier) { + return new Package(this.packageIdentifier + "." + packageIdentifier); + } + + public String packageIdentifier() { + return packageIdentifier; + } + + public String packageIdentifierAllSubPackages() { + return packageIdentifier + ".(**)"; + } + + public Package dependsOn(ArchComponent... allowedDependencies) { + for (ArchComponent it : allowedDependencies) { + this.allowedPackages.addAll(it.packages()); + } + return this; + } + + @Override + public Set packages() { + return Set.of(this); + } + + public Package verify() { + ArchRule rule = classes() + .that() + .resideInAPackage(packageIdentifier) + .should() + .onlyDependOnClassesThat() + .resideInAnyPackage(allAllowedPackages()); + + rule.check(OTP_CLASSES); + return this; + } + + /** + * This includes the allowed packages plus all globally allowed packages like: + *

      + *
    • Java framework
    • + *
    • Log framework
    • + *
    • Arrays (in package "")
    • + *
    + */ + private String[] allAllowedPackages() { + List all = new ArrayList<>(); + + for (Package p : allowedPackages) { + all.add(p.packageIdentifier()); + } + // Allow all packages to depend on Java + for (Package p : JAVA_PACKAGES.packages()) { + all.add(p.packageIdentifier()); + } + // Allow all packages to depend on the log framework + for (Package p : LOG_FRAMEWORK.packages()) { + all.add(p.packageIdentifier()); + } + // Allow all packages to depend on itself + all.add(packageIdentifier); + + // Allow all packages to depend on array types in package "" (empty) + all.add(""); + + return all.toArray(String[]::new); + } +} From a641aa5fe2edc0ff5a15200374295b7ebc670fb4 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Mon, 4 Nov 2024 10:40:07 +0100 Subject: [PATCH 186/213] refactor: Delete D02_TransitModeReluctanceTest, transit reluctance per mode is NOT a Raptor feature The deleted test does not test any business logic in OTP, it only tests logic in the test framework. I will remove this logic from the Raptor test framework. --- .../D02_TransitModeReluctanceTest.java | 99 ------------------- 1 file changed, 99 deletions(-) delete mode 100644 raptor/src/test/java/org/opentripplanner/raptor/moduletests/D02_TransitModeReluctanceTest.java diff --git a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/D02_TransitModeReluctanceTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/D02_TransitModeReluctanceTest.java deleted file mode 100644 index 970ae42a3ef..00000000000 --- a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/D02_TransitModeReluctanceTest.java +++ /dev/null @@ -1,99 +0,0 @@ -package org.opentripplanner.raptor.moduletests; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.raptor._data.api.PathUtils.pathsToString; -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 java.util.stream.Stream; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.MethodSource; -import org.opentripplanner.raptor.RaptorService; -import org.opentripplanner.raptor._data.RaptorTestConstants; -import org.opentripplanner.raptor._data.transit.TestAccessEgress; -import org.opentripplanner.raptor._data.transit.TestTransitData; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; -import org.opentripplanner.raptor.api.request.RaptorProfile; -import org.opentripplanner.raptor.api.request.RaptorRequestBuilder; -import org.opentripplanner.raptor.configure.RaptorConfig; -import org.opentripplanner.raptor.moduletests.support.ModuleTestDebugLogging; -import org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig; - -/** - * FEATURE UNDER TEST - *

    - * Raptor should return transit option with the lowest cost when to rides are equal, but have - * different transit-reluctance. - */ -public class D02_TransitModeReluctanceTest implements RaptorTestConstants { - - public static final double[] PREFER_R1 = { 0.99, 1.0 }; - public static final double[] PREFER_R2 = { 0.9, 0.89 }; - private final TestTransitData data = new TestTransitData(); - private final RaptorRequestBuilder requestBuilder = new RaptorRequestBuilder<>(); - private final RaptorService raptorService = new RaptorService<>( - RaptorConfig.defaultConfigForTest() - ); - - @BeforeEach - public void setup() { - // Given 2 identical routes R1 and R2 - data.withRoute( - route(pattern("R1", STOP_A, STOP_B)) - .withTimetable(schedule("00:01, 00:02:40").transitReluctanceIndex(0)) - ); - data.withRoute( - route(pattern("R2", STOP_A, STOP_B)) - .withTimetable(schedule("00:01, 00:02:40").transitReluctanceIndex(1)) - ); - - requestBuilder - .searchParams() - .addAccessPaths(TestAccessEgress.walk(STOP_A, D30s)) - .addEgressPaths(TestAccessEgress.walk(STOP_B, D20s)) - .earliestDepartureTime(T00_00) - .latestArrivalTime(T00_10) - .timetable(true); - - requestBuilder.profile(RaptorProfile.MULTI_CRITERIA); - - ModuleTestDebugLogging.setupDebugLogging(data, requestBuilder); - } - - static Stream testCases() { - return RaptorModuleTestConfig - .multiCriteria() - .build() - .stream() - .flatMap(config -> - Stream.of( - Arguments.of( - PREFER_R1, - config, - "Walk 30s ~ A ~ BUS R1 0:01 0:02:40 ~ B ~ Walk 20s " + "[0:00:30 0:03 2m30s Tₓ0 C₁799]" - ), - Arguments.of( - PREFER_R2, - config, - "Walk 30s ~ A ~ BUS R2 0:01 0:02:40 ~ B ~ Walk 20s " + "[0:00:30 0:03 2m30s Tₓ0 C₁789]" - ) - ) - ); - } - - @ParameterizedTest(name = "Transit reluctance [R1, R2]: {0}, profile: {1}") - @MethodSource("testCases") - void testTransitReluctance( - double[] transitReluctance, - RaptorModuleTestConfig testConfig, - String expected - ) { - data.mcCostParamsBuilder().transitReluctanceFactors(transitReluctance); - var request = testConfig.apply(requestBuilder).build(); - var response = raptorService.route(request, data); - assertEquals(expected, pathsToString(response)); - } -} From 863719cba1a1a679ec6d4928e2aa4e3231dbdb77 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Mon, 4 Nov 2024 10:44:06 +0100 Subject: [PATCH 187/213] refactor: Delete D03_UnpreferredRouteTest, unpreferred routes is NOT a Raptor feature. The deleted test does not test any business logic in OTP, it only tests logic in the test framework. I will remove this logic from the Raptor test framework. --- .../moduletests/D03_UnpreferredRouteTest.java | 110 ------------------ 1 file changed, 110 deletions(-) delete mode 100644 raptor/src/test/java/org/opentripplanner/raptor/moduletests/D03_UnpreferredRouteTest.java diff --git a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/D03_UnpreferredRouteTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/D03_UnpreferredRouteTest.java deleted file mode 100644 index 4a7aac19e01..00000000000 --- a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/D03_UnpreferredRouteTest.java +++ /dev/null @@ -1,110 +0,0 @@ -package org.opentripplanner.raptor.moduletests; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.raptor._data.api.PathUtils.pathsToString; -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 java.util.BitSet; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.opentripplanner.raptor.RaptorService; -import org.opentripplanner.raptor._data.RaptorTestConstants; -import org.opentripplanner.raptor._data.transit.TestAccessEgress; -import org.opentripplanner.raptor._data.transit.TestTransitData; -import org.opentripplanner.raptor._data.transit.TestTripSchedule; -import org.opentripplanner.raptor.api.request.RaptorProfile; -import org.opentripplanner.raptor.api.request.RaptorRequestBuilder; -import org.opentripplanner.raptor.configure.RaptorConfig; -import org.opentripplanner.raptor.moduletests.support.ModuleTestDebugLogging; -import org.opentripplanner.routing.api.request.framework.CostLinearFunction; -import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; -import org.opentripplanner.transit.model.framework.FeedScopedId; - -/** - * FEATURE UNDER TEST - *

    - * On transit options with identical cost, raptor should drop the unpreferred one which is modeled - * by route penalty. - */ -public class D03_UnpreferredRouteTest implements RaptorTestConstants { - - private static final String EXPECTED = - "Walk 30s ~ A ~ BUS %s 0:01 0:02:40 ~ B ~ Walk 20s " + "[0:00:30 0:03 2m30s Tₓ0 C₁%d]"; - private static final FeedScopedId ROUTE_ID_1 = TimetableRepositoryForTest.id("1"); - private static final FeedScopedId ROUTE_ID_2 = TimetableRepositoryForTest.id("2"); - private static final CostLinearFunction UNPREFERRED_C1 = CostLinearFunction.of("5m + 1t"); - private final TestTransitData data = new TestTransitData(); - private final RaptorRequestBuilder requestBuilder = new RaptorRequestBuilder<>(); - private final RaptorService raptorService = new RaptorService<>( - RaptorConfig.defaultConfigForTest() - ); - - @BeforeEach - public void setup() { - // Given 2 identical routes R1 and R2 - data.withRoute( - route( - pattern("R1", STOP_A, STOP_B) - .withRoute(TimetableRepositoryForTest.route(ROUTE_ID_1).build()) - ) - .withTimetable(schedule("00:01, 00:02:40")) - ); - data.withRoute( - route( - pattern("R2", STOP_A, STOP_B) - .withRoute(TimetableRepositoryForTest.route(ROUTE_ID_2).build()) - ) - .withTimetable(schedule("00:01, 00:02:40")) - ); - - requestBuilder - .searchParams() - .addAccessPaths(TestAccessEgress.walk(STOP_A, D30s)) - .addEgressPaths(TestAccessEgress.walk(STOP_B, D20s)) - .earliestDepartureTime(T00_00) - .latestArrivalTime(T00_10) - .timetable(true); - - requestBuilder.profile(RaptorProfile.MULTI_CRITERIA); - - ModuleTestDebugLogging.setupDebugLogging(data, requestBuilder); - } - - @Test - public void unpreferR1() { - unpreferRoute(ROUTE_ID_1); - - var request = requestBuilder.build(); - var response = raptorService.route(request, data); - - // Verify R1 is preferred and the cost is correct - assertEquals(expected("R2", 800), pathsToString(response)); - } - - @Test - public void unpreferR2() { - unpreferRoute(ROUTE_ID_2); - - var request = requestBuilder.build(); - var response = raptorService.route(request, data); - - assertEquals(expected("R1", 800), pathsToString(response)); - } - - private void unpreferRoute(FeedScopedId routeId) { - final BitSet patterns = new BitSet(); - for (var pattern : data.getPatterns()) { - if (pattern.route().getId().equals(routeId)) { - patterns.set(pattern.patternIndex()); - } - } - data.mcCostParamsBuilder().unpreferredPatterns(patterns); - data.mcCostParamsBuilder().unpreferredCost(UNPREFERRED_C1); - } - - private static String expected(String route, int cost) { - return String.format(EXPECTED, route, cost); - } -} From 2b0111c7e1dcb1ce357bb07c7cb2b28836d95666 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Mon, 4 Nov 2024 10:51:34 +0100 Subject: [PATCH 188/213] refactor: Use Raptor test constants, not otp domain --- .../opentripplanner/raptor/moduletests/J01_PassThroughTest.java | 2 +- .../opentripplanner/raptor/moduletests/J02_ViaSearchTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/J01_PassThroughTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/J01_PassThroughTest.java index c7c3b60310f..6047280488a 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/J01_PassThroughTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/J01_PassThroughTest.java @@ -1,7 +1,7 @@ package org.opentripplanner.raptor.moduletests; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.model.plan.PlanTestConstants.D2m; +import static org.opentripplanner.raptor._data.RaptorTestConstants.D2m; import static org.opentripplanner.raptor._data.RaptorTestConstants.D30s; import static org.opentripplanner.raptor._data.RaptorTestConstants.STOP_A; import static org.opentripplanner.raptor._data.RaptorTestConstants.STOP_B; diff --git a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/J02_ViaSearchTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/J02_ViaSearchTest.java index e7ca107a39a..fd872a3d138 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/J02_ViaSearchTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/J02_ViaSearchTest.java @@ -1,8 +1,8 @@ package org.opentripplanner.raptor.moduletests; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.model.plan.PlanTestConstants.D2m; import static org.opentripplanner.raptor._data.RaptorTestConstants.D1m; +import static org.opentripplanner.raptor._data.RaptorTestConstants.D2m; import static org.opentripplanner.raptor._data.RaptorTestConstants.D30s; import static org.opentripplanner.raptor._data.RaptorTestConstants.STOP_A; import static org.opentripplanner.raptor._data.RaptorTestConstants.STOP_B; From 92f420ed341198eb33004b77e485eb12b2677511 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Mon, 4 Nov 2024 10:55:05 +0100 Subject: [PATCH 189/213] refactor: Add support for constrainedTransfers to Raptor test framework --- .../raptor/RaptorArchitectureTest.java | 1 - .../TestConstrainedBoardingSearch.java | 5 +- .../transit/TestConstrainedTransfer.java | 111 +++++++++++++----- .../TestConstrainedTransferBoarding.java | 32 +++++ .../raptor/_data/transit/TestRoute.java | 7 +- .../raptor/_data/transit/TestTransfer.java | 4 + .../_data/transit/TestTransferConstraint.java | 104 ++++++++++++++++ .../_data/transit/TestTransferPoint.java | 52 -------- .../raptor/_data/transit/TestTransitData.java | 81 +++---------- .../raptor/_data/transit/TestTripPattern.java | 17 +-- .../_data/transit/TestTripSchedule.java | 83 +------------ .../_data/transit/TestTripScheduleSearch.java | 4 - .../transit/TestTripSearchTimetable.java | 46 -------- .../raptor/api/path/PathTest.java | 4 +- .../E01_StaySeatedTransferTest.java | 10 +- 15 files changed, 252 insertions(+), 309 deletions(-) create mode 100644 raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransferBoarding.java create mode 100644 raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferConstraint.java delete mode 100644 raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferPoint.java delete mode 100644 raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSearchTimetable.java diff --git a/raptor/src/test/java/org/opentripplanner/raptor/RaptorArchitectureTest.java b/raptor/src/test/java/org/opentripplanner/raptor/RaptorArchitectureTest.java index 009812b22b5..fb70ef60795 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/RaptorArchitectureTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/RaptorArchitectureTest.java @@ -14,7 +14,6 @@ public class RaptorArchitectureTest { private static final Package GNU_TROVE = Package.of("gnu.trove.."); private static final Package OTP_UTILS = OTP_ROOT.subPackage("utils.."); - /* The Raptor module, all packages that other paths of OTP may use. */ private static final Package RAPTOR = OTP_ROOT.subPackage("raptor"); private static final Package RAPTOR_API = RAPTOR.subPackage("api.."); diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedBoardingSearch.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedBoardingSearch.java index 5e8980dc50a..2b0e09bd397 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedBoardingSearch.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedBoardingSearch.java @@ -9,7 +9,6 @@ import java.util.function.BiPredicate; import java.util.stream.Collectors; import javax.annotation.Nullable; -import org.opentripplanner.model.transfer.TransferConstraint; import org.opentripplanner.raptor.spi.RaptorBoardOrAlightEvent; import org.opentripplanner.raptor.spi.RaptorConstrainedBoardingSearch; import org.opentripplanner.raptor.spi.RaptorTimeTable; @@ -55,7 +54,7 @@ public RaptorBoardOrAlightEvent find( var trip = tx.getSourceTrip(); if (trip == sourceTrip) { int stopPos = trip.findDepartureStopPosition(prevTransitArrivalTime, sourceStopIndex); - boolean boardAlightPossible = timeAfterOrEqual.test(tx.getTime(), prevTransitArrivalTime); + boolean boardAlightPossible = timeAfterOrEqual.test(tx.time(), prevTransitArrivalTime); if (tx.getSourceStopPos() == stopPos && boardAlightPossible) { return tx.boardingEvent(tx.isFacilitated() ? prevTransitArrivalTime : earliestBoardTime); } @@ -95,7 +94,7 @@ void addConstraintTransfers( int targetTripIndex, int targetStopPos, int targetTime, - TransferConstraint constraint + TestTransferConstraint constraint ) { List list = transfersByFromStopPos.get(targetStopPos); if (list == null) { diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransfer.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransfer.java index 643585f8c5b..836dac2e25b 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransfer.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransfer.java @@ -1,33 +1,37 @@ package org.opentripplanner.raptor._data.transit; +import static org.opentripplanner.raptor.api.model.RaptorConstants.NOT_SET; + +import java.util.function.Consumer; import javax.annotation.Nullable; -import org.opentripplanner.model.transfer.TransferConstraint; import org.opentripplanner.raptor.api.model.RaptorConstrainedTransfer; import org.opentripplanner.raptor.api.model.RaptorTransferConstraint; import org.opentripplanner.raptor.spi.RaptorBoardOrAlightEvent; -import org.opentripplanner.routing.algorithm.raptoradapter.transit.constrainedtransfer.ConstrainedTransferBoarding; import org.opentripplanner.utils.tostring.ToStringBuilder; -class TestConstrainedTransfer implements RaptorConstrainedTransfer { +class TestConstrainedTransfer + implements RaptorConstrainedTransfer, RaptorBoardOrAlightEvent { - private final TransferConstraint transferConstraints; + private final TestTransferConstraint transferConstraint; private final TestTripSchedule sourceTrip; private final int sourceStopPos; private final TestTripSchedule targetTrip; - private final int targetTripIndex; private final int targetStopPos; + private final int targetTripIndex; private final int targetTime; + private int earliestBoardTime = NOT_SET; + TestConstrainedTransfer( - TransferConstraint transferConstraints, + TestTransferConstraint transferConstraint, TestTripSchedule sourceTrip, int sourceStopPos, TestTripSchedule targetTrip, - int targetTripIndex, int targetStopPos, + int targetTripIndex, int targetTime ) { - this.transferConstraints = transferConstraints; + this.transferConstraint = transferConstraint; this.sourceTrip = sourceTrip; this.sourceStopPos = sourceStopPos; this.targetTrip = targetTrip; @@ -36,26 +40,88 @@ class TestConstrainedTransfer implements RaptorConstrainedTransfer { this.targetTime = targetTime; } - public TestTripSchedule getTrip() { + @Override + public int tripIndex() { + return targetTripIndex; + } + + @Override + public TestTripSchedule trip() { return targetTrip; } - public int getStopPositionInPattern() { + @Override + public int stopPositionInPattern() { return targetStopPos; } - public int getTime() { + @Override + public int time() { return targetTime; } + @Override + public int earliestBoardTime() { + return earliestBoardTime; + } + + @Override + public RaptorTransferConstraint transferConstraint() { + return transferConstraint; + } + + @Override + public boolean empty() { + return false; + } + + @Override + public void boardWithFallback( + Consumer> boardCallback, + Consumer> alternativeBoardingFallback + ) { + if (empty()) { + alternativeBoardingFallback.accept(this); + } else if (!transferConstraint.isNotAllowed()) { + boardCallback.accept(this); + } + } + public boolean isFacilitated() { - return transferConstraints.isFacilitated(); + return transferConstraint.isStaySeated(); } @Nullable @Override public RaptorTransferConstraint getTransferConstraint() { - return transferConstraints; + return transferConstraint; + } + + TestTripSchedule getSourceTrip() { + return sourceTrip; + } + + int getSourceStopPos() { + return sourceStopPos; + } + + RaptorBoardOrAlightEvent boardingEvent(int earliestBoardingTime) { + this.earliestBoardTime = earliestBoardingTime; + return this; + } + + public boolean match( + TestTripSchedule sourceTrip, + int sourceStopPos, + TestTripSchedule targetTrip, + int targetStopPos + ) { + return ( + this.sourceTrip.equals(sourceTrip) && + this.sourceStopPos == sourceStopPos && + this.targetTrip.equals(targetTrip) && + this.targetStopPos == targetStopPos + ); } @Override @@ -70,23 +136,4 @@ public String toString() { .addServiceTime("targetTime", targetTime) .toString(); } - - TestTripSchedule getSourceTrip() { - return sourceTrip; - } - - int getSourceStopPos() { - return sourceStopPos; - } - - RaptorBoardOrAlightEvent boardingEvent(int earliestBoardingTime) { - return new ConstrainedTransferBoarding<>( - transferConstraints, - targetTripIndex, - targetTrip, - targetStopPos, - targetTime, - earliestBoardingTime - ); - } } diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransferBoarding.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransferBoarding.java new file mode 100644 index 00000000000..1cc740d4b7f --- /dev/null +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransferBoarding.java @@ -0,0 +1,32 @@ +package org.opentripplanner.raptor._data.transit; + +import java.util.function.Consumer; +import org.opentripplanner.raptor.api.model.RaptorTransferConstraint; +import org.opentripplanner.raptor.spi.RaptorBoardOrAlightEvent; + +record TestConstrainedTransferBoarding( + RaptorTransferConstraint transferConstraint, + int tripIndex, + TestTripSchedule trip, + int stopPositionInPattern, + int time, + int earliestBoardTime +) + implements RaptorBoardOrAlightEvent { + @Override + public boolean empty() { + return false; + } + + @Override + public void boardWithFallback( + Consumer> boardCallback, + Consumer> alternativeBoardingFallback + ) { + if (empty()) { + alternativeBoardingFallback.accept(this); + } else if (!transferConstraint.isNotAllowed()) { + boardCallback.accept(this); + } + } +} diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestRoute.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestRoute.java index e32401abb3d..2cd87a065ea 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestRoute.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestRoute.java @@ -3,14 +3,11 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import org.opentripplanner.model.transfer.TransferConstraint; import org.opentripplanner.raptor.api.model.SearchDirection; import org.opentripplanner.raptor.spi.RaptorConstrainedBoardingSearch; import org.opentripplanner.raptor.spi.RaptorRoute; import org.opentripplanner.raptor.spi.RaptorTimeTable; import org.opentripplanner.raptor.spi.RaptorTripScheduleSearch; -import org.opentripplanner.routing.algorithm.raptoradapter.api.DefaultTripPattern; -import org.opentripplanner.routing.algorithm.raptoradapter.transit.request.TripScheduleSearchFactory; import org.opentripplanner.utils.tostring.ToStringBuilder; public class TestRoute implements RaptorRoute, RaptorTimeTable { @@ -44,7 +41,7 @@ public RaptorTimeTable timetable() { } @Override - public DefaultTripPattern pattern() { + public TestTripPattern pattern() { return pattern; } @@ -114,7 +111,7 @@ void addTransferConstraint( int fromStopPos, TestTripSchedule toTrip, int toStopPos, - TransferConstraint constraint + TestTransferConstraint constraint ) { for (int i = 0; i < timetable().numberOfTripSchedules(); i++) { var trip = timetable().getTripSchedule(i); diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransfer.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransfer.java index 4c41fddb366..b90fd5f7c46 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransfer.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransfer.java @@ -18,6 +18,10 @@ public static TestTransfer transfer(int stop, int durationInSeconds, int cost) { return new TestTransfer(stop, durationInSeconds, cost); } + public TestTransfer reverse(int stop) { + return new TestTransfer(stop, durationInSeconds, cost); + } + public static int walkCost(int durationInSeconds) { return walkCost(durationInSeconds, DEFAULT_WALK_RELUCTANCE); } diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferConstraint.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferConstraint.java new file mode 100644 index 00000000000..bf1a4547e07 --- /dev/null +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferConstraint.java @@ -0,0 +1,104 @@ +package org.opentripplanner.raptor._data.transit; + +import java.io.Serializable; +import java.util.Objects; +import org.opentripplanner.raptor.api.model.RaptorTransferConstraint; + +/** + * This class holds transfer constraint information. + *

    + * The class is immutable. + */ +public class TestTransferConstraint implements Serializable, RaptorTransferConstraint { + + /** + * STAY_SEATED is not a priority, but we assign a cost to it to be able to compare it with other + * transfers with a priority and the {@link #GUARANTEED_TRANSFER_COST}. + */ + private static final int STAY_SEATED_TRANSFER_COST = 10_00; + + /** + * GUARANTEED is not a priority, but we assign a cost to it to be able to compare it with other + * transfers with a priority. The cost is better than a pure prioritized transfer, but the + * priority and GUARANTEED attribute is added together; Hence a (GUARANTEED, RECOMMENDED) transfer + * is better than (GUARANTEED, ALLOWED). + */ + private static final int GUARANTEED_TRANSFER_COST = 20_00; + + /** + * A cost penalty of 10 points is added to a Transfer which is NOT stay-seated or guaranteed. This + * makes sure that stay-seated and guaranteed transfers take precedence over the priority cost. + */ + private static final int NONE_FACILITATED_COST = 30_00; + + private enum Type { + NOT_ALLOWED, + STAY_SEATED, + GUARANTEED; + + boolean is(Type type) { + return this == type; + } + } + + private final Type type; + + public TestTransferConstraint(Type type) { + this.type = type; + } + + public static TestTransferConstraint notAllowed() { + return new TestTransferConstraint(Type.NOT_ALLOWED); + } + + public static TestTransferConstraint staySeated() { + return new TestTransferConstraint(Type.STAY_SEATED); + } + + public static TestTransferConstraint guaranteed() { + return new TestTransferConstraint(Type.GUARANTEED); + } + + public static RaptorTransferConstraint regular() { + return RaptorTransferConstraint.REGULAR_TRANSFER; + } + + public boolean isGuaranteed() { + return type.is(Type.GUARANTEED); + } + + @Override + public boolean isNotAllowed() { + return type.is(Type.NOT_ALLOWED); + } + + @Override + public boolean isRegularTransfer() { + return false; + } + + @Override + public boolean isStaySeated() { + return type.is(Type.STAY_SEATED); + } + + @Override + public int hashCode() { + return Objects.hash(type); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof final TestTransferConstraint that)) { + return false; + } + return type == that.type; + } + + public String toString() { + return "{" + type + "}"; + } +} diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferPoint.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferPoint.java deleted file mode 100644 index ef2271e51ae..00000000000 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferPoint.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.opentripplanner.raptor._data.transit; - -import org.opentripplanner.model.transfer.TransferPoint; -import org.opentripplanner.utils.tostring.ToStringBuilder; - -public class TestTransferPoint implements TransferPoint { - - private final int stop; - // Wer need this because trip pattern can pass through same stop more than once - private final int stopPosition; - private final TestTripSchedule schedule; - private final boolean applyToAllTrips; - - public TestTransferPoint( - int stop, - int stopPosition, - TestTripSchedule schedule, - boolean applyToAllTrips - ) { - this.stop = stop; - this.stopPosition = stopPosition; - this.schedule = schedule; - this.applyToAllTrips = applyToAllTrips; - } - - @Override - public boolean appliesToAllTrips() { - return applyToAllTrips; - } - - @Override - public int getSpecificityRanking() { - return 2; - } - - public int getStopPosition() { - return this.stopPosition; - } - - public boolean matches(TestTripSchedule schedule, int stop, int stopPosition) { - return this.schedule == schedule && this.stop == stop && this.stopPosition == stopPosition; - } - - @Override - public String toString() { - return ToStringBuilder - .of() - .addNum("stop", stop) - .addObj("trip", schedule.pattern().debugInfo()) - .toString(); - } -} diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransitData.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransitData.java index 4e3a05f9694..ed10587f25a 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransitData.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransitData.java @@ -11,8 +11,6 @@ import java.util.List; import java.util.Set; import javax.annotation.Nullable; -import org.opentripplanner.model.transfer.ConstrainedTransfer; -import org.opentripplanner.model.transfer.TransferConstraint; import org.opentripplanner.raptor._data.RaptorTestConstants; import org.opentripplanner.raptor.api.model.RaptorConstrainedTransfer; import org.opentripplanner.raptor.api.model.RaptorStopNameResolver; @@ -30,30 +28,13 @@ import org.opentripplanner.raptor.spi.RaptorTimeTable; import org.opentripplanner.raptor.spi.RaptorTransitDataProvider; import org.opentripplanner.raptor.util.BitSetIterator; -import org.opentripplanner.routing.algorithm.raptoradapter.api.DefaultTripPattern; -import org.opentripplanner.routing.algorithm.raptoradapter.transit.DefaultRaptorTransfer; -import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.CostCalculatorFactory; -import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.GeneralizedCostParameters; -import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.GeneralizedCostParametersBuilder; -import org.opentripplanner.routing.algorithm.transferoptimization.model.TripStopTime; -import org.opentripplanner.routing.algorithm.transferoptimization.services.TransferServiceAdaptor; @SuppressWarnings("UnusedReturnValue") public class TestTransitData implements RaptorTransitDataProvider, RaptorTestConstants { - public static final TransferConstraint TX_GUARANTEED = TransferConstraint - .of() - .guaranteed() - .build(); - public static final TransferConstraint TX_NOT_ALLOWED = TransferConstraint - .of() - .notAllowed() - .build(); - public static final TransferConstraint TX_LONG_MIN_TIME = TransferConstraint - .of() - .minTransferTime(3600) - .build(); + public static final TestTransferConstraint TX_GUARANTEED = TestTransferConstraint.guaranteed(); + public static final TestTransferConstraint TX_NOT_ALLOWED = TestTransferConstraint.notAllowed(); // Slack defaults: 1 minute for transfer-slack, 0 minutes for board- and alight-slack. public static final RaptorSlackProvider SLACK_PROVIDER = new DefaultSlackProvider(60, 0, 0); @@ -62,7 +43,7 @@ public class TestTransitData private final List> transfersToStop = new ArrayList<>(); private final List> routeIndexesByStopIndex = new ArrayList<>(); private final List routes = new ArrayList<>(); - private final List constrainedTransfers = new ArrayList<>(); + private final List constrainedTransfers = new ArrayList<>(); private int boardCostSec = 600; private int transferCostSec = 0; private double waitReluctance = 1.0; @@ -137,10 +118,7 @@ public RaptorConstrainedTransfer findConstrainedTransfer( var list = routes .stream() .flatMap(r -> r.listTransferConstraintsForwardSearch().stream()) - .filter(tx -> tx.getSourceTrip().equals(fromTrip)) - .filter(tx -> tx.getSourceStopPos() == fromStopPosition) - .filter(tx -> tx.getTrip().equals(toTrip)) - .filter(tx -> tx.getStopPositionInPattern() == toStopPosition) + .filter(tx -> tx.match(fromTrip, fromStopPosition, toTrip, toStopPosition)) .toList(); if (list.isEmpty()) { @@ -251,7 +229,7 @@ public TestTransitData withRoutes(TestRoute... routes) { public TestTransitData withTransfer(int fromStop, TestTransfer transfer) { expandNumOfStops(Math.max(fromStop, transfer.stop())); transfersFromStop.get(fromStop).add(transfer); - transfersToStop.get(transfer.stop()).add(DefaultRaptorTransfer.reverseOf(fromStop, transfer)); + transfersToStop.get(transfer.stop()).add(transfer.reverse(fromStop)); return this; } @@ -290,7 +268,7 @@ public TestTransitData withConstrainedTransfer( int fromStop, TestTripSchedule toTrip, int toStop, - TransferConstraint constraint + TestTransferConstraint constraint ) { int fromStopPos = fromTrip.pattern().findStopPositionAfter(0, fromStop); int toStopPos = toTrip.pattern().findStopPositionAfter(0, toStop); @@ -299,11 +277,14 @@ public TestTransitData withConstrainedTransfer( route.addTransferConstraint(fromTrip, fromStopPos, toTrip, toStopPos, constraint); } constrainedTransfers.add( - new ConstrainedTransfer( - null, - new TestTransferPoint(fromStop, fromStopPos, fromTrip, false), - new TestTransferPoint(toStop, toStopPos, toTrip, false), - constraint + new TestConstrainedTransfer( + constraint, + fromTrip, + fromStopPos, + toTrip, + toStopPos, + toTrip.tripSortIndex(), + toTrip.departure(toStopPos) ) ); return this; @@ -314,7 +295,7 @@ public TestTransitData withStopBoardAlightTransferCost(int stop, int boardAlight return this; } - public ConstrainedTransfer findConstrainedTransfer( + public TestConstrainedTransfer findConstrainedTransfer( TestTripSchedule fromTrip, int fromStop, int fromStopPosition, @@ -322,42 +303,14 @@ public ConstrainedTransfer findConstrainedTransfer( int toStop, int toStopPosition ) { - for (ConstrainedTransfer tx : constrainedTransfers) { - if ( - ((TestTransferPoint) tx.getFrom()).matches(fromTrip, fromStop, fromStopPosition) && - ((TestTransferPoint) tx.getTo()).matches(toTrip, toStop, toStopPosition) - ) { + for (var tx : constrainedTransfers) { + if (tx.match(fromTrip, fromStopPosition, toTrip, toStopPosition)) { return tx; } } return null; } - public TransferServiceAdaptor transferServiceAdaptor() { - return new TransferServiceAdaptor<>(null, null) { - @Override - protected ConstrainedTransfer findTransfer( - TripStopTime from, - TestTripSchedule toTrip, - int toStop, - int toStopPosition - ) { - return findConstrainedTransfer( - from.trip(), - from.stop(), - from.stopPosition(), - toTrip, - toStop, - toStopPosition - ); - } - }; - } - - public List getPatterns() { - return routes.stream().map(TestRoute::pattern).toList(); - } - public TestTransitData withBoardCost(int boardCostSec) { this.boardCostSec = boardCostSec; return this; diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripPattern.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripPattern.java index 811c17cc568..ce1a14cc892 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripPattern.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripPattern.java @@ -1,10 +1,9 @@ package org.opentripplanner.raptor._data.transit; -import org.opentripplanner.routing.algorithm.raptoradapter.api.DefaultTripPattern; -import org.opentripplanner.transit.model.network.Route; +import org.opentripplanner.raptor.api.model.RaptorTripPattern; import org.opentripplanner.utils.tostring.ToStringBuilder; -public class TestTripPattern implements DefaultTripPattern { +public class TestTripPattern implements RaptorTripPattern { public static final byte BOARDING_MASK = 0b0001; public static final byte ALIGHTING_MASK = 0b0010; @@ -32,8 +31,6 @@ public class TestTripPattern implements DefaultTripPattern { */ private final int[] restrictions; - private Route route; - private TestTripPattern(String name, int[] stopIndexes, int[] restrictions) { this.name = name; this.stopIndexes = stopIndexes; @@ -64,11 +61,6 @@ public TestTripPattern withPriorityGroup(int priorityGroupId) { return this; } - public TestTripPattern withRoute(Route route) { - this.route = route; - return this; - } - /** *

        * Codes:
    @@ -139,11 +131,6 @@ public int numberOfStopsInPattern() {
         return stopIndexes.length;
       }
     
    -  @Override
    -  public Route route() {
    -    return route;
    -  }
    -
       @Override
       public String debugInfo() {
         return "BUS " + name;
    diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSchedule.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSchedule.java
    index 75062d9a61e..36731b30954 100644
    --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSchedule.java
    +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSchedule.java
    @@ -1,50 +1,32 @@
     package org.opentripplanner.raptor._data.transit;
     
    -import static org.opentripplanner.transit.model.basic.Accessibility.NO_INFORMATION;
    -
    -import java.time.LocalDate;
     import java.util.Arrays;
     import java.util.stream.IntStream;
    +import org.opentripplanner.raptor.api.model.RaptorTripPattern;
     import org.opentripplanner.raptor.api.model.RaptorTripSchedule;
    -import org.opentripplanner.routing.algorithm.raptoradapter.api.DefaultTripPattern;
    -import org.opentripplanner.routing.algorithm.raptoradapter.transit.TripSchedule;
    -import org.opentripplanner.transit.model.basic.Accessibility;
    -import org.opentripplanner.transit.model.network.TripPattern;
    -import org.opentripplanner.transit.model.timetable.TripTimes;
     import org.opentripplanner.utils.lang.IntUtils;
     import org.opentripplanner.utils.time.TimeUtils;
     import org.opentripplanner.utils.tostring.ToStringBuilder;
     
     /**
      * An implementation of the {@link RaptorTripSchedule} for unit-testing.
    - * 

    - * The {@link DefaultTripPattern} for this schedule return {@code stopIndex == stopPosInPattern + 1 } */ -// TODO : This class should implement RaptorTripSchedule not raptoradapter TripSchedule -public class TestTripSchedule implements TripSchedule { +public class TestTripSchedule implements RaptorTripSchedule { private static final int DEFAULT_DEPARTURE_DELAY = 10; - private final DefaultTripPattern pattern; private final int[] arrivalTimes; private final int[] departureTimes; - private final int transitReluctanceIndex; - private final Accessibility wheelchairBoarding; - private final TripPattern originalPattern; + private final RaptorTripPattern pattern; protected TestTripSchedule( TestTripPattern pattern, int[] arrivalTimes, int[] departureTimes, - int transitReluctanceIndex, - Accessibility wheelchairBoarding, - TripPattern originalPattern + int transitReluctanceIndex ) { this.pattern = pattern; this.arrivalTimes = arrivalTimes; this.departureTimes = departureTimes; - this.transitReluctanceIndex = transitReluctanceIndex; - this.wheelchairBoarding = wheelchairBoarding; - this.originalPattern = originalPattern; } public static TestTripSchedule.Builder schedule() { @@ -55,13 +37,6 @@ public static TestTripSchedule.Builder schedule(TestTripPattern pattern) { return schedule().pattern(pattern); } - public static TestTripSchedule.Builder schedule( - TestTripPattern pattern, - TripPattern originalPattern - ) { - return schedule().pattern(pattern).originalPattern(originalPattern); - } - public static TestTripSchedule.Builder schedule(String times) { return new TestTripSchedule.Builder().times(times); } @@ -83,20 +58,10 @@ public int departure(int stopPosInPattern) { } @Override - public DefaultTripPattern pattern() { + public RaptorTripPattern pattern() { return pattern; } - @Override - public int transitReluctanceFactorIndex() { - return transitReluctanceIndex; - } - - @Override - public Accessibility wheelchairBoarding() { - return wheelchairBoarding; - } - public int size() { return arrivalTimes.length; } @@ -116,21 +81,6 @@ public String toString() { .toString(); } - @Override - public LocalDate getServiceDate() { - return null; - } - - @Override - public TripTimes getOriginalTripTimes() { - return null; - } - - @Override - public TripPattern getOriginalTripPattern() { - return this.originalPattern; - } - @SuppressWarnings("UnusedReturnValue") public static class Builder { @@ -139,19 +89,12 @@ public static class Builder { private int[] departureTimes; private int arrivalDepartureOffset = DEFAULT_DEPARTURE_DELAY; private int transitReluctanceIndex = 0; - private Accessibility wheelchairBoarding = NO_INFORMATION; - private TripPattern originalPattern; public TestTripSchedule.Builder pattern(TestTripPattern pattern) { this.pattern = pattern; return this; } - public TestTripSchedule.Builder originalPattern(TripPattern pattern) { - this.originalPattern = pattern; - return this; - } - public TestTripSchedule.Builder copy() { var b = new TestTripSchedule.Builder(); b.pattern = pattern; @@ -159,8 +102,6 @@ public TestTripSchedule.Builder copy() { b.departureTimes = departureTimes; b.arrivalDepartureOffset = arrivalDepartureOffset; b.transitReluctanceIndex = transitReluctanceIndex; - b.wheelchairBoarding = wheelchairBoarding; - b.originalPattern = originalPattern; return b; } @@ -243,11 +184,6 @@ public TestTripSchedule.Builder transitReluctanceIndex(int transitReluctanceInde return this; } - public TestTripSchedule.Builder wheelchairBoarding(Accessibility wcb) { - this.wheelchairBoarding = wcb; - return this; - } - public TestTripSchedule.Builder[] repeat(int nTimes, int everySeconds) { return IntStream .range(0, nTimes) @@ -283,14 +219,7 @@ public TestTripSchedule build() { ); } - return new TestTripSchedule( - pattern, - arrivalTimes, - departureTimes, - transitReluctanceIndex, - wheelchairBoarding, - originalPattern - ); + return new TestTripSchedule(pattern, arrivalTimes, departureTimes, transitReluctanceIndex); } private static int[] copyWithOffset(int[] source, int offset) { diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripScheduleSearch.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripScheduleSearch.java index fa67697f58e..7e9a73e162e 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripScheduleSearch.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripScheduleSearch.java @@ -4,14 +4,10 @@ import static org.opentripplanner.raptor.api.model.RaptorConstants.TIME_NOT_SET; import java.util.List; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.opentripplanner.raptor.api.model.RaptorConstants; import org.opentripplanner.raptor.api.model.RaptorTransferConstraint; import org.opentripplanner.raptor.api.model.SearchDirection; import org.opentripplanner.raptor.spi.RaptorBoardOrAlightEvent; import org.opentripplanner.raptor.spi.RaptorTripScheduleSearch; -import org.opentripplanner.utils.time.TimeUtils; import org.opentripplanner.utils.tostring.ToStringBuilder; class TestTripScheduleSearch diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSearchTimetable.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSearchTimetable.java deleted file mode 100644 index 0785e20c241..00000000000 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSearchTimetable.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.opentripplanner.raptor._data.transit; - -import java.util.function.IntUnaryOperator; -import org.opentripplanner.raptor.api.model.SearchDirection; -import org.opentripplanner.raptor.spi.RaptorTripScheduleSearch; -import org.opentripplanner.routing.algorithm.raptoradapter.transit.request.TripScheduleSearchFactory; -import org.opentripplanner.routing.algorithm.raptoradapter.transit.request.TripSearchTimetable; - -public class TestTripSearchTimetable implements TripSearchTimetable { - - private final TestTripSchedule[] trips; - - public TestTripSearchTimetable(TestRoute route) { - int nTrips = route.timetable().numberOfTripSchedules(); - this.trips = new TestTripSchedule[nTrips]; - - for (int i = 0; i < nTrips; ++i) { - trips[i] = route.getTripSchedule(i); - } - } - - @Override - public TestTripSchedule getTripSchedule(int index) { - return trips[index]; - } - - @Override - public int numberOfTripSchedules() { - return trips.length; - } - - @Override - public IntUnaryOperator getArrivalTimes(int stopPositionInPattern) { - return (int tripIndex) -> trips[tripIndex].arrival(stopPositionInPattern); - } - - @Override - public IntUnaryOperator getDepartureTimes(int stopPositionInPattern) { - return (int tripIndex) -> trips[tripIndex].departure(stopPositionInPattern); - } - - @Override - public RaptorTripScheduleSearch tripSearch(SearchDirection direction) { - return TripScheduleSearchFactory.create(direction, this); - } -} diff --git a/raptor/src/test/java/org/opentripplanner/raptor/api/path/PathTest.java b/raptor/src/test/java/org/opentripplanner/raptor/api/path/PathTest.java index 7ea3c9805f5..e0819717e10 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/api/path/PathTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/api/path/PathTest.java @@ -18,10 +18,10 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import org.junit.jupiter.api.Test; -import org.opentripplanner.model.transfer.TransferConstraint; import org.opentripplanner.raptor._data.RaptorTestConstants; import org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase; import org.opentripplanner.raptor._data.transit.TestAccessEgress; +import org.opentripplanner.raptor._data.transit.TestTransferConstraint; import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.model.RaptorAccessEgress; import org.opentripplanner.raptor.path.Path; @@ -176,7 +176,7 @@ public void testCountTransfersWithStaySeated() { .times(time("09:10"), time("09:20")) .build(); - var tx = TransferConstraint.of().staySeated().build(); + var tx = TestTransferConstraint.staySeated(); TransitPathLeg leg2 = new TransitPathLeg<>( trip2, trip2.departure(0), diff --git a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/E01_StaySeatedTransferTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/E01_StaySeatedTransferTest.java index 00456f9a2a3..16d0ea745fe 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/E01_StaySeatedTransferTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/E01_StaySeatedTransferTest.java @@ -10,11 +10,11 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; -import org.opentripplanner.model.transfer.TransferConstraint; import org.opentripplanner.raptor.RaptorService; import org.opentripplanner.raptor._data.RaptorTestConstants; import org.opentripplanner.raptor._data.api.PathUtils; import org.opentripplanner.raptor._data.transit.TestAccessEgress; +import org.opentripplanner.raptor._data.transit.TestTransferConstraint; import org.opentripplanner.raptor._data.transit.TestTransitData; import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.request.RaptorRequestBuilder; @@ -57,13 +57,7 @@ public void setup() { var tripB = r2.timetable().getTripSchedule(0); data.withRoutes(r1, r2); - data.withConstrainedTransfer( - tripA, - STOP_B, - tripB, - STOP_B, - TransferConstraint.of().staySeated().build() - ); + data.withConstrainedTransfer(tripA, STOP_B, tripB, STOP_B, TestTransferConstraint.staySeated()); data.withTransferCost(100); // NOTE! No search-window is set. From dc931781eedbac17f6b2b7c3cafb3881003f1c8f Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Mon, 4 Nov 2024 11:37:35 +0100 Subject: [PATCH 190/213] refactor: Rename "Flex" in Raptor, flex does not exist as a concept in Raptor --- ...ndEgressWithOpeningHoursPathTestCase.java} | 6 ++-- .../rangeraptor/path/PathMapperTest.java | 30 +++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) rename raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/{FlexAccessAndEgressPathTestCase.java => AccessAndEgressWithOpeningHoursPathTestCase.java} (99%) diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/AccessAndEgressWithOpeningHoursPathTestCase.java similarity index 99% rename from raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java rename to raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/AccessAndEgressWithOpeningHoursPathTestCase.java index 3063805e548..c20d4d791f5 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/FlexAccessAndEgressPathTestCase.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/AccessAndEgressWithOpeningHoursPathTestCase.java @@ -33,7 +33,7 @@ *

      *
    1. Flex access
    2. *
    3. Transit, BUS A
    4. - *
    5. Flex
    6. + *
    7. Flex egress
    8. *
    *

    * Case B with walking between transit and flex: @@ -42,10 +42,10 @@ *

  • Walk transfer
  • *
  • Transit. BUS B
  • *
  • Walk transfer
  • - *
  • Flex
  • + *
  • Flex egress
  • * */ -public class FlexAccessAndEgressPathTestCase implements RaptorTestConstants { +public class AccessAndEgressWithOpeningHoursPathTestCase implements RaptorTestConstants { private static final int ZERO = 0; // The transit reluctance is ignored, any value should work diff --git a/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/path/PathMapperTest.java b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/path/PathMapperTest.java index 8e11dc7dcd2..027d3d5852a 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/path/PathMapperTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/rangeraptor/path/PathMapperTest.java @@ -1,27 +1,27 @@ package org.opentripplanner.raptor.rangeraptor.path; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.opentripplanner.raptor._data.stoparrival.AccessAndEgressWithOpeningHoursPathTestCase.flexCaseAForwardSearch; +import static org.opentripplanner.raptor._data.stoparrival.AccessAndEgressWithOpeningHoursPathTestCase.flexCaseAReverseSearch; +import static org.opentripplanner.raptor._data.stoparrival.AccessAndEgressWithOpeningHoursPathTestCase.flexCaseAText; +import static org.opentripplanner.raptor._data.stoparrival.AccessAndEgressWithOpeningHoursPathTestCase.flexCaseAWithOpeningHoursForwardSearch; +import static org.opentripplanner.raptor._data.stoparrival.AccessAndEgressWithOpeningHoursPathTestCase.flexCaseAWithOpeningHoursReverseSearch; +import static org.opentripplanner.raptor._data.stoparrival.AccessAndEgressWithOpeningHoursPathTestCase.flexCaseAWithOpeningHoursText; +import static org.opentripplanner.raptor._data.stoparrival.AccessAndEgressWithOpeningHoursPathTestCase.flexCaseBForwardSearch; +import static org.opentripplanner.raptor._data.stoparrival.AccessAndEgressWithOpeningHoursPathTestCase.flexCaseBReverseSearch; +import static org.opentripplanner.raptor._data.stoparrival.AccessAndEgressWithOpeningHoursPathTestCase.flexCaseBText; +import static org.opentripplanner.raptor._data.stoparrival.AccessAndEgressWithOpeningHoursPathTestCase.flexCaseBWithOpeningHoursForwardSearch; +import static org.opentripplanner.raptor._data.stoparrival.AccessAndEgressWithOpeningHoursPathTestCase.flexCaseBWithOpeningHoursReverseSearch; +import static org.opentripplanner.raptor._data.stoparrival.AccessAndEgressWithOpeningHoursPathTestCase.flexCaseBWithOpeningHoursText; import static org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase.BASIC_PATH_AS_DETAILED_STRING; import static org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase.C1_CALCULATOR; import static org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase.basicTripByForwardSearch; import static org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase.basicTripByReverseSearch; import static org.opentripplanner.raptor._data.stoparrival.BasicPathTestCase.lifeCycle; -import static org.opentripplanner.raptor._data.stoparrival.FlexAccessAndEgressPathTestCase.flexCaseAForwardSearch; -import static org.opentripplanner.raptor._data.stoparrival.FlexAccessAndEgressPathTestCase.flexCaseAReverseSearch; -import static org.opentripplanner.raptor._data.stoparrival.FlexAccessAndEgressPathTestCase.flexCaseAText; -import static org.opentripplanner.raptor._data.stoparrival.FlexAccessAndEgressPathTestCase.flexCaseAWithOpeningHoursForwardSearch; -import static org.opentripplanner.raptor._data.stoparrival.FlexAccessAndEgressPathTestCase.flexCaseAWithOpeningHoursReverseSearch; -import static org.opentripplanner.raptor._data.stoparrival.FlexAccessAndEgressPathTestCase.flexCaseAWithOpeningHoursText; -import static org.opentripplanner.raptor._data.stoparrival.FlexAccessAndEgressPathTestCase.flexCaseBForwardSearch; -import static org.opentripplanner.raptor._data.stoparrival.FlexAccessAndEgressPathTestCase.flexCaseBReverseSearch; -import static org.opentripplanner.raptor._data.stoparrival.FlexAccessAndEgressPathTestCase.flexCaseBText; -import static org.opentripplanner.raptor._data.stoparrival.FlexAccessAndEgressPathTestCase.flexCaseBWithOpeningHoursForwardSearch; -import static org.opentripplanner.raptor._data.stoparrival.FlexAccessAndEgressPathTestCase.flexCaseBWithOpeningHoursReverseSearch; -import static org.opentripplanner.raptor._data.stoparrival.FlexAccessAndEgressPathTestCase.flexCaseBWithOpeningHoursText; import org.junit.jupiter.api.Test; import org.opentripplanner.raptor._data.RaptorTestConstants; -import org.opentripplanner.raptor._data.stoparrival.FlexAccessAndEgressPathTestCase; +import org.opentripplanner.raptor._data.stoparrival.AccessAndEgressWithOpeningHoursPathTestCase; import org.opentripplanner.raptor._data.transit.TestCostCalculator; import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.path.RaptorPath; @@ -30,9 +30,9 @@ public class PathMapperTest implements RaptorTestConstants { private static final RaptorSlackProvider FLEX_SLACK_PROVIDER = - FlexAccessAndEgressPathTestCase.SLACK_PROVIDER; + AccessAndEgressWithOpeningHoursPathTestCase.SLACK_PROVIDER; private static final TestCostCalculator FLEX_COST_CALCULATOR = - FlexAccessAndEgressPathTestCase.C1_CALCULATOR; + AccessAndEgressWithOpeningHoursPathTestCase.C1_CALCULATOR; /* BASIC CASES */ From 3a630700128fa189cc0cb89671eba5b701568f1a Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Mon, 4 Nov 2024 12:50:34 +0100 Subject: [PATCH 191/213] refactor: Remove transitReluctanceIndex --- ...AndEgressWithOpeningHoursPathTestCase.java | 2 -- .../_data/stoparrival/BasicPathTestCase.java | 5 +---- .../_data/transit/TestTripSchedule.java | 21 ++----------------- 3 files changed, 3 insertions(+), 25 deletions(-) diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/AccessAndEgressWithOpeningHoursPathTestCase.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/AccessAndEgressWithOpeningHoursPathTestCase.java index c20d4d791f5..89e13aa58ec 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/AccessAndEgressWithOpeningHoursPathTestCase.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/AccessAndEgressWithOpeningHoursPathTestCase.java @@ -142,13 +142,11 @@ public class AccessAndEgressWithOpeningHoursPathTestCase implements RaptorTestCo public static final TestTripSchedule TRIP_A = TestTripSchedule .schedule(TestTripPattern.pattern(LINE_A, STOP_A, STOP_D)) .times(L1_START, L1_END) - .transitReluctanceIndex(TRANSIT_RELUCTANCE_INDEX) .build(); public static final TestTripSchedule TRIP_B = TestTripSchedule .schedule(TestTripPattern.pattern(LINE_B, STOP_B, STOP_C)) .times(L1_START, L1_END) - .transitReluctanceIndex(TRANSIT_RELUCTANCE_INDEX) .build(); public static final int L1_C1_EX_WAIT = C1_CALCULATOR.transitArrivalCost( diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java index 7a8cbf702a8..5163140e40f 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/stoparrival/BasicPathTestCase.java @@ -96,7 +96,7 @@ public class BasicPathTestCase implements RaptorTestConstants { /** Stop cost for stop NA, A, C, E .. H is zero(0), B: 30s, and D: 60s. ?=0, A=1 .. H=8 */ private static final int[] STOP_C1S = { 0, 0, 3_000, 0, 6_000, 0, 0, 0, 0, 0 }; - // Some times which should not have eny effect on tests + // These times should not have eny effect on tests private static final int VERY_EARLY = time("00:00"); private static final int VERY_LATE = time("23:59"); @@ -195,13 +195,11 @@ public class BasicPathTestCase implements RaptorTestConstants { public static final TestTripSchedule TRIP_1 = TestTripSchedule .schedule(pattern(LINE_11, STOP_A, STOP_B)) .times(L11_START, L11_END) - .transitReluctanceIndex(TRANSIT_RELUCTANCE_INDEX) .build(); public static final TestTripSchedule TRIP_2 = TestTripSchedule .schedule(pattern(LINE_21, STOP_C, STOP_D)) .times(L21_START, L21_END) - .transitReluctanceIndex(TRANSIT_RELUCTANCE_INDEX) .build(); public static final TestTripSchedule TRIP_3 = TestTripSchedule @@ -209,7 +207,6 @@ public class BasicPathTestCase implements RaptorTestConstants { // The early arrival and late departure should not have any effect on tests .arrivals(VERY_EARLY, L31_END) .departures(L31_START, VERY_LATE) - .transitReluctanceIndex(TRANSIT_RELUCTANCE_INDEX) .build(); public static final RaptorCostCalculator C1_CALCULATOR = new TestCostCalculator( diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSchedule.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSchedule.java index 36731b30954..cbce4a642e0 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSchedule.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripSchedule.java @@ -18,12 +18,7 @@ public class TestTripSchedule implements RaptorTripSchedule { private final int[] departureTimes; private final RaptorTripPattern pattern; - protected TestTripSchedule( - TestTripPattern pattern, - int[] arrivalTimes, - int[] departureTimes, - int transitReluctanceIndex - ) { + protected TestTripSchedule(TestTripPattern pattern, int[] arrivalTimes, int[] departureTimes) { this.pattern = pattern; this.arrivalTimes = arrivalTimes; this.departureTimes = departureTimes; @@ -88,7 +83,6 @@ public static class Builder { private int[] arrivalTimes; private int[] departureTimes; private int arrivalDepartureOffset = DEFAULT_DEPARTURE_DELAY; - private int transitReluctanceIndex = 0; public TestTripSchedule.Builder pattern(TestTripPattern pattern) { this.pattern = pattern; @@ -101,7 +95,6 @@ public TestTripSchedule.Builder copy() { b.arrivalTimes = arrivalTimes; b.departureTimes = departureTimes; b.arrivalDepartureOffset = arrivalDepartureOffset; - b.transitReluctanceIndex = transitReluctanceIndex; return b; } @@ -174,16 +167,6 @@ public TestTripSchedule.Builder shiftTimes(int offset) { return this; } - /** - * Set the transit-reluctance-index. - *

    - * The default is 0. - */ - public TestTripSchedule.Builder transitReluctanceIndex(int transitReluctanceIndex) { - this.transitReluctanceIndex = transitReluctanceIndex; - return this; - } - public TestTripSchedule.Builder[] repeat(int nTimes, int everySeconds) { return IntStream .range(0, nTimes) @@ -219,7 +202,7 @@ public TestTripSchedule build() { ); } - return new TestTripSchedule(pattern, arrivalTimes, departureTimes, transitReluctanceIndex); + return new TestTripSchedule(pattern, arrivalTimes, departureTimes); } private static int[] copyWithOffset(int[] source, int offset) { From 93f9afd753539724d10fba1e8f7429401e9de682 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Mon, 4 Nov 2024 12:51:48 +0100 Subject: [PATCH 192/213] refactor: Include guaranteed transfer in facilitated transfers --- .../raptor/_data/transit/TestConstrainedTransfer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransfer.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransfer.java index 836dac2e25b..132d20465ac 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransfer.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransfer.java @@ -88,7 +88,7 @@ public void boardWithFallback( } public boolean isFacilitated() { - return transferConstraint.isStaySeated(); + return transferConstraint.isStaySeated() || transferConstraint.isGuaranteed(); } @Nullable From 11ef5c85948f0fea2048a9192335c6c84e3fd752 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Mon, 4 Nov 2024 12:52:28 +0100 Subject: [PATCH 193/213] refactor: Remove unused constants --- .../_data/transit/TestTransferConstraint.java | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferConstraint.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferConstraint.java index bf1a4547e07..c630c6a8bbb 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferConstraint.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransferConstraint.java @@ -11,26 +11,6 @@ */ public class TestTransferConstraint implements Serializable, RaptorTransferConstraint { - /** - * STAY_SEATED is not a priority, but we assign a cost to it to be able to compare it with other - * transfers with a priority and the {@link #GUARANTEED_TRANSFER_COST}. - */ - private static final int STAY_SEATED_TRANSFER_COST = 10_00; - - /** - * GUARANTEED is not a priority, but we assign a cost to it to be able to compare it with other - * transfers with a priority. The cost is better than a pure prioritized transfer, but the - * priority and GUARANTEED attribute is added together; Hence a (GUARANTEED, RECOMMENDED) transfer - * is better than (GUARANTEED, ALLOWED). - */ - private static final int GUARANTEED_TRANSFER_COST = 20_00; - - /** - * A cost penalty of 10 points is added to a Transfer which is NOT stay-seated or guaranteed. This - * makes sure that stay-seated and guaranteed transfers take precedence over the priority cost. - */ - private static final int NONE_FACILITATED_COST = 30_00; - private enum Type { NOT_ALLOWED, STAY_SEATED, From cc258f80fd45e62fbef18fa0b7f661514fe3fc4c Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Mon, 4 Nov 2024 13:42:34 +0100 Subject: [PATCH 194/213] refactor: Cleanup Raptor test data model --- .../transit/BoardAlightRestrictions.java | 98 ++++++++++ .../TestConstrainedTransferBoarding.java | 32 ---- .../raptor/_data/transit/TestTransitData.java | 1 - .../raptor/_data/transit/TestTripPattern.java | 178 +++++++++--------- ...SingeRouteBoardAlightRestrictionsTest.java | 7 +- .../moduletests/K01_TransitPriorityTest.java | 10 +- .../K02_TransitPriorityDestinationTest.java | 10 +- 7 files changed, 205 insertions(+), 131 deletions(-) create mode 100644 raptor/src/test/java/org/opentripplanner/raptor/_data/transit/BoardAlightRestrictions.java delete mode 100644 raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransferBoarding.java diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/BoardAlightRestrictions.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/BoardAlightRestrictions.java new file mode 100644 index 00000000000..b18082f71ca --- /dev/null +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/BoardAlightRestrictions.java @@ -0,0 +1,98 @@ +package org.opentripplanner.raptor._data.transit; + +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.List; + +public class BoardAlightRestrictions { + + private static final EnumSet BOARDING_ONLY = EnumSet.of( + BoardAlightRestriction.BOARDING + ); + private static final EnumSet ALIGHTING_ONLY = EnumSet.of( + BoardAlightRestriction.ALIGHTING + ); + private static final EnumSet ALL_ALLOWED = EnumSet.allOf( + BoardAlightRestriction.class + ); + private static final EnumSet NONE_ALLOWED = EnumSet.noneOf( + BoardAlightRestriction.class + ); + + private final List> restrictions; + + private BoardAlightRestrictions(List> restrictions) { + if (restrictions.isEmpty()) { + throw new IllegalArgumentException("At least one stop is required."); + } + this.restrictions = restrictions; + } + + public static BoardAlightRestrictions noRestriction(int size) { + var list = new ArrayList>(size); + for (int i = 0; i < size; i++) { + list.add(ALL_ALLOWED); + } + return new BoardAlightRestrictions(List.copyOf(list)); + } + + /** + * Set alight and board restriction using a "coded" string, use space as a separator + * between stops. + *

    +   * Codes:
    +   *   b : Board
    +   *   a : Alight
    +   *   * : Board & Alight
    +   *   - : Boarding & Alighting is not allowed
    +   *
    +   * Example:   B BA * A
    +   * 
    + */ + public static BoardAlightRestrictions restrictions(String restrictions) { + var codes = restrictions.toLowerCase().trim().split("\\s"); + var list = new ArrayList>(); + for (String code : codes) { + if ("a".equals(code)) { + list.add(ALIGHTING_ONLY); + } else if ("b".equals(code)) { + list.add(BOARDING_ONLY); + } else if (code.matches("ab|ba|\\*")) { + list.add(ALL_ALLOWED); + } else if ("-".equals(code)) { + list.add(NONE_ALLOWED); + } + } + return new BoardAlightRestrictions(list); + } + + public boolean isBoardingPossibleAt(int stopPositionInPattern) { + return restrictions.get(stopPositionInPattern).contains(BoardAlightRestriction.BOARDING); + } + + public boolean isAlightingPossibleAt(int stopPositionInPattern) { + return restrictions.get(stopPositionInPattern).contains(BoardAlightRestriction.ALIGHTING); + } + + @Override + public String toString() { + var buf = new StringBuilder(); + for (int i = 0; i < restrictions.size(); ++i) { + if (isAlightingPossibleAt(i) && isBoardingPossibleAt(i)) { + buf.append(" *"); + } else if (isAlightingPossibleAt(i)) { + buf.append(" A"); + } else if (isBoardingPossibleAt(i)) { + buf.append(" B"); + } else { + buf.append(" Ø"); + } + } + return buf.substring(1); + } + + private enum BoardAlightRestriction { + BOARDING, + ALIGHTING, + } +} diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransferBoarding.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransferBoarding.java deleted file mode 100644 index 1cc740d4b7f..00000000000 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestConstrainedTransferBoarding.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.opentripplanner.raptor._data.transit; - -import java.util.function.Consumer; -import org.opentripplanner.raptor.api.model.RaptorTransferConstraint; -import org.opentripplanner.raptor.spi.RaptorBoardOrAlightEvent; - -record TestConstrainedTransferBoarding( - RaptorTransferConstraint transferConstraint, - int tripIndex, - TestTripSchedule trip, - int stopPositionInPattern, - int time, - int earliestBoardTime -) - implements RaptorBoardOrAlightEvent { - @Override - public boolean empty() { - return false; - } - - @Override - public void boardWithFallback( - Consumer> boardCallback, - Consumer> alternativeBoardingFallback - ) { - if (empty()) { - alternativeBoardingFallback.accept(this); - } else if (!transferConstraint.isNotAllowed()) { - boardCallback.accept(this); - } - } -} diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransitData.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransitData.java index ed10587f25a..edd87c16b48 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransitData.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTransitData.java @@ -196,7 +196,6 @@ public void debugToStdErr(RaptorRequestBuilder request, boolea public TestTransitData withRoute(TestRoute route) { this.routes.add(route); int routeIndex = this.routes.indexOf(route); - ((TestTripPattern) route.pattern()).withPatternIndex(routeIndex); var pattern = route.pattern(); for (int i = 0; i < pattern.numberOfStopsInPattern(); ++i) { int stopIndex = pattern.stopIndex(i); diff --git a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripPattern.java b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripPattern.java index ce1a14cc892..e9b6613500b 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripPattern.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/_data/transit/TestTripPattern.java @@ -1,99 +1,45 @@ package org.opentripplanner.raptor._data.transit; +import java.util.Objects; import org.opentripplanner.raptor.api.model.RaptorTripPattern; import org.opentripplanner.utils.tostring.ToStringBuilder; public class TestTripPattern implements RaptorTripPattern { - public static final byte BOARDING_MASK = 0b0001; - public static final byte ALIGHTING_MASK = 0b0010; - public static final byte WHEELCHAIR_MASK = 0b0100; - private final String name; private final int[] stopIndexes; - /** - * By caching the index, we avoid looking up the pattern during routing, this reduces memory lookups and - * improves the performance. - */ - private int slackIndex = 0; - - private int patternIndex = 0; - - private int priorityGroupId = 0; - - /** - *
    -   * 0 - 000 : No restriction
    -   * 1 - 001 : No Boarding
    -   * 2 - 010 : No Alighting
    -   * 4 - 100 : No wheelchair
    -   * 
    - */ - private final int[] restrictions; - - private TestTripPattern(String name, int[] stopIndexes, int[] restrictions) { - this.name = name; - this.stopIndexes = stopIndexes; - this.restrictions = restrictions; + private final BoardAlightRestrictions restrictions; + private final int slackIndex; + private final int patternIndex; + private final int priorityGroupId; + + private TestTripPattern( + String name, + int[] stopIndexes, + BoardAlightRestrictions restrictions, + int slackIndex, + int patternIndex, + int priorityGroupId + ) { + this.name = Objects.requireNonNull(name); + this.stopIndexes = Objects.requireNonNull(stopIndexes); + this.restrictions = Objects.requireNonNull(restrictions); + this.slackIndex = slackIndex; + this.patternIndex = patternIndex; + this.priorityGroupId = priorityGroupId; + } + + public static TestTripPattern.Builder of(String name, int... stopIndexes) { + return new TestTripPattern.Builder(name, stopIndexes); } public static TestTripPattern pattern(String name, int... stopIndexes) { - return new TestTripPattern(name, stopIndexes, new int[stopIndexes.length]); + return of(name, stopIndexes).build(); } /** Create a pattern with name 'R1' and given stop indexes */ public static TestTripPattern pattern(int... stopIndexes) { - return new TestTripPattern("R1", stopIndexes, new int[stopIndexes.length]); - } - - public TestTripPattern withSlackIndex(int index) { - this.slackIndex = index; - return this; - } - - TestTripPattern withPatternIndex(int index) { - this.patternIndex = index; - return this; - } - - public TestTripPattern withPriorityGroup(int priorityGroupId) { - this.priorityGroupId = priorityGroupId; - return this; - } - - /** - *
    -   * Codes:
    -   *   B : Board
    -   *   A : Alight
    -   *   W : Wheelchair
    -   *   * : Board, Alight, Wheelchair
    -   *
    -   * Example:   B BA * AW
    -   * 
    - */ - public void restrictions(String codes) { - String[] split = codes.split(" "); - for (int i = 0; i < split.length; i++) { - String restriction = split[i]; - restrictions[i] = 0; - if (restriction.contains("*")) { - continue; - } - if (!restriction.contains("B")) { - restrictions[i] |= BOARDING_MASK; - } - if (!restriction.contains("A")) { - restrictions[i] |= ALIGHTING_MASK; - } - if (!restriction.contains("W")) { - restrictions[i] |= WHEELCHAIR_MASK; - } - } - } - - public String getName() { - return name; + return pattern("R1", stopIndexes); } @Override @@ -103,12 +49,12 @@ public int stopIndex(int stopPositionInPattern) { @Override public boolean boardingPossibleAt(int stopPositionInPattern) { - return isNotRestricted(stopPositionInPattern, BOARDING_MASK); + return restrictions.isBoardingPossibleAt(stopPositionInPattern); } @Override public boolean alightingPossibleAt(int stopPositionInPattern) { - return isNotRestricted(stopPositionInPattern, ALIGHTING_MASK); + return restrictions.isAlightingPossibleAt(stopPositionInPattern); } @Override @@ -142,11 +88,73 @@ public String toString() { .of(TestTripPattern.class) .addStr("name", name) .addInts("stops", stopIndexes) - .addInts("restrictions", restrictions) + .addObj("restrictions", restrictions) .toString(); } - private boolean isNotRestricted(int index, int mask) { - return restrictions == null || (restrictions[index] & mask) == 0; + public static class Builder { + + private final String name; + private int[] stopIndexes; + private String restrictions; + private int slackIndex = 0; + private int patternIndex = 0; + private int priorityGroupId = 0; + + public Builder(String name, int... stopIndexes) { + this.name = name; + this.stopIndexes = stopIndexes; + } + + public Builder pattern(int... stopIndexes) { + this.stopIndexes = stopIndexes; + return this; + } + + /** + * Set alight and board restriction using a "coded" string, use space as a separator + * between stops. + *
    +     * Codes:
    +     *   b : Board
    +     *   a : Alight
    +     *   * : Board & Alight
    +     *   - : Boarding & Alighting is not allowed
    +     *
    +     * Example:   B BA * A
    +     * 
    + */ + public Builder restrictions(String restrictions) { + this.restrictions = restrictions; + return this; + } + + public Builder slackIndex(int index) { + this.slackIndex = index; + return this; + } + + public Builder patternIndex(int index) { + this.patternIndex = index; + return this; + } + + public Builder priorityGroup(int priorityGroupId) { + this.priorityGroupId = priorityGroupId; + return this; + } + + public TestTripPattern build() { + return new TestTripPattern( + name, + stopIndexes, + restrictions == null + ? BoardAlightRestrictions.noRestriction(stopIndexes.length) + : BoardAlightRestrictions.restrictions(restrictions), + slackIndex, + patternIndex, + priorityGroupId + ); + } } } diff --git a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/D01_SingeRouteBoardAlightRestrictionsTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/D01_SingeRouteBoardAlightRestrictionsTest.java index a63c208cae3..cde91ab61f8 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/D01_SingeRouteBoardAlightRestrictionsTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/D01_SingeRouteBoardAlightRestrictionsTest.java @@ -2,7 +2,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; 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.RaptorModuleTestConfig.multiCriteria; import static org.opentripplanner.raptor.moduletests.support.RaptorModuleTestConfig.standard; @@ -57,8 +56,10 @@ public class D01_SingeRouteBoardAlightRestrictionsTest implements RaptorTestCons */ @BeforeEach void setup() { - TestTripPattern pattern = pattern("R1", STOP_B, STOP_C, STOP_D); - pattern.restrictions("BW BA AW"); + TestTripPattern pattern = TestTripPattern + .of("R1", STOP_B, STOP_C, STOP_D) + .restrictions("B BA A") + .build(); data.withRoute(route(pattern).withTimetable(schedule("00:01, 00:03, 00:05"))); requestBuilder .searchParams() diff --git a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/K01_TransitPriorityTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/K01_TransitPriorityTest.java index a1cfc005ca5..4a08634db93 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/K01_TransitPriorityTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/K01_TransitPriorityTest.java @@ -8,7 +8,6 @@ import static org.opentripplanner.raptor._data.api.PathUtils.pathsToString; import static org.opentripplanner.raptor._data.transit.TestAccessEgress.walk; 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; @@ -19,6 +18,7 @@ import org.junit.jupiter.api.Test; import org.opentripplanner.raptor.RaptorService; import org.opentripplanner.raptor._data.transit.TestTransitData; +import org.opentripplanner.raptor._data.transit.TestTripPattern; import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.model.RaptorCostConverter; import org.opentripplanner.raptor.api.request.RaptorProfile; @@ -54,13 +54,13 @@ public class K01_TransitPriorityTest { @BeforeEach private void prepareRequest() { data.withRoutes( - route(pattern("L1", STOP_B, STOP_C).withPriorityGroup(GROUP_A)) + route(TestTripPattern.of("L1", STOP_B, STOP_C).priorityGroup(GROUP_A).build()) .withTimetable(schedule("00:02 00:12")), - route(pattern("U1", STOP_B, STOP_C).withPriorityGroup(GROUP_A)) + route(TestTripPattern.of("U1", STOP_B, STOP_C).priorityGroup(GROUP_A).build()) .withTimetable(schedule("00:02 00:12:01")), - route(pattern("L2", STOP_B, STOP_C).withPriorityGroup(GROUP_B)) + route(TestTripPattern.of("L2", STOP_B, STOP_C).priorityGroup(GROUP_B).build()) .withTimetable(schedule("00:02 00:13")), - route(pattern("L3", STOP_B, STOP_C).withPriorityGroup(GROUP_C)) + route(TestTripPattern.of("L3", STOP_B, STOP_C).priorityGroup(GROUP_C).build()) .withTimetable(schedule("00:02 00:14")) ); diff --git a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/K02_TransitPriorityDestinationTest.java b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/K02_TransitPriorityDestinationTest.java index cad92e6a3ad..e6d1fc38d12 100644 --- a/raptor/src/test/java/org/opentripplanner/raptor/moduletests/K02_TransitPriorityDestinationTest.java +++ b/raptor/src/test/java/org/opentripplanner/raptor/moduletests/K02_TransitPriorityDestinationTest.java @@ -11,7 +11,6 @@ import static org.opentripplanner.raptor._data.api.PathUtils.pathsToString; import static org.opentripplanner.raptor._data.transit.TestAccessEgress.walk; 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; @@ -22,6 +21,7 @@ import org.junit.jupiter.api.Test; import org.opentripplanner.raptor.RaptorService; import org.opentripplanner.raptor._data.transit.TestTransitData; +import org.opentripplanner.raptor._data.transit.TestTripPattern; import org.opentripplanner.raptor._data.transit.TestTripSchedule; import org.opentripplanner.raptor.api.model.RaptorCostConverter; import org.opentripplanner.raptor.api.request.RaptorProfile; @@ -56,13 +56,13 @@ private void prepareRequest() { // they are in different groups), but not L3 (which certainly is in its own group but // its cost is outside the range allowed by the slack). data.withRoutes( - route(pattern("L1", STOP_B, STOP_C).withPriorityGroup(GROUP_A)) + route(TestTripPattern.of("L1", STOP_B, STOP_C).priorityGroup(GROUP_A).build()) .withTimetable(schedule("00:02 00:12")), - route(pattern("U1", STOP_B, STOP_D).withPriorityGroup(GROUP_A)) + route(TestTripPattern.of("U1", STOP_B, STOP_D).priorityGroup(GROUP_A).build()) .withTimetable(schedule("00:02 00:12:01")), - route(pattern("L2", STOP_B, STOP_E).withPriorityGroup(GROUP_B)) + route(TestTripPattern.of("L2", STOP_B, STOP_E).priorityGroup(GROUP_B).build()) .withTimetable(schedule("00:02 00:13")), - route(pattern("L3", STOP_B, STOP_F).withPriorityGroup(GROUP_C)) + route(TestTripPattern.of("L3", STOP_B, STOP_F).priorityGroup(GROUP_C).build()) .withTimetable(schedule("00:02 00:14")) ); From 6f7d957cb8196a9bb4bf28e6506c4bbe33e25758 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Mon, 4 Nov 2024 17:09:50 +0000 Subject: [PATCH 195/213] implement alert node query --- .../opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java index 95984ba6dd0..99e409c0349 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java @@ -57,6 +57,7 @@ import org.opentripplanner.routing.graphfinder.PatternAtStop; import org.opentripplanner.routing.graphfinder.PlaceAtDistance; import org.opentripplanner.routing.graphfinder.PlaceType; +import org.opentripplanner.routing.services.TransitAlertService; import org.opentripplanner.routing.vehicle_parking.VehicleParking; import org.opentripplanner.routing.vehicle_parking.VehicleParkingService; import org.opentripplanner.service.vehiclerental.VehicleRentalService; @@ -394,7 +395,7 @@ public DataFetcher node() { case "Agency": return transitService.getAgencyForId(FeedScopedId.parse(id)); case "Alert": - return null; //TODO + return transitService.getTransitAlertService().getAlertById(FeedScopedId.parse(id)); case "BikePark": var bikeParkId = FeedScopedId.parse(id); return vehicleParkingService == null From cb73bffbcf3f81374320e47770a31aa9f60aa89f Mon Sep 17 00:00:00 2001 From: Sam Kim <21956685+sam-k@users.noreply.github.com> Date: Mon, 4 Nov 2024 11:28:18 -0800 Subject: [PATCH 196/213] Applied reviewer comments --- doc/dev/decisionrecords/Codestyle.md | 10 +++++----- doc/dev/decisionrecords/NamingConventions.md | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/dev/decisionrecords/Codestyle.md b/doc/dev/decisionrecords/Codestyle.md index 170c592f437..22f57eacbda 100644 --- a/doc/dev/decisionrecords/Codestyle.md +++ b/doc/dev/decisionrecords/Codestyle.md @@ -10,9 +10,9 @@ run `prettier-maven-plugin`. A check is run in the CI build, which fails the bui merging a PR if the code style is incorrect. There are two ways to format the code before checking it in. You may run a normal build with -Maven—it takes a bit of time, but reformat the entire codebase. Only code you have changed should be -formatted, since the existing code is already formatted. The second way is to set up Prettier and -run it manually or hick it into your IDE, so it runs every time a file is changed. +Maven; it takes a bit of time, but it reformats the entire codebase. Only code you have changed +should be formatted, since the existing code is already formatted. The second way is to set up +Prettier and run it manually or hick it into your IDE, so it runs every time a file is changed. ### How to Run Prettier with Maven @@ -47,10 +47,10 @@ The check is run by the CI server and will fail the build if the code is incorre You should use the Prettier Maven plugin to reformat the code or run Prettier with Node (faster). -Prettier does _not_ format the doc and Markdown files—only Java code. So, for other files, you +Prettier does _not_ format the doc and Markdown files, only Java code. So, for other files you should use the _project_ code style. It is automatically imported when you first open the project. But, if you have set a custom code style in your settings (as we used until OTP v2.1), then you need -to change to the _Project_ code style. Open the `Preferences` from the menu and select _Editor > +to change to the _Project_ code style. Open the `Preferences` from the menu and select _Editor > Code Style_. Then select **Project** in the \_Scheme drop down. #### Run Prettier Maven Plugin as an External Tool in IntelliJ diff --git a/doc/dev/decisionrecords/NamingConventions.md b/doc/dev/decisionrecords/NamingConventions.md index 53c783950d9..16b37a799bf 100644 --- a/doc/dev/decisionrecords/NamingConventions.md +++ b/doc/dev/decisionrecords/NamingConventions.md @@ -2,7 +2,7 @@ In general, we use American English. We use the GTFS terminology inside OTP as the transit domain-specific language. In cases where GTFS does not provide an alternative, we use NeTEx. The -naming should follow the Java standard naming conventions. For example, a "real-time updater" class +naming should follow the Java standard naming conventions. For example, a "real-time updater" class is named `RealTimeUpdater`. If in doubt, check the Oxford Dictionary (American). ## Packages From 9063f9337a3635045dcf6aebe5eb0878a4175bf5 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 4 Nov 2024 21:30:11 +0100 Subject: [PATCH 197/213] Add file pattern for all tests --- .github/workflows/cibuild.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/cibuild.yml b/.github/workflows/cibuild.yml index 84bdf2e84f0..212c3934dc2 100644 --- a/.github/workflows/cibuild.yml +++ b/.github/workflows/cibuild.yml @@ -68,6 +68,7 @@ jobs: uses: codecov/test-results-action@v1 with: token: ${{ secrets.CODECOV_TOKEN }} + files: "*TEST-*.xml" - name: Deploy to Github Package Registry if: github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev-1.x' || github.ref == 'refs/heads/dev-2.x') From 39c0aac969d71dc7d53272909827eda791716b0f Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Tue, 5 Nov 2024 10:29:43 +0000 Subject: [PATCH 198/213] Add changelog entry for #6182 [ci skip] --- doc/user/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/user/Changelog.md b/doc/user/Changelog.md index b1064503a68..6f4b3f9d8b4 100644 --- a/doc/user/Changelog.md +++ b/doc/user/Changelog.md @@ -30,6 +30,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Revert [#6214](https://github.com/opentripplanner/OpenTripPlanner/pull/6214) - Remove reading agency and route brandingUrl from GTFS data [#6183](https://github.com/opentripplanner/OpenTripPlanner/pull/6183) - Fix NullPointerException when searching backwards with a frequency-based trip [#6211](https://github.com/opentripplanner/OpenTripPlanner/pull/6211) +- Combine two multi-criteria searches in Raptor [#6182](https://github.com/opentripplanner/OpenTripPlanner/pull/6182) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.6.0 (2024-09-18) From 15c862d11b8366cdfacd013858cae5d4d64beaf7 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 4 Nov 2024 11:59:53 +0100 Subject: [PATCH 199/213] Fix conversion of coordinates --- .../transit/model/network/TripPatternBuilder.java | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/transit/model/network/TripPatternBuilder.java b/application/src/main/java/org/opentripplanner/transit/model/network/TripPatternBuilder.java index 5f9be0da455..66f695521c0 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/network/TripPatternBuilder.java +++ b/application/src/main/java/org/opentripplanner/transit/model/network/TripPatternBuilder.java @@ -1,7 +1,5 @@ package org.opentripplanner.transit.model.network; -import static java.util.Objects.requireNonNullElseGet; - import java.util.ArrayList; import java.util.List; import java.util.function.UnaryOperator; @@ -233,15 +231,8 @@ private List generateHopGeometriesFromOriginalTripPattern() { hopGeometry != null && stopPattern.sameStations(originalTripPattern.getStopPattern(), i) ) { // Use old geometry but patch first and last point with new stops - var newStart = new Coordinate( - stopPattern.getStop(i).getCoordinate().longitude(), - stopPattern.getStop(i).getCoordinate().latitude() - ); - - var newEnd = new Coordinate( - stopPattern.getStop(i + 1).getCoordinate().longitude(), - stopPattern.getStop(i + 1).getCoordinate().latitude() - ); + var newStart = stopPattern.getStop(i).getCoordinate().asJtsCoordinate(); + var newEnd = stopPattern.getStop(i + 1).getCoordinate().asJtsCoordinate(); Coordinate[] coordinates = originalTripPattern.getHopGeometry(i).getCoordinates().clone(); coordinates[0].setCoordinate(newStart); From f92ff7e2799a8e046bae7e1426d4d1b19ced288d Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Tue, 5 Nov 2024 14:44:38 +0000 Subject: [PATCH 200/213] remove unused import Co-authored-by: Leonard Ehrenfried --- .../java/org/opentripplanner/api/parameter/ApiRequestMode.java | 1 - 1 file changed, 1 deletion(-) diff --git a/application/src/main/java/org/opentripplanner/api/parameter/ApiRequestMode.java b/application/src/main/java/org/opentripplanner/api/parameter/ApiRequestMode.java index 5681bd1d76d..7ac2c6f7d86 100644 --- a/application/src/main/java/org/opentripplanner/api/parameter/ApiRequestMode.java +++ b/application/src/main/java/org/opentripplanner/api/parameter/ApiRequestMode.java @@ -2,7 +2,6 @@ import java.util.Collection; import java.util.List; -import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.transit.model.basic.TransitMode; public enum ApiRequestMode { From 48c2bf9d126c7885112ef1827a5d57f6a87e4d4b Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Tue, 5 Nov 2024 15:56:26 +0000 Subject: [PATCH 201/213] add test for fetching alert --- .../gtfs/datafetchers/QueryTypeImplTest.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/application/src/test/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImplTest.java b/application/src/test/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImplTest.java index e223b53844a..2bdf856df6a 100644 --- a/application/src/test/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImplTest.java +++ b/application/src/test/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImplTest.java @@ -1,11 +1,17 @@ package org.opentripplanner.apis.gtfs.datafetchers; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import graphql.schema.DataFetchingEnvironment; import java.util.List; import java.util.Map; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.opentripplanner.apis.gtfs.GraphQLRequestContext; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.routing.alertpatch.AlertCause; @@ -13,7 +19,9 @@ import org.opentripplanner.routing.alertpatch.AlertSeverity; import org.opentripplanner.routing.alertpatch.EntitySelector; import org.opentripplanner.routing.alertpatch.TransitAlert; +import org.opentripplanner.routing.services.TransitAlertService; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.transit.service.TransitService; public class QueryTypeImplTest { @@ -171,4 +179,27 @@ public void testFilterAlertsStop() { assertEquals(1, filteredAlerts.size()); assertEquals(STOP_ID, filteredAlerts.get(0).getId()); } + + @Test + public void nodeAlert() { + var subject = new QueryTypeImpl(); + var id = new FeedScopedId("Feed", "Entity"); + var alert = TransitAlert.of(id).build(); + + var transitAlertService = mock(TransitAlertService.class); + when(transitAlertService.getAlertById(id)).thenReturn(alert); + + var transitService = mock(TransitService.class); + when(transitService.getTransitAlertService()).thenReturn(transitAlertService); + + var environment = mock(DataFetchingEnvironment.class); + when(environment.getContext()) + .thenReturn( + new GraphQLRequestContext(null, transitService, null, null, null, null, null, null) + ); + when(environment.getArguments()) + .thenReturn(Map.of("id", new graphql.relay.Relay.ResolvedGlobalId("Alert", id.toString()))); + + assertEquals(alert, assertDoesNotThrow(() -> subject.node().get(environment))); + } } From d92a7fe8aeada39e1d64d7bbae3ec6baf78acbe5 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Wed, 6 Nov 2024 10:12:48 +0100 Subject: [PATCH 202/213] fix: Return empty list if there is no siriUrls in situations[]/infoLinks. --- .../apis/transmodel/model/siri/sx/PtSituationElementType.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/siri/sx/PtSituationElementType.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/siri/sx/PtSituationElementType.java index 1567cd977c9..4fd9505b73e 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/siri/sx/PtSituationElementType.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/siri/sx/PtSituationElementType.java @@ -241,7 +241,7 @@ public static GraphQLObjectType create( if (!siriUrls.isEmpty()) { return siriUrls; } - return null; + return emptyList(); }) .build() ) From 7237f63c5b399d387f1216b04c9249e522533e18 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Wed, 6 Nov 2024 11:21:25 +0000 Subject: [PATCH 203/213] Revert "add test for fetching alert" This reverts commit 48c2bf9d126c7885112ef1827a5d57f6a87e4d4b. --- .../gtfs/datafetchers/QueryTypeImplTest.java | 31 ------------------- 1 file changed, 31 deletions(-) diff --git a/application/src/test/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImplTest.java b/application/src/test/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImplTest.java index 2bdf856df6a..e223b53844a 100644 --- a/application/src/test/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImplTest.java +++ b/application/src/test/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImplTest.java @@ -1,17 +1,11 @@ package org.opentripplanner.apis.gtfs.datafetchers; -import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -import graphql.schema.DataFetchingEnvironment; import java.util.List; import java.util.Map; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import org.mockito.Mockito; -import org.opentripplanner.apis.gtfs.GraphQLRequestContext; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.routing.alertpatch.AlertCause; @@ -19,9 +13,7 @@ import org.opentripplanner.routing.alertpatch.AlertSeverity; import org.opentripplanner.routing.alertpatch.EntitySelector; import org.opentripplanner.routing.alertpatch.TransitAlert; -import org.opentripplanner.routing.services.TransitAlertService; import org.opentripplanner.transit.model.framework.FeedScopedId; -import org.opentripplanner.transit.service.TransitService; public class QueryTypeImplTest { @@ -179,27 +171,4 @@ public void testFilterAlertsStop() { assertEquals(1, filteredAlerts.size()); assertEquals(STOP_ID, filteredAlerts.get(0).getId()); } - - @Test - public void nodeAlert() { - var subject = new QueryTypeImpl(); - var id = new FeedScopedId("Feed", "Entity"); - var alert = TransitAlert.of(id).build(); - - var transitAlertService = mock(TransitAlertService.class); - when(transitAlertService.getAlertById(id)).thenReturn(alert); - - var transitService = mock(TransitService.class); - when(transitService.getTransitAlertService()).thenReturn(transitAlertService); - - var environment = mock(DataFetchingEnvironment.class); - when(environment.getContext()) - .thenReturn( - new GraphQLRequestContext(null, transitService, null, null, null, null, null, null) - ); - when(environment.getArguments()) - .thenReturn(Map.of("id", new graphql.relay.Relay.ResolvedGlobalId("Alert", id.toString()))); - - assertEquals(alert, assertDoesNotThrow(() -> subject.node().get(environment))); - } } From 9871533b6bc7435a87d06cefa2770eb857df5427 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Wed, 6 Nov 2024 11:20:58 +0000 Subject: [PATCH 204/213] Add integration test for fetching alert --- .../apis/gtfs/expectations/node-alert.json | 10 ++++++++++ .../apis/gtfs/queries/node-alert.graphql | 10 ++++++++++ 2 files changed, 20 insertions(+) create mode 100644 application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/node-alert.json create mode 100644 application/src/test/resources/org/opentripplanner/apis/gtfs/queries/node-alert.graphql diff --git a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/node-alert.json b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/node-alert.json new file mode 100644 index 00000000000..8d4c96fb4a9 --- /dev/null +++ b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/node-alert.json @@ -0,0 +1,10 @@ +{ + "data": { + "node": { + "id": "QWxlcnQ6Rjpuby1oZWFkZXI", + "alertHeaderText": "Second string", + "alertDescriptionText": "Second string", + "alertUrl": null + } + } +} \ No newline at end of file diff --git a/application/src/test/resources/org/opentripplanner/apis/gtfs/queries/node-alert.graphql b/application/src/test/resources/org/opentripplanner/apis/gtfs/queries/node-alert.graphql new file mode 100644 index 00000000000..533595e0d5f --- /dev/null +++ b/application/src/test/resources/org/opentripplanner/apis/gtfs/queries/node-alert.graphql @@ -0,0 +1,10 @@ +{ + node(id: "QWxlcnQ6Rjpuby1oZWFkZXI") { + id + ... on Alert { + alertHeaderText + alertDescriptionText + alertUrl + } + } +} From a3a718d498ab5a351dbfe38ae8afe2c8df52e87b Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Wed, 6 Nov 2024 13:56:17 +0000 Subject: [PATCH 205/213] Add changelog entry for #6225 [ci skip] --- doc/user/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/user/Changelog.md b/doc/user/Changelog.md index 6f4b3f9d8b4..06aaf674f9e 100644 --- a/doc/user/Changelog.md +++ b/doc/user/Changelog.md @@ -31,6 +31,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Remove reading agency and route brandingUrl from GTFS data [#6183](https://github.com/opentripplanner/OpenTripPlanner/pull/6183) - Fix NullPointerException when searching backwards with a frequency-based trip [#6211](https://github.com/opentripplanner/OpenTripPlanner/pull/6211) - Combine two multi-criteria searches in Raptor [#6182](https://github.com/opentripplanner/OpenTripPlanner/pull/6182) +- Implement alert node query in GTFS GraphQL API [#6225](https://github.com/opentripplanner/OpenTripPlanner/pull/6225) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.6.0 (2024-09-18) From f4924468169adb1ca188fbf6e73a85135feca7d1 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Wed, 6 Nov 2024 11:49:19 +0100 Subject: [PATCH 206/213] Ignore situation alerts without url or siri uris --- .../model/framework/InfoLinkType.java | 4 +- .../framework/i18n/I18NString.java | 22 +++++++-- .../routing/alertpatch/AlertUrl.java | 9 ++-- .../updater/siri/SiriAlertsUpdateHandler.java | 47 ++++++++++++------- .../framework/i18n/I18NStringTest.java | 32 +++++++++++++ .../siri/SiriAlertsUpdateHandlerTest.java | 4 +- 6 files changed, 88 insertions(+), 30 deletions(-) create mode 100644 application/src/test/java/org/opentripplanner/framework/i18n/I18NStringTest.java diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/framework/InfoLinkType.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/framework/InfoLinkType.java index 6541b48a44d..e0472a2ccf8 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/framework/InfoLinkType.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/framework/InfoLinkType.java @@ -20,7 +20,7 @@ public static GraphQLObjectType create() { .description("URI") .dataFetcher(environment -> { AlertUrl source = environment.getSource(); - return source.uri; + return source.uri(); }) .build() ) @@ -32,7 +32,7 @@ public static GraphQLObjectType create() { .description("Label") .dataFetcher(environment -> { AlertUrl source = environment.getSource(); - return source.label; + return source.label(); }) .build() ) diff --git a/application/src/main/java/org/opentripplanner/framework/i18n/I18NString.java b/application/src/main/java/org/opentripplanner/framework/i18n/I18NString.java index 4f75d214c91..101342c7a6f 100644 --- a/application/src/main/java/org/opentripplanner/framework/i18n/I18NString.java +++ b/application/src/main/java/org/opentripplanner/framework/i18n/I18NString.java @@ -1,6 +1,7 @@ package org.opentripplanner.framework.i18n; import java.util.Locale; +import javax.annotation.Nullable; /** * This interface is used when providing translations on server side. Sources: OSM tags with @@ -9,9 +10,20 @@ * @author mabu */ public interface I18NString { - /** true if the given value is not {@code null} or has at least one none white-space character. */ - public static boolean hasValue(I18NString value) { - return value != null && !value.toString().isBlank(); + /** + * Return {@code true} if the given value is not {@code null} or has at least one none + * white-space character. + */ + static boolean hasValue(@Nullable I18NString value) { + return !hasNoValue(value); + } + + /** + * Return {@code true} if the given value has at least one none white-space character. + * Return {@code false} if the value is {@code null} or blank. + */ + static boolean hasNoValue(@Nullable I18NString value) { + return value == null || value.toString().isBlank(); } /** @@ -26,8 +38,8 @@ public static boolean hasValue(I18NString value) { */ String toString(Locale locale); - static I18NString assertHasValue(I18NString value) { - if (value == null || value.toString().isBlank()) { + static I18NString assertHasValue(@Nullable I18NString value) { + if (hasNoValue(value)) { throw new IllegalArgumentException( "Value can not be null, empty or just whitespace: " + (value == null ? "null" : "'" + value + "'") diff --git a/application/src/main/java/org/opentripplanner/routing/alertpatch/AlertUrl.java b/application/src/main/java/org/opentripplanner/routing/alertpatch/AlertUrl.java index b13fad6e97b..fcce3720538 100644 --- a/application/src/main/java/org/opentripplanner/routing/alertpatch/AlertUrl.java +++ b/application/src/main/java/org/opentripplanner/routing/alertpatch/AlertUrl.java @@ -1,7 +1,10 @@ package org.opentripplanner.routing.alertpatch; -public class AlertUrl { +import java.util.Objects; +import javax.annotation.Nullable; - public String uri; - public String label; +public record AlertUrl(String uri, @Nullable String label) { + public AlertUrl { + Objects.requireNonNull(uri); + } } diff --git a/application/src/main/java/org/opentripplanner/updater/siri/SiriAlertsUpdateHandler.java b/application/src/main/java/org/opentripplanner/updater/siri/SiriAlertsUpdateHandler.java index a5817eca41b..9656d1a0b01 100644 --- a/application/src/main/java/org/opentripplanner/updater/siri/SiriAlertsUpdateHandler.java +++ b/application/src/main/java/org/opentripplanner/updater/siri/SiriAlertsUpdateHandler.java @@ -135,9 +135,9 @@ private TransitAlert mapSituationToAlert( TransitAlertBuilder alert = createAlertWithTexts(situation); if ( - (alert.headerText() == null || alert.headerText().toString().isEmpty()) && - (alert.descriptionText() == null || alert.descriptionText().toString().isEmpty()) && - (alert.detailText() == null || alert.detailText().toString().isEmpty()) + I18NString.hasNoValue(alert.headerText()) && + I18NString.hasNoValue(alert.descriptionText()) && + I18NString.hasNoValue(alert.detailText()) ) { LOG.debug( "Empty Alert - ignoring situationNumber: {}", @@ -221,18 +221,18 @@ private long getEpochSecond(ZonedDateTime startTime) { private TransitAlertBuilder createAlertWithTexts(PtSituationElement situation) { return TransitAlert .of(new FeedScopedId(feedId, situation.getSituationNumber().getValue())) - .withDescriptionText(getTranslatedString(situation.getDescriptions())) - .withDetailText(getTranslatedString(situation.getDetails())) - .withAdviceText(getTranslatedString(situation.getAdvices())) - .withHeaderText(getTranslatedString(situation.getSummaries())) - .withUrl(getInfoLinkAsString(situation.getInfoLinks())) - .addSiriUrls(getInfoLinks(situation.getInfoLinks())); + .withDescriptionText(mapTranslatedString(situation.getDescriptions())) + .withDetailText(mapTranslatedString(situation.getDetails())) + .withAdviceText(mapTranslatedString(situation.getAdvices())) + .withHeaderText(mapTranslatedString(situation.getSummaries())) + .withUrl(mapInfoLinkToI18NString(situation.getInfoLinks())) + .addSiriUrls(mapInfoLinks(situation)); } /* * Returns first InfoLink-uri as a String */ - private I18NString getInfoLinkAsString(PtSituationElement.InfoLinks infoLinks) { + private I18NString mapInfoLinkToI18NString(PtSituationElement.InfoLinks infoLinks) { if (infoLinks != null) { if (isNotEmpty(infoLinks.getInfoLinks())) { InfoLinkStructure infoLinkStructure = infoLinks.getInfoLinks().get(0); @@ -247,21 +247,32 @@ private I18NString getInfoLinkAsString(PtSituationElement.InfoLinks infoLinks) { /* * Returns all InfoLinks */ - private List getInfoLinks(PtSituationElement.InfoLinks infoLinks) { + private List mapInfoLinks(PtSituationElement situation) { + PtSituationElement.InfoLinks infoLinks = situation.getInfoLinks(); List alertUrls = new ArrayList<>(); if (infoLinks != null) { if (isNotEmpty(infoLinks.getInfoLinks())) { for (InfoLinkStructure infoLink : infoLinks.getInfoLinks()) { - AlertUrl alertUrl = new AlertUrl(); - + String label = null; List labels = infoLink.getLabels(); if (labels != null && !labels.isEmpty()) { - NaturalLanguageStringStructure label = labels.get(0); - alertUrl.label = label.getValue(); + NaturalLanguageStringStructure lbl = labels.get(0); + label = lbl.getValue(); } - alertUrl.uri = infoLink.getUri(); - alertUrls.add(alertUrl); + var uri = infoLink.getUri(); + if (uri != null) { + alertUrls.add(new AlertUrl(uri, label)); + } else { + if (LOG.isDebugEnabled()) { + LOG.debug( + "URI missing in info-link - ignoring info-link in situation: {}", + situation.getSituationNumber() != null + ? situation.getSituationNumber().getValue() + : null + ); + } + } } } } @@ -281,7 +292,7 @@ private boolean isNotEmpty(List list) { * * @return A TranslatedString containing the same information as the input */ - private I18NString getTranslatedString(List input) { + private I18NString mapTranslatedString(List input) { Map translations = new HashMap<>(); if (input != null && input.size() > 0) { for (DefaultedTextStructure textStructure : input) { diff --git a/application/src/test/java/org/opentripplanner/framework/i18n/I18NStringTest.java b/application/src/test/java/org/opentripplanner/framework/i18n/I18NStringTest.java new file mode 100644 index 00000000000..101da6edc91 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/framework/i18n/I18NStringTest.java @@ -0,0 +1,32 @@ +package org.opentripplanner.framework.i18n; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.Test; + +class I18NStringTest { + + private final I18NString noValue = I18NString.of(" \t\n\r\f"); + private final I18NString hasValue = I18NString.of("A value"); + + @Test + void hasValue() { + assertTrue(I18NString.hasValue(hasValue)); + assertFalse(I18NString.hasValue(noValue)); + } + + @Test + void hasNoValue() { + assertFalse(I18NString.hasNoValue(hasValue)); + assertTrue(I18NString.hasNoValue(noValue)); + } + + @Test + void assertHasValue() { + var ex = assertThrows(IllegalArgumentException.class, () -> I18NString.assertHasValue(noValue)); + assertEquals("Value can not be null, empty or just whitespace: ' \t\n\r\f'", ex.getMessage()); + } +} diff --git a/application/src/test/java/org/opentripplanner/updater/siri/SiriAlertsUpdateHandlerTest.java b/application/src/test/java/org/opentripplanner/updater/siri/SiriAlertsUpdateHandlerTest.java index 94c4af8d22e..3cd8e50c000 100644 --- a/application/src/test/java/org/opentripplanner/updater/siri/SiriAlertsUpdateHandlerTest.java +++ b/application/src/test/java/org/opentripplanner/updater/siri/SiriAlertsUpdateHandlerTest.java @@ -198,8 +198,8 @@ public void testSiriSxUpdateForStop() { final List alertUrlList = transitAlert.siriUrls(); AlertUrl alertUrl = alertUrlList.get(0); - assertEquals(infoLinkUri, alertUrl.uri); - assertEquals(infoLinkLabel, alertUrl.label); + assertEquals(infoLinkUri, alertUrl.uri()); + assertEquals(infoLinkLabel, alertUrl.label()); } @Test From 7688365c59153ac49c14c2974c471e74af9786c0 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Thu, 7 Nov 2024 10:01:03 +0000 Subject: [PATCH 207/213] Add changelog entry for #6136 [ci skip] --- doc/user/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/user/Changelog.md b/doc/user/Changelog.md index 06aaf674f9e..57b54a67e1a 100644 --- a/doc/user/Changelog.md +++ b/doc/user/Changelog.md @@ -32,6 +32,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Fix NullPointerException when searching backwards with a frequency-based trip [#6211](https://github.com/opentripplanner/OpenTripPlanner/pull/6211) - Combine two multi-criteria searches in Raptor [#6182](https://github.com/opentripplanner/OpenTripPlanner/pull/6182) - Implement alert node query in GTFS GraphQL API [#6225](https://github.com/opentripplanner/OpenTripPlanner/pull/6225) +- Fix hop geometries when one pattern is replaced by another with different number of stops [#6136](https://github.com/opentripplanner/OpenTripPlanner/pull/6136) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.6.0 (2024-09-18) From 13949af020f1fd66ae450515291fffa6f1a936c0 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Thu, 7 Nov 2024 10:19:41 +0000 Subject: [PATCH 208/213] remove unused import Co-authored-by: Leonard Ehrenfried --- .../org/opentripplanner/gtfs/mapping/TransitModeMapper.java | 1 - .../org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java | 2 -- 2 files changed, 3 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/TransitModeMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/TransitModeMapper.java index aef5399475e..919d71455a2 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/TransitModeMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/TransitModeMapper.java @@ -1,6 +1,5 @@ package org.opentripplanner.gtfs.mapping; -import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.transit.model.basic.TransitMode; public class TransitModeMapper { diff --git a/application/src/test/java/org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java b/application/src/test/java/org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java index d5086d153b6..55e6f3a0d86 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/mapping/TransitModeMapperTest.java @@ -17,11 +17,9 @@ import static org.opentripplanner.transit.model.basic.TransitMode.TROLLEYBUS; import java.util.stream.Stream; -import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.transit.model.basic.TransitMode; class TransitModeMapperTest { From 3eb39f1b053b3f8030838464749d537704328ddf Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Thu, 7 Nov 2024 13:02:49 +0000 Subject: [PATCH 209/213] Add changelog entry for #6171 [ci skip] --- doc/user/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/user/Changelog.md b/doc/user/Changelog.md index 57b54a67e1a..adaa6ada3ac 100644 --- a/doc/user/Changelog.md +++ b/doc/user/Changelog.md @@ -33,6 +33,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Combine two multi-criteria searches in Raptor [#6182](https://github.com/opentripplanner/OpenTripPlanner/pull/6182) - Implement alert node query in GTFS GraphQL API [#6225](https://github.com/opentripplanner/OpenTripPlanner/pull/6225) - Fix hop geometries when one pattern is replaced by another with different number of stops [#6136](https://github.com/opentripplanner/OpenTripPlanner/pull/6136) +- Distinct coach from bus when reading in GTFS data and in GTFS GraphQL API [#6171](https://github.com/opentripplanner/OpenTripPlanner/pull/6171) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.6.0 (2024-09-18) From a9a23fdb0dd4a7f613b3dc0b130a7a2d6311db55 Mon Sep 17 00:00:00 2001 From: OTP Serialization Version Bot Date: Thu, 7 Nov 2024 13:03:36 +0000 Subject: [PATCH 210/213] Bump serialization version id for #6171 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index abc70e5dc8c..caa3b6779ba 100644 --- a/pom.xml +++ b/pom.xml @@ -58,7 +58,7 @@ - 170 + 171 32.0 2.52 From 5438e020be026333ec0b28f546b1e14ee1fb585c Mon Sep 17 00:00:00 2001 From: Eivind Morris Bakke Date: Thu, 7 Nov 2024 15:07:30 +0100 Subject: [PATCH 211/213] Add provider of updates as a dimension to metrics. (#6199) * Adds provider / datasource of updates as a dimension to metrics. * Changes provider to producer and addresses smaller comments in PR. * Updates how counters are incremented and kept track of in StreamingTripUpdateMetrics. Also adds more details to the new producerMetrics flag, and renames it from detailedMetrics. * Addresses comments from PR. * Addresses comments from PR. * Addresses comments from PR and regenerates autogenerated documentation. * Allows for dataSource to be null in AddedTripBuilder. --- .../model/RealTimeTripUpdate.java | 43 ++++++++-- .../model/TimetableSnapshot.java | 3 +- .../SiriETGooglePubsubUpdaterConfig.java | 6 ++ .../updaters/SiriETUpdaterConfig.java | 8 +- .../transit/model/framework/FeedScopedId.java | 2 +- .../updater/siri/AddedTripBuilder.java | 25 ++++-- .../updater/siri/ModifiedTripBuilder.java | 18 ++-- .../siri/SiriTimetableSnapshotSource.java | 16 ++-- .../updater/siri/TripUpdate.java | 26 ++++-- .../siri/updater/SiriETUpdaterParameters.java | 3 +- .../SiriETGooglePubsubUpdaterParameters.java | 3 +- .../spi/DataValidationExceptionMapper.java | 12 ++- .../updater/spi/UpdateError.java | 20 ++++- .../updater/spi/UpdateResult.java | 35 ++++++-- .../updater/spi/UpdateSuccess.java | 21 ++--- .../updater/trip/UrlUpdaterParameters.java | 4 + .../metrics/StreamingTripUpdateMetrics.java | 86 ++++++++----------- .../updater/siri/AddedTripBuilderTest.java | 27 ++++-- .../updater/siri/ModifiedTripBuilderTest.java | 24 ++++-- .../updater/siri/SiriEtBuilder.java | 1 + .../sandbox/siri/SiriGooglePubSubUpdater.md | 1 + doc/user/sandbox/siri/SiriUpdater.md | 1 + 22 files changed, 254 insertions(+), 131 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/model/RealTimeTripUpdate.java b/application/src/main/java/org/opentripplanner/model/RealTimeTripUpdate.java index e5bcc6c0322..28fc16a98ac 100644 --- a/application/src/main/java/org/opentripplanner/model/RealTimeTripUpdate.java +++ b/application/src/main/java/org/opentripplanner/model/RealTimeTripUpdate.java @@ -9,12 +9,19 @@ /** * Represents the real-time update of a single trip. - * @param pattern the pattern to which belongs the updated trip. This can be a new pattern created in real-time. - * @param updatedTripTimes the new trip times for the updated trip. - * @param serviceDate the service date for which this update applies (updates are valid only for one service date) - * @param addedTripOnServiceDate optionally if this trip update adds a new trip, the TripOnServiceDate corresponding to this new trip. - * @param tripCreation true if this update creates a new trip, not present in scheduled data. - * @param routeCreation true if an added trip cannot be registered under an existing route and a new route must be created. + * + * @param pattern the pattern to which belongs the updated trip. This can be a new + * pattern created in real-time. + * @param updatedTripTimes the new trip times for the updated trip. + * @param serviceDate the service date for which this update applies (updates are valid + * only for one service date) + * @param addedTripOnServiceDate optionally if this trip update adds a new trip, the + * TripOnServiceDate corresponding to this new trip. + * @param tripCreation true if this update creates a new trip, not present in scheduled + * data. + * @param routeCreation true if an added trip cannot be registered under an existing route + * and a new route must be created. + * @param producer the producer of the real-time update. */ public record RealTimeTripUpdate( TripPattern pattern, @@ -22,7 +29,8 @@ public record RealTimeTripUpdate( LocalDate serviceDate, @Nullable TripOnServiceDate addedTripOnServiceDate, boolean tripCreation, - boolean routeCreation + boolean routeCreation, + @Nullable String producer ) { public RealTimeTripUpdate { Objects.requireNonNull(pattern); @@ -38,6 +46,25 @@ public RealTimeTripUpdate( TripTimes updatedTripTimes, LocalDate serviceDate ) { - this(pattern, updatedTripTimes, serviceDate, null, false, false); + this(pattern, updatedTripTimes, serviceDate, null, false, false, null); + } + + public RealTimeTripUpdate( + TripPattern pattern, + TripTimes updatedTripTimes, + LocalDate serviceDate, + @Nullable TripOnServiceDate addedTripOnServiceDate, + boolean tripCreation, + boolean routeCreation + ) { + this( + pattern, + updatedTripTimes, + serviceDate, + addedTripOnServiceDate, + tripCreation, + routeCreation, + null + ); } } diff --git a/application/src/main/java/org/opentripplanner/model/TimetableSnapshot.java b/application/src/main/java/org/opentripplanner/model/TimetableSnapshot.java index 0a54fc964d8..94b490c48a0 100644 --- a/application/src/main/java/org/opentripplanner/model/TimetableSnapshot.java +++ b/application/src/main/java/org/opentripplanner/model/TimetableSnapshot.java @@ -347,8 +347,7 @@ public Result update(RealTimeTripUpdate realTimeTrip } // The time tables are finished during the commit - - return Result.success(UpdateSuccess.noWarnings()); + return Result.success(UpdateSuccess.noWarnings(realTimeTripUpdate.producer())); } /** diff --git a/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/SiriETGooglePubsubUpdaterConfig.java b/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/SiriETGooglePubsubUpdaterConfig.java index 65fb7bb2c11..3396e56f6e3 100644 --- a/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/SiriETGooglePubsubUpdaterConfig.java +++ b/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/SiriETGooglePubsubUpdaterConfig.java @@ -1,6 +1,7 @@ package org.opentripplanner.standalone.config.routerconfig.updaters; import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_1; +import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_7; import static org.opentripplanner.updater.siri.updater.google.SiriETGooglePubsubUpdaterParameters.INITIAL_GET_DATA_TIMEOUT; import static org.opentripplanner.updater.siri.updater.google.SiriETGooglePubsubUpdaterParameters.RECONNECT_PERIOD; @@ -79,6 +80,11 @@ If this parameter is set, the updater will be marked as initialized (primed) onl .of("fuzzyTripMatching") .since(V2_1) .summary("If the trips should be matched fuzzily.") + .asBoolean(false), + c + .of("producerMetrics") + .since(V2_7) + .summary("If failure, success, and warning metrics should be collected per producer.") .asBoolean(false) ); } diff --git a/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/SiriETUpdaterConfig.java b/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/SiriETUpdaterConfig.java index 4402ba83b7e..1b0eb2e4420 100644 --- a/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/SiriETUpdaterConfig.java +++ b/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/SiriETUpdaterConfig.java @@ -2,6 +2,7 @@ import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_0; import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_3; +import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_7; import java.time.Duration; import org.opentripplanner.standalone.config.framework.json.NodeAdapter; @@ -43,7 +44,12 @@ public static SiriETUpdaterParameters create(String configRef, NodeAdapter c) { .since(V2_0) .summary("If the fuzzy trip matcher should be used to match trips.") .asBoolean(false), - HttpHeadersConfig.headers(c, V2_3) + HttpHeadersConfig.headers(c, V2_3), + c + .of("producerMetrics") + .since(V2_7) + .summary("If failure, success, and warning metrics should be collected per producer.") + .asBoolean(false) ); } } diff --git a/application/src/main/java/org/opentripplanner/transit/model/framework/FeedScopedId.java b/application/src/main/java/org/opentripplanner/transit/model/framework/FeedScopedId.java index be12be83548..0b269220ae1 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/framework/FeedScopedId.java +++ b/application/src/main/java/org/opentripplanner/transit/model/framework/FeedScopedId.java @@ -78,7 +78,7 @@ public static boolean isValidString(String value) throws IllegalArgumentExceptio /** * Concatenate feedId and id into a string. */ - public static String concatenateId(String feedId, String id) { + private static String concatenateId(String feedId, String id) { return feedId + ID_SEPARATOR + id; } diff --git a/application/src/main/java/org/opentripplanner/updater/siri/AddedTripBuilder.java b/application/src/main/java/org/opentripplanner/updater/siri/AddedTripBuilder.java index a1ca89f5c83..aff1659653b 100644 --- a/application/src/main/java/org/opentripplanner/updater/siri/AddedTripBuilder.java +++ b/application/src/main/java/org/opentripplanner/updater/siri/AddedTripBuilder.java @@ -56,6 +56,7 @@ class AddedTripBuilder { private final Function getTripPatternId; private final FeedScopedId tripId; private final Operator operator; + private final String dataSource; private final String lineRef; private final Route replacedRoute; private final LocalDate serviceDate; @@ -81,11 +82,14 @@ class AddedTripBuilder { Objects.requireNonNull(newServiceJourneyRef, "EstimatedVehicleJourneyCode is required"); tripId = entityResolver.resolveId(newServiceJourneyRef); - //OperatorRef of added trip + // OperatorRef of added trip Objects.requireNonNull(estimatedVehicleJourney.getOperatorRef(), "OperatorRef is required"); String operatorRef = estimatedVehicleJourney.getOperatorRef().getValue(); operator = entityResolver.resolveOperator(operatorRef); + // DataSource of added trip + dataSource = estimatedVehicleJourney.getDataSource(); + // LineRef of added trip Objects.requireNonNull(estimatedVehicleJourney.getLineRef(), "LineRef is required"); lineRef = estimatedVehicleJourney.getLineRef().getValue(); @@ -135,7 +139,8 @@ class AddedTripBuilder { boolean cancellation, String shortName, String headsign, - List replacedTrips + List replacedTrips, + String dataSource ) { this.transitService = transitService; this.entityResolver = entityResolver; @@ -155,20 +160,21 @@ class AddedTripBuilder { this.shortName = shortName; this.headsign = headsign; this.replacedTrips = replacedTrips; + this.dataSource = dataSource; } Result build() { if (calls.size() < 2) { - return UpdateError.result(tripId, TOO_FEW_STOPS); + return UpdateError.result(tripId, TOO_FEW_STOPS, dataSource); } if (serviceDate == null) { - return UpdateError.result(tripId, NO_START_DATE); + return UpdateError.result(tripId, NO_START_DATE, dataSource); } FeedScopedId calServiceId = transitService.getOrCreateServiceIdForDate(serviceDate); if (calServiceId == null) { - return UpdateError.result(tripId, NO_START_DATE); + return UpdateError.result(tripId, NO_START_DATE, dataSource); } boolean isAddedRoute = false; @@ -176,7 +182,7 @@ Result build() { if (route == null) { Agency agency = resolveAgency(); if (agency == null) { - return UpdateError.result(tripId, CANNOT_RESOLVE_AGENCY); + return UpdateError.result(tripId, CANNOT_RESOLVE_AGENCY, dataSource); } route = createRoute(agency); isAddedRoute = true; @@ -201,7 +207,7 @@ Result build() { // Drop this update if the call refers to an unknown stop (not present in the site repository). if (stopTime == null) { - return UpdateError.result(tripId, NO_VALID_STOPS); + return UpdateError.result(tripId, NO_VALID_STOPS, dataSource); } aimedStopTimes.add(stopTime); @@ -256,7 +262,7 @@ Result build() { try { updatedTripTimes.validateNonIncreasingTimes(); } catch (DataValidationException e) { - return DataValidationExceptionMapper.toResult(e); + return DataValidationExceptionMapper.toResult(e, dataSource); } var tripOnServiceDate = TripOnServiceDate @@ -273,7 +279,8 @@ Result build() { serviceDate, tripOnServiceDate, pattern, - isAddedRoute + isAddedRoute, + dataSource ) ); } diff --git a/application/src/main/java/org/opentripplanner/updater/siri/ModifiedTripBuilder.java b/application/src/main/java/org/opentripplanner/updater/siri/ModifiedTripBuilder.java index 0f1475f7b50..06768087c74 100644 --- a/application/src/main/java/org/opentripplanner/updater/siri/ModifiedTripBuilder.java +++ b/application/src/main/java/org/opentripplanner/updater/siri/ModifiedTripBuilder.java @@ -45,6 +45,7 @@ public class ModifiedTripBuilder { private final boolean cancellation; private final OccupancyEnumeration occupancy; private final boolean predictionInaccurate; + private final String dataSource; public ModifiedTripBuilder( TripTimes existingTripTimes, @@ -64,6 +65,7 @@ public ModifiedTripBuilder( cancellation = TRUE.equals(journey.isCancellation()); predictionInaccurate = TRUE.equals(journey.isPredictionInaccurate()); occupancy = journey.getOccupancy(); + dataSource = journey.getDataSource(); } /** @@ -78,7 +80,8 @@ public ModifiedTripBuilder( List calls, boolean cancellation, OccupancyEnumeration occupancy, - boolean predictionInaccurate + boolean predictionInaccurate, + String dataSource ) { this.existingTripTimes = existingTripTimes; this.pattern = pattern; @@ -89,6 +92,7 @@ public ModifiedTripBuilder( this.cancellation = cancellation; this.occupancy = occupancy; this.predictionInaccurate = predictionInaccurate; + this.dataSource = dataSource; } /** @@ -103,7 +107,9 @@ public Result build() { if (cancellation || stopPattern.isAllStopsNonRoutable()) { LOG.debug("Trip is cancelled"); newTimes.cancelTrip(); - return Result.success(new TripUpdate(pattern.getStopPattern(), newTimes, serviceDate)); + return Result.success( + new TripUpdate(pattern.getStopPattern(), newTimes, serviceDate, dataSource) + ); } applyUpdates(newTimes); @@ -116,7 +122,7 @@ public Result build() { newTimes.setRealTimeState(RealTimeState.MODIFIED); } - // TODO - Handle DataValidationException at the outemost level(pr trip) + // TODO - Handle DataValidationException at the outermost level (pr trip) try { newTimes.validateNonIncreasingTimes(); } catch (DataValidationException e) { @@ -125,7 +131,7 @@ public Result build() { newTimes.getTrip().getId(), e.getMessage() ); - return DataValidationExceptionMapper.toResult(e); + return DataValidationExceptionMapper.toResult(e, dataSource); } int numStopsInUpdate = newTimes.getNumStops(); @@ -137,11 +143,11 @@ public Result build() { numStopsInUpdate, numStopsInPattern ); - return UpdateError.result(existingTripTimes.getTrip().getId(), TOO_FEW_STOPS); + return UpdateError.result(existingTripTimes.getTrip().getId(), TOO_FEW_STOPS, dataSource); } LOG.debug("A valid TripUpdate object was applied using the Timetable class update method."); - return Result.success(new TripUpdate(stopPattern, newTimes, serviceDate)); + return Result.success(new TripUpdate(stopPattern, newTimes, serviceDate, dataSource)); } /** diff --git a/application/src/main/java/org/opentripplanner/updater/siri/SiriTimetableSnapshotSource.java b/application/src/main/java/org/opentripplanner/updater/siri/SiriTimetableSnapshotSource.java index b6aa5310d83..33ca220ca7d 100644 --- a/application/src/main/java/org/opentripplanner/updater/siri/SiriTimetableSnapshotSource.java +++ b/application/src/main/java/org/opentripplanner/updater/siri/SiriTimetableSnapshotSource.java @@ -174,7 +174,7 @@ private Result apply( /* commit */ return addTripToGraphAndBuffer(result.successValue()); } catch (DataValidationException e) { - return DataValidationExceptionMapper.toResult(e); + return DataValidationExceptionMapper.toResult(e, journey.getDataSource()); } catch (Exception e) { LOG.warn( "{} EstimatedJourney {} failed.", @@ -217,6 +217,7 @@ private Result handleModifiedTrip( EstimatedVehicleJourney estimatedVehicleJourney ) { Trip trip = entityResolver.resolveTrip(estimatedVehicleJourney); + String dataSource = estimatedVehicleJourney.getDataSource(); // Check if EstimatedVehicleJourney is reported as NOT monitored, ignore the notMonitored-flag // if the journey is NOT monitored because it has been cancelled @@ -224,13 +225,13 @@ private Result handleModifiedTrip( !TRUE.equals(estimatedVehicleJourney.isMonitored()) && !TRUE.equals(estimatedVehicleJourney.isCancellation()) ) { - return UpdateError.result(trip != null ? trip.getId() : null, NOT_MONITORED); + return UpdateError.result(trip != null ? trip.getId() : null, NOT_MONITORED, dataSource); } LocalDate serviceDate = entityResolver.resolveServiceDate(estimatedVehicleJourney); if (serviceDate == null) { - return UpdateError.result(trip != null ? trip.getId() : null, NO_START_DATE); + return UpdateError.result(trip != null ? trip.getId() : null, NO_START_DATE, dataSource); } TripPattern pattern; @@ -252,20 +253,20 @@ private Result handleModifiedTrip( "No trips found for EstimatedVehicleJourney. {}", DebugString.of(estimatedVehicleJourney) ); - return UpdateError.result(null, NO_FUZZY_TRIP_MATCH); + return UpdateError.result(null, NO_FUZZY_TRIP_MATCH, dataSource); } trip = tripAndPattern.trip(); pattern = tripAndPattern.tripPattern(); } else { - return UpdateError.result(null, TRIP_NOT_FOUND); + return UpdateError.result(null, TRIP_NOT_FOUND, dataSource); } Timetable currentTimetable = getCurrentTimetable(pattern, serviceDate); TripTimes existingTripTimes = currentTimetable.getTripTimes(trip); if (existingTripTimes == null) { LOG.debug("tripId {} not found in pattern.", trip.getId()); - return UpdateError.result(trip.getId(), TRIP_NOT_FOUND_IN_PATTERN); + return UpdateError.result(trip.getId(), TRIP_NOT_FOUND_IN_PATTERN, dataSource); } var updateResult = new ModifiedTripBuilder( existingTripTimes, @@ -315,7 +316,8 @@ private Result addTripToGraphAndBuffer(TripUpdate tr serviceDate, tripUpdate.addedTripOnServiceDate(), tripUpdate.tripCreation(), - tripUpdate.routeCreation() + tripUpdate.routeCreation(), + tripUpdate.dataSource() ); var result = snapshotManager.updateBuffer(realTimeTripUpdate); LOG.debug("Applied real-time data for trip {} on {}", trip, serviceDate); diff --git a/application/src/main/java/org/opentripplanner/updater/siri/TripUpdate.java b/application/src/main/java/org/opentripplanner/updater/siri/TripUpdate.java index 71c521b76fb..8432ed06d54 100644 --- a/application/src/main/java/org/opentripplanner/updater/siri/TripUpdate.java +++ b/application/src/main/java/org/opentripplanner/updater/siri/TripUpdate.java @@ -11,12 +11,18 @@ /** * Represents the SIRI real-time update of a single trip. - * @param stopPattern the stop pattern to which belongs the updated trip. - * @param tripTimes the new trip times for the updated trip. - * @param serviceDate the service date for which this update applies (updates are valid only for one service date) - * @param addedTripOnServiceDate optionally if this trip update adds a new trip, the TripOnServiceDate corresponding to this new trip. - * @param addedTripPattern optionally if this trip update adds a new trip pattern , the new trip pattern to this new trip. - * @param routeCreation true if an added trip cannot be registered under an existing route and a new route must be created. + * + * @param stopPattern the stop pattern to which belongs the updated trip. + * @param tripTimes the new trip times for the updated trip. + * @param serviceDate the service date for which this update applies (updates are valid + * only for one service date) + * @param addedTripOnServiceDate optionally if this trip update adds a new trip, the + * TripOnServiceDate corresponding to this new trip. + * @param addedTripPattern optionally if this trip update adds a new trip pattern , the new + * trip pattern to this new trip. + * @param routeCreation true if an added trip cannot be registered under an existing route + * and a new route must be created. + * @param dataSource the dataSource of the real-time update. */ record TripUpdate( StopPattern stopPattern, @@ -24,7 +30,8 @@ record TripUpdate( LocalDate serviceDate, @Nullable TripOnServiceDate addedTripOnServiceDate, @Nullable TripPattern addedTripPattern, - boolean routeCreation + boolean routeCreation, + @Nullable String dataSource ) { public TripUpdate { Objects.requireNonNull(stopPattern); @@ -38,9 +45,10 @@ record TripUpdate( public TripUpdate( StopPattern stopPattern, RealTimeTripTimes updatedTripTimes, - LocalDate serviceDate + LocalDate serviceDate, + String dataSource ) { - this(stopPattern, updatedTripTimes, serviceDate, null, null, false); + this(stopPattern, updatedTripTimes, serviceDate, null, null, false, dataSource); } /** diff --git a/application/src/main/java/org/opentripplanner/updater/siri/updater/SiriETUpdaterParameters.java b/application/src/main/java/org/opentripplanner/updater/siri/updater/SiriETUpdaterParameters.java index 8bbe66559c6..dc479c034e1 100644 --- a/application/src/main/java/org/opentripplanner/updater/siri/updater/SiriETUpdaterParameters.java +++ b/application/src/main/java/org/opentripplanner/updater/siri/updater/SiriETUpdaterParameters.java @@ -15,7 +15,8 @@ public record SiriETUpdaterParameters( Duration timeout, Duration previewInterval, boolean fuzzyTripMatching, - HttpHeaders httpRequestHeaders + HttpHeaders httpRequestHeaders, + boolean producerMetrics ) implements PollingGraphUpdaterParameters, UrlUpdaterParameters, SiriETHttpTripUpdateSource.Parameters { diff --git a/application/src/main/java/org/opentripplanner/updater/siri/updater/google/SiriETGooglePubsubUpdaterParameters.java b/application/src/main/java/org/opentripplanner/updater/siri/updater/google/SiriETGooglePubsubUpdaterParameters.java index 2970ac114c0..d7fb064966a 100644 --- a/application/src/main/java/org/opentripplanner/updater/siri/updater/google/SiriETGooglePubsubUpdaterParameters.java +++ b/application/src/main/java/org/opentripplanner/updater/siri/updater/google/SiriETGooglePubsubUpdaterParameters.java @@ -15,7 +15,8 @@ public record SiriETGooglePubsubUpdaterParameters( @Nullable String dataInitializationUrl, Duration reconnectPeriod, Duration initialGetDataTimeout, - boolean fuzzyTripMatching + boolean fuzzyTripMatching, + boolean producerMetrics ) implements UrlUpdaterParameters { public static Duration RECONNECT_PERIOD = Duration.ofSeconds(30); diff --git a/application/src/main/java/org/opentripplanner/updater/spi/DataValidationExceptionMapper.java b/application/src/main/java/org/opentripplanner/updater/spi/DataValidationExceptionMapper.java index dee103bc385..2a650f684f9 100644 --- a/application/src/main/java/org/opentripplanner/updater/spi/DataValidationExceptionMapper.java +++ b/application/src/main/java/org/opentripplanner/updater/spi/DataValidationExceptionMapper.java @@ -1,5 +1,6 @@ package org.opentripplanner.updater.spi; +import com.beust.jcommander.internal.Nullable; import org.opentripplanner.transit.model.framework.DataValidationException; import org.opentripplanner.transit.model.framework.Result; import org.opentripplanner.transit.model.timetable.TimetableValidationError; @@ -15,13 +16,20 @@ public class DataValidationExceptionMapper { private static final Logger LOG = LoggerFactory.getLogger(DataValidationExceptionMapper.class); public static Result toResult(DataValidationException error) { + return toResult(error, null); + } + + public static Result toResult( + DataValidationException error, + @Nullable String producer + ) { if (error.error() instanceof TimetableValidationError tt) { return Result.failure( - new UpdateError(tt.trip().getId(), mapTimeTableError(tt.code()), tt.stopIndex()) + new UpdateError(tt.trip().getId(), mapTimeTableError(tt.code()), tt.stopIndex(), producer) ); } // The mapper should handle all possible errors - LOG.error("Unhandled error: " + error.getMessage(), error); + LOG.error("Unhandled error: {}", error.getMessage(), error); return Result.failure(UpdateError.noTripId(UpdateError.UpdateErrorType.UNKNOWN)); } diff --git a/application/src/main/java/org/opentripplanner/updater/spi/UpdateError.java b/application/src/main/java/org/opentripplanner/updater/spi/UpdateError.java index 1f568ba99a4..4e81cf3c2a7 100644 --- a/application/src/main/java/org/opentripplanner/updater/spi/UpdateError.java +++ b/application/src/main/java/org/opentripplanner/updater/spi/UpdateError.java @@ -11,10 +11,18 @@ public record UpdateError( @Nullable FeedScopedId tripId, UpdateErrorType errorType, - @Nullable Integer stopIndex + @Nullable Integer stopIndex, + @Nullable String producer ) { public UpdateError(@Nullable FeedScopedId tripId, UpdateErrorType errorType) { - this(tripId, errorType, null); + this(tripId, errorType, null, null); + } + + public UpdateError(@Nullable FeedScopedId tripId, UpdateErrorType errorType, Integer stopIndex) { + this(tripId, errorType, stopIndex, null); + } + public UpdateError(@Nullable FeedScopedId tripId, UpdateErrorType errorType, String producer) { + this(tripId, errorType, null, producer); } public String debugId() { @@ -56,6 +64,14 @@ public static Result result(FeedScopedId tripId, UpdateError return Result.failure(new UpdateError(tripId, errorType)); } + public static Result result( + FeedScopedId tripId, + UpdateErrorType errorType, + String producer + ) { + return Result.failure(new UpdateError(tripId, errorType, producer)); + } + public static UpdateError noTripId(UpdateErrorType errorType) { return new UpdateError(null, errorType); } diff --git a/application/src/main/java/org/opentripplanner/updater/spi/UpdateResult.java b/application/src/main/java/org/opentripplanner/updater/spi/UpdateResult.java index 643703f2252..0e47d8d202f 100644 --- a/application/src/main/java/org/opentripplanner/updater/spi/UpdateResult.java +++ b/application/src/main/java/org/opentripplanner/updater/spi/UpdateResult.java @@ -1,6 +1,7 @@ package org.opentripplanner.updater.spi; import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.Multimap; import com.google.common.collect.Multimaps; import java.util.List; @@ -15,23 +16,43 @@ public record UpdateResult( int successful, int failed, Multimap failures, - List warnings + List warnings, + List successes, + List errors ) { /** * Create an empty result. */ public static UpdateResult empty() { - return new UpdateResult(0, 0, ArrayListMultimap.create(), List.of()); + return new UpdateResult(0, 0, ArrayListMultimap.create(), List.of(), List.of(), List.of()); } /** * Aggregate a list of results into an instance of {@link UpdateResult}. */ public static UpdateResult ofResults(List> results) { - var errors = results.stream().filter(Result::isFailure).map(Result::failureValue).toList(); - var successes = results.stream().filter(Result::isSuccess).map(Result::successValue).toList(); - var warnings = successes.stream().flatMap(s -> s.warnings().stream()).toList(); - var errorIndex = Multimaps.index(errors, UpdateError::errorType); - return new UpdateResult(successes.size(), errors.size(), errorIndex, warnings); + List errors = results + .stream() + .filter(Result::isFailure) + .map(Result::failureValue) + .toList(); + List successes = results + .stream() + .filter(Result::isSuccess) + .map(Result::successValue) + .toList(); + List warnings = successes + .stream() + .flatMap(s -> s.warnings().stream()) + .toList(); + ImmutableListMultimap errorIndex = Multimaps.index(errors, UpdateError::errorType); + return new UpdateResult( + successes.size(), + errors.size(), + errorIndex, + warnings, + successes, + errors + ); } } diff --git a/application/src/main/java/org/opentripplanner/updater/spi/UpdateSuccess.java b/application/src/main/java/org/opentripplanner/updater/spi/UpdateSuccess.java index 6d797a9a650..861f4c5edff 100644 --- a/application/src/main/java/org/opentripplanner/updater/spi/UpdateSuccess.java +++ b/application/src/main/java/org/opentripplanner/updater/spi/UpdateSuccess.java @@ -1,34 +1,35 @@ package org.opentripplanner.updater.spi; -import java.util.Arrays; import java.util.Collection; import java.util.List; import org.opentripplanner.utils.collection.ListUtils; /** * The result of a successful application of a realtime update, for example for trips or - * vehicle positions. Its only extra information is a collection of possible warnings that - * ought to be looked at but didn't prevent the application of the update. + * vehicle positions. Its extra information is a collection of possible warnings that + * ought to be looked at but didn't prevent the application of the update and the provider of the + * update. */ -public record UpdateSuccess(List warnings) { +public record UpdateSuccess(List warnings, String producer) { /** - * Create an instance with no warnings. + * Create an instance with no warnings and no provider. */ public static UpdateSuccess noWarnings() { - return new UpdateSuccess(List.of()); + return new UpdateSuccess(List.of(), null); } + /** - * Create an instance with the provided warnings. + * Create an instance with no warnings, but a provider. */ - public static UpdateSuccess ofWarnings(WarningType... warnings) { - return new UpdateSuccess(Arrays.asList(warnings)); + public static UpdateSuccess noWarnings(String producer) { + return new UpdateSuccess(List.of(), producer); } /** * Return a copy of the instance with the provided warnings added. */ public UpdateSuccess addWarnings(Collection addedWarnings) { - return new UpdateSuccess(ListUtils.combine(this.warnings, addedWarnings)); + return new UpdateSuccess(ListUtils.combine(this.warnings, addedWarnings), this.producer); } public enum WarningType { diff --git a/application/src/main/java/org/opentripplanner/updater/trip/UrlUpdaterParameters.java b/application/src/main/java/org/opentripplanner/updater/trip/UrlUpdaterParameters.java index 2070aedbbd6..4918be84e45 100644 --- a/application/src/main/java/org/opentripplanner/updater/trip/UrlUpdaterParameters.java +++ b/application/src/main/java/org/opentripplanner/updater/trip/UrlUpdaterParameters.java @@ -4,4 +4,8 @@ public interface UrlUpdaterParameters { String url(); String configRef(); String feedId(); + + default boolean producerMetrics() { + return false; + } } diff --git a/application/src/main/java/org/opentripplanner/updater/trip/metrics/StreamingTripUpdateMetrics.java b/application/src/main/java/org/opentripplanner/updater/trip/metrics/StreamingTripUpdateMetrics.java index c53a398f3dc..0660f8d801b 100644 --- a/application/src/main/java/org/opentripplanner/updater/trip/metrics/StreamingTripUpdateMetrics.java +++ b/application/src/main/java/org/opentripplanner/updater/trip/metrics/StreamingTripUpdateMetrics.java @@ -5,9 +5,7 @@ import io.micrometer.core.instrument.Tag; import io.micrometer.core.instrument.Tags; import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; +import java.util.List; import org.opentripplanner.updater.spi.UpdateError; import org.opentripplanner.updater.spi.UpdateResult; import org.opentripplanner.updater.spi.UpdateSuccess; @@ -25,66 +23,58 @@ public class StreamingTripUpdateMetrics extends TripUpdateMetrics { protected static final String METRICS_PREFIX = "streaming_trip_updates"; - private final Counter successfulCounter; - private final Counter failureCounter; - private final Counter warningsCounter; - private final Map failuresByType = new HashMap<>(); - private final Map warningsByType = new HashMap<>(); + private final boolean producerMetrics; public StreamingTripUpdateMetrics(UrlUpdaterParameters parameters) { super(parameters); - this.successfulCounter = getCounter("successful", "Total successfully applied trip updates"); - this.failureCounter = getCounter("failed", "Total failed trip updates"); - this.warningsCounter = getCounter("warnings", "Total warnings for successful trip updates"); + this.producerMetrics = parameters.producerMetrics(); } public void setCounters(UpdateResult result) { - this.successfulCounter.increment(result.successful()); - this.failureCounter.increment(result.failed()); - this.warningsCounter.increment(result.warnings().size()); - - setFailures(result); - setWarnings(result); + incrementWarningCounts(result); + incrementFailureCounts(result); + incrementSuccessCounts(result); } - private void setWarnings(UpdateResult result) { + private void incrementWarningCounts(UpdateResult result) { for (var warningType : result.warnings()) { - var counter = warningsByType.get(warningType); - if (Objects.isNull(counter)) { - counter = - getCounter( - "warning_type", - "Total warnings by type generated by successful trip updates", - Tag.of("warningType", warningType.name()) - ); - warningsByType.put(warningType, counter); - } - counter.increment(); + Tags tags = Tags.concat(baseTags, Tags.of("warningType", warningType.name())); + Counter + .builder(METRICS_PREFIX + "." + "warnings") + .description("Total warnings by type generated by successful trip updates") + .tags(tags) + .register(Metrics.globalRegistry) + .increment(); } } - private void setFailures(UpdateResult result) { - for (var errorType : result.failures().keySet()) { - var counter = failuresByType.get(errorType); - if (Objects.isNull(counter)) { - counter = - getCounter( - "failure_type", - "Total failed trip updates by type", - Tag.of("errorType", errorType.name()) - ); - failuresByType.put(errorType, counter); + private void incrementFailureCounts(UpdateResult result) { + for (UpdateError error : result.errors()) { + Tags tags = Tags.concat(baseTags, Tags.of("errorType", error.errorType().name())); + if (producerMetrics && error.producer() != null) { + tags = tags.and(Tag.of("producer", error.producer())); } - counter.increment(result.failures().get(errorType).size()); + Counter + .builder(METRICS_PREFIX + "." + "failed") + .description("Total failed trip updates") + .tags(tags) + .register(Metrics.globalRegistry) + .increment(); } } - private Counter getCounter(String name, String description, Tag... tags) { - var finalTags = Tags.concat(Arrays.stream(tags).toList(), baseTags); - return Counter - .builder(METRICS_PREFIX + "." + name) - .description(description) - .tags(finalTags) - .register(Metrics.globalRegistry); + private void incrementSuccessCounts(UpdateResult result) { + for (UpdateSuccess success : result.successes()) { + Tags tags = Tags.of(baseTags); + if (producerMetrics && success.producer() != null) { + tags = tags.and(Tag.of("producer", success.producer())); + } + Counter + .builder(METRICS_PREFIX + "." + "successful") + .description("Total successfully applied trip updates") + .tags(tags) + .register(Metrics.globalRegistry) + .increment(); + } } } diff --git a/application/src/test/java/org/opentripplanner/updater/siri/AddedTripBuilderTest.java b/application/src/test/java/org/opentripplanner/updater/siri/AddedTripBuilderTest.java index 0c01e847148..abed2144982 100644 --- a/application/src/test/java/org/opentripplanner/updater/siri/AddedTripBuilderTest.java +++ b/application/src/test/java/org/opentripplanner/updater/siri/AddedTripBuilderTest.java @@ -135,7 +135,8 @@ void testAddedTrip() { false, SHORT_NAME, HEADSIGN, - List.of() + List.of(), + "DATASOURCE" ) .build(); @@ -247,7 +248,8 @@ void testAddedTripOnAddedRoute() { false, SHORT_NAME, HEADSIGN, - List.of() + List.of(), + "DATASOURCE" ) .build(); @@ -275,7 +277,8 @@ void testAddedTripOnAddedRoute() { false, SHORT_NAME, HEADSIGN, - List.of() + List.of(), + "DATASOURCE" ) .build(); @@ -317,7 +320,8 @@ void testAddedTripOnExistingRoute() { false, SHORT_NAME, HEADSIGN, - List.of() + List.of(), + "DATASOURCE" ) .build(); @@ -351,7 +355,8 @@ void testAddedTripWithoutReplacedRoute() { false, SHORT_NAME, HEADSIGN, - List.of() + List.of(), + "DATASOURCE" ) .build(); @@ -395,7 +400,8 @@ void testAddedTripFailOnMissingServiceId() { false, SHORT_NAME, HEADSIGN, - List.of() + List.of(), + "DATASOURCE" ) .build(); @@ -450,7 +456,8 @@ void testAddedTripFailOnNonIncreasingDwellTime() { false, SHORT_NAME, HEADSIGN, - List.of() + List.of(), + "DATASOURCE" ) .build(); @@ -489,7 +496,8 @@ void testAddedTripFailOnTooFewCalls() { false, SHORT_NAME, HEADSIGN, - List.of() + List.of(), + "DATASOURCE" ) .build(); @@ -536,7 +544,8 @@ void testAddedTripFailOnUnknownStop() { false, SHORT_NAME, HEADSIGN, - List.of() + List.of(), + "DATASOURCE" ) .build(); diff --git a/application/src/test/java/org/opentripplanner/updater/siri/ModifiedTripBuilderTest.java b/application/src/test/java/org/opentripplanner/updater/siri/ModifiedTripBuilderTest.java index ad3ed749fb9..6c1797a24a2 100644 --- a/application/src/test/java/org/opentripplanner/updater/siri/ModifiedTripBuilderTest.java +++ b/application/src/test/java/org/opentripplanner/updater/siri/ModifiedTripBuilderTest.java @@ -174,7 +174,8 @@ void testUpdateNoCalls() { List.of(), false, null, - false + false, + "DATASOURCE" ) .build(); @@ -203,7 +204,8 @@ void testUpdateCancellation() { List.of(), true, null, - false + false, + "DATASOURCE" ) .build(); @@ -247,7 +249,8 @@ void testUpdateSameStops() { ), false, null, - false + false, + "DATASOURCE" ) .build(); @@ -297,7 +300,8 @@ void testUpdateValidationFailure() { ), false, null, - false + false, + "DATASOURCE" ) .build(); @@ -345,7 +349,8 @@ void testUpdateSameStopsDepartEarly() { ), false, null, - false + false, + "DATASOURCE" ) .build(); @@ -395,7 +400,8 @@ void testUpdateUpdatedStop() { ), false, null, - false + false, + "DATASOURCE" ) .build(); @@ -451,7 +457,8 @@ void testUpdateCascading() { ), false, null, - false + false, + "DATASOURCE" ) .build(); @@ -496,7 +503,8 @@ void testUpdateCascading() { ), false, null, - false + false, + "DATASOURCE" ) .build(); diff --git a/application/src/test/java/org/opentripplanner/updater/siri/SiriEtBuilder.java b/application/src/test/java/org/opentripplanner/updater/siri/SiriEtBuilder.java index b9517e987c4..3656d9da2f0 100644 --- a/application/src/test/java/org/opentripplanner/updater/siri/SiriEtBuilder.java +++ b/application/src/test/java/org/opentripplanner/updater/siri/SiriEtBuilder.java @@ -39,6 +39,7 @@ public SiriEtBuilder(DateTimeHelper dateTimeHelper) { // Set default values evj.setMonitored(true); + evj.setDataSource("DATASOURCE"); } public List buildEstimatedTimetableDeliveries() { diff --git a/doc/user/sandbox/siri/SiriGooglePubSubUpdater.md b/doc/user/sandbox/siri/SiriGooglePubSubUpdater.md index 58d05d5490e..5232696ad9b 100644 --- a/doc/user/sandbox/siri/SiriGooglePubSubUpdater.md +++ b/doc/user/sandbox/siri/SiriGooglePubSubUpdater.md @@ -35,6 +35,7 @@ of the `router-config.json`. | feedId | `string` | The ID of the feed to apply the updates to. | *Optional* | | 2.1 | | fuzzyTripMatching | `boolean` | If the trips should be matched fuzzily. | *Optional* | `false` | 2.1 | | [initialGetDataTimeout](#u__12__initialGetDataTimeout) | `duration` | Timeout for retrieving the recent history of SIRI-ET messages. | *Optional* | `"PT30S"` | 2.1 | +| producerMetrics | `boolean` | If failure, success, and warning metrics should be collected per producer. | *Optional* | `false` | 2.7 | | [reconnectPeriod](#u__12__reconnectPeriod) | `duration` | Wait this amount of time before trying to reconnect to the PubSub subscription. | *Optional* | `"PT30S"` | 2.1 | | [subscriptionProjectName](#u__12__subscriptionProjectName) | `string` | The Google Cloud project that hosts the PubSub subscription. | *Required* | | 2.1 | | topicName | `string` | The name of the PubSub topic that publishes the updates. | *Required* | | 2.1 | diff --git a/doc/user/sandbox/siri/SiriUpdater.md b/doc/user/sandbox/siri/SiriUpdater.md index f6c4c3f999f..28f2f9a85db 100644 --- a/doc/user/sandbox/siri/SiriUpdater.md +++ b/doc/user/sandbox/siri/SiriUpdater.md @@ -35,6 +35,7 @@ To enable the SIRI updater you need to add it to the updaters section of the `ro | frequency | `duration` | How often the updates should be retrieved. | *Optional* | `"PT1M"` | 2.0 | | fuzzyTripMatching | `boolean` | If the fuzzy trip matcher should be used to match trips. | *Optional* | `false` | 2.0 | | previewInterval | `duration` | TODO | *Optional* | | 2.0 | +| producerMetrics | `boolean` | If failure, success, and warning metrics should be collected per producer. | *Optional* | `false` | 2.7 | | 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 | From a3f8ea85f82666bc9ecbf79ed097d6ad87c46748 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Thu, 7 Nov 2024 14:07:47 +0000 Subject: [PATCH 212/213] Add changelog entry for #6199 [ci skip] --- doc/user/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/user/Changelog.md b/doc/user/Changelog.md index adaa6ada3ac..8029b2d624d 100644 --- a/doc/user/Changelog.md +++ b/doc/user/Changelog.md @@ -34,6 +34,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Implement alert node query in GTFS GraphQL API [#6225](https://github.com/opentripplanner/OpenTripPlanner/pull/6225) - Fix hop geometries when one pattern is replaced by another with different number of stops [#6136](https://github.com/opentripplanner/OpenTripPlanner/pull/6136) - Distinct coach from bus when reading in GTFS data and in GTFS GraphQL API [#6171](https://github.com/opentripplanner/OpenTripPlanner/pull/6171) +- Add provider of updates as a dimension to metrics. [#6199](https://github.com/opentripplanner/OpenTripPlanner/pull/6199) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.6.0 (2024-09-18) From 55cce3f13584295fb2762f2f52699d55b34d3788 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Thu, 7 Nov 2024 15:58:46 +0000 Subject: [PATCH 213/213] Add changelog entry for #6232 [ci skip] --- doc/user/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/user/Changelog.md b/doc/user/Changelog.md index 8029b2d624d..2e7e5aec573 100644 --- a/doc/user/Changelog.md +++ b/doc/user/Changelog.md @@ -35,6 +35,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Fix hop geometries when one pattern is replaced by another with different number of stops [#6136](https://github.com/opentripplanner/OpenTripPlanner/pull/6136) - Distinct coach from bus when reading in GTFS data and in GTFS GraphQL API [#6171](https://github.com/opentripplanner/OpenTripPlanner/pull/6171) - Add provider of updates as a dimension to metrics. [#6199](https://github.com/opentripplanner/OpenTripPlanner/pull/6199) +- Return empty list if there is no siriUrls in situations/infoLinks [#6232](https://github.com/opentripplanner/OpenTripPlanner/pull/6232) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.6.0 (2024-09-18)