From b70c9d6249df47a7dc5a161422ed230e785be06e Mon Sep 17 00:00:00 2001 From: Ville Pihlava Date: Tue, 3 Sep 2024 16:25:09 +0300 Subject: [PATCH 001/158] 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/158] 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/158] 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/158] 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/158] 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/158] 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/158] 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/158] 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/158] 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/158] 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/158] 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/158] 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 6db97ca5d05d510c838f58c49eb6e8d64ca3b900 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 2 Oct 2024 15:24:40 +0200 Subject: [PATCH 013/158] Put debug layers into groups --- .../src/components/MapView/LayerControl.tsx | 38 +++++++++++++++---- .../apis/vectortiles/DebugStyleSpec.java | 4 ++ .../apis/vectortiles/model/StyleBuilder.java | 10 +++++ .../apis/vectortiles/style.json | 9 +++++ 4 files changed, 53 insertions(+), 8 deletions(-) diff --git a/client/src/components/MapView/LayerControl.tsx b/client/src/components/MapView/LayerControl.tsx index 1517a9ce7c8..6ba3add3cd9 100644 --- a/client/src/components/MapView/LayerControl.tsx +++ b/client/src/components/MapView/LayerControl.tsx @@ -1,6 +1,6 @@ import type { ControlPosition } from 'react-map-gl'; import { useControl } from 'react-map-gl'; -import { IControl, Map } from 'maplibre-gl'; +import { IControl, Map as WebMap } from 'maplibre-gl'; type LayerControlProps = { position: ControlPosition; @@ -15,7 +15,7 @@ type LayerControlProps = { class LayerControl implements IControl { private readonly container: HTMLDivElement = document.createElement('div'); - onAdd(map: Map) { + onAdd(map: WebMap) { this.container.className = 'maplibregl-ctrl maplibregl-ctrl-group layer-select'; map.on('load', () => { @@ -24,10 +24,11 @@ class LayerControl implements IControl { this.container.removeChild(this.container.firstChild); } - const title = document.createElement('h6'); + const title = document.createElement('h4'); title.textContent = 'Debug layers'; this.container.appendChild(title); + const groups: Map = new Map(); map .getLayersOrder() .map((l) => map.getLayer(l)) @@ -38,7 +39,16 @@ class LayerControl implements IControl { .reverse() .forEach((layer) => { if (layer) { - const div = document.createElement('div'); + const meta: { group: string | undefined } = layer.metadata as { group: string | undefined }; + console.log(meta); + + let groupName: string = 'Other'; + if (meta.group) { + groupName = meta.group; + } + console.log(groupName); + + const layerDiv = document.createElement('div'); const input = document.createElement('input'); input.type = 'checkbox'; input.value = layer.id; @@ -57,9 +67,21 @@ class LayerControl implements IControl { const label = document.createElement('label'); label.textContent = layer.id; label.htmlFor = layer.id; - div.appendChild(input); - div.appendChild(label); - this.container.appendChild(div); + layerDiv.appendChild(input); + layerDiv.appendChild(label); + + if (groups.has(groupName)) { + const g = groups.get(groupName); + g?.appendChild(layerDiv); + } else { + const h4 = document.createElement('h6'); + h4.textContent = groupName; + const groupDiv = document.createElement('div'); + groupDiv.appendChild(h4); + groupDiv.appendChild(layerDiv); + groups.set(groupName, groupDiv); + this.container.appendChild(groupDiv); + } } }); }); @@ -67,7 +89,7 @@ class LayerControl implements IControl { return this.container; } - private layerVisible(map: Map, layer: { id: string }) { + private layerVisible(map: WebMap, layer: { id: string }) { return map.getLayoutProperty(layer.id, 'visibility') !== 'none'; } diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java index 21cdfee9ef7..d84e57dcc7d 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java @@ -61,6 +61,7 @@ public class DebugStyleSpec { TemporaryPartialStreetEdge.class, TemporaryFreeEdge.class, }; + private static final String EDGES_GROUP = "Edges"; static StyleSpec build( VectorSourceLayer regularStops, @@ -82,6 +83,7 @@ static StyleSpec build( StyleBuilder.ofId("background").typeRaster().source(BACKGROUND_SOURCE).minZoom(0), StyleBuilder .ofId("edge") + .group(EDGES_GROUP) .typeLine() .vectorSourceLayer(edges) .lineColor(MAGENTA) @@ -92,6 +94,7 @@ static StyleSpec build( .intiallyHidden(), StyleBuilder .ofId("edge-name") + .group(EDGES_GROUP) .typeSymbol() .lineText("name") .vectorSourceLayer(edges) @@ -101,6 +104,7 @@ static StyleSpec build( .intiallyHidden(), StyleBuilder .ofId("link") + .group(EDGES_GROUP) .typeLine() .vectorSourceLayer(edges) .lineColor(BRIGHT_GREEN) diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleBuilder.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleBuilder.java index d842b5e6687..128971b0627 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleBuilder.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleBuilder.java @@ -26,6 +26,7 @@ public class StyleBuilder { private final Map props = new LinkedHashMap<>(); private final Map paint = new LinkedHashMap<>(); private final Map layout = new LinkedHashMap<>(); + private final Map metadata = new LinkedHashMap<>(); private final Map line = new LinkedHashMap<>(); private List filter = List.of(); @@ -48,6 +49,7 @@ public enum LayerType { private StyleBuilder(String id) { props.put("id", id); + metadata.put("group", "Misc"); } public StyleBuilder minZoom(int i) { @@ -92,6 +94,11 @@ public StyleBuilder typeLine() { return this; } + public StyleBuilder group(String group) { + metadata.put("group", group); + return this; + } + public StyleBuilder typeFill() { type(LayerType.Fill); return this; @@ -220,6 +227,9 @@ public JsonNode toJson() { if (!line.isEmpty()) { copy.put("line", line); } + if (!metadata.isEmpty()) { + copy.put("metadata", metadata); + } return OBJECT_MAPPER.valueToTree(copy); } diff --git a/src/test/resources/org/opentripplanner/apis/vectortiles/style.json b/src/test/resources/org/opentripplanner/apis/vectortiles/style.json index 5a2ed9572e2..8d00dc64418 100644 --- a/src/test/resources/org/opentripplanner/apis/vectortiles/style.json +++ b/src/test/resources/org/opentripplanner/apis/vectortiles/style.json @@ -61,6 +61,9 @@ "layout" : { "line-cap" : "round", "visibility" : "none" + }, + "metadata" : { + "group" : "Edges" } }, { @@ -111,6 +114,9 @@ "text-keep-upright" : true, "text-rotation-alignment" : "map", "visibility" : "none" + }, + "metadata" : { + "group" : "Edges" } }, { @@ -148,6 +154,9 @@ "layout" : { "line-cap" : "round", "visibility" : "none" + }, + "metadata" : { + "group" : "Edges" } }, { From 9cf69ca96d8401acd7c86383b686a01dcafc8a33 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 2 Oct 2024 17:30:49 +0200 Subject: [PATCH 014/158] Update layer groups --- .../src/components/MapView/LayerControl.tsx | 20 +- client/src/style.css | 16 + .../apis/vectortiles/DebugStyleSpec.java | 252 ++++++++------ .../apis/vectortiles/model/StyleBuilder.java | 17 +- .../vector/edge/EdgePropertyMapper.java | 4 +- .../apis/vectortiles/style.json | 308 +++++++++++++++++- 6 files changed, 512 insertions(+), 105 deletions(-) diff --git a/client/src/components/MapView/LayerControl.tsx b/client/src/components/MapView/LayerControl.tsx index 6ba3add3cd9..59b03fc1d8b 100644 --- a/client/src/components/MapView/LayerControl.tsx +++ b/client/src/components/MapView/LayerControl.tsx @@ -39,16 +39,16 @@ class LayerControl implements IControl { .reverse() .forEach((layer) => { if (layer) { - const meta: { group: string | undefined } = layer.metadata as { group: string | undefined }; - console.log(meta); + const meta: { group: string } = layer.metadata as { group: string }; - let groupName: string = 'Other'; + let groupName: string = 'Misc'; if (meta.group) { groupName = meta.group; } console.log(groupName); const layerDiv = document.createElement('div'); + layerDiv.className = 'layer'; const input = document.createElement('input'); input.type = 'checkbox'; input.value = layer.id; @@ -74,10 +74,18 @@ class LayerControl implements IControl { const g = groups.get(groupName); g?.appendChild(layerDiv); } else { - const h4 = document.createElement('h6'); - h4.textContent = groupName; + const input = document.createElement('input'); + input.type = 'checkbox'; + input.id = groupName; + + const label = document.createElement('label'); + label.textContent = groupName; + label.htmlFor = groupName; + const groupDiv = document.createElement('div'); - groupDiv.appendChild(h4); + groupDiv.className = 'group'; + groupDiv.appendChild(input); + groupDiv.appendChild(label); groupDiv.appendChild(layerDiv); groups.set(groupName, groupDiv); this.container.appendChild(groupDiv); diff --git a/client/src/style.css b/client/src/style.css index 86310fd857d..62403940eed 100644 --- a/client/src/style.css +++ b/client/src/style.css @@ -170,3 +170,19 @@ .maplibregl-ctrl-group.layer-select label { margin-left: 6px; } + +.maplibregl-ctrl-group.layer-select h4 { + font-size: 17px; +} + +.maplibregl-ctrl-group.layer-select h6 { + font-size: 15px; +} + +.maplibregl-ctrl-group.layer-select div.group { + margin-top: 10px; +} + +.maplibregl-ctrl-group.layer-select div.layer { + margin-left: 14px; +} \ No newline at end of file diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java index d84e57dcc7d..db3871f69ad 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java @@ -1,5 +1,6 @@ package org.opentripplanner.apis.vectortiles; +import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -10,7 +11,9 @@ 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; import org.opentripplanner.street.model.edge.BoardingLocationToStopLink; import org.opentripplanner.street.model.edge.Edge; @@ -43,11 +46,16 @@ public class DebugStyleSpec { private static final String DARK_GREEN = "#136b04"; private static final String PURPLE = "#BC55F2"; private static final String BLACK = "#140d0e"; + private static final int MAX_ZOOM = 23; private static final ZoomDependentNumber LINE_WIDTH = new ZoomDependentNumber( 1.3f, List.of(new ZoomStop(13, 0.5f), new ZoomStop(MAX_ZOOM, 10)) ); + private static final ZoomDependentNumber FAT_LINE_WIDTH = new ZoomDependentNumber( + 1.3f, + List.of(new ZoomStop(11, 1f), new ZoomStop(MAX_ZOOM, 12)) + ); private static final ZoomDependentNumber CIRCLE_STROKE = new ZoomDependentNumber( 1, List.of(new ZoomStop(15, 0.2f), new ZoomStop(MAX_ZOOM, 3)) @@ -62,6 +70,9 @@ public class DebugStyleSpec { TemporaryFreeEdge.class, }; private static final String EDGES_GROUP = "Edges"; + private static final String STOPS = "Stops"; + private static final String VERTICES = "Vertices"; + private static final String TRAVERSAL_PERMISSIONS_GROU = "Traversal permissions"; static StyleSpec build( VectorSourceLayer regularStops, @@ -79,104 +90,159 @@ static StyleSpec build( return new StyleSpec( "OTP Debug Tiles", allSources, - List.of( - StyleBuilder.ofId("background").typeRaster().source(BACKGROUND_SOURCE).minZoom(0), - StyleBuilder - .ofId("edge") - .group(EDGES_GROUP) - .typeLine() - .vectorSourceLayer(edges) - .lineColor(MAGENTA) - .edgeFilter(EDGES_TO_DISPLAY) - .lineWidth(LINE_WIDTH) - .minZoom(6) - .maxZoom(MAX_ZOOM) - .intiallyHidden(), - StyleBuilder - .ofId("edge-name") - .group(EDGES_GROUP) - .typeSymbol() - .lineText("name") - .vectorSourceLayer(edges) - .edgeFilter(EDGES_TO_DISPLAY) - .minZoom(17) - .maxZoom(MAX_ZOOM) - .intiallyHidden(), + ListUtils.combine( + List.of(StyleBuilder.ofId("background").typeRaster().source(BACKGROUND_SOURCE).minZoom(0)), + traversalPermissions(edges), + List.of( + StyleBuilder + .ofId("edge") + .group(EDGES_GROUP) + .typeLine() + .vectorSourceLayer(edges) + .lineColor(MAGENTA) + .edgeFilter(EDGES_TO_DISPLAY) + .lineWidth(LINE_WIDTH) + .minZoom(6) + .maxZoom(MAX_ZOOM) + .intiallyHidden(), + StyleBuilder + .ofId("edge-name") + .group(EDGES_GROUP) + .typeSymbol() + .lineText("name") + .vectorSourceLayer(edges) + .edgeFilter(EDGES_TO_DISPLAY) + .minZoom(17) + .maxZoom(MAX_ZOOM) + .intiallyHidden(), + StyleBuilder + .ofId("link") + .group(EDGES_GROUP) + .typeLine() + .vectorSourceLayer(edges) + .lineColor(BRIGHT_GREEN) + .edgeFilter( + StreetTransitStopLink.class, + StreetTransitEntranceLink.class, + BoardingLocationToStopLink.class, + StreetVehicleRentalLink.class, + StreetVehicleParkingLink.class + ) + .lineWidth(LINE_WIDTH) + .minZoom(13) + .maxZoom(MAX_ZOOM) + .intiallyHidden(), + StyleBuilder + .ofId("vertex") + .group(VERTICES) + .typeCircle() + .vectorSourceLayer(vertices) + .circleStroke(BLACK, CIRCLE_STROKE) + .circleRadius( + new ZoomDependentNumber(1, List.of(new ZoomStop(15, 1), new ZoomStop(MAX_ZOOM, 7))) + ) + .circleColor(PURPLE) + .minZoom(15) + .maxZoom(MAX_ZOOM) + .intiallyHidden(), + StyleBuilder + .ofId("parking-vertex") + .group(VERTICES) + .typeCircle() + .vectorSourceLayer(vertices) + .vertexFilter(VehicleParkingEntranceVertex.class) + .circleStroke(BLACK, CIRCLE_STROKE) + .circleRadius( + new ZoomDependentNumber( + 1, + List.of(new ZoomStop(13, 1.4f), new ZoomStop(MAX_ZOOM, 10)) + ) + ) + .circleColor(DARK_GREEN) + .minZoom(13) + .maxZoom(MAX_ZOOM) + .intiallyHidden(), + StyleBuilder + .ofId("area-stop") + .group(STOPS) + .typeFill() + .vectorSourceLayer(areaStops) + .fillColor(BRIGHT_GREEN) + .fillOpacity(0.5f) + .fillOutlineColor(BLACK) + .minZoom(6) + .maxZoom(MAX_ZOOM), + StyleBuilder + .ofId("group-stop") + .group(STOPS) + .typeFill() + .vectorSourceLayer(groupStops) + .fillColor(BRIGHT_GREEN) + .fillOpacity(0.5f) + .fillOutlineColor(BLACK) + .minZoom(6) + .maxZoom(MAX_ZOOM), + StyleBuilder + .ofId("regular-stop") + .group(STOPS) + .typeCircle() + .vectorSourceLayer(regularStops) + .circleStroke( + BLACK, + new ZoomDependentNumber(1, List.of(new ZoomStop(11, 0.5f), new ZoomStop(MAX_ZOOM, 5))) + ) + .circleRadius( + new ZoomDependentNumber( + 1, + List.of(new ZoomStop(11, 0.5f), new ZoomStop(MAX_ZOOM, 10)) + ) + ) + .circleColor("#fcf9fa") + .minZoom(10) + .maxZoom(MAX_ZOOM) + ) + ) + ); + } + + private static List traversalPermissions(VectorSourceLayer edges) { + var permissionStyles = Arrays + .stream(StreetTraversalPermission.values()) + .map(p -> StyleBuilder - .ofId("link") - .group(EDGES_GROUP) + .ofId(p.name()) + .group(TRAVERSAL_PERMISSIONS_GROU) .typeLine() .vectorSourceLayer(edges) - .lineColor(BRIGHT_GREEN) - .edgeFilter( - StreetTransitStopLink.class, - StreetTransitEntranceLink.class, - BoardingLocationToStopLink.class, - StreetVehicleRentalLink.class, - StreetVehicleParkingLink.class - ) - .lineWidth(LINE_WIDTH) - .minZoom(13) - .maxZoom(MAX_ZOOM) - .intiallyHidden(), - StyleBuilder - .ofId("vertex") - .typeCircle() - .vectorSourceLayer(vertices) - .circleStroke(BLACK, CIRCLE_STROKE) - .circleRadius( - new ZoomDependentNumber(1, List.of(new ZoomStop(15, 1), new ZoomStop(MAX_ZOOM, 7))) - ) - .circleColor(PURPLE) - .minZoom(15) - .maxZoom(MAX_ZOOM) - .intiallyHidden(), - StyleBuilder - .ofId("parking-vertex") - .typeCircle() - .vectorSourceLayer(vertices) - .vertexFilter(VehicleParkingEntranceVertex.class) - .circleStroke(BLACK, CIRCLE_STROKE) - .circleRadius( - new ZoomDependentNumber(1, List.of(new ZoomStop(13, 1.4f), new ZoomStop(MAX_ZOOM, 10))) - ) - .circleColor(DARK_GREEN) - .minZoom(13) - .maxZoom(MAX_ZOOM) - .intiallyHidden(), - StyleBuilder - .ofId("area-stop") - .typeFill() - .vectorSourceLayer(areaStops) - .fillColor(BRIGHT_GREEN) - .fillOpacity(0.5f) - .fillOutlineColor(BLACK) + .lineColor(permissionColor(p)) + .permissionsFilter(p) + .lineWidth(FAT_LINE_WIDTH) + .offsetFromProperty() .minZoom(6) - .maxZoom(MAX_ZOOM), - StyleBuilder - .ofId("group-stop") - .typeFill() - .vectorSourceLayer(groupStops) - .fillColor(BRIGHT_GREEN) - .fillOpacity(0.5f) - .fillOutlineColor(BLACK) - .minZoom(6) - .maxZoom(MAX_ZOOM), - StyleBuilder - .ofId("regular-stop") - .typeCircle() - .vectorSourceLayer(regularStops) - .circleStroke( - BLACK, - new ZoomDependentNumber(1, List.of(new ZoomStop(11, 0.5f), new ZoomStop(MAX_ZOOM, 5))) - ) - .circleRadius( - new ZoomDependentNumber(1, List.of(new ZoomStop(11, 0.5f), new ZoomStop(MAX_ZOOM, 10))) - ) - .circleColor("#fcf9fa") - .minZoom(10) .maxZoom(MAX_ZOOM) + .intiallyHidden() ) - ); + .toList(); + var textStyle = StyleBuilder + .ofId("permission-text") + .group(TRAVERSAL_PERMISSIONS_GROU) + .typeSymbol() + .lineText("permission") + .vectorSourceLayer(edges) + .edgeFilter(EDGES_TO_DISPLAY) + .minZoom(17) + .maxZoom(MAX_ZOOM); + return ListUtils.combine(permissionStyles, List.of(textStyle)); + } + + private static String permissionColor(StreetTraversalPermission p) { + return switch (p) { + case NONE -> "#000"; + case PEDESTRIAN -> "#2ba812"; + case BICYCLE, PEDESTRIAN_AND_BICYCLE -> "#10d3b6"; + case CAR -> "#f92e13"; + case BICYCLE_AND_CAR, PEDESTRIAN_AND_CAR -> "#e25f8f"; + case ALL -> "#adb2b0"; + }; } } diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleBuilder.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleBuilder.java index 128971b0627..c4038592823 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleBuilder.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleBuilder.java @@ -11,6 +11,7 @@ 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; @@ -39,6 +40,11 @@ public StyleBuilder vectorSourceLayer(VectorSourceLayer source) { return sourceLayer(source.vectorLayer()); } + public StyleBuilder offsetFromProperty() { + line.put("line-offset", List.of("get", "offset")); + return this; + } + public enum LayerType { Circle, Line, @@ -49,7 +55,7 @@ public enum LayerType { private StyleBuilder(String id) { props.put("id", id); - metadata.put("group", "Misc"); + metadata.put("group", "Other"); } public StyleBuilder minZoom(int i) { @@ -203,6 +209,11 @@ public final StyleBuilder edgeFilter(Class... classToFilter) { return filterClasses(classToFilter); } + public final StyleBuilder permissionsFilter(StreetTraversalPermission p) { + filter = List.of("==", "permission", p.name()); + return this; + } + /** * Only apply the style to the given vertices. */ @@ -227,9 +238,7 @@ public JsonNode toJson() { if (!line.isEmpty()) { copy.put("line", line); } - if (!metadata.isEmpty()) { - copy.put("metadata", metadata); - } + copy.put("metadata", metadata); return OBJECT_MAPPER.valueToTree(copy); } diff --git a/src/main/java/org/opentripplanner/inspector/vector/edge/EdgePropertyMapper.java b/src/main/java/org/opentripplanner/inspector/vector/edge/EdgePropertyMapper.java index d43a91d384d..dcb9bbfcda2 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/edge/EdgePropertyMapper.java +++ b/src/main/java/org/opentripplanner/inspector/vector/edge/EdgePropertyMapper.java @@ -30,7 +30,9 @@ protected Collection map(Edge input) { private static List mapStreetEdge(StreetEdge se) { var props = Lists.newArrayList( kv("permission", se.getPermission().toString()), - kv("bicycleSafetyFactor", roundTo2Decimals(se.getBicycleSafetyFactor())) + kv("bicycleSafetyFactor", roundTo2Decimals(se.getBicycleSafetyFactor())), + kv("back", se.isBack()), + kv("offset", se.isBack() ? -10 : 10) ); if (se.hasBogusName()) { props.addFirst(kv("name", "%s (generated)".formatted(se.getName().toString()))); diff --git a/src/test/resources/org/opentripplanner/apis/vectortiles/style.json b/src/test/resources/org/opentripplanner/apis/vectortiles/style.json index 8d00dc64418..c456e5bd0e7 100644 --- a/src/test/resources/org/opentripplanner/apis/vectortiles/style.json +++ b/src/test/resources/org/opentripplanner/apis/vectortiles/style.json @@ -22,7 +22,298 @@ "id" : "background", "type" : "raster", "source" : "background", - "minzoom" : 0 + "minzoom" : 0, + "metadata" : { + "group" : "Other" + } + }, + { + "id" : "NONE", + "type" : "line", + "source" : "vectorSource", + "source-layer" : "edges", + "minzoom" : 6, + "maxzoom" : 23, + "paint" : { + "line-color" : "#000", + "line-width" : { + "base" : 2.3, + "stops" : [ + [ + 11, + 1.0 + ], + [ + 23, + 14.0 + ] + ] + } + }, + "filter" : [ + "==", + "permission", + "NONE" + ], + "layout" : { + "line-cap" : "round", + "visibility" : "none" + }, + "metadata" : { + "group" : "Traversal permissions" + } + }, + { + "id" : "PEDESTRIAN", + "type" : "line", + "source" : "vectorSource", + "source-layer" : "edges", + "minzoom" : 6, + "maxzoom" : 23, + "paint" : { + "line-color" : "#0EE38B", + "line-width" : { + "base" : 2.3, + "stops" : [ + [ + 11, + 1.0 + ], + [ + 23, + 14.0 + ] + ] + } + }, + "filter" : [ + "==", + "permission", + "PEDESTRIAN" + ], + "layout" : { + "line-cap" : "round", + "visibility" : "none" + }, + "metadata" : { + "group" : "Traversal permissions" + } + }, + { + "id" : "BICYCLE", + "type" : "line", + "source" : "vectorSource", + "source-layer" : "edges", + "minzoom" : 6, + "maxzoom" : 23, + "paint" : { + "line-color" : "#E3A10E", + "line-width" : { + "base" : 2.3, + "stops" : [ + [ + 11, + 1.0 + ], + [ + 23, + 14.0 + ] + ] + } + }, + "filter" : [ + "==", + "permission", + "BICYCLE" + ], + "layout" : { + "line-cap" : "round", + "visibility" : "none" + }, + "metadata" : { + "group" : "Traversal permissions" + } + }, + { + "id" : "PEDESTRIAN_AND_BICYCLE", + "type" : "line", + "source" : "vectorSource", + "source-layer" : "edges", + "minzoom" : 6, + "maxzoom" : 23, + "paint" : { + "line-color" : "#00EB68", + "line-width" : { + "base" : 2.3, + "stops" : [ + [ + 11, + 1.0 + ], + [ + 23, + 14.0 + ] + ] + } + }, + "filter" : [ + "==", + "permission", + "PEDESTRIAN_AND_BICYCLE" + ], + "layout" : { + "line-cap" : "round", + "visibility" : "none" + }, + "metadata" : { + "group" : "Traversal permissions" + } + }, + { + "id" : "CAR", + "type" : "line", + "source" : "vectorSource", + "source-layer" : "edges", + "minzoom" : 6, + "maxzoom" : 23, + "paint" : { + "line-color" : "#EB131F", + "line-width" : { + "base" : 2.3, + "stops" : [ + [ + 11, + 1.0 + ], + [ + 23, + 14.0 + ] + ] + } + }, + "filter" : [ + "==", + "permission", + "CAR" + ], + "layout" : { + "line-cap" : "round", + "visibility" : "none" + }, + "metadata" : { + "group" : "Traversal permissions" + } + }, + { + "id" : "PEDESTRIAN_AND_CAR", + "type" : "line", + "source" : "vectorSource", + "source-layer" : "edges", + "minzoom" : 6, + "maxzoom" : 23, + "paint" : { + "line-color" : "#963E4A", + "line-width" : { + "base" : 2.3, + "stops" : [ + [ + 11, + 1.0 + ], + [ + 23, + 14.0 + ] + ] + } + }, + "filter" : [ + "==", + "permission", + "PEDESTRIAN_AND_CAR" + ], + "layout" : { + "line-cap" : "round", + "visibility" : "none" + }, + "metadata" : { + "group" : "Traversal permissions" + } + }, + { + "id" : "BICYCLE_AND_CAR", + "type" : "line", + "source" : "vectorSource", + "source-layer" : "edges", + "minzoom" : 6, + "maxzoom" : 23, + "paint" : { + "line-color" : "#3E5D6B", + "line-width" : { + "base" : 2.3, + "stops" : [ + [ + 11, + 1.0 + ], + [ + 23, + 14.0 + ] + ] + } + }, + "filter" : [ + "==", + "permission", + "BICYCLE_AND_CAR" + ], + "layout" : { + "line-cap" : "round", + "visibility" : "none" + }, + "metadata" : { + "group" : "Traversal permissions" + } + }, + { + "id" : "ALL", + "type" : "line", + "source" : "vectorSource", + "source-layer" : "edges", + "minzoom" : 6, + "maxzoom" : 23, + "paint" : { + "line-color" : "#413031", + "line-width" : { + "base" : 2.3, + "stops" : [ + [ + 11, + 1.0 + ], + [ + 23, + 14.0 + ] + ] + } + }, + "filter" : [ + "==", + "permission", + "ALL" + ], + "layout" : { + "line-cap" : "round", + "visibility" : "none" + }, + "metadata" : { + "group" : "Traversal permissions" + } }, { "id" : "edge", @@ -198,6 +489,9 @@ }, "layout" : { "visibility" : "none" + }, + "metadata" : { + "group" : "Vertices" } }, { @@ -244,6 +538,9 @@ ], "layout" : { "visibility" : "none" + }, + "metadata" : { + "group" : "Vertices" } }, { @@ -257,6 +554,9 @@ "fill-color" : "#22DD9E", "fill-opacity" : 0.5, "fill-outline-color" : "#140d0e" + }, + "metadata" : { + "group" : "Stops" } }, { @@ -270,6 +570,9 @@ "fill-color" : "#22DD9E", "fill-opacity" : 0.5, "fill-outline-color" : "#140d0e" + }, + "metadata" : { + "group" : "Stops" } }, { @@ -308,6 +611,9 @@ ] }, "circle-color" : "#fcf9fa" + }, + "metadata" : { + "group" : "Stops" } } ], From 04a6d579548f417a381dc567b7a94b72423b8563 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 3 Oct 2024 08:24:57 +0200 Subject: [PATCH 015/158] Add traversal permission layers --- .../src/components/MapView/LayerControl.tsx | 29 ++++++++++++------- client/src/style.css | 2 +- .../apis/vectortiles/DebugStyleSpec.java | 9 +++--- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/client/src/components/MapView/LayerControl.tsx b/client/src/components/MapView/LayerControl.tsx index 59b03fc1d8b..ff8fa26c91f 100644 --- a/client/src/components/MapView/LayerControl.tsx +++ b/client/src/components/MapView/LayerControl.tsx @@ -56,14 +56,14 @@ class LayerControl implements IControl { input.onchange = (e) => { e.preventDefault(); e.stopPropagation(); - - if (this.layerVisible(map, layer)) { - map.setLayoutProperty(layer.id, 'visibility', 'none'); - } else { + if (input.checked) { map.setLayoutProperty(layer.id, 'visibility', 'visible'); + } else { + map.setLayoutProperty(layer.id, 'visibility', 'none'); } }; input.checked = this.layerVisible(map, layer); + input.className = 'layer'; const label = document.createElement('label'); label.textContent = layer.id; label.htmlFor = layer.id; @@ -74,17 +74,26 @@ class LayerControl implements IControl { const g = groups.get(groupName); g?.appendChild(layerDiv); } else { - const input = document.createElement('input'); - input.type = 'checkbox'; - input.id = groupName; + const groupDiv = document.createElement('div'); + groupDiv.className = 'group'; + + const groupInput = document.createElement('input'); + groupInput.onchange = () => { + groupDiv.querySelectorAll('input.layer').forEach((i) => { + const input = i as HTMLInputElement; + input.checked = groupInput.checked; + var event = new Event('change'); + i.dispatchEvent(event); + }); + }; + groupInput.type = 'checkbox'; + groupInput.id = groupName; const label = document.createElement('label'); label.textContent = groupName; label.htmlFor = groupName; - const groupDiv = document.createElement('div'); - groupDiv.className = 'group'; - groupDiv.appendChild(input); + groupDiv.appendChild(groupInput); groupDiv.appendChild(label); groupDiv.appendChild(layerDiv); groups.set(groupName, groupDiv); diff --git a/client/src/style.css b/client/src/style.css index 62403940eed..58f9e8dff2a 100644 --- a/client/src/style.css +++ b/client/src/style.css @@ -185,4 +185,4 @@ .maplibregl-ctrl-group.layer-select div.layer { margin-left: 14px; -} \ No newline at end of file +} diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java index db3871f69ad..20c713d2825 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java @@ -72,7 +72,7 @@ public class DebugStyleSpec { private static final String EDGES_GROUP = "Edges"; private static final String STOPS = "Stops"; private static final String VERTICES = "Vertices"; - private static final String TRAVERSAL_PERMISSIONS_GROU = "Traversal permissions"; + private static final String TRAVERSAL_PERMISSIONS_GROUP = "Traversal permissions"; static StyleSpec build( VectorSourceLayer regularStops, @@ -211,7 +211,7 @@ private static List traversalPermissions(VectorSourceLayer edges) .map(p -> StyleBuilder .ofId(p.name()) - .group(TRAVERSAL_PERMISSIONS_GROU) + .group(TRAVERSAL_PERMISSIONS_GROUP) .typeLine() .vectorSourceLayer(edges) .lineColor(permissionColor(p)) @@ -225,13 +225,14 @@ private static List traversalPermissions(VectorSourceLayer edges) .toList(); var textStyle = StyleBuilder .ofId("permission-text") - .group(TRAVERSAL_PERMISSIONS_GROU) + .group(TRAVERSAL_PERMISSIONS_GROUP) .typeSymbol() .lineText("permission") .vectorSourceLayer(edges) .edgeFilter(EDGES_TO_DISPLAY) .minZoom(17) - .maxZoom(MAX_ZOOM); + .maxZoom(MAX_ZOOM) + .intiallyHidden(); return ListUtils.combine(permissionStyles, List.of(textStyle)); } From 1ac0029fba78c0cd92bd4e743b68f960d0cbc31d Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 3 Oct 2024 08:59:47 +0200 Subject: [PATCH 016/158] Remove offsets --- .../apis/vectortiles/DebugStyleSpec.java | 1 - .../apis/vectortiles/model/StyleBuilder.java | 5 - .../vector/edge/EdgePropertyMapper.java | 4 +- .../apis/vectortiles/style.json | 99 ++++++++++++++----- 4 files changed, 77 insertions(+), 32 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java index 20c713d2825..bca22c14c26 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java @@ -217,7 +217,6 @@ private static List traversalPermissions(VectorSourceLayer edges) .lineColor(permissionColor(p)) .permissionsFilter(p) .lineWidth(FAT_LINE_WIDTH) - .offsetFromProperty() .minZoom(6) .maxZoom(MAX_ZOOM) .intiallyHidden() diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleBuilder.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleBuilder.java index c4038592823..689a6a17f78 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleBuilder.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleBuilder.java @@ -40,11 +40,6 @@ public StyleBuilder vectorSourceLayer(VectorSourceLayer source) { return sourceLayer(source.vectorLayer()); } - public StyleBuilder offsetFromProperty() { - line.put("line-offset", List.of("get", "offset")); - return this; - } - public enum LayerType { Circle, Line, diff --git a/src/main/java/org/opentripplanner/inspector/vector/edge/EdgePropertyMapper.java b/src/main/java/org/opentripplanner/inspector/vector/edge/EdgePropertyMapper.java index dcb9bbfcda2..d43a91d384d 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/edge/EdgePropertyMapper.java +++ b/src/main/java/org/opentripplanner/inspector/vector/edge/EdgePropertyMapper.java @@ -30,9 +30,7 @@ protected Collection map(Edge input) { private static List mapStreetEdge(StreetEdge se) { var props = Lists.newArrayList( kv("permission", se.getPermission().toString()), - kv("bicycleSafetyFactor", roundTo2Decimals(se.getBicycleSafetyFactor())), - kv("back", se.isBack()), - kv("offset", se.isBack() ? -10 : 10) + kv("bicycleSafetyFactor", roundTo2Decimals(se.getBicycleSafetyFactor())) ); if (se.hasBogusName()) { props.addFirst(kv("name", "%s (generated)".formatted(se.getName().toString()))); diff --git a/src/test/resources/org/opentripplanner/apis/vectortiles/style.json b/src/test/resources/org/opentripplanner/apis/vectortiles/style.json index c456e5bd0e7..acdc521d13f 100644 --- a/src/test/resources/org/opentripplanner/apis/vectortiles/style.json +++ b/src/test/resources/org/opentripplanner/apis/vectortiles/style.json @@ -37,7 +37,7 @@ "paint" : { "line-color" : "#000", "line-width" : { - "base" : 2.3, + "base" : 1.3, "stops" : [ [ 11, @@ -45,7 +45,7 @@ ], [ 23, - 14.0 + 12.0 ] ] } @@ -71,9 +71,9 @@ "minzoom" : 6, "maxzoom" : 23, "paint" : { - "line-color" : "#0EE38B", + "line-color" : "#2ba812", "line-width" : { - "base" : 2.3, + "base" : 1.3, "stops" : [ [ 11, @@ -81,7 +81,7 @@ ], [ 23, - 14.0 + 12.0 ] ] } @@ -107,9 +107,9 @@ "minzoom" : 6, "maxzoom" : 23, "paint" : { - "line-color" : "#E3A10E", + "line-color" : "#10d3b6", "line-width" : { - "base" : 2.3, + "base" : 1.3, "stops" : [ [ 11, @@ -117,7 +117,7 @@ ], [ 23, - 14.0 + 12.0 ] ] } @@ -143,9 +143,9 @@ "minzoom" : 6, "maxzoom" : 23, "paint" : { - "line-color" : "#00EB68", + "line-color" : "#10d3b6", "line-width" : { - "base" : 2.3, + "base" : 1.3, "stops" : [ [ 11, @@ -153,7 +153,7 @@ ], [ 23, - 14.0 + 12.0 ] ] } @@ -179,9 +179,9 @@ "minzoom" : 6, "maxzoom" : 23, "paint" : { - "line-color" : "#EB131F", + "line-color" : "#f92e13", "line-width" : { - "base" : 2.3, + "base" : 1.3, "stops" : [ [ 11, @@ -189,7 +189,7 @@ ], [ 23, - 14.0 + 12.0 ] ] } @@ -215,9 +215,9 @@ "minzoom" : 6, "maxzoom" : 23, "paint" : { - "line-color" : "#963E4A", + "line-color" : "#e25f8f", "line-width" : { - "base" : 2.3, + "base" : 1.3, "stops" : [ [ 11, @@ -225,7 +225,7 @@ ], [ 23, - 14.0 + 12.0 ] ] } @@ -251,9 +251,9 @@ "minzoom" : 6, "maxzoom" : 23, "paint" : { - "line-color" : "#3E5D6B", + "line-color" : "#e25f8f", "line-width" : { - "base" : 2.3, + "base" : 1.3, "stops" : [ [ 11, @@ -261,7 +261,7 @@ ], [ 23, - 14.0 + 12.0 ] ] } @@ -287,9 +287,9 @@ "minzoom" : 6, "maxzoom" : 23, "paint" : { - "line-color" : "#413031", + "line-color" : "#adb2b0", "line-width" : { - "base" : 2.3, + "base" : 1.3, "stops" : [ [ 11, @@ -297,7 +297,7 @@ ], [ 23, - 14.0 + 12.0 ] ] } @@ -315,6 +315,59 @@ "group" : "Traversal permissions" } }, + { + "id" : "permission-text", + "type" : "symbol", + "source" : "vectorSource", + "source-layer" : "edges", + "minzoom" : 17, + "maxzoom" : 23, + "paint" : { + "text-color" : "#000", + "text-halo-color" : "#fff", + "text-halo-blur" : 4, + "text-halo-width" : 3 + }, + "filter" : [ + "in", + "class", + "StreetEdge", + "AreaEdge", + "EscalatorEdge", + "PathwayEdge", + "ElevatorHopEdge", + "TemporaryPartialStreetEdge", + "TemporaryFreeEdge" + ], + "layout" : { + "symbol-placement" : "line", + "symbol-spacing" : 500, + "text-field" : "{permission}", + "text-font" : [ + "KlokanTech Noto Sans Regular" + ], + "text-size" : { + "base" : 14.0, + "stops" : [ + [ + 14, + 12.0 + ], + [ + 20, + 14.0 + ] + ] + }, + "text-max-width" : 5, + "text-keep-upright" : true, + "text-rotation-alignment" : "map", + "visibility" : "none" + }, + "metadata" : { + "group" : "Traversal permissions" + } + }, { "id" : "edge", "type" : "line", From 14721168e3ed399fae9526cb989607ead689b7cf Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 3 Oct 2024 11:50:09 +0200 Subject: [PATCH 017/158] Apply styles --- client/src/components/MapView/LayerControl.tsx | 9 +++++---- client/src/style.css | 3 ++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/client/src/components/MapView/LayerControl.tsx b/client/src/components/MapView/LayerControl.tsx index ff8fa26c91f..65515e1b460 100644 --- a/client/src/components/MapView/LayerControl.tsx +++ b/client/src/components/MapView/LayerControl.tsx @@ -89,12 +89,13 @@ class LayerControl implements IControl { groupInput.type = 'checkbox'; groupInput.id = groupName; - const label = document.createElement('label'); - label.textContent = groupName; - label.htmlFor = groupName; + const groupLabel = document.createElement('label'); + groupLabel.textContent = groupName; + groupLabel.htmlFor = groupName; + groupLabel.className = 'group-label'; groupDiv.appendChild(groupInput); - groupDiv.appendChild(label); + groupDiv.appendChild(groupLabel); groupDiv.appendChild(layerDiv); groups.set(groupName, groupDiv); this.container.appendChild(groupDiv); diff --git a/client/src/style.css b/client/src/style.css index 58f9e8dff2a..ddc1d64ae3b 100644 --- a/client/src/style.css +++ b/client/src/style.css @@ -175,8 +175,9 @@ font-size: 17px; } -.maplibregl-ctrl-group.layer-select h6 { +.maplibregl-ctrl-group.layer-select .group-label { font-size: 15px; + margin-bottom: 5px; } .maplibregl-ctrl-group.layer-select div.group { From 01e6fe142394f718504c028d93c00decb8a4546f Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 4 Oct 2024 09:45:25 +0200 Subject: [PATCH 018/158] Split up style into several methods --- .../apis/vectortiles/DebugStyleSpec.java | 230 ++++++++++-------- 1 file changed, 122 insertions(+), 108 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java index bca22c14c26..4031458182e 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java @@ -93,118 +93,132 @@ static StyleSpec build( ListUtils.combine( List.of(StyleBuilder.ofId("background").typeRaster().source(BACKGROUND_SOURCE).minZoom(0)), traversalPermissions(edges), - List.of( - StyleBuilder - .ofId("edge") - .group(EDGES_GROUP) - .typeLine() - .vectorSourceLayer(edges) - .lineColor(MAGENTA) - .edgeFilter(EDGES_TO_DISPLAY) - .lineWidth(LINE_WIDTH) - .minZoom(6) - .maxZoom(MAX_ZOOM) - .intiallyHidden(), - StyleBuilder - .ofId("edge-name") - .group(EDGES_GROUP) - .typeSymbol() - .lineText("name") - .vectorSourceLayer(edges) - .edgeFilter(EDGES_TO_DISPLAY) - .minZoom(17) - .maxZoom(MAX_ZOOM) - .intiallyHidden(), - StyleBuilder - .ofId("link") - .group(EDGES_GROUP) - .typeLine() - .vectorSourceLayer(edges) - .lineColor(BRIGHT_GREEN) - .edgeFilter( - StreetTransitStopLink.class, - StreetTransitEntranceLink.class, - BoardingLocationToStopLink.class, - StreetVehicleRentalLink.class, - StreetVehicleParkingLink.class - ) - .lineWidth(LINE_WIDTH) - .minZoom(13) - .maxZoom(MAX_ZOOM) - .intiallyHidden(), - StyleBuilder - .ofId("vertex") - .group(VERTICES) - .typeCircle() - .vectorSourceLayer(vertices) - .circleStroke(BLACK, CIRCLE_STROKE) - .circleRadius( - new ZoomDependentNumber(1, List.of(new ZoomStop(15, 1), new ZoomStop(MAX_ZOOM, 7))) - ) - .circleColor(PURPLE) - .minZoom(15) - .maxZoom(MAX_ZOOM) - .intiallyHidden(), - StyleBuilder - .ofId("parking-vertex") - .group(VERTICES) - .typeCircle() - .vectorSourceLayer(vertices) - .vertexFilter(VehicleParkingEntranceVertex.class) - .circleStroke(BLACK, CIRCLE_STROKE) - .circleRadius( - new ZoomDependentNumber( - 1, - List.of(new ZoomStop(13, 1.4f), new ZoomStop(MAX_ZOOM, 10)) - ) - ) - .circleColor(DARK_GREEN) - .minZoom(13) - .maxZoom(MAX_ZOOM) - .intiallyHidden(), - StyleBuilder - .ofId("area-stop") - .group(STOPS) - .typeFill() - .vectorSourceLayer(areaStops) - .fillColor(BRIGHT_GREEN) - .fillOpacity(0.5f) - .fillOutlineColor(BLACK) - .minZoom(6) - .maxZoom(MAX_ZOOM), - StyleBuilder - .ofId("group-stop") - .group(STOPS) - .typeFill() - .vectorSourceLayer(groupStops) - .fillColor(BRIGHT_GREEN) - .fillOpacity(0.5f) - .fillOutlineColor(BLACK) - .minZoom(6) - .maxZoom(MAX_ZOOM), - StyleBuilder - .ofId("regular-stop") - .group(STOPS) - .typeCircle() - .vectorSourceLayer(regularStops) - .circleStroke( - BLACK, - new ZoomDependentNumber(1, List.of(new ZoomStop(11, 0.5f), new ZoomStop(MAX_ZOOM, 5))) - ) - .circleRadius( - new ZoomDependentNumber( - 1, - List.of(new ZoomStop(11, 0.5f), new ZoomStop(MAX_ZOOM, 10)) - ) - ) - .circleColor("#fcf9fa") - .minZoom(10) - .maxZoom(MAX_ZOOM) - ) + edges(edges), + vertices(vertices), + stops(regularStops, areaStops, groupStops) ) ); } + private static List stops( + VectorSourceLayer regularStops, + VectorSourceLayer areaStops, + VectorSourceLayer groupStops + ) { + return List.of( + StyleBuilder + .ofId("area-stop") + .group(STOPS) + .typeFill() + .vectorSourceLayer(areaStops) + .fillColor(BRIGHT_GREEN) + .fillOpacity(0.5f) + .fillOutlineColor(BLACK) + .minZoom(6) + .maxZoom(MAX_ZOOM), + StyleBuilder + .ofId("group-stop") + .group(STOPS) + .typeFill() + .vectorSourceLayer(groupStops) + .fillColor(BRIGHT_GREEN) + .fillOpacity(0.5f) + .fillOutlineColor(BLACK) + .minZoom(6) + .maxZoom(MAX_ZOOM), + StyleBuilder + .ofId("regular-stop") + .group(STOPS) + .typeCircle() + .vectorSourceLayer(regularStops) + .circleStroke( + BLACK, + new ZoomDependentNumber(1, List.of(new ZoomStop(11, 0.5f), new ZoomStop(MAX_ZOOM, 5))) + ) + .circleRadius( + new ZoomDependentNumber(1, List.of(new ZoomStop(11, 0.5f), new ZoomStop(MAX_ZOOM, 10))) + ) + .circleColor("#fcf9fa") + .minZoom(10) + .maxZoom(MAX_ZOOM) + ); + } + + private static List vertices(VectorSourceLayer vertices) { + return List.of( + StyleBuilder + .ofId("vertex") + .group(VERTICES) + .typeCircle() + .vectorSourceLayer(vertices) + .circleStroke(BLACK, CIRCLE_STROKE) + .circleRadius( + new ZoomDependentNumber(1, List.of(new ZoomStop(15, 1), new ZoomStop(MAX_ZOOM, 7))) + ) + .circleColor(PURPLE) + .minZoom(15) + .maxZoom(MAX_ZOOM) + .intiallyHidden(), + StyleBuilder + .ofId("parking-vertex") + .group(VERTICES) + .typeCircle() + .vectorSourceLayer(vertices) + .vertexFilter(VehicleParkingEntranceVertex.class) + .circleStroke(BLACK, CIRCLE_STROKE) + .circleRadius( + new ZoomDependentNumber(1, List.of(new ZoomStop(13, 1.4f), new ZoomStop(MAX_ZOOM, 10))) + ) + .circleColor(DARK_GREEN) + .minZoom(13) + .maxZoom(MAX_ZOOM) + .intiallyHidden() + ); + } + + private static List edges(VectorSourceLayer edges) { + return List.of( + StyleBuilder + .ofId("edge") + .group(EDGES_GROUP) + .typeLine() + .vectorSourceLayer(edges) + .lineColor(MAGENTA) + .edgeFilter(EDGES_TO_DISPLAY) + .lineWidth(LINE_WIDTH) + .minZoom(6) + .maxZoom(MAX_ZOOM) + .intiallyHidden(), + StyleBuilder + .ofId("edge-name") + .group(EDGES_GROUP) + .typeSymbol() + .lineText("name") + .vectorSourceLayer(edges) + .edgeFilter(EDGES_TO_DISPLAY) + .minZoom(17) + .maxZoom(MAX_ZOOM) + .intiallyHidden(), + StyleBuilder + .ofId("link") + .group(EDGES_GROUP) + .typeLine() + .vectorSourceLayer(edges) + .lineColor(BRIGHT_GREEN) + .edgeFilter( + StreetTransitStopLink.class, + StreetTransitEntranceLink.class, + BoardingLocationToStopLink.class, + StreetVehicleRentalLink.class, + StreetVehicleParkingLink.class + ) + .lineWidth(LINE_WIDTH) + .minZoom(13) + .maxZoom(MAX_ZOOM) + .intiallyHidden() + ); + } + private static List traversalPermissions(VectorSourceLayer edges) { var permissionStyles = Arrays .stream(StreetTraversalPermission.values()) From beb76d5a66404d7ee741efc50d5e4c7cad1b400d Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 4 Oct 2024 09:47:52 +0200 Subject: [PATCH 019/158] Extract method --- .../src/components/MapView/LayerControl.tsx | 52 ++++++++++--------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/client/src/components/MapView/LayerControl.tsx b/client/src/components/MapView/LayerControl.tsx index 65515e1b460..e85ecf64135 100644 --- a/client/src/components/MapView/LayerControl.tsx +++ b/client/src/components/MapView/LayerControl.tsx @@ -45,7 +45,6 @@ class LayerControl implements IControl { if (meta.group) { groupName = meta.group; } - console.log(groupName); const layerDiv = document.createElement('div'); layerDiv.className = 'layer'; @@ -74,29 +73,7 @@ class LayerControl implements IControl { const g = groups.get(groupName); g?.appendChild(layerDiv); } else { - const groupDiv = document.createElement('div'); - groupDiv.className = 'group'; - - const groupInput = document.createElement('input'); - groupInput.onchange = () => { - groupDiv.querySelectorAll('input.layer').forEach((i) => { - const input = i as HTMLInputElement; - input.checked = groupInput.checked; - var event = new Event('change'); - i.dispatchEvent(event); - }); - }; - groupInput.type = 'checkbox'; - groupInput.id = groupName; - - const groupLabel = document.createElement('label'); - groupLabel.textContent = groupName; - groupLabel.htmlFor = groupName; - groupLabel.className = 'group-label'; - - groupDiv.appendChild(groupInput); - groupDiv.appendChild(groupLabel); - groupDiv.appendChild(layerDiv); + const groupDiv = this.buildgGroupDiv(groupName, layerDiv); groups.set(groupName, groupDiv); this.container.appendChild(groupDiv); } @@ -107,6 +84,33 @@ class LayerControl implements IControl { return this.container; } + private buildgGroupDiv(groupName: string, layerDiv: HTMLDivElement) { + const groupDiv = document.createElement('div'); + groupDiv.className = 'group'; + + const groupInput = document.createElement('input'); + groupInput.onchange = () => { + groupDiv.querySelectorAll('input.layer').forEach((i) => { + const input = i as HTMLInputElement; + input.checked = groupInput.checked; + const event = new Event('change'); + i.dispatchEvent(event); + }); + }; + groupInput.type = 'checkbox'; + groupInput.id = groupName; + + const groupLabel = document.createElement('label'); + groupLabel.textContent = groupName; + groupLabel.htmlFor = groupName; + groupLabel.className = 'group-label'; + + groupDiv.appendChild(groupInput); + groupDiv.appendChild(groupLabel); + groupDiv.appendChild(layerDiv); + return groupDiv; + } + private layerVisible(map: WebMap, layer: { id: string }) { return map.getLayoutProperty(layer.id, 'visibility') !== 'none'; } From 700d4efe01406ae4891c7817fe7e6f2deb054343 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 4 Oct 2024 11:43:16 +0200 Subject: [PATCH 020/158] Update docs --- .../apis/vectortiles/model/StyleBuilder.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleBuilder.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleBuilder.java index 689a6a17f78..f01c953462b 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleBuilder.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleBuilder.java @@ -95,11 +95,6 @@ public StyleBuilder typeLine() { return this; } - public StyleBuilder group(String group) { - metadata.put("group", group); - return this; - } - public StyleBuilder typeFill() { type(LayerType.Fill); return this; @@ -115,6 +110,15 @@ private StyleBuilder type(LayerType type) { return this; } + /** + * Puts the layer into an arbitrarily defined group in the layer selector. This allows you + * to switch the entire group on and off. + */ + public StyleBuilder group(String group) { + metadata.put("group", group); + return this; + } + public StyleBuilder lineText(String name) { layout.put("symbol-placement", "line"); layout.put("symbol-spacing", 500); @@ -204,6 +208,9 @@ public final StyleBuilder edgeFilter(Class... classToFilter) { return filterClasses(classToFilter); } + /** + * Filter the entities by their "permission" property. + */ public final StyleBuilder permissionsFilter(StreetTraversalPermission p) { filter = List.of("==", "permission", p.name()); return this; From eba10a6c89252f7382ee8a8968befd2b02743d0e Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sun, 6 Oct 2024 09:30:43 +0200 Subject: [PATCH 021/158] Finetune checkbox placement --- client/src/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/style.css b/client/src/style.css index ddc1d64ae3b..69fb6917185 100644 --- a/client/src/style.css +++ b/client/src/style.css @@ -185,5 +185,5 @@ } .maplibregl-ctrl-group.layer-select div.layer { - margin-left: 14px; + margin-left: 17px; } From a4f955fe210ef24de81ab00a296ae9957e0fa7f8 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Sun, 6 Oct 2024 20:09:27 +0100 Subject: [PATCH 022/158] 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 023/158] 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 024/158] 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 025/158] 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 026/158] 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 027/158] 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 028/158] 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 029/158] 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 030/158] 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 aa39b75dca54cd82489bca5a04b81036682e09b9 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 9 Oct 2024 16:54:36 +0200 Subject: [PATCH 031/158] Add line offset --- .../apis/vectortiles/DebugStyleSpec.java | 18 +-- .../apis/vectortiles/style.json | 119 +++++++++++++++++- 2 files changed, 128 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java index 8643f0c088b..bbe3538857b 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java @@ -49,14 +49,14 @@ public class DebugStyleSpec { private static final String BLACK = "#140d0e"; private static final int MAX_ZOOM = 23; - private static final ZoomDependentNumber LINE_WIDTH = new ZoomDependentNumber( - 1.3f, - List.of(new ZoomStop(13, 0.5f), new ZoomStop(MAX_ZOOM, 10)) - ); private static final ZoomDependentNumber LINE_OFFSET = new ZoomDependentNumber( 1.3f, List.of(new ZoomStop(13, 0.3f), new ZoomStop(MAX_ZOOM, 6)) ); + private static final ZoomDependentNumber LINE_WIDTH = new ZoomDependentNumber( + 1.3f, + List.of(new ZoomStop(13, 0.5f), new ZoomStop(MAX_ZOOM, 10)) + ); private static final ZoomDependentNumber FAT_LINE_WIDTH = new ZoomDependentNumber( 1.3f, List.of(new ZoomStop(11, 1f), new ZoomStop(MAX_ZOOM, 12)) @@ -191,7 +191,7 @@ private static List edges(VectorSourceLayer edges) { .lineColor(MAGENTA) .edgeFilter(EDGES_TO_DISPLAY) .lineWidth(LINE_WIDTH) - .lineOffset(LINE_OFFSET) + .lineOffset(LINE_OFFSET) .minZoom(6) .maxZoom(MAX_ZOOM) .intiallyHidden(), @@ -216,11 +216,11 @@ private static List edges(VectorSourceLayer edges) { StreetTransitEntranceLink.class, BoardingLocationToStopLink.class, StreetVehicleRentalLink.class, - StreetVehicleParkingLink.class, - StreetStationCentroidLink.class + StreetVehicleParkingLink.class, + StreetStationCentroidLink.class ) .lineWidth(LINE_WIDTH) - .lineOffset(LINE_OFFSET) + .lineOffset(LINE_OFFSET) .minZoom(13) .maxZoom(MAX_ZOOM) .intiallyHidden() @@ -239,6 +239,7 @@ private static List traversalPermissions(VectorSourceLayer edges) .lineColor(permissionColor(p)) .permissionsFilter(p) .lineWidth(FAT_LINE_WIDTH) + .lineOffset(LINE_OFFSET) .minZoom(6) .maxZoom(MAX_ZOOM) .intiallyHidden() @@ -251,6 +252,7 @@ private static List traversalPermissions(VectorSourceLayer edges) .lineText("permission") .vectorSourceLayer(edges) .edgeFilter(EDGES_TO_DISPLAY) + .lineOffset(LINE_OFFSET) .minZoom(17) .maxZoom(MAX_ZOOM) .intiallyHidden(); diff --git a/src/test/resources/org/opentripplanner/apis/vectortiles/style.json b/src/test/resources/org/opentripplanner/apis/vectortiles/style.json index 4c513ca31d4..bc4824b1ff1 100644 --- a/src/test/resources/org/opentripplanner/apis/vectortiles/style.json +++ b/src/test/resources/org/opentripplanner/apis/vectortiles/style.json @@ -48,6 +48,19 @@ 12.0 ] ] + }, + "line-offset" : { + "base" : 1.3, + "stops" : [ + [ + 13, + 0.3 + ], + [ + 23, + 6.0 + ] + ] } }, "filter" : [ @@ -84,6 +97,19 @@ 12.0 ] ] + }, + "line-offset" : { + "base" : 1.3, + "stops" : [ + [ + 13, + 0.3 + ], + [ + 23, + 6.0 + ] + ] } }, "filter" : [ @@ -120,6 +146,19 @@ 12.0 ] ] + }, + "line-offset" : { + "base" : 1.3, + "stops" : [ + [ + 13, + 0.3 + ], + [ + 23, + 6.0 + ] + ] } }, "filter" : [ @@ -156,6 +195,19 @@ 12.0 ] ] + }, + "line-offset" : { + "base" : 1.3, + "stops" : [ + [ + 13, + 0.3 + ], + [ + 23, + 6.0 + ] + ] } }, "filter" : [ @@ -192,6 +244,19 @@ 12.0 ] ] + }, + "line-offset" : { + "base" : 1.3, + "stops" : [ + [ + 13, + 0.3 + ], + [ + 23, + 6.0 + ] + ] } }, "filter" : [ @@ -228,6 +293,19 @@ 12.0 ] ] + }, + "line-offset" : { + "base" : 1.3, + "stops" : [ + [ + 13, + 0.3 + ], + [ + 23, + 6.0 + ] + ] } }, "filter" : [ @@ -264,6 +342,19 @@ 12.0 ] ] + }, + "line-offset" : { + "base" : 1.3, + "stops" : [ + [ + 13, + 0.3 + ], + [ + 23, + 6.0 + ] + ] } }, "filter" : [ @@ -300,6 +391,19 @@ 12.0 ] ] + }, + "line-offset" : { + "base" : 1.3, + "stops" : [ + [ + 13, + 0.3 + ], + [ + 23, + 6.0 + ] + ] } }, "filter" : [ @@ -326,7 +430,20 @@ "text-color" : "#000", "text-halo-color" : "#fff", "text-halo-blur" : 4, - "text-halo-width" : 3 + "text-halo-width" : 3, + "line-offset" : { + "base" : 1.3, + "stops" : [ + [ + 13, + 0.3 + ], + [ + 23, + 6.0 + ] + ] + } }, "filter" : [ "in", From 6fea235cd7332de907dd07f37e1e473cb6a2eb24 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 9 Oct 2024 22:01:35 +0200 Subject: [PATCH 032/158] Finetune vector tile styling --- .../apis/vectortiles/DebugStyleSpec.java | 39 +- .../apis/vectortiles/model/StyleBuilder.java | 14 +- .../model/ZoomDependentNumber.java | 17 +- .../apis/vectortiles/style.json | 779 +++++++++--------- 4 files changed, 423 insertions(+), 426 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java index bbe3538857b..1fc87176af8 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java @@ -50,19 +50,12 @@ public class DebugStyleSpec { private static final int MAX_ZOOM = 23; private static final ZoomDependentNumber LINE_OFFSET = new ZoomDependentNumber( - 1.3f, List.of(new ZoomStop(13, 0.3f), new ZoomStop(MAX_ZOOM, 6)) ); private static final ZoomDependentNumber LINE_WIDTH = new ZoomDependentNumber( - 1.3f, - List.of(new ZoomStop(13, 0.5f), new ZoomStop(MAX_ZOOM, 10)) - ); - private static final ZoomDependentNumber FAT_LINE_WIDTH = new ZoomDependentNumber( - 1.3f, - List.of(new ZoomStop(11, 1f), new ZoomStop(MAX_ZOOM, 12)) + List.of(new ZoomStop(13, 0.2f), new ZoomStop(MAX_ZOOM, 8)) ); private static final ZoomDependentNumber CIRCLE_STROKE = new ZoomDependentNumber( - 1, List.of(new ZoomStop(15, 0.2f), new ZoomStop(MAX_ZOOM, 3)) ); private static final Class[] EDGES_TO_DISPLAY = new Class[] { @@ -75,8 +68,8 @@ public class DebugStyleSpec { TemporaryFreeEdge.class, }; private static final String EDGES_GROUP = "Edges"; - private static final String STOPS = "Stops"; - private static final String VERTICES = "Vertices"; + private static final String STOPS_GROUP = "Stops"; + private static final String VERTICES_GROUP = "Vertices"; private static final String TRAVERSAL_PERMISSIONS_GROUP = "Traversal permissions"; static StyleSpec build( @@ -113,7 +106,7 @@ private static List stops( return List.of( StyleBuilder .ofId("area-stop") - .group(STOPS) + .group(STOPS_GROUP) .typeFill() .vectorSourceLayer(areaStops) .fillColor(BRIGHT_GREEN) @@ -123,7 +116,7 @@ private static List stops( .maxZoom(MAX_ZOOM), StyleBuilder .ofId("group-stop") - .group(STOPS) + .group(STOPS_GROUP) .typeFill() .vectorSourceLayer(groupStops) .fillColor(BRIGHT_GREEN) @@ -133,15 +126,15 @@ private static List stops( .maxZoom(MAX_ZOOM), StyleBuilder .ofId("regular-stop") - .group(STOPS) + .group(STOPS_GROUP) .typeCircle() .vectorSourceLayer(regularStops) .circleStroke( BLACK, - new ZoomDependentNumber(1, List.of(new ZoomStop(11, 0.5f), new ZoomStop(MAX_ZOOM, 5))) + new ZoomDependentNumber(List.of(new ZoomStop(11, 0.5f), new ZoomStop(MAX_ZOOM, 5))) ) .circleRadius( - new ZoomDependentNumber(1, List.of(new ZoomStop(11, 0.5f), new ZoomStop(MAX_ZOOM, 10))) + new ZoomDependentNumber(List.of(new ZoomStop(11, 0.5f), new ZoomStop(MAX_ZOOM, 10))) ) .circleColor("#fcf9fa") .minZoom(10) @@ -153,12 +146,12 @@ private static List vertices(VectorSourceLayer vertices) { return List.of( StyleBuilder .ofId("vertex") - .group(VERTICES) + .group(VERTICES_GROUP) .typeCircle() .vectorSourceLayer(vertices) .circleStroke(BLACK, CIRCLE_STROKE) .circleRadius( - new ZoomDependentNumber(1, List.of(new ZoomStop(15, 1), new ZoomStop(MAX_ZOOM, 7))) + new ZoomDependentNumber(List.of(new ZoomStop(15, 1), new ZoomStop(MAX_ZOOM, 7))) ) .circleColor(PURPLE) .minZoom(15) @@ -166,13 +159,13 @@ private static List vertices(VectorSourceLayer vertices) { .intiallyHidden(), StyleBuilder .ofId("parking-vertex") - .group(VERTICES) + .group(VERTICES_GROUP) .typeCircle() .vectorSourceLayer(vertices) .vertexFilter(VehicleParkingEntranceVertex.class) .circleStroke(BLACK, CIRCLE_STROKE) .circleRadius( - new ZoomDependentNumber(1, List.of(new ZoomStop(13, 1.4f), new ZoomStop(MAX_ZOOM, 10))) + new ZoomDependentNumber(List.of(new ZoomStop(13, 1.4f), new ZoomStop(MAX_ZOOM, 10))) ) .circleColor(DARK_GREEN) .minZoom(13) @@ -233,12 +226,12 @@ private static List traversalPermissions(VectorSourceLayer edges) .map(p -> StyleBuilder .ofId(p.name()) + .vectorSourceLayer(edges) .group(TRAVERSAL_PERMISSIONS_GROUP) .typeLine() - .vectorSourceLayer(edges) .lineColor(permissionColor(p)) .permissionsFilter(p) - .lineWidth(FAT_LINE_WIDTH) + .lineWidth(LINE_WIDTH) .lineOffset(LINE_OFFSET) .minZoom(6) .maxZoom(MAX_ZOOM) @@ -247,12 +240,12 @@ private static List traversalPermissions(VectorSourceLayer edges) .toList(); var textStyle = StyleBuilder .ofId("permission-text") + .vectorSourceLayer(edges) .group(TRAVERSAL_PERMISSIONS_GROUP) .typeSymbol() .lineText("permission") - .vectorSourceLayer(edges) + .textOffset(1) .edgeFilter(EDGES_TO_DISPLAY) - .lineOffset(LINE_OFFSET) .minZoom(17) .maxZoom(MAX_ZOOM) .intiallyHidden(); diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleBuilder.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleBuilder.java index 58e8b8e7499..93b7ea91e7c 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleBuilder.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleBuilder.java @@ -120,17 +120,18 @@ public StyleBuilder group(String group) { } public StyleBuilder lineText(String name) { - layout.put("symbol-placement", "line"); - layout.put("symbol-spacing", 500); + layout.put("symbol-placement", "line-center"); + layout.put("symbol-spacing", 1000); layout.put("text-field", "{%s}".formatted(name)); layout.put("text-font", List.of("KlokanTech Noto Sans Regular")); layout.put( "text-size", - new ZoomDependentNumber(14, List.of(new ZoomStop(14, 12), new ZoomStop(20, 14))).toJson() + new ZoomDependentNumber(List.of(new ZoomStop(10, 6), new ZoomStop(24, 12))).toJson() ); - layout.put("text-max-width", 5); + layout.put("text-max-width", 100); layout.put("text-keep-upright", true); layout.put("text-rotation-alignment", "map"); + layout.put("text-overlap", "never"); paint.put("text-color", "#000"); paint.put("text-halo-color", "#fff"); paint.put("text-halo-blur", 4); @@ -138,6 +139,11 @@ public StyleBuilder lineText(String name) { return this; } + public StyleBuilder textOffset(float offset) { + layout.put("text-offset", List.of(0, offset)); + return this; + } + public StyleBuilder circleColor(String color) { paint.put("circle-color", validateColor(color)); return this; diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/ZoomDependentNumber.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/ZoomDependentNumber.java index d83c4b63495..4d1d83ee8a9 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/model/ZoomDependentNumber.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/ZoomDependentNumber.java @@ -2,21 +2,26 @@ 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; /** * A style parameter that allows you to specify a number that changes dependent on the zoom level. */ -public record ZoomDependentNumber(float base, List stops) { +public record ZoomDependentNumber(List stops) { private static final ObjectMapper OBJECT_MAPPER = ObjectMappers.ignoringExtraFields(); public JsonNode toJson() { - var props = new LinkedHashMap<>(); - props.put("base", base); - var vals = stops.stream().map(ZoomStop::toList).toList(); - props.put("stops", vals); - return OBJECT_MAPPER.valueToTree(props); + var interpolation = new ArrayList<>(); + interpolation.add("interpolate"); + interpolation.add(List.of("linear")); + interpolation.add(List.of("zoom")); + stops.forEach(s -> interpolation.addAll(s.toList())); + + return OBJECT_MAPPER.valueToTree(interpolation); } /** diff --git a/src/test/resources/org/opentripplanner/apis/vectortiles/style.json b/src/test/resources/org/opentripplanner/apis/vectortiles/style.json index bc4824b1ff1..8a0e457396e 100644 --- a/src/test/resources/org/opentripplanner/apis/vectortiles/style.json +++ b/src/test/resources/org/opentripplanner/apis/vectortiles/style.json @@ -29,39 +29,39 @@ }, { "id" : "NONE", - "type" : "line", "source" : "vectorSource", "source-layer" : "edges", + "type" : "line", "minzoom" : 6, "maxzoom" : 23, "paint" : { "line-color" : "#000", - "line-width" : { - "base" : 1.3, - "stops" : [ - [ - 11, - 1.0 - ], - [ - 23, - 12.0 - ] - ] - }, - "line-offset" : { - "base" : 1.3, - "stops" : [ - [ - 13, - 0.3 - ], - [ - 23, - 6.0 - ] - ] - } + "line-width" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 13, + 0.2, + 23, + 8.0 + ], + "line-offset" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 13, + 0.3, + 23, + 6.0 + ] }, "filter" : [ "==", @@ -78,39 +78,39 @@ }, { "id" : "PEDESTRIAN", - "type" : "line", "source" : "vectorSource", "source-layer" : "edges", + "type" : "line", "minzoom" : 6, "maxzoom" : 23, "paint" : { "line-color" : "#2ba812", - "line-width" : { - "base" : 1.3, - "stops" : [ - [ - 11, - 1.0 - ], - [ - 23, - 12.0 - ] - ] - }, - "line-offset" : { - "base" : 1.3, - "stops" : [ - [ - 13, - 0.3 - ], - [ - 23, - 6.0 - ] - ] - } + "line-width" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 13, + 0.2, + 23, + 8.0 + ], + "line-offset" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 13, + 0.3, + 23, + 6.0 + ] }, "filter" : [ "==", @@ -127,39 +127,39 @@ }, { "id" : "BICYCLE", - "type" : "line", "source" : "vectorSource", "source-layer" : "edges", + "type" : "line", "minzoom" : 6, "maxzoom" : 23, "paint" : { "line-color" : "#10d3b6", - "line-width" : { - "base" : 1.3, - "stops" : [ - [ - 11, - 1.0 - ], - [ - 23, - 12.0 - ] - ] - }, - "line-offset" : { - "base" : 1.3, - "stops" : [ - [ - 13, - 0.3 - ], - [ - 23, - 6.0 - ] - ] - } + "line-width" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 13, + 0.2, + 23, + 8.0 + ], + "line-offset" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 13, + 0.3, + 23, + 6.0 + ] }, "filter" : [ "==", @@ -176,39 +176,39 @@ }, { "id" : "PEDESTRIAN_AND_BICYCLE", - "type" : "line", "source" : "vectorSource", "source-layer" : "edges", + "type" : "line", "minzoom" : 6, "maxzoom" : 23, "paint" : { "line-color" : "#10d3b6", - "line-width" : { - "base" : 1.3, - "stops" : [ - [ - 11, - 1.0 - ], - [ - 23, - 12.0 - ] - ] - }, - "line-offset" : { - "base" : 1.3, - "stops" : [ - [ - 13, - 0.3 - ], - [ - 23, - 6.0 - ] - ] - } + "line-width" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 13, + 0.2, + 23, + 8.0 + ], + "line-offset" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 13, + 0.3, + 23, + 6.0 + ] }, "filter" : [ "==", @@ -225,39 +225,39 @@ }, { "id" : "CAR", - "type" : "line", "source" : "vectorSource", "source-layer" : "edges", + "type" : "line", "minzoom" : 6, "maxzoom" : 23, "paint" : { "line-color" : "#f92e13", - "line-width" : { - "base" : 1.3, - "stops" : [ - [ - 11, - 1.0 - ], - [ - 23, - 12.0 - ] - ] - }, - "line-offset" : { - "base" : 1.3, - "stops" : [ - [ - 13, - 0.3 - ], - [ - 23, - 6.0 - ] - ] - } + "line-width" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 13, + 0.2, + 23, + 8.0 + ], + "line-offset" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 13, + 0.3, + 23, + 6.0 + ] }, "filter" : [ "==", @@ -274,39 +274,39 @@ }, { "id" : "PEDESTRIAN_AND_CAR", - "type" : "line", "source" : "vectorSource", "source-layer" : "edges", + "type" : "line", "minzoom" : 6, "maxzoom" : 23, "paint" : { "line-color" : "#e25f8f", - "line-width" : { - "base" : 1.3, - "stops" : [ - [ - 11, - 1.0 - ], - [ - 23, - 12.0 - ] - ] - }, - "line-offset" : { - "base" : 1.3, - "stops" : [ - [ - 13, - 0.3 - ], - [ - 23, - 6.0 - ] - ] - } + "line-width" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 13, + 0.2, + 23, + 8.0 + ], + "line-offset" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 13, + 0.3, + 23, + 6.0 + ] }, "filter" : [ "==", @@ -323,39 +323,39 @@ }, { "id" : "BICYCLE_AND_CAR", - "type" : "line", "source" : "vectorSource", "source-layer" : "edges", + "type" : "line", "minzoom" : 6, "maxzoom" : 23, "paint" : { "line-color" : "#e25f8f", - "line-width" : { - "base" : 1.3, - "stops" : [ - [ - 11, - 1.0 - ], - [ - 23, - 12.0 - ] - ] - }, - "line-offset" : { - "base" : 1.3, - "stops" : [ - [ - 13, - 0.3 - ], - [ - 23, - 6.0 - ] - ] - } + "line-width" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 13, + 0.2, + 23, + 8.0 + ], + "line-offset" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 13, + 0.3, + 23, + 6.0 + ] }, "filter" : [ "==", @@ -372,39 +372,39 @@ }, { "id" : "ALL", - "type" : "line", "source" : "vectorSource", "source-layer" : "edges", + "type" : "line", "minzoom" : 6, "maxzoom" : 23, "paint" : { "line-color" : "#adb2b0", - "line-width" : { - "base" : 1.3, - "stops" : [ - [ - 11, - 1.0 - ], - [ - 23, - 12.0 - ] - ] - }, - "line-offset" : { - "base" : 1.3, - "stops" : [ - [ - 13, - 0.3 - ], - [ - 23, - 6.0 - ] - ] - } + "line-width" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 13, + 0.2, + 23, + 8.0 + ], + "line-offset" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 13, + 0.3, + 23, + 6.0 + ] }, "filter" : [ "==", @@ -421,29 +421,16 @@ }, { "id" : "permission-text", - "type" : "symbol", "source" : "vectorSource", "source-layer" : "edges", + "type" : "symbol", "minzoom" : 17, "maxzoom" : 23, "paint" : { "text-color" : "#000", "text-halo-color" : "#fff", "text-halo-blur" : 4, - "text-halo-width" : 3, - "line-offset" : { - "base" : 1.3, - "stops" : [ - [ - 13, - 0.3 - ], - [ - 23, - 6.0 - ] - ] - } + "text-halo-width" : 3 }, "filter" : [ "in", @@ -457,28 +444,33 @@ "TemporaryFreeEdge" ], "layout" : { - "symbol-placement" : "line", - "symbol-spacing" : 500, + "symbol-placement" : "line-center", + "symbol-spacing" : 1000, "text-field" : "{permission}", "text-font" : [ "KlokanTech Noto Sans Regular" ], - "text-size" : { - "base" : 14.0, - "stops" : [ - [ - 14, - 12.0 - ], - [ - 20, - 14.0 - ] - ] - }, - "text-max-width" : 5, + "text-size" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 10, + 6.0, + 24, + 12.0 + ], + "text-max-width" : 100, "text-keep-upright" : true, "text-rotation-alignment" : "map", + "text-overlap" : "never", + "text-offset" : [ + 0, + 1.0 + ], "visibility" : "none" }, "metadata" : { @@ -494,32 +486,32 @@ "maxzoom" : 23, "paint" : { "line-color" : "#f21d52", - "line-width" : { - "base" : 1.3, - "stops" : [ - [ - 13, - 0.5 - ], - [ - 23, - 10.0 - ] - ] - }, - "line-offset" : { - "base" : 1.3, - "stops" : [ - [ - 13, - 0.3 - ], - [ - 23, - 6.0 - ] - ] - } + "line-width" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 13, + 0.2, + 23, + 8.0 + ], + "line-offset" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 13, + 0.3, + 23, + 6.0 + ] }, "filter" : [ "in", @@ -565,28 +557,29 @@ "TemporaryFreeEdge" ], "layout" : { - "symbol-placement" : "line", - "symbol-spacing" : 500, + "symbol-placement" : "line-center", + "symbol-spacing" : 1000, "text-field" : "{name}", "text-font" : [ "KlokanTech Noto Sans Regular" ], - "text-size" : { - "base" : 14.0, - "stops" : [ - [ - 14, - 12.0 - ], - [ - 20, - 14.0 - ] - ] - }, - "text-max-width" : 5, + "text-size" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 10, + 6.0, + 24, + 12.0 + ], + "text-max-width" : 100, "text-keep-upright" : true, "text-rotation-alignment" : "map", + "text-overlap" : "never", "visibility" : "none" }, "metadata" : { @@ -602,32 +595,32 @@ "maxzoom" : 23, "paint" : { "line-color" : "#22DD9E", - "line-width" : { - "base" : 1.3, - "stops" : [ - [ - 13, - 0.5 - ], - [ - 23, - 10.0 - ] - ] - }, - "line-offset" : { - "base" : 1.3, - "stops" : [ - [ - 13, - 0.3 - ], - [ - 23, - 6.0 - ] - ] - } + "line-width" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 13, + 0.2, + 23, + 8.0 + ], + "line-offset" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 13, + 0.3, + 23, + 6.0 + ] }, "filter" : [ "in", @@ -656,32 +649,32 @@ "maxzoom" : 23, "paint" : { "circle-stroke-color" : "#140d0e", - "circle-stroke-width" : { - "base" : 1.0, - "stops" : [ - [ - 15, - 0.2 - ], - [ - 23, - 3.0 - ] - ] - }, - "circle-radius" : { - "base" : 1.0, - "stops" : [ - [ - 15, - 1.0 - ], - [ - 23, - 7.0 - ] - ] - }, + "circle-stroke-width" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 15, + 0.2, + 23, + 3.0 + ], + "circle-radius" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 15, + 1.0, + 23, + 7.0 + ], "circle-color" : "#BC55F2" }, "layout" : { @@ -700,32 +693,32 @@ "maxzoom" : 23, "paint" : { "circle-stroke-color" : "#140d0e", - "circle-stroke-width" : { - "base" : 1.0, - "stops" : [ - [ - 15, - 0.2 - ], - [ - 23, - 3.0 - ] - ] - }, - "circle-radius" : { - "base" : 1.0, - "stops" : [ - [ - 13, - 1.4 - ], - [ - 23, - 10.0 - ] - ] - }, + "circle-stroke-width" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 15, + 0.2, + 23, + 3.0 + ], + "circle-radius" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 13, + 1.4, + 23, + 10.0 + ], "circle-color" : "#136b04" }, "filter" : [ @@ -781,32 +774,32 @@ "maxzoom" : 23, "paint" : { "circle-stroke-color" : "#140d0e", - "circle-stroke-width" : { - "base" : 1.0, - "stops" : [ - [ - 11, - 0.5 - ], - [ - 23, - 5.0 - ] - ] - }, - "circle-radius" : { - "base" : 1.0, - "stops" : [ - [ - 11, - 0.5 - ], - [ - 23, - 10.0 - ] - ] - }, + "circle-stroke-width" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 11, + 0.5, + 23, + 5.0 + ], + "circle-radius" : [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 11, + 0.5, + 23, + 10.0 + ], "circle-color" : "#fcf9fa" }, "metadata" : { From 9b1a57707d2522a79f6998af91ef260ed8da3205 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Thu, 10 Oct 2024 16:43:55 +0300 Subject: [PATCH 033/158] 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 034/158] 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 035/158] 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 036/158] 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 037/158] 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 929b3229e9be7d3f2a0909652fc241e873baeb06 Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Fri, 11 Oct 2024 15:52:05 +0200 Subject: [PATCH 038/158] Make OTP a multi-module project --- .git-blame-ignore-revs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index 875f4fb67b8..bed6a5ba84b 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -9,3 +9,6 @@ # reorder and reformat GTFS GraphQL API schema file with graphql-java 14051fab312a67cae9a460aaf0bbc77223bec624 + +# Make OTP a multi-module project +ead33ffe280dd7caf72cae5ff7a41542e8427636 From a8a1730f73df91794295f1db89e5dfd27735a730 Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Fri, 11 Oct 2024 15:52:05 +0200 Subject: [PATCH 039/158] Rename TransitModel to TimetableRepository --- .../ext/emissions/EmissionsTest.java | 23 ++- .../ext/fares/FaresFilterTest.java | 6 +- ...CombinedInterlinedLegsFareServiceTest.java | 4 +- .../fares/impl/DefaultFareServiceTest.java | 4 +- .../ext/fares/impl/FareModelForTest.java | 5 +- .../ext/fares/impl/FaresIntegrationTest.java | 14 +- .../fares/impl/GtfsFaresV2ServiceTest.java | 8 +- .../ext/fares/impl/HSLFareServiceTest.java | 7 +- ...reInFreeTransferWindowFareServiceTest.java | 4 +- .../flex/AreaStopsToVerticesMapperTest.java | 11 +- .../ext/flex/FlexIntegrationTest.java | 30 ++-- .../ext/flex/FlexIntegrationTestData.java | 14 +- .../ext/flex/FlexStopTimesForTest.java | 4 +- .../ext/flex/GtfsFlexTest.java | 10 +- .../ScheduledFlexPathCalculatorTest.java | 2 +- .../template/FlexTemplateFactoryTest.java | 6 +- .../ext/flex/trip/FlexTripsMapperTest.java | 4 +- .../flex/trip/ScheduledDeviatedTripTest.java | 22 +-- .../trip/UnscheduledDrivingDurationTest.java | 2 +- .../ext/flex/trip/UnscheduledTripTest.java | 13 +- .../ext/geocoder/LuceneIndexTest.java | 18 +- .../ext/geocoder/StopClusterMapperTest.java | 8 +- .../mapping/TransmodelMappingUtilTest.java | 4 +- .../RealtimeResolverTest.java | 30 ++-- .../DecorateConsolidatedStopNamesTest.java | 6 +- .../StopConsolidationModuleTest.java | 10 +- .../TestStopConsolidationModel.java | 18 +- ...efaultStopConsolidationRepositoryTest.java | 2 +- .../DefaultStopConsolidationServiceTest.java | 4 +- .../vectortiles/VectorTilesResourceTest.java | 4 +- .../vectortiles/layers/LayerFiltersTest.java | 4 +- .../layers/TestTransitService.java | 10 +- .../areastops/AreaStopPropertyMapperTest.java | 10 +- .../areastops/AreaStopsLayerBuilderTest.java | 8 +- .../DigitransitStationPropertyMapperTest.java | 14 +- .../layers/stops/RealtimeStopsLayerTest.java | 16 +- .../layers/stops/StopsLayerTest.java | 16 +- .../VehicleParkingGroupsLayerTest.java | 4 +- .../VehicleParkingsLayerTest.java | 4 +- .../ext/flex/AreaStopsToVerticesMapper.java | 16 +- .../opentripplanner/ext/flex/FlexIndex.java | 8 +- .../ext/geocoder/LuceneIndex.java | 9 +- .../geocoder/configure/GeocoderModule.java | 6 +- .../updater/azure/SiriAzureSXUpdater.java | 9 +- .../StopConsolidationModule.java | 18 +- .../StopConsolidationServiceModule.java | 7 +- .../DefaultStopConsolidationService.java | 14 +- .../DirectTransferAnalyzer.java | 12 +- .../layers/stations/StationsLayerBuilder.java | 6 +- .../apis/transmodel/TransmodelAPI.java | 8 +- .../graph_builder/GraphBuilder.java | 34 ++-- .../graph_builder/GraphStats.java | 8 +- .../model/GraphBuilderModule.java | 2 +- ...ph.java => AddTransitEntitiesToGraph.java} | 64 +++---- .../module/DirectTransferGenerator.java | 16 +- .../module/OsmBoardingLocationsModule.java | 10 +- .../RouteToCentroidStationIdsValidator.java | 10 +- .../module/StreetLinkerModule.java | 18 +- .../module/TimeZoneAdjusterModule.java | 18 +- .../module/TripPatternNamer.java | 10 +- .../module/configure/GraphBuilderFactory.java | 4 +- .../module/configure/GraphBuilderModules.java | 36 ++-- .../CalculateWorldEnvelopeModule.java | 10 +- .../module/islandpruning/PruneIslands.java | 14 +- .../gtfs/graphbuilder/GtfsModule.java | 44 ++--- .../model/TimetableSnapshot.java | 2 +- .../opentripplanner/netex/NetexBundle.java | 8 +- .../opentripplanner/netex/NetexModule.java | 30 ++-- .../netex/configure/NetexConfigure.java | 8 +- .../netex/mapping/TripMapper.java | 2 +- .../raptoradapter/transit/TransitLayer.java | 6 +- .../transit/mappers/TransitLayerMapper.java | 16 +- .../transit/mappers/TransitLayerUpdater.java | 2 +- .../opentripplanner/routing/graph/Graph.java | 4 +- .../routing/graph/SerializedGraphObject.java | 25 +-- .../DelegatingTransitAlertServiceImpl.java | 10 +- .../routing/impl/TransitAlertServiceImpl.java | 12 +- .../opentripplanner/standalone/OTPMain.java | 14 +- .../configure/ConstructApplication.java | 40 +++-- .../ConstructApplicationFactory.java | 6 +- .../standalone/configure/LoadApplication.java | 10 +- .../configure/LoadApplicationFactory.java | 4 +- .../standalone/server/MetricsLogging.java | 16 +- .../service/DefaultTransitService.java | 160 ++++++++--------- ...sitModel.java => TimetableRepository.java} | 36 ++-- ...dex.java => TimetableRepositoryIndex.java} | 24 +-- .../transit/service/TransitService.java | 8 +- .../updater/DefaultRealTimeUpdateContext.java | 10 +- .../alert/GtfsRealtimeAlertsUpdater.java | 6 +- .../configure/UpdaterConfigurator.java | 33 ++-- .../updater/siri/AddedTripBuilder.java | 2 +- .../siri/SiriTimetableSnapshotSource.java | 14 +- .../updater/siri/SiriTripPatternCache.java | 2 +- .../updater/siri/updater/SiriSXUpdater.java | 10 +- .../updater/trip/TimetableSnapshotSource.java | 24 +-- .../opentripplanner/ConstantsForTests.java | 50 +++--- .../java/org/opentripplanner/GtfsTest.java | 18 +- .../org/opentripplanner/TestOtpModel.java | 8 +- .../opentripplanner/TestServerContext.java | 12 +- .../apis/gtfs/GraphQLIntegrationTest.java | 37 ++-- .../LegacyRouteRequestMapperTest.java | 8 +- .../routerequest/RouteRequestMapperTest.java | 8 +- .../mapping/TripRequestMapperTest.java | 28 +-- .../plan/TripPlanTimePenaltyDtoTest.java | 4 +- .../resources/PlannerResourceTest.java | 8 +- .../module/DirectTransferGeneratorTest.java | 56 +++--- .../graph_builder/module/GtfsModuleTest.java | 23 +-- .../OsmBoardingLocationsModuleTest.java | 14 +- .../module/StreetLinkerModuleTest.java | 16 +- .../module/TestStreetLinkerModule.java | 4 +- .../module/VehicleParkingLinkingTest.java | 18 +- .../CalculateWorldEnvelopeModuleTest.java | 4 +- .../islandpruning/IslandPruningUtils.java | 10 +- .../islandpruning/SubgraphOnlyFerryTest.java | 4 +- .../module/linking/LinkingTest.java | 14 +- .../module/linking/TestGraph.java | 12 +- .../module/osm/UnconnectedAreasTest.java | 6 +- .../GenerateTripPatternsOperationTest.java | 24 +-- .../interlining/InterlineProcessorTest.java | 8 +- .../gtfs/mapping/AgencyMapperTest.java | 6 +- .../gtfs/mapping/BoardingAreaMapperTest.java | 4 +- .../gtfs/mapping/RouteMapperTest.java | 4 +- .../vector/VectorTileResponseFactoryTest.java | 4 +- .../model/ShapeGeometryTest.java | 6 +- .../model/TimetableSnapshotTest.java | 8 +- .../opentripplanner/model/TimetableTest.java | 8 +- .../model/TripPatternTest.java | 6 +- .../model/TripTimeOnDateTest.java | 6 +- .../CalendarServiceDataFactoryImplTest.java | 8 +- ...pTransitServiceBuilderLimitPeriodTest.java | 20 +-- .../impl/OtpTransitServiceBuilderTest.java | 6 +- .../model/impl/OtpTransitServiceImplTest.java | 12 +- .../model/plan/ItineraryTest.java | 6 +- .../opentripplanner/model/plan/PlaceTest.java | 4 +- .../model/plan/PlanTestConstants.java | 22 +-- .../plan/ScheduledTransitLegBuilderTest.java | 4 +- .../model/plan/ScheduledTransitLegTest.java | 12 +- .../model/plan/TestItineraryBuilder.java | 10 +- .../LegReferenceSerializerTest.java | 8 +- .../ScheduledTransitLegReferenceTest.java | 43 +++-- .../plan/paging/cursor/PageCursorTest.java | 4 +- .../model/transfer/TransferTestData.java | 18 +- .../netex/mapping/FlexStopsMapperTest.java | 4 +- .../mapping/MultiModalStationMapperTest.java | 9 +- .../netex/mapping/NetexTestDataSample.java | 6 +- .../mapping/NoticeAssignmentMapperTest.java | 6 +- .../netex/mapping/RouteMapperTest.java | 10 +- .../netex/mapping/StopTimesMapperTest.java | 4 +- .../netex/mapping/TripMapperTest.java | 10 +- .../netex/mapping/TripPatternMapperTest.java | 4 +- .../calendar/CalendarServiceBuilderTest.java | 14 +- .../moduletests/D03_UnpreferredRouteTest.java | 16 +- .../routing/TestHalfEdges.java | 20 ++- .../routing/algorithm/FilterTest.java | 162 +++++++++--------- .../routing/algorithm/GraphRoutingTest.java | 38 ++-- .../algorithm/StreetModeLinkingTest.java | 12 +- .../routing/algorithm/TestBanning.java | 30 ++-- .../ItineraryListFilterChainTest.java | 4 +- .../filters/system/PagingFilterTest.java | 4 +- .../system/SingleCriteriaComparatorTest.java | 4 +- .../filters/system/mcmax/ItemTest.java | 4 +- .../system/mcmax/McMaxLimitFilterTest.java | 4 +- .../transit/TransitAlertFilterTest.java | 4 +- .../groupids/GroupByAllSameStationsTest.java | 4 +- .../GroupBySameRoutesAndStopsTest.java | 6 +- .../RaptorPathToItineraryMapperTest.java | 14 +- .../algorithm/mapping/SnapshotTestBase.java | 3 +- .../transit/TransitLayerTest.java | 10 +- .../transit/TripPatternForDateTest.java | 10 +- .../ConstrainedBoardingSearchTest.java | 4 +- .../cost/PatternCostCalculatorTest.java | 8 +- .../GeneralizedCostParametersMapperTest.java | 6 +- .../mappers/RaptorRequestMapperTest.java | 4 +- .../mappers/TransitLayerMapperTest.java | 4 +- .../mappers/TripPatternForDateMapperTest.java | 6 +- ...rRoutingRequestTransitDataCreatorTest.java | 10 +- ...eRequestTransitDataProviderFilterTest.java | 35 ++-- .../transit/request/TestRouteData.java | 13 +- .../transit/request/TestTransitCaseData.java | 4 +- .../services/TestTransferBuilder.java | 4 +- .../algorithm/via/ViaRoutingWorkerTest.java | 4 +- .../routing/core/ItineraryFaresTest.java | 2 +- .../graph/DefaultRoutingServiceTest.java | 2 +- .../routing/graph/GraphSerializationTest.java | 31 ++-- .../graphfinder/DirectGraphFinderTest.java | 2 +- .../routing/graphfinder/NearbyStopTest.java | 4 +- .../PlaceFinderTraverseVisitorTest.java | 14 +- .../StopFinderTraverseVisitorTest.java | 4 +- .../graphfinder/StreetGraphFinderTest.java | 10 +- .../linking/LinkStopToPlatformTest.java | 12 +- .../stoptimes/AlternativeLegsTest.java | 8 +- .../stoptimes/StopTimesHelperTest.java | 14 +- .../trippattern/FrequencyEntryTest.java | 8 +- .../VehicleParkingTestGraphData.java | 10 +- .../service/paging/TestPagingModel.java | 4 +- .../DefaultRealtimeVehicleServiceTest.java | 20 ++- .../integration/BarrierRoutingTest.java | 2 +- .../integration/BicycleRoutingTest.java | 4 +- .../street/integration/WalkRoutingTest.java | 4 +- .../model/_data/StreetModelForTest.java | 2 +- .../edge/StreetTransitEntityLinkTest.java | 4 +- .../edge/StreetVehicleParkingLinkTest.java | 2 +- .../model/edge/VehicleParkingEdgeTest.java | 6 +- .../street/model/vertex/OsmVertexTest.java | 4 +- .../StreetSearchRequestMapperTest.java | 6 +- .../street/search/state/TestStateBuilder.java | 4 +- ... TimetableRepositoryArchitectureTest.java} | 2 +- .../transit/model/_data/PatternTestModel.java | 17 +- ...t.java => TimetableRepositoryForTest.java} | 8 +- .../transit/model/basic/NoticeTest.java | 6 +- .../model/framework/EntityByIdTest.java | 6 +- .../model/network/GroupOfRoutesTest.java | 6 +- .../transit/model/network/RouteTest.java | 12 +- .../model/network/StopPatternTest.java | 8 +- .../model/network/TripPatternTest.java | 12 +- .../grouppriority/TripAdapterTest.java | 4 +- .../model/organization/AgencyTest.java | 6 +- .../model/organization/BrandingTest.java | 6 +- .../model/organization/OperatorTest.java | 6 +- .../transit/model/site/AreaStopTest.java | 8 +- .../transit/model/site/BoardingAreaTest.java | 11 +- .../transit/model/site/EntranceTest.java | 8 +- .../transit/model/site/FareZoneTest.java | 6 +- .../model/site/GroupOfStationsTest.java | 8 +- .../transit/model/site/GroupStopTest.java | 17 +- .../model/site/MultiModalStationTest.java | 8 +- .../transit/model/site/PathwayNodeTest.java | 8 +- .../transit/model/site/PathwayTest.java | 10 +- .../transit/model/site/RegularStopTest.java | 15 +- .../transit/model/site/StationTest.java | 15 +- .../timetable/RealTimeTripTimesTest.java | 18 +- .../timetable/ScheduledTripTimesTest.java | 6 +- .../model/timetable/StopTimeKeyTest.java | 6 +- .../TimetableValidationErrorTest.java | 4 +- .../timetable/TripOnServiceDateTest.java | 14 +- .../transit/model/timetable/TripTest.java | 12 +- .../service/DefaultTransitServiceTest.java | 21 ++- .../transit/service/StopModelTest.java | 4 +- ...Test.java => TimetableRepositoryTest.java} | 38 ++-- .../speed_test/SpeedIntegrationTest.java | 2 +- .../transit/speed_test/SpeedTest.java | 46 ++--- .../support/AssertSpeedTestSetup.java | 6 +- .../GtfsRealtimeFuzzyTripMatcherTest.java | 4 +- .../alert/AlertsUpdateHandlerTest.java | 6 +- .../updater/siri/AddedTripBuilderTest.java | 34 ++-- .../updater/siri/ModifiedTripBuilderTest.java | 58 ++++--- .../siri/SiriAlertsUpdateHandlerTest.java | 15 +- .../siri/SiriTimetableSnapshotSourceTest.java | 2 +- .../updater/trip/RealtimeTestConstants.java | 12 +- .../updater/trip/RealtimeTestEnvironment.java | 24 +-- .../trip/RealtimeTestEnvironmentBuilder.java | 37 ++-- .../trip/TimetableSnapshotManagerTest.java | 15 +- .../trip/TimetableSnapshotSourceTest.java | 10 +- .../trip/moduletests/addition/AddedTest.java | 10 +- .../CancellationDeletionTest.java | 2 +- .../trip/moduletests/delay/DelayedTest.java | 2 +- .../trip/moduletests/delay/SkippedTest.java | 2 +- ...VehicleParkingAvailabilityUpdaterTest.java | 6 +- .../VehicleParkingUpdaterTest.java | 20 ++- .../RealtimeVehicleMatcherTest.java | 42 ++--- .../GeofencingVertexUpdaterTest.java | 2 +- .../VehicleRentalUpdaterTest.java | 7 +- 262 files changed, 1766 insertions(+), 1596 deletions(-) rename application/src/main/java/org/opentripplanner/graph_builder/module/{AddTransitModelEntitiesToGraph.java => AddTransitEntitiesToGraph.java} (86%) rename application/src/main/java/org/opentripplanner/transit/service/{TransitModel.java => TimetableRepository.java} (93%) rename application/src/main/java/org/opentripplanner/transit/service/{TransitModelIndex.java => TimetableRepositoryIndex.java} (90%) rename application/src/test/java/org/opentripplanner/transit/model/{TransitModelArchitectureTest.java => TimetableRepositoryArchitectureTest.java} (98%) rename application/src/test/java/org/opentripplanner/transit/model/_data/{TransitModelForTest.java => TimetableRepositoryForTest.java} (97%) rename application/src/test/java/org/opentripplanner/transit/service/{TransitModelTest.java => TimetableRepositoryTest.java} (71%) diff --git a/application/src/ext-test/java/org/opentripplanner/ext/emissions/EmissionsTest.java b/application/src/ext-test/java/org/opentripplanner/ext/emissions/EmissionsTest.java index 51bf5f344f6..c26ec7c636a 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/emissions/EmissionsTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/emissions/EmissionsTest.java @@ -3,7 +3,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; import static org.opentripplanner.model.plan.Itinerary.createScheduledTransitItinerary; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.time.OffsetDateTime; import java.time.ZonedDateTime; @@ -21,7 +21,7 @@ import org.opentripplanner.model.plan.ScheduledTransitLegBuilder; import org.opentripplanner.model.plan.StreetLeg; import org.opentripplanner.street.search.TraverseMode; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.FeedScopedId; @@ -46,9 +46,13 @@ class EmissionsTest { .withEndTime(TIME.plusHours(1)) .build(); - private static final Route ROUTE_WITH_EMISSIONS = TransitModelForTest.route(id("1")).build(); - private static final Route ROUTE_WITH_ZERO_EMISSIONS = TransitModelForTest.route(id("2")).build(); - private static final Route ROUTE_WITHOUT_EMISSIONS_CONFIGURED = TransitModelForTest + private static final Route ROUTE_WITH_EMISSIONS = TimetableRepositoryForTest + .route(id("1")) + .build(); + private static final Route ROUTE_WITH_ZERO_EMISSIONS = TimetableRepositoryForTest + .route(id("2")) + .build(); + private static final Route ROUTE_WITHOUT_EMISSIONS_CONFIGURED = TimetableRepositoryForTest .route(id("3")) .build(); @@ -119,12 +123,15 @@ private ScheduledTransitLeg createTransitLeg(Route route) { var stoptime = new StopTime(); var stopTimes = new ArrayList(); stopTimes.add(stoptime); - var testModel = TransitModelForTest.of(); + var testModel = TimetableRepositoryForTest.of(); var stopOne = testModel.stop("1:stop1", 60, 25).build(); var stopTwo = testModel.stop("1:stop1", 61, 25).build(); var stopThree = testModel.stop("1:stop1", 62, 25).build(); - var stopPattern = TransitModelForTest.stopPattern(stopOne, stopTwo, stopThree); - var pattern = TransitModelForTest.tripPattern("1", route).withStopPattern(stopPattern).build(); + var stopPattern = TimetableRepositoryForTest.stopPattern(stopOne, stopTwo, stopThree); + var pattern = TimetableRepositoryForTest + .tripPattern("1", route) + .withStopPattern(stopPattern) + .build(); var trip = Trip .of(FeedScopedId.parse("FOO:BAR")) .withMode(TransitMode.BUS) diff --git a/application/src/ext-test/java/org/opentripplanner/ext/fares/FaresFilterTest.java b/application/src/ext-test/java/org/opentripplanner/ext/fares/FaresFilterTest.java index ac11886c208..b897f3aa78f 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/fares/FaresFilterTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/fares/FaresFilterTest.java @@ -2,7 +2,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.opentripplanner.model.plan.TestItineraryBuilder.newItinerary; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.util.List; import org.junit.jupiter.api.Test; @@ -13,12 +13,12 @@ import org.opentripplanner.model.plan.Place; import org.opentripplanner.model.plan.PlanTestConstants; import org.opentripplanner.routing.fares.FareService; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.Money; public class FaresFilterTest implements PlanTestConstants { - private final TransitModelForTest testModel = TransitModelForTest.of(); + private final TimetableRepositoryForTest testModel = TimetableRepositoryForTest.of(); @Test void shouldAddFare() { diff --git a/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/CombinedInterlinedLegsFareServiceTest.java b/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/CombinedInterlinedLegsFareServiceTest.java index 407cd0f11e9..f1dabd0948c 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/CombinedInterlinedLegsFareServiceTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/CombinedInterlinedLegsFareServiceTest.java @@ -22,13 +22,13 @@ import org.opentripplanner.model.plan.Place; import org.opentripplanner.model.plan.PlanTestConstants; import org.opentripplanner.routing.core.FareType; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.Money; import org.opentripplanner.transit.model.network.Route; class CombinedInterlinedLegsFareServiceTest implements PlanTestConstants { - static final Route route = TransitModelForTest.route("route-1").build(); + static final Route route = TimetableRepositoryForTest.route("route-1").build(); static final Itinerary interlinedWithDifferentRoute = newItinerary( Place.forStop(AIRPORT_STOP), T11_00 diff --git a/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/DefaultFareServiceTest.java b/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/DefaultFareServiceTest.java index cae23f60800..788c1c9b6d6 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/DefaultFareServiceTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/DefaultFareServiceTest.java @@ -24,7 +24,7 @@ import org.opentripplanner.model.plan.Place; import org.opentripplanner.model.plan.PlanTestConstants; import org.opentripplanner.routing.core.FareType; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.Money; class DefaultFareServiceTest implements PlanTestConstants { @@ -116,7 +116,7 @@ void shouldNotCombineInterlinedLegs() { var itin = newItinerary(Place.forStop(AIRPORT_STOP), T11_00) .bus(1, T11_05, T11_12, Place.forStop(CITY_CENTER_A_STOP)) .staySeatedBus( - TransitModelForTest.route("123").build(), + TimetableRepositoryForTest.route("123").build(), 2, T11_12, T11_16, 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 e498588d00f..d9325d139a8 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 @@ -1,13 +1,12 @@ package org.opentripplanner.ext.fares.impl; -import static org.opentripplanner.transit.model._data.TransitModelForTest.OTHER_FEED_AGENCY; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.OTHER_FEED_AGENCY; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import org.opentripplanner.ext.fares.model.FareAttribute; import org.opentripplanner.ext.fares.model.FareRuleSet; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.transit.model.basic.Money; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.FeedScopedId; diff --git a/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/FaresIntegrationTest.java b/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/FaresIntegrationTest.java index 7b822b03059..f5ad2b471ab 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/FaresIntegrationTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/FaresIntegrationTest.java @@ -22,7 +22,7 @@ import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.standalone.api.OtpServerRequestContext; import org.opentripplanner.transit.model.basic.Money; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; public class FaresIntegrationTest { @@ -30,11 +30,11 @@ public class FaresIntegrationTest { public void testBasic() { TestOtpModel model = ConstantsForTests.buildGtfsGraph(ConstantsForTests.CALTRAIN_GTFS); var graph = model.graph(); - var transitModel = model.transitModel(); + var timetableRepository = model.timetableRepository(); - var feedId = transitModel.getFeedIds().iterator().next(); + var feedId = timetableRepository.getFeedIds().iterator().next(); - var serverContext = TestServerContext.createServerContext(graph, transitModel); + var serverContext = TestServerContext.createServerContext(graph, timetableRepository); var start = LocalDateTime .of(2009, Month.AUGUST, 7, 12, 0, 0) @@ -53,10 +53,10 @@ public void testBasic() { public void testPortland() { TestOtpModel model = ConstantsForTests.getInstance().getCachedPortlandGraph(); Graph graph = model.graph(); - TransitModel transitModel = model.transitModel(); - var portlandId = transitModel.getFeedIds().iterator().next(); + TimetableRepository timetableRepository = model.timetableRepository(); + var portlandId = timetableRepository.getFeedIds().iterator().next(); - var serverContext = TestServerContext.createServerContext(graph, transitModel); + var serverContext = TestServerContext.createServerContext(graph, timetableRepository); // from zone 3 to zone 2 var from = GenericLocation.fromStopId( diff --git a/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/GtfsFaresV2ServiceTest.java b/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/GtfsFaresV2ServiceTest.java index c209bc22192..19b55489778 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/GtfsFaresV2ServiceTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/GtfsFaresV2ServiceTest.java @@ -2,8 +2,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.opentripplanner.model.plan.TestItineraryBuilder.newItinerary; -import static org.opentripplanner.transit.model._data.TransitModelForTest.FEED_ID; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.FEED_ID; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import com.google.common.collect.Multimaps; import java.time.Duration; @@ -22,13 +22,13 @@ import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.Place; import org.opentripplanner.model.plan.PlanTestConstants; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.Money; import org.opentripplanner.transit.model.framework.FeedScopedId; class GtfsFaresV2ServiceTest implements PlanTestConstants { - private final TransitModelForTest testModel = TransitModelForTest.of(); + private final TimetableRepositoryForTest testModel = TimetableRepositoryForTest.of(); FeedScopedId LEG_GROUP1 = id("leg-group1"); FeedScopedId LEG_GROUP2 = id("leg-group2"); diff --git a/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/HSLFareServiceTest.java b/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/HSLFareServiceTest.java index 17c381f1bd6..072e8a5a4fe 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/HSLFareServiceTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/HSLFareServiceTest.java @@ -1,10 +1,9 @@ package org.opentripplanner.ext.fares.impl; import static org.junit.jupiter.api.Assertions.assertArrayEquals; -import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.opentripplanner.model.plan.TestItineraryBuilder.newItinerary; -import static org.opentripplanner.transit.model._data.TransitModelForTest.FEED_ID; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.FEED_ID; import static org.opentripplanner.transit.model.basic.Money.euros; import java.util.LinkedList; @@ -21,7 +20,7 @@ import org.opentripplanner.model.plan.PlanTestConstants; import org.opentripplanner.routing.core.FareType; import org.opentripplanner.routing.fares.FareService; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.Money; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.FeedScopedId; @@ -76,7 +75,7 @@ private static List createTestCases() { FareZone C = FareZone.of(new FeedScopedId(FEED_ID, "C")).build(); FareZone D = FareZone.of(new FeedScopedId(FEED_ID, "D")).build(); - var testModel = TransitModelForTest.of(); + var testModel = TimetableRepositoryForTest.of(); Place A1 = testModel.place("A1", sb -> sb.withCoordinate(10.0, 12.0).addFareZones(A)); Place A2 = testModel.place("A2", sb -> sb.withCoordinate(10.0, 12.0).addFareZones(A)); diff --git a/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/HighestFareInFreeTransferWindowFareServiceTest.java b/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/HighestFareInFreeTransferWindowFareServiceTest.java index e9aa17ba35f..c65db6c3a9f 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/HighestFareInFreeTransferWindowFareServiceTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/fares/impl/HighestFareInFreeTransferWindowFareServiceTest.java @@ -3,8 +3,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.opentripplanner.model.plan.TestItineraryBuilder.newItinerary; -import static org.opentripplanner.transit.model._data.TransitModelForTest.FEED_ID; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.FEED_ID; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.time.Duration; import java.util.LinkedList; 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 67eb7e3ed93..1e7ff64c5dd 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 @@ -19,15 +19,15 @@ import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.street.model.StreetTraversalPermission; import org.opentripplanner.street.model._data.StreetModelForTest; -import org.opentripplanner.transit.model._data.TransitModelForTest; +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.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; class AreaStopsToVerticesMapperTest { - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final AreaStop BERLIN_AREA_STOP = TEST_MODEL .areaStop("berlin") @@ -38,7 +38,10 @@ class AreaStopsToVerticesMapperTest { .withAreaStop(AreaStopsToVerticesMapperTest.BERLIN_AREA_STOP) .build(); - public static final TransitModel TRANSIT_MODEL = new TransitModel(STOP_MODEL, new Deduplicator()); + public static final TimetableRepository TRANSIT_MODEL = new TimetableRepository( + STOP_MODEL, + new Deduplicator() + ); static List testCases() { return List.of( 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 56d66081e35..cac0707af92 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 @@ -33,7 +33,7 @@ import org.opentripplanner.routing.api.request.framework.TimeAndCostPenalty; import org.opentripplanner.routing.api.request.request.filter.AllowAllTransitFilter; import org.opentripplanner.routing.graph.Graph; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; /** * This test checks the combination of transit and flex works. @@ -48,7 +48,7 @@ public class FlexIntegrationTest { static Graph graph; - static TransitModel transitModel; + static TimetableRepository timetableRepository; static RoutingService service; @@ -57,23 +57,23 @@ static void setup() { OTPFeature.enableFeatures(Map.of(OTPFeature.FlexRouting, true)); TestOtpModel model = FlexIntegrationTestData.cobbOsm(); graph = model.graph(); - transitModel = model.transitModel(); + timetableRepository = model.timetableRepository(); addGtfsToGraph( graph, - transitModel, + timetableRepository, List.of( FlexIntegrationTestData.COBB_BUS_30_GTFS, FlexIntegrationTestData.MARTA_BUS_856_GTFS, FlexIntegrationTestData.COBB_FLEX_GTFS ) ); - service = TestServerContext.createServerContext(graph, transitModel).routingService(); + service = TestServerContext.createServerContext(graph, timetableRepository).routingService(); } @Test void addFlexTripsAndPatternsToGraph() { - assertFalse(transitModel.getAllTripPatterns().isEmpty()); + assertFalse(timetableRepository.getAllTripPatterns().isEmpty()); } @Test @@ -176,22 +176,26 @@ static void teardown() { OTPFeature.enableFeatures(Map.of(OTPFeature.FlexRouting, false)); } - private static void addGtfsToGraph(Graph graph, TransitModel transitModel, List gtfsFiles) { + private static void addGtfsToGraph( + Graph graph, + TimetableRepository timetableRepository, + List gtfsFiles + ) { // GTFS var gtfsBundles = gtfsFiles.stream().map(GtfsBundle::new).toList(); GtfsModule gtfsModule = new GtfsModule( gtfsBundles, - transitModel, + timetableRepository, graph, ServiceDateInterval.unbounded() ); gtfsModule.buildGraph(); // link stations to streets - TestStreetLinkerModule.link(graph, transitModel); + TestStreetLinkerModule.link(graph, timetableRepository); // link flex locations to streets - new AreaStopsToVerticesMapper(graph, transitModel).buildGraph(); + new AreaStopsToVerticesMapper(graph, timetableRepository).buildGraph(); // generate direct transfers var req = new RouteRequest(); @@ -199,15 +203,15 @@ private static void addGtfsToGraph(Graph graph, TransitModel transitModel, List< // we don't have a complete coverage of the entire area so use straight lines for transfers new DirectTransferGenerator( graph, - transitModel, + timetableRepository, DataImportIssueStore.NOOP, Duration.ofMinutes(10), List.of(req) ) .buildGraph(); - transitModel.index(); - graph.index(transitModel.getStopModel()); + timetableRepository.index(); + graph.index(timetableRepository.getStopModel()); } 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 d3f4f7a62e8..a1d41cdebb5 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 @@ -16,7 +16,7 @@ import org.opentripplanner.test.support.ResourceLoader; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.service.StopModel; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; public final class FlexIntegrationTestData { @@ -43,20 +43,20 @@ public static TestOtpModel cobbOsm() { private static TestOtpModel buildFlexGraph(File file) { var deduplicator = new Deduplicator(); var graph = new Graph(deduplicator); - var transitModel = new TransitModel(new StopModel(), deduplicator); + var timetableRepository = new TimetableRepository(new StopModel(), deduplicator); GtfsBundle gtfsBundle = new GtfsBundle(file); GtfsModule module = new GtfsModule( List.of(gtfsBundle), - transitModel, + timetableRepository, graph, new ServiceDateInterval(LocalDate.of(2021, 1, 1), LocalDate.of(2022, 1, 1)) ); OTPFeature.enableFeatures(Map.of(OTPFeature.FlexRouting, true)); module.buildGraph(); - transitModel.index(); - graph.index(transitModel.getStopModel()); + timetableRepository.index(); + graph.index(timetableRepository.getStopModel()); OTPFeature.enableFeatures(Map.of(OTPFeature.FlexRouting, false)); - assertTrue(transitModel.hasFlexTrips()); - return new TestOtpModel(graph, transitModel); + assertTrue(timetableRepository.hasFlexTrips()); + return new TestOtpModel(graph, timetableRepository); } } 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 8437a62e6da..acf0d3b2699 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 @@ -5,13 +5,13 @@ import org.opentripplanner._support.geometry.Polygons; import org.opentripplanner.framework.time.TimeUtils; import org.opentripplanner.model.StopTime; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.StopLocation; public class FlexStopTimesForTest { - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final StopLocation AREA_STOP = TEST_MODEL .areaStop("area") .withGeometry(Polygons.BERLIN) diff --git a/application/src/ext-test/java/org/opentripplanner/ext/flex/GtfsFlexTest.java b/application/src/ext-test/java/org/opentripplanner/ext/flex/GtfsFlexTest.java index e116831e2d3..4bd042d332c 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/flex/GtfsFlexTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/flex/GtfsFlexTest.java @@ -11,7 +11,7 @@ import org.opentripplanner.ext.flex.trip.FlexTrip; import org.opentripplanner.ext.flex.trip.UnscheduledTrip; import org.opentripplanner.transit.model.framework.FeedScopedId; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; /** * This test makes sure that one of the example feeds in the GTFS-Flex repo works. It's the City of @@ -23,17 +23,17 @@ */ class GtfsFlexTest { - private static TransitModel transitModel; + private static TimetableRepository timetableRepository; @BeforeAll static void setup() { TestOtpModel model = FlexIntegrationTestData.aspenGtfs(); - transitModel = model.transitModel(); + timetableRepository = model.timetableRepository(); } @Test void parseAspenTaxiAsUnscheduledTrip() { - var flexTrips = transitModel.getAllFlexTrips(); + var flexTrips = timetableRepository.getAllFlexTrips(); assertFalse(flexTrips.isEmpty()); assertEquals( Set.of("t_1289262_b_29084_tn_0", "t_1289257_b_28352_tn_0"), @@ -48,6 +48,6 @@ void parseAspenTaxiAsUnscheduledTrip() { @Test void shouldGeneratePatternForFlexTripWithSingleStop() { - assertFalse(transitModel.getAllTripPatterns().isEmpty()); + assertFalse(timetableRepository.getAllTripPatterns().isEmpty()); } } diff --git a/application/src/ext-test/java/org/opentripplanner/ext/flex/flexpathcalculator/ScheduledFlexPathCalculatorTest.java b/application/src/ext-test/java/org/opentripplanner/ext/flex/flexpathcalculator/ScheduledFlexPathCalculatorTest.java index 985ca5a9898..e6fddb07cf8 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/flex/flexpathcalculator/ScheduledFlexPathCalculatorTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/flex/flexpathcalculator/ScheduledFlexPathCalculatorTest.java @@ -5,7 +5,7 @@ import static org.opentripplanner.ext.flex.FlexStopTimesForTest.regularStopTime; import static org.opentripplanner.street.model._data.StreetModelForTest.V1; import static org.opentripplanner.street.model._data.StreetModelForTest.V2; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.time.Duration; import java.util.List; 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 8c73d0901ff..cdb8bb8ff4e 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 @@ -30,7 +30,7 @@ import org.opentripplanner.street.model.vertex.StreetLocation; import org.opentripplanner.street.search.request.StreetSearchRequest; import org.opentripplanner.street.search.state.State; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.model.timetable.Trip; @@ -38,7 +38,7 @@ class FlexTemplateFactoryTest { - private static final TransitModelForTest MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest MODEL = TimetableRepositoryForTest.of(); /** * This is pass-through information @@ -78,7 +78,7 @@ class FlexTemplateFactoryTest { private static final StopLocation GROUP_STOP_12 = MODEL.groupStop("G", STOP_G1, STOP_G2); private static final StopLocation GROUP_STOP_34 = MODEL.groupStop("G", STOP_G3, STOP_G4); - private static final Trip TRIP = TransitModelForTest.trip("Trip").build(); + private static final Trip TRIP = TimetableRepositoryForTest.trip("Trip").build(); private static final int T_10_00 = time("10:00"); private static final int T_10_10 = time("10:10"); private static final int T_10_20 = time("10:20"); 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 fad9e98e254..73364caccf1 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 @@ -11,7 +11,7 @@ import org.opentripplanner.ext.flex.flexpathcalculator.DirectFlexPathCalculator; import org.opentripplanner.model.StopTime; import org.opentripplanner.model.impl.OtpTransitServiceBuilder; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.service.StopModel; class FlexTripsMapperTest { @@ -30,7 +30,7 @@ void defaultTimePenalty() { private static StopTime stopTime(int seq) { var st = FlexStopTimesForTest.area("08:00", "18:00"); - st.setTrip(TransitModelForTest.trip("flex-1").build()); + st.setTrip(TimetableRepositoryForTest.trip("flex-1").build()); st.setStopSequence(seq); return st; } 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 6466d7bf6d6..4c77ecc6134 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 @@ -44,7 +44,7 @@ import org.opentripplanner.transit.model.network.grouppriority.TransitGroupPriorityService; import org.opentripplanner.transit.model.site.AreaStop; import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; /** * This tests that the feed for the Cobb County Flex service is processed correctly. This service @@ -56,13 +56,13 @@ class ScheduledDeviatedTripTest { static Graph graph; - static TransitModel transitModel; + static TimetableRepository timetableRepository; float delta = 0.01f; @Test void parseCobbCountyAsScheduledDeviatedTrip() { - var flexTrips = transitModel.getAllFlexTrips(); + var flexTrips = timetableRepository.getAllFlexTrips(); assertFalse(flexTrips.isEmpty()); assertEquals(72, flexTrips.size()); @@ -101,7 +101,7 @@ void calculateDirectFare() { var router = new FlexRouter( graph, - new DefaultTransitService(transitModel), + new DefaultTransitService(timetableRepository), FlexParameters.defaultValues(), OffsetDateTime.parse("2021-11-12T10:15:24-05:00").toInstant(), null, @@ -134,9 +134,9 @@ void calculateDirectFare() { */ @Test void flexTripInTransitMode() { - var feedId = transitModel.getFeedIds().iterator().next(); + var feedId = timetableRepository.getFeedIds().iterator().next(); - var serverContext = TestServerContext.createServerContext(graph, transitModel); + var serverContext = TestServerContext.createServerContext(graph, timetableRepository); // from zone 3 to zone 2 var from = GenericLocation.fromStopId("Transfer Point for Route 30", feedId, "cujv"); @@ -177,8 +177,8 @@ void flexTripInTransitMode() { */ @Test void shouldNotInterpolateFlexTimes() { - var feedId = transitModel.getFeedIds().iterator().next(); - var pattern = transitModel.getTripPatternForId(new FeedScopedId(feedId, "090z:0:01")); + var feedId = timetableRepository.getFeedIds().iterator().next(); + var pattern = timetableRepository.getTripPatternForId(new FeedScopedId(feedId, "090z:0:01")); assertEquals(3, pattern.numberOfStops()); @@ -192,7 +192,7 @@ void shouldNotInterpolateFlexTimes() { static void setup() { TestOtpModel model = FlexIntegrationTestData.cobbFlexGtfs(); graph = model.graph(); - transitModel = model.transitModel(); + timetableRepository = model.timetableRepository(); } private static List getItineraries( @@ -248,8 +248,8 @@ private static NearbyStop getNearbyStop(FlexTrip trip, String id) { } private static FlexTrip getFlexTrip() { - var feedId = transitModel.getFeedIds().iterator().next(); + var feedId = timetableRepository.getFeedIds().iterator().next(); var tripId = new FeedScopedId(feedId, "a326c618-d42c-4bd1-9624-c314fbf8ecd8"); - return transitModel.getFlexTrip(tripId); + return timetableRepository.getFlexTrip(tripId); } } diff --git a/application/src/ext-test/java/org/opentripplanner/ext/flex/trip/UnscheduledDrivingDurationTest.java b/application/src/ext-test/java/org/opentripplanner/ext/flex/trip/UnscheduledDrivingDurationTest.java index f19478af629..f6fd43595a9 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/flex/trip/UnscheduledDrivingDurationTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/flex/trip/UnscheduledDrivingDurationTest.java @@ -3,7 +3,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.opentripplanner.street.model._data.StreetModelForTest.V1; import static org.opentripplanner.street.model._data.StreetModelForTest.V2; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.time.Duration; import java.util.List; 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 6280095b6be..d235dd5a950 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 @@ -3,14 +3,11 @@ 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.ext.flex.FlexStopTimesForTest.area; -import static org.opentripplanner.ext.flex.FlexStopTimesForTest.regularArrival; -import static org.opentripplanner.ext.flex.FlexStopTimesForTest.regularDeparture; import static org.opentripplanner.ext.flex.trip.UnscheduledTrip.isUnscheduledTrip; import static org.opentripplanner.ext.flex.trip.UnscheduledTripTest.TestCase.tc; import static org.opentripplanner.model.PickDrop.NONE; import static org.opentripplanner.model.StopTime.MISSING_VALUE; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.util.Collections; import java.util.List; @@ -25,9 +22,7 @@ import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.model.PickDrop; import org.opentripplanner.model.StopTime; -import org.opentripplanner.routing.graphfinder.NearbyStop; -import org.opentripplanner.transit.model._data.TransitModelForTest; -import org.opentripplanner.transit.model.site.AreaStop; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.StopLocation; @@ -41,7 +36,7 @@ class UnscheduledTripTest { private static final int T14_00 = TimeUtils.hm2time(14, 0); private static final int T15_00 = TimeUtils.hm2time(15, 0); - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final RegularStop REGULAR_STOP = TEST_MODEL.stop("stop").build(); @@ -56,7 +51,7 @@ class IsUnscheduledTrip { private static final StopTime CONTINUOUS_DROP_OFF_STOP = new StopTime(); static { - var trip = TransitModelForTest.trip("flex").build(); + var trip = TimetableRepositoryForTest.trip("flex").build(); SCHEDULED_STOP.setArrivalTime(30); SCHEDULED_STOP.setDepartureTime(60); SCHEDULED_STOP.setStop(AREA_STOP); 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 de6e600037c..9d90cbb5f26 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 @@ -1,7 +1,7 @@ package org.opentripplanner.ext.geocoder; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import static org.opentripplanner.transit.model.basic.TransitMode.BUS; import static org.opentripplanner.transit.model.basic.TransitMode.FERRY; @@ -21,7 +21,7 @@ import org.opentripplanner.ext.stopconsolidation.internal.DefaultStopConsolidationRepository; import org.opentripplanner.ext.stopconsolidation.internal.DefaultStopConsolidationService; import org.opentripplanner.model.FeedInfo; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.FeedScopedId; @@ -31,11 +31,11 @@ import org.opentripplanner.transit.model.site.Station; import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; class LuceneIndexTest { - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); static final Agency BVG = Agency .of(id("bvg")) @@ -126,9 +126,9 @@ static void setup() { List .of(ALEXANDERPLATZ_STATION, BERLIN_HAUPTBAHNHOF_STATION, FIVE_POINTS_STATION) .forEach(stopModel::withStation); - var transitModel = new TransitModel(stopModel.build(), new Deduplicator()); - transitModel.index(); - var transitService = new DefaultTransitService(transitModel) { + var timetableRepository = new TimetableRepository(stopModel.build(), new Deduplicator()); + timetableRepository.index(); + var transitService = new DefaultTransitService(timetableRepository) { private final Multimap modes = ImmutableMultimap .builder() .putAll(WESTHAFEN, FERRY, BUS) @@ -153,7 +153,7 @@ public Agency getAgencyForId(FeedScopedId id) { @Override public Set getRoutesForStop(StopLocation stop) { - return Set.of(TransitModelForTest.route("route1").withAgency(BVG).build()); + return Set.of(TimetableRepositoryForTest.route("route1").withAgency(BVG).build()); } @Override @@ -171,7 +171,7 @@ public FeedInfo getFeedInfo(String feedId) { }; var stopConsolidationService = new DefaultStopConsolidationService( new DefaultStopConsolidationRepository(), - transitModel + timetableRepository ); index = new LuceneIndex(transitService, stopConsolidationService); mapper = new StopClusterMapper(transitService, stopConsolidationService); 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 578f7d4118f..b98de173817 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 @@ -7,17 +7,17 @@ import org.opentripplanner.ext.stopconsolidation.internal.DefaultStopConsolidationRepository; import org.opentripplanner.ext.stopconsolidation.internal.DefaultStopConsolidationService; import org.opentripplanner.ext.stopconsolidation.model.ConsolidatedStopGroup; -import org.opentripplanner.transit.model._data.TransitModelForTest; +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.model.site.StopLocation; import org.opentripplanner.transit.service.DefaultTransitService; import org.opentripplanner.transit.service.StopModel; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; class StopClusterMapperTest { - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final RegularStop STOP_A = TEST_MODEL.stop("A").build(); private static final RegularStop STOP_B = TEST_MODEL.stop("B").build(); private static final RegularStop STOP_C = TEST_MODEL.stop("C").build(); @@ -26,7 +26,7 @@ class StopClusterMapperTest { .stopModelBuilder() .withRegularStops(STOPS) .build(); - private static final TransitModel TRANSIT_MODEL = new TransitModel( + private static final TimetableRepository TRANSIT_MODEL = new TimetableRepository( STOP_MODEL, new Deduplicator() ); diff --git a/application/src/ext-test/java/org/opentripplanner/ext/mapping/TransmodelMappingUtilTest.java b/application/src/ext-test/java/org/opentripplanner/ext/mapping/TransmodelMappingUtilTest.java index ce841be54a7..82023904f0f 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/mapping/TransmodelMappingUtilTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/mapping/TransmodelMappingUtilTest.java @@ -6,7 +6,7 @@ import java.util.List; import org.junit.jupiter.api.Test; import org.opentripplanner.apis.transmodel.mapping.TransitIdMapper; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.organization.Agency; @@ -33,7 +33,7 @@ public void resolveFixedFeedIdTest() { Agency agency(String feedScope, int id) { // We use the test builder to make sure we get back an agency with all required fields - return TransitModelForTest + return TimetableRepositoryForTest .agency("Agency " + id) .copy() .withId(new FeedScopedId(feedScope, Integer.toString(id))) 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 e5b842a474a..6150cfc6c18 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 @@ -23,21 +23,21 @@ import org.opentripplanner.routing.alertpatch.TransitAlert; import org.opentripplanner.routing.impl.TransitAlertServiceImpl; import org.opentripplanner.routing.services.TransitAlertService; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.timetable.TripTimes; import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.transit.service.TransitService; class RealtimeResolverTest { - private final TransitModelForTest testModel = TransitModelForTest.of(); + private final TimetableRepositoryForTest testModel = TimetableRepositoryForTest.of(); - private final Route route1 = TransitModelForTest.route("route1").build(); - private final Route route2 = TransitModelForTest.route("route2").build(); + private final Route route1 = TimetableRepositoryForTest.route("route1").build(); + private final Route route2 = TimetableRepositoryForTest.route("route2").build(); private final RegularStop stop1 = testModel.stop("stop1", 1, 1).build(); private final RegularStop stop2 = testModel.stop("stop2", 2, 1).build(); @@ -90,7 +90,7 @@ void testPopulateLegsWithRealtimeNonTransit() { .bus(route1, 1, time("11:20"), time("11:40"), Place.forStop(stop3)) .build(); - var model = new TransitModel(); + var model = new TimetableRepository(); model.index(); var transitService = new DefaultTransitService(model); @@ -164,23 +164,27 @@ private static TransitService makeTransitService( List patterns, LocalDate serviceDate ) { - var transitModel = new TransitModel(); + var timetableRepository = new TimetableRepository(); CalendarServiceData calendarServiceData = new CalendarServiceData(); patterns.forEach(pattern -> { - transitModel.addTripPattern(pattern.getId(), pattern); + timetableRepository.addTripPattern(pattern.getId(), pattern); var serviceCode = pattern.getScheduledTimetable().getTripTimes(0).getServiceCode(); - transitModel.getServiceCodes().put(pattern.getId(), serviceCode); + timetableRepository.getServiceCodes().put(pattern.getId(), serviceCode); calendarServiceData.putServiceDatesForServiceId(pattern.getId(), List.of(serviceDate)); }); - transitModel.updateCalendarServiceData(true, calendarServiceData, DataImportIssueStore.NOOP); - transitModel.index(); + timetableRepository.updateCalendarServiceData( + true, + calendarServiceData, + DataImportIssueStore.NOOP + ); + timetableRepository.index(); - return new DefaultTransitService(transitModel) { - final TransitAlertService alertService = new TransitAlertServiceImpl(transitModel); + return new DefaultTransitService(timetableRepository) { + final TransitAlertService alertService = new TransitAlertServiceImpl(timetableRepository); @Override public TransitAlertService getTransitAlertService() { diff --git a/application/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNamesTest.java b/application/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNamesTest.java index 7f389bc41ec..932ae697213 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNamesTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNamesTest.java @@ -5,7 +5,7 @@ import static org.opentripplanner.ext.stopconsolidation.TestStopConsolidationModel.STOP_D; import static org.opentripplanner.model.plan.PlanTestConstants.T11_05; import static org.opentripplanner.model.plan.PlanTestConstants.T11_12; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.util.List; import org.junit.jupiter.api.Test; @@ -35,13 +35,13 @@ class DecorateConsolidatedStopNamesTest { @Test void changeNames() { - var transitModel = TestStopConsolidationModel.buildTransitModel(); + var timetableRepository = TestStopConsolidationModel.buildTimetableRepository(); var groups = List.of(new ConsolidatedStopGroup(STOP_C.getId(), List.of(STOP_D.getId()))); var repo = new DefaultStopConsolidationRepository(); repo.addGroups(groups); - var service = new DefaultStopConsolidationService(repo, transitModel); + var service = new DefaultStopConsolidationService(repo, timetableRepository); var filter = new DecorateConsolidatedStopNames(service); var itinerary = TestItineraryBuilder diff --git a/application/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationModuleTest.java b/application/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationModuleTest.java index 0df495d63d0..91f62c319f6 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationModuleTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationModuleTest.java @@ -20,13 +20,13 @@ class StopConsolidationModuleTest { void replacePatterns() { var groups = List.of(new ConsolidatedStopGroup(STOP_D.getId(), List.of(STOP_B.getId()))); - var transitModel = TestStopConsolidationModel.buildTransitModel(); - transitModel.addTripPattern(PATTERN.getId(), PATTERN); + var timetableRepository = TestStopConsolidationModel.buildTimetableRepository(); + timetableRepository.addTripPattern(PATTERN.getId(), PATTERN); var repo = new DefaultStopConsolidationRepository(); - var module = new StopConsolidationModule(transitModel, repo, groups); + var module = new StopConsolidationModule(timetableRepository, repo, groups); module.buildGraph(); - var modifiedPattern = transitModel.getTripPatternForId(PATTERN.getId()); + var modifiedPattern = timetableRepository.getTripPatternForId(PATTERN.getId()); assertFalse(modifiedPattern.getRoutingTripPattern().getPattern().sameAs(PATTERN)); assertFalse(modifiedPattern.sameAs(PATTERN)); @@ -37,7 +37,7 @@ void replacePatterns() { .getStop(1); assertEquals(modifiedStop, STOP_D); - var patterns = List.copyOf(transitModel.getAllTripPatterns()); + var patterns = List.copyOf(timetableRepository.getAllTripPatterns()); var stops = patterns.stream().map(TripPattern::getStops).toList(); assertEquals(List.of(List.of(STOP_A, STOP_D, STOP_C)), stops); 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 da0c1d6f61d..193eddf9690 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 @@ -1,9 +1,9 @@ package org.opentripplanner.ext.stopconsolidation; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.util.List; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.Route; @@ -11,26 +11,26 @@ import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.organization.Agency; import org.opentripplanner.transit.model.site.RegularStop; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; class TestStopConsolidationModel { - private static final TransitModelForTest testModel = TransitModelForTest.of(); + private static final TimetableRepositoryForTest testModel = TimetableRepositoryForTest.of(); public static final RegularStop STOP_A = testModel.stop("A").withCoordinate(1, 1).build(); public static final RegularStop STOP_B = testModel.stop("B").withCoordinate(1.1, 1.1).build(); public static final RegularStop STOP_C = testModel.stop("C").withCoordinate(1.2, 1.2).build(); - public static final StopPattern STOP_PATTERN = TransitModelForTest.stopPattern( + public static final StopPattern STOP_PATTERN = TimetableRepositoryForTest.stopPattern( STOP_A, STOP_B, STOP_C ); static final String SECONDARY_FEED_ID = "secondary"; - static final Agency AGENCY = TransitModelForTest + static final Agency AGENCY = TimetableRepositoryForTest .agency("agency") .copy() .withId(new FeedScopedId(SECONDARY_FEED_ID, "agency")) .build(); - static final Route ROUTE = TransitModelForTest + static final Route ROUTE = TimetableRepositoryForTest .route(new FeedScopedId(SECONDARY_FEED_ID, "route-33")) .withAgency(AGENCY) .build(); @@ -45,9 +45,9 @@ class TestStopConsolidationModel { .withStopPattern(STOP_PATTERN) .build(); - static TransitModel buildTransitModel() { + static TimetableRepository buildTimetableRepository() { var stopModelBuilder = testModel.stopModelBuilder(); List.of(STOP_A, STOP_B, STOP_C, STOP_D).forEach(stopModelBuilder::withRegularStop); - return new TransitModel(stopModelBuilder.build(), new Deduplicator()); + return new TimetableRepository(stopModelBuilder.build(), new Deduplicator()); } } diff --git a/application/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationRepositoryTest.java b/application/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationRepositoryTest.java index ac5eb6d66e4..7bf87b4c89c 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationRepositoryTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationRepositoryTest.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.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.util.List; import org.junit.jupiter.api.Test; diff --git a/application/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationServiceTest.java b/application/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationServiceTest.java index b2fc356d111..1dd07a075ed 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationServiceTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationServiceTest.java @@ -3,7 +3,7 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import org.junit.jupiter.api.Test; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; class DefaultStopConsolidationServiceTest { @@ -11,7 +11,7 @@ class DefaultStopConsolidationServiceTest { void isActive() { var service = new DefaultStopConsolidationService( new DefaultStopConsolidationRepository(), - new TransitModel() + new TimetableRepository() ); assertFalse(service.isActive()); } diff --git a/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/VectorTilesResourceTest.java b/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/VectorTilesResourceTest.java index ff9509a8474..be379fb6fa6 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/VectorTilesResourceTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/VectorTilesResourceTest.java @@ -8,7 +8,7 @@ import org.opentripplanner.TestServerContext; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.test.support.HttpForTest; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; class VectorTilesResourceTest { @@ -17,7 +17,7 @@ void tileJson() { // the Grizzly request is awful to instantiate, using Mockito var grizzlyRequest = Mockito.mock(Request.class); var resource = new VectorTilesResource( - TestServerContext.createServerContext(new Graph(), new TransitModel()), + TestServerContext.createServerContext(new Graph(), new TimetableRepository()), grizzlyRequest, "default" ); diff --git a/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/LayerFiltersTest.java b/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/LayerFiltersTest.java index f12d43b62cf..871a4b4c7da 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/LayerFiltersTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/LayerFiltersTest.java @@ -7,13 +7,13 @@ import java.util.List; import org.junit.jupiter.api.Test; import org.opentripplanner.transit.model._data.PatternTestModel; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.site.RegularStop; class LayerFiltersTest { - private static final RegularStop STOP = TransitModelForTest.of().stop("1").build(); + private static final RegularStop STOP = TimetableRepositoryForTest.of().stop("1").build(); private static final LocalDate DATE = LocalDate.of(2024, 9, 5); private static final TripPattern PATTERN = PatternTestModel.pattern(); diff --git a/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/TestTransitService.java b/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/TestTransitService.java index d187b611ef3..b97cbcdc6fe 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/TestTransitService.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/TestTransitService.java @@ -1,23 +1,23 @@ package org.opentripplanner.ext.vectortiles.layers; import java.util.Set; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; public class TestTransitService extends DefaultTransitService { - public TestTransitService(TransitModel transitModel) { - super(transitModel); + public TestTransitService(TimetableRepository timetableRepository) { + super(timetableRepository); } @Override public Set getRoutesForStop(StopLocation stop) { return Set.of( - TransitModelForTest.route("1").withMode(TransitMode.RAIL).withGtfsType(100).build() + TimetableRepositoryForTest.route("1").withMode(TransitMode.RAIL).withGtfsType(100).build() ); } } 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 5387df91bca..7d14d11785c 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 @@ -6,20 +6,22 @@ import java.util.List; import java.util.Locale; import org.junit.jupiter.api.Test; -import org.opentripplanner.transit.model._data.TransitModelForTest; +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; class AreaStopPropertyMapperTest { - private static final TransitModelForTest MODEL = new TransitModelForTest(StopModel.of()); + private static final TimetableRepositoryForTest MODEL = new TimetableRepositoryForTest( + StopModel.of() + ); private static final AreaStop STOP = MODEL.areaStop("123").build(); - private static final Route ROUTE_WITH_COLOR = TransitModelForTest + private static final Route ROUTE_WITH_COLOR = TimetableRepositoryForTest .route("123") .withColor("ffffff") .build(); - private static final Route ROUTE_WITHOUT_COLOR = TransitModelForTest.route("456").build(); + private static final Route ROUTE_WITHOUT_COLOR = TimetableRepositoryForTest.route("456").build(); @Test void map() { 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 2e6c4e16c40..7cfab197cf1 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 @@ -17,7 +17,7 @@ import org.opentripplanner.transit.service.DefaultTransitService; import org.opentripplanner.transit.service.StopModel; import org.opentripplanner.transit.service.StopModelBuilder; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; class AreaStopsLayerBuilderTest { @@ -54,17 +54,17 @@ class AreaStopsLayerBuilderTest { .withGeometry(Polygons.BERLIN) .build(); - private final TransitModel transitModel = new TransitModel( + private final TimetableRepository timetableRepository = new TimetableRepository( stopModelBuilder.withAreaStop(AREA_STOP).build(), new Deduplicator() ); @Test void getAreaStops() { - transitModel.index(); + timetableRepository.index(); var subject = new AreaStopsLayerBuilder( - new DefaultTransitService(transitModel), + new DefaultTransitService(timetableRepository), LAYER_CONFIG, Locale.ENGLISH ); 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 da85285954d..2f37afc76be 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 @@ -1,7 +1,7 @@ package org.opentripplanner.ext.vectortiles.layers.stations; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.util.HashMap; import java.util.Locale; @@ -9,20 +9,20 @@ import org.junit.jupiter.api.Test; import org.opentripplanner.ext.vectortiles.layers.TestTransitService; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.transit.model._data.TransitModelForTest; +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.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; public class DigitransitStationPropertyMapperTest { @Test void map() { var deduplicator = new Deduplicator(); - var transitModel = new TransitModel(new StopModel(), deduplicator); - transitModel.index(); - var transitService = new TestTransitService(transitModel); + var timetableRepository = new TimetableRepository(new StopModel(), deduplicator); + timetableRepository.index(); + var transitService = new TestTransitService(timetableRepository); var mapper = DigitransitStationPropertyMapper.create(transitService, Locale.US); @@ -32,7 +32,7 @@ void map() { .withName(I18NString.of("A station")) .build(); - TransitModelForTest.of().stop("stop-1").withParentStation(station).build(); + TimetableRepositoryForTest.of().stop("stop-1").withParentStation(station).build(); Map map = new HashMap<>(); mapper.map(station).forEach(o -> map.put(o.key(), o.value())); 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 796b2a204da..867903c410a 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 @@ -21,14 +21,14 @@ import org.opentripplanner.routing.alertpatch.TransitAlert; import org.opentripplanner.routing.impl.TransitAlertServiceImpl; import org.opentripplanner.routing.services.TransitAlertService; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.FeedScopedId; 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.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; public class RealtimeStopsLayerTest { @@ -62,11 +62,11 @@ public void setUp() { @Test void realtimeStopLayer() { var deduplicator = new Deduplicator(); - var transitModel = new TransitModel(new StopModel(), deduplicator); - transitModel.initTimeZone(ZoneIds.HELSINKI); - transitModel.index(); - var transitService = new DefaultTransitService(transitModel) { - final TransitAlertService alertService = new TransitAlertServiceImpl(transitModel); + var timetableRepository = new TimetableRepository(new StopModel(), deduplicator); + timetableRepository.initTimeZone(ZoneIds.HELSINKI); + timetableRepository.index(); + var transitService = new DefaultTransitService(timetableRepository) { + final TransitAlertService alertService = new TransitAlertServiceImpl(timetableRepository); @Override public TransitAlertService getTransitAlertService() { @@ -74,7 +74,7 @@ public TransitAlertService getTransitAlertService() { } }; - Route route = TransitModelForTest.route("route").build(); + Route route = TimetableRepositoryForTest.route("route").build(); var itinerary = newItinerary(Place.forStop(stop), time("11:00")) .bus(route, 1, time("11:05"), time("11:20"), Place.forStop(stop2)) .build(); 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 7760eee13b8..046c5839db0 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 @@ -1,7 +1,7 @@ package org.opentripplanner.ext.vectortiles.layers.stops; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.util.HashMap; import java.util.Locale; @@ -17,7 +17,7 @@ import org.opentripplanner.transit.model.site.Station; import org.opentripplanner.transit.service.DefaultTransitService; import org.opentripplanner.transit.service.StopModel; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; public class StopsLayerTest { @@ -59,9 +59,9 @@ public class StopsLayerTest { @Test public void digitransitStopPropertyMapperTest() { var deduplicator = new Deduplicator(); - var transitModel = new TransitModel(new StopModel(), deduplicator); - transitModel.index(); - var transitService = new TestTransitService(transitModel); + var timetableRepository = new TimetableRepository(new StopModel(), deduplicator); + timetableRepository.index(); + var transitService = new TestTransitService(timetableRepository); DigitransitStopPropertyMapper mapper = DigitransitStopPropertyMapper.create( transitService, @@ -81,9 +81,9 @@ public void digitransitStopPropertyMapperTest() { @Test public void digitransitStopPropertyMapperTranslationTest() { var deduplicator = new Deduplicator(); - var transitModel = new TransitModel(new StopModel(), deduplicator); - transitModel.index(); - var transitService = new DefaultTransitService(transitModel); + var timetableRepository = new TimetableRepository(new StopModel(), deduplicator); + timetableRepository.index(); + var transitService = new DefaultTransitService(timetableRepository); DigitransitStopPropertyMapper mapper = DigitransitStopPropertyMapper.create( transitService, diff --git a/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingGroupsLayerTest.java b/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingGroupsLayerTest.java index 1beca037457..95ad7ea713e 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingGroupsLayerTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingGroupsLayerTest.java @@ -26,12 +26,12 @@ import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; import org.opentripplanner.routing.vehicle_parking.VehicleParkingState; import org.opentripplanner.standalone.config.routerconfig.VectorTileConfig; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.FeedScopedId; public class VehicleParkingGroupsLayerTest { - private static final FeedScopedId ID = TransitModelForTest.id("id"); + private static final FeedScopedId ID = TimetableRepositoryForTest.id("id"); private VehicleParkingGroup vehicleParkingGroup; private VehicleParking vehicleParking; diff --git a/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingsLayerTest.java b/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingsLayerTest.java index 14e96e2aa28..b63c9c51bc6 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingsLayerTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingsLayerTest.java @@ -29,13 +29,13 @@ import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; import org.opentripplanner.routing.vehicle_parking.VehicleParkingState; import org.opentripplanner.standalone.config.routerconfig.VectorTileConfig; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.FeedScopedId; public class VehicleParkingsLayerTest { - private static final FeedScopedId ID = TransitModelForTest.id("id"); + private static final FeedScopedId ID = TimetableRepositoryForTest.id("id"); private VehicleParking vehicleParking; 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 8b969c99344..be237236700 100644 --- a/application/src/ext/java/org/opentripplanner/ext/flex/AreaStopsToVerticesMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/flex/AreaStopsToVerticesMapper.java @@ -12,7 +12,7 @@ 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.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,31 +25,31 @@ public class AreaStopsToVerticesMapper implements GraphBuilderModule { private static final Logger LOG = LoggerFactory.getLogger(AreaStopsToVerticesMapper.class); private final Graph graph; - private final TransitModel transitModel; + private final TimetableRepository timetableRepository; @Inject - public AreaStopsToVerticesMapper(Graph graph, TransitModel transitModel) { + public AreaStopsToVerticesMapper(Graph graph, TimetableRepository timetableRepository) { this.graph = graph; - this.transitModel = transitModel; + this.timetableRepository = timetableRepository; } @Override @SuppressWarnings("Convert2MethodRef") public void buildGraph() { - if (!transitModel.getStopModel().hasAreaStops()) { + if (!timetableRepository.getStopModel().hasAreaStops()) { return; } - StreetIndex streetIndex = graph.getStreetIndexSafe(transitModel.getStopModel()); + StreetIndex streetIndex = graph.getStreetIndexSafe(timetableRepository.getStopModel()); ProgressTracker progress = ProgressTracker.track( "Add flex locations to street vertices", 1, - transitModel.getStopModel().listAreaStops().size() + timetableRepository.getStopModel().listAreaStops().size() ); LOG.info(progress.startMessage()); - var results = transitModel + var results = timetableRepository .getStopModel() .listAreaStops() .parallelStream() diff --git a/application/src/ext/java/org/opentripplanner/ext/flex/FlexIndex.java b/application/src/ext/java/org/opentripplanner/ext/flex/FlexIndex.java index a875ba0f516..cd047de6d04 100644 --- a/application/src/ext/java/org/opentripplanner/ext/flex/FlexIndex.java +++ b/application/src/ext/java/org/opentripplanner/ext/flex/FlexIndex.java @@ -12,7 +12,7 @@ import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.site.GroupStop; import org.opentripplanner.transit.model.site.StopLocation; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; public class FlexIndex { @@ -24,11 +24,11 @@ public class FlexIndex { private final Map> tripById = new HashMap<>(); - public FlexIndex(TransitModel transitModel) { - for (PathTransfer transfer : transitModel.getAllPathTransfers()) { + public FlexIndex(TimetableRepository timetableRepository) { + for (PathTransfer transfer : timetableRepository.getAllPathTransfers()) { transfersToStop.put(transfer.to, transfer); } - for (FlexTrip flexTrip : transitModel.getAllFlexTrips()) { + for (FlexTrip flexTrip : timetableRepository.getAllFlexTrips()) { routeById.put(flexTrip.getTrip().getRoute().getId(), flexTrip.getTrip().getRoute()); tripById.put(flexTrip.getTrip().getId(), flexTrip); for (StopLocation stop : flexTrip.getStops()) { 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 764c40d3f86..72ac22b027a 100644 --- a/application/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java +++ b/application/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java @@ -48,7 +48,7 @@ import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.model.site.StopLocationsGroup; import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.transit.service.TransitService; public class LuceneIndex implements Serializable { @@ -73,8 +73,11 @@ public class LuceneIndex implements Serializable { * However, we do need some methods in the service and that's why we instantiate it manually in this * constructor. */ - public LuceneIndex(TransitModel transitModel, StopConsolidationService stopConsolidationService) { - this(new DefaultTransitService(transitModel), stopConsolidationService); + public LuceneIndex( + TimetableRepository timetableRepository, + StopConsolidationService stopConsolidationService + ) { + this(new DefaultTransitService(timetableRepository), stopConsolidationService); } /** diff --git a/application/src/ext/java/org/opentripplanner/ext/geocoder/configure/GeocoderModule.java b/application/src/ext/java/org/opentripplanner/ext/geocoder/configure/GeocoderModule.java index 9eaf6ade8e5..666ff5d7eaf 100644 --- a/application/src/ext/java/org/opentripplanner/ext/geocoder/configure/GeocoderModule.java +++ b/application/src/ext/java/org/opentripplanner/ext/geocoder/configure/GeocoderModule.java @@ -7,7 +7,7 @@ import org.opentripplanner.ext.geocoder.LuceneIndex; import org.opentripplanner.ext.stopconsolidation.StopConsolidationService; import org.opentripplanner.framework.application.OTPFeature; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; /** * This module builds the Lucene geocoder based on whether the feature flag is on or off. @@ -19,11 +19,11 @@ public class GeocoderModule { @Singleton @Nullable LuceneIndex luceneIndex( - TransitModel transitModel, + TimetableRepository timetableRepository, @Nullable StopConsolidationService stopConsolidationService ) { if (OTPFeature.SandboxAPIGeocoder.isOn()) { - return new LuceneIndex(transitModel, stopConsolidationService); + return new LuceneIndex(timetableRepository, stopConsolidationService); } else { return null; } diff --git a/application/src/ext/java/org/opentripplanner/ext/siri/updater/azure/SiriAzureSXUpdater.java b/application/src/ext/java/org/opentripplanner/ext/siri/updater/azure/SiriAzureSXUpdater.java index b6a9f014c81..0f3e2afe1ea 100644 --- a/application/src/ext/java/org/opentripplanner/ext/siri/updater/azure/SiriAzureSXUpdater.java +++ b/application/src/ext/java/org/opentripplanner/ext/siri/updater/azure/SiriAzureSXUpdater.java @@ -17,7 +17,7 @@ import org.apache.hc.core5.net.URIBuilder; import org.opentripplanner.routing.impl.TransitAlertServiceImpl; import org.opentripplanner.routing.services.TransitAlertService; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.updater.alert.TransitAlertProvider; import org.opentripplanner.updater.siri.SiriAlertsUpdateHandler; import org.rutebanken.siri20.util.SiriXml; @@ -35,11 +35,14 @@ public class SiriAzureSXUpdater extends AbstractAzureSiriUpdater implements Tran private final LocalDate fromDateTime; private final LocalDate toDateTime; - public SiriAzureSXUpdater(SiriAzureSXUpdaterParameters config, TransitModel transitModel) { + public SiriAzureSXUpdater( + SiriAzureSXUpdaterParameters config, + TimetableRepository timetableRepository + ) { super(config); this.fromDateTime = config.getFromDateTime(); this.toDateTime = config.getToDateTime(); - this.transitAlertService = new TransitAlertServiceImpl(transitModel); + this.transitAlertService = new TransitAlertServiceImpl(timetableRepository); this.updateHandler = new SiriAlertsUpdateHandler(feedId, transitAlertService, Duration.ZERO); } diff --git a/application/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationModule.java b/application/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationModule.java index 7f5cf431a4c..35db41764a9 100644 --- a/application/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationModule.java +++ b/application/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationModule.java @@ -10,7 +10,7 @@ import org.opentripplanner.ext.stopconsolidation.model.StopReplacement; import org.opentripplanner.graph_builder.model.GraphBuilderModule; import org.opentripplanner.transit.model.network.TripPattern; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -28,15 +28,15 @@ public class StopConsolidationModule implements GraphBuilderModule { private static final Logger LOG = LoggerFactory.getLogger(TripPattern.class); private final StopConsolidationRepository repository; - private final TransitModel transitModel; + private final TimetableRepository timetableRepository; private final Collection groups; public StopConsolidationModule( - TransitModel transitModel, + TimetableRepository timetableRepository, StopConsolidationRepository repository, Collection groups ) { - this.transitModel = Objects.requireNonNull(transitModel); + this.timetableRepository = Objects.requireNonNull(timetableRepository); this.repository = Objects.requireNonNull(repository); this.groups = Objects.requireNonNull(groups); } @@ -45,19 +45,19 @@ public StopConsolidationModule( public void buildGraph() { repository.addGroups(groups); - var service = new DefaultStopConsolidationService(repository, transitModel); + var service = new DefaultStopConsolidationService(repository, timetableRepository); var stopsToReplace = service.secondaryStops(); var replacements = service.replacements(); - transitModel + timetableRepository .getAllTripPatterns() .stream() .filter(pattern -> pattern.containsAnyStopId(stopsToReplace)) .forEach(pattern -> { LOG.info("Replacing stop(s) in pattern {}", pattern); var modifiedPattern = modifyStopsInPattern(pattern, replacements); - transitModel.addTripPattern(modifiedPattern.getId(), modifiedPattern); + timetableRepository.addTripPattern(modifiedPattern.getId(), modifiedPattern); }); } @@ -71,14 +71,14 @@ private TripPattern modifyStopsInPattern( } public static StopConsolidationModule of( - TransitModel transitModel, + TimetableRepository timetableRepository, StopConsolidationRepository repo, DataSource ds ) { LOG.info("Reading stop consolidation information from '{}'", ds); try (var inputStream = ds.asInputStream()) { var groups = StopConsolidationParser.parseGroups(inputStream); - return new StopConsolidationModule(transitModel, repo, groups); + return new StopConsolidationModule(timetableRepository, repo, groups); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/application/src/ext/java/org/opentripplanner/ext/stopconsolidation/configure/StopConsolidationServiceModule.java b/application/src/ext/java/org/opentripplanner/ext/stopconsolidation/configure/StopConsolidationServiceModule.java index 3851435641c..5c829b20b67 100644 --- a/application/src/ext/java/org/opentripplanner/ext/stopconsolidation/configure/StopConsolidationServiceModule.java +++ b/application/src/ext/java/org/opentripplanner/ext/stopconsolidation/configure/StopConsolidationServiceModule.java @@ -7,7 +7,7 @@ import org.opentripplanner.ext.stopconsolidation.StopConsolidationRepository; import org.opentripplanner.ext.stopconsolidation.StopConsolidationService; import org.opentripplanner.ext.stopconsolidation.internal.DefaultStopConsolidationService; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; @Module public class StopConsolidationServiceModule { @@ -15,7 +15,10 @@ public class StopConsolidationServiceModule { @Provides @Singleton @Nullable - StopConsolidationService service(@Nullable StopConsolidationRepository repo, TransitModel tm) { + StopConsolidationService service( + @Nullable StopConsolidationRepository repo, + TimetableRepository tm + ) { if (repo == null) { return null; } else { 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 53a0f8ed827..36060eb5ff3 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 @@ -11,7 +11,7 @@ import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.organization.Agency; import org.opentripplanner.transit.model.site.StopLocation; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -20,14 +20,14 @@ public class DefaultStopConsolidationService implements StopConsolidationService private static final Logger LOG = LoggerFactory.getLogger(DefaultStopConsolidationService.class); private final StopConsolidationRepository repo; - private final TransitModel transitModel; + private final TimetableRepository timetableRepository; public DefaultStopConsolidationService( StopConsolidationRepository repo, - TransitModel transitModel + TimetableRepository timetableRepository ) { this.repo = Objects.requireNonNull(repo); - this.transitModel = Objects.requireNonNull(transitModel); + this.timetableRepository = Objects.requireNonNull(timetableRepository); } @Override @@ -36,7 +36,7 @@ public List replacements() { .groups() .stream() .flatMap(group -> { - var primaryStop = transitModel.getStopModel().getRegularStop(group.primary()); + var primaryStop = timetableRepository.getStopModel().getRegularStop(group.primary()); if (primaryStop == null) { LOG.error( "Could not find primary stop with id {}. Ignoring stop group {}.", @@ -93,7 +93,7 @@ private Optional findAgencySpecificStop(StopLocation stop, Agency .flatMap(g -> g.secondaries().stream()) .filter(secondary -> secondary.getFeedId().equals(agency.getId().getFeedId())) .findAny() - .map(id -> transitModel.getStopModel().getRegularStop(id)); + .map(id -> timetableRepository.getStopModel().getRegularStop(id)); } @Override @@ -105,6 +105,6 @@ public Optional primaryStop(FeedScopedId id) { .map(ConsolidatedStopGroup::primary) .findAny() .orElse(id); - return Optional.ofNullable(transitModel.getStopModel().getRegularStop(primaryId)); + return Optional.ofNullable(timetableRepository.getStopModel().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 979912c5f37..701ff702a32 100644 --- a/application/src/ext/java/org/opentripplanner/ext/transferanalyzer/DirectTransferAnalyzer.java +++ b/application/src/ext/java/org/opentripplanner/ext/transferanalyzer/DirectTransferAnalyzer.java @@ -18,7 +18,7 @@ import org.opentripplanner.routing.graphfinder.StreetGraphFinder; import org.opentripplanner.street.model.vertex.TransitStopVertex; import org.opentripplanner.transit.model.site.RegularStop; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -41,18 +41,18 @@ public class DirectTransferAnalyzer implements GraphBuilderModule { private static final Logger LOG = LoggerFactory.getLogger(DirectTransferAnalyzer.class); private final Graph graph; - private final TransitModel transitModel; + private final TimetableRepository timetableRepository; private final DataImportIssueStore issueStore; private final double radiusMeters; public DirectTransferAnalyzer( Graph graph, - TransitModel transitModel, + TimetableRepository timetableRepository, DataImportIssueStore issueStore, double radiusMeters ) { this.graph = graph; - this.transitModel = transitModel; + this.timetableRepository = timetableRepository; this.issueStore = issueStore; this.radiusMeters = radiusMeters; } @@ -60,7 +60,7 @@ public DirectTransferAnalyzer( @Override public void buildGraph() { /* Initialize transit index which is needed by the nearby stop finder. */ - transitModel.index(); + timetableRepository.index(); LOG.info("Analyzing transfers (this can be time consuming)..."); @@ -68,7 +68,7 @@ public void buildGraph() { List directTransfersNotFound = new ArrayList<>(); DirectGraphFinder nearbyStopFinderEuclidian = new DirectGraphFinder( - transitModel.getStopModel()::findRegularStops + timetableRepository.getStopModel()::findRegularStops ); StreetGraphFinder nearbyStopFinderStreets = new StreetGraphFinder(graph); diff --git a/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/StationsLayerBuilder.java b/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/StationsLayerBuilder.java index 449a1489d89..25959d5ec7a 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/StationsLayerBuilder.java +++ b/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/StationsLayerBuilder.java @@ -23,7 +23,7 @@ public class StationsLayerBuilder extends LayerBuilder { MapperType.Digitransit, DigitransitStationPropertyMapper::create ); - private final TransitService transitModel; + private final TransitService transitService; public StationsLayerBuilder( TransitService transitService, @@ -35,11 +35,11 @@ public StationsLayerBuilder( layerParameters.name(), layerParameters.expansionFactor() ); - this.transitModel = transitService; + this.transitService = transitService; } protected List getGeometries(Envelope query) { - return transitModel + return transitService .getStations() .stream() .map(station -> { 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 fa8601096dc..7d982e77885 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/TransmodelAPI.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/TransmodelAPI.java @@ -22,7 +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.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -66,15 +66,15 @@ public TransmodelAPIOldPath( */ public static void setUp( TransmodelAPIParameters config, - TransitModel transitModel, + TimetableRepository timetableRepository, RouteRequest defaultRouteRequest ) { if (config.hideFeedId()) { - TransitIdMapper.setupFixedFeedId(transitModel.getAgencies()); + TransitIdMapper.setupFixedFeedId(timetableRepository.getAgencies()); } tracingHeaderTags = config.tracingHeaderTags(); maxNumberOfResultFields = config.maxNumberOfResultFields(); - schema = TransmodelGraphQLSchema.create(defaultRouteRequest, transitModel.getTimeZone()); + schema = TransmodelGraphQLSchema.create(defaultRouteRequest, timetableRepository.getTimeZone()); } @POST 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 d6f91696e64..bd629da9468 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/GraphBuilder.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/GraphBuilder.java @@ -23,7 +23,7 @@ import org.opentripplanner.service.worldenvelope.WorldEnvelopeRepository; import org.opentripplanner.standalone.config.BuildConfig; import org.opentripplanner.street.model.StreetLimitationParameters; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,15 +37,19 @@ public class GraphBuilder implements Runnable { private final List graphBuilderModules = new ArrayList<>(); private final Graph graph; - private final TransitModel transitModel; + private final TimetableRepository timetableRepository; private final DataImportIssueStore issueStore; private boolean hasTransitData = false; @Inject - public GraphBuilder(Graph baseGraph, TransitModel transitModel, DataImportIssueStore issueStore) { + public GraphBuilder( + Graph baseGraph, + TimetableRepository timetableRepository, + DataImportIssueStore issueStore + ) { this.graph = baseGraph; - this.transitModel = transitModel; + this.timetableRepository = timetableRepository; this.issueStore = issueStore; } @@ -57,7 +61,7 @@ public static GraphBuilder create( BuildConfig config, GraphBuilderDataSources dataSources, Graph graph, - TransitModel transitModel, + TimetableRepository timetableRepository, WorldEnvelopeRepository worldEnvelopeRepository, @Nullable EmissionsDataModel emissionsDataModel, @Nullable StopConsolidationRepository stopConsolidationRepository, @@ -70,18 +74,18 @@ public static GraphBuilder create( boolean hasNetex = dataSources.has(NETEX); boolean hasTransitData = hasGtfs || hasNetex; - transitModel.initTimeZone(config.transitModelTimeZone); + timetableRepository.initTimeZone(config.transitModelTimeZone); var builder = DaggerGraphBuilderFactory .builder() .config(config) .graph(graph) - .transitModel(transitModel) + .timetableRepository(timetableRepository) .worldEnvelopeRepository(worldEnvelopeRepository) .stopConsolidationRepository(stopConsolidationRepository) .streetLimitationParameters(streetLimitationParameters) .dataSources(dataSources) - .timeZoneId(transitModel.getTimeZone()); + .timeZoneId(timetableRepository.getTimeZone()); if (OTPFeature.Co2Emissions.isOn()) { builder.emissionsDataModel(emissionsDataModel); @@ -114,7 +118,7 @@ public static GraphBuilder create( graphBuilder.addModule(factory.tripPatternNamer()); } - if (hasTransitData && transitModel.getAgencyTimeZones().size() > 1) { + if (hasTransitData && timetableRepository.getAgencyTimeZones().size() > 1) { graphBuilder.addModule(factory.timeZoneAdjusterModule()); } @@ -194,7 +198,7 @@ public void run() { new DataImportIssueSummary(issueStore.listIssues()).logSummary(); // Log before we validate, this way we have more information if the validation fails - logGraphBuilderCompleteStatus(startTime, graph, transitModel); + logGraphBuilderCompleteStatus(startTime, graph, timetableRepository); validate(); } @@ -223,7 +227,7 @@ public DataImportIssueSummary issueSummary() { * configuration, for example, then this function will throw a {@link OtpAppException}. */ private void validate() { - if (hasTransitData() && !transitModel.hasTransit()) { + if (hasTransitData() && !timetableRepository.hasTransit()) { throw new OtpAppException( "The provided transit data have no trips within the configured transit service period. " + "There is something wrong with your data - see the log above. Another possibility is that the " + @@ -235,14 +239,14 @@ private void validate() { private static void logGraphBuilderCompleteStatus( long startTime, Graph graph, - TransitModel transitModel + TimetableRepository timetableRepository ) { long endTime = System.currentTimeMillis(); String time = DurationUtils.durationToStr(Duration.ofMillis(endTime - startTime)); var f = new OtpNumberFormat(); - var nStops = f.formatNumber(transitModel.getStopModel().stopIndexSize()); - var nPatterns = f.formatNumber(transitModel.getAllTripPatterns().size()); - var nTransfers = f.formatNumber(transitModel.getTransferService().listAll().size()); + var nStops = f.formatNumber(timetableRepository.getStopModel().stopIndexSize()); + var nPatterns = f.formatNumber(timetableRepository.getAllTripPatterns().size()); + var nTransfers = f.formatNumber(timetableRepository.getTransferService().listAll().size()); var nVertices = f.formatNumber(graph.countVertices()); var nEdges = f.formatNumber(graph.countEdges()); diff --git a/application/src/main/java/org/opentripplanner/graph_builder/GraphStats.java b/application/src/main/java/org/opentripplanner/graph_builder/GraphStats.java index 718622a142d..199146667ed 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/GraphStats.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/GraphStats.java @@ -27,7 +27,7 @@ import org.opentripplanner.street.model.vertex.TransitStopVertex; import org.opentripplanner.street.model.vertex.Vertex; import org.opentripplanner.transit.model.network.TripPattern; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -60,7 +60,7 @@ public class GraphStats { private Graph graph; - private TransitModel transitModel; + private TimetableRepository timetableRepository; private CsvWriter writer; @@ -97,7 +97,7 @@ private void run() { File graphFile = new File(graphPath); SerializedGraphObject serializedGraphObject = SerializedGraphObject.load(graphFile); graph = serializedGraphObject.graph; - transitModel = serializedGraphObject.transitModel; + timetableRepository = serializedGraphObject.timetableRepository; /* open output stream (same for all commands) */ if (outPath != null) { @@ -220,7 +220,7 @@ public void run() { "empiricalDistTrips", } ); - Collection patterns = transitModel.getAllTripPatterns(); + Collection patterns = timetableRepository.getAllTripPatterns(); Multiset counts = TreeMultiset.create(); int nPatterns = patterns.size(); LOG.info("total number of patterns is: {}", nPatterns); diff --git a/application/src/main/java/org/opentripplanner/graph_builder/model/GraphBuilderModule.java b/application/src/main/java/org/opentripplanner/graph_builder/model/GraphBuilderModule.java index e4e67a0f3c1..0a551cff1c9 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/model/GraphBuilderModule.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/model/GraphBuilderModule.java @@ -4,7 +4,7 @@ public interface GraphBuilderModule { /** * Process whatever inputs were supplied to this module and update the model objects(graph, - * transitModel and issueStore). + * timetableRepository and issueStore). */ void buildGraph(); diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/AddTransitModelEntitiesToGraph.java b/application/src/main/java/org/opentripplanner/graph_builder/module/AddTransitEntitiesToGraph.java similarity index 86% rename from application/src/main/java/org/opentripplanner/graph_builder/module/AddTransitModelEntitiesToGraph.java rename to application/src/main/java/org/opentripplanner/graph_builder/module/AddTransitEntitiesToGraph.java index a4bbb10da68..7aa5d65bef1 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/AddTransitModelEntitiesToGraph.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/AddTransitEntitiesToGraph.java @@ -42,13 +42,13 @@ import org.opentripplanner.transit.model.site.Station; import org.opentripplanner.transit.model.site.StationElement; import org.opentripplanner.transit.model.site.StopLocation; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class AddTransitModelEntitiesToGraph { +public class AddTransitEntitiesToGraph { - private static final Logger LOG = LoggerFactory.getLogger(AddTransitModelEntitiesToGraph.class); + private static final Logger LOG = LoggerFactory.getLogger(AddTransitEntitiesToGraph.class); private final OtpTransitService otpTransitService; @@ -62,7 +62,7 @@ public class AddTransitModelEntitiesToGraph { * @param subwayAccessTime a positive integer for the extra time to access a subway platform, if * negative the default value of zero is used. */ - private AddTransitModelEntitiesToGraph( + private AddTransitEntitiesToGraph( OtpTransitService otpTransitService, int subwayAccessTime, Graph graph @@ -76,16 +76,16 @@ public static void addToGraph( OtpTransitService otpTransitService, int subwayAccessTime, Graph graph, - TransitModel transitModel + TimetableRepository timetableRepository ) { - new AddTransitModelEntitiesToGraph(otpTransitService, subwayAccessTime, graph) - .applyToGraph(transitModel); + new AddTransitEntitiesToGraph(otpTransitService, subwayAccessTime, graph) + .applyToGraph(timetableRepository); } - private void applyToGraph(TransitModel transitModel) { - transitModel.mergeStopModels(otpTransitService.stopModel()); + private void applyToGraph(TimetableRepository timetableRepository) { + timetableRepository.mergeStopModels(otpTransitService.stopModel()); - addStopsToGraphAndGenerateStopVertexes(transitModel); + addStopsToGraphAndGenerateStopVertexes(timetableRepository); addEntrancesToGraph(); addStationCentroidsToGraph(); addPathwayNodesToGraph(); @@ -94,26 +94,26 @@ private void applyToGraph(TransitModel transitModel) { // Although pathways are loaded from GTFS they are street data, so we will put them in the // street graph. createPathwayEdgesAndAddThemToGraph(); - addFeedInfoToGraph(transitModel); - addAgenciesToGraph(transitModel); - addServicesToTransitModel(transitModel); - addTripPatternsToTransitModel(transitModel); + addFeedInfoToGraph(timetableRepository); + addAgenciesToGraph(timetableRepository); + addServicesToTimetableRepository(timetableRepository); + addTripPatternsToTimetableRepository(timetableRepository); /* Interpret the transfers explicitly defined in transfers.txt. */ - addTransfersToGraph(transitModel); + addTransfersToGraph(timetableRepository); if (OTPFeature.FlexRouting.isOn()) { - addFlexTripsToGraph(transitModel); + addFlexTripsToGraph(timetableRepository); } } - private void addStopsToGraphAndGenerateStopVertexes(TransitModel transitModel) { + private void addStopsToGraphAndGenerateStopVertexes(TimetableRepository timetableRepository) { // Compute the set of modes for each stop based on all the TripPatterns it is part of Map> stopModeMap = new HashMap<>(); for (TripPattern pattern : otpTransitService.getTripPatterns()) { TransitMode mode = pattern.getMode(); - transitModel.addTransitMode(mode); + timetableRepository.addTransitMode(mode); for (var stop : pattern.getStops()) { Set set = stopModeMap.computeIfAbsent(stop, s -> new HashSet<>()); set.add(mode); @@ -335,45 +335,47 @@ private StopLevel getStopLevel(StationElementVertex vertex) { : new StopLevel(fromStation.getName(), null); } - private void addFeedInfoToGraph(TransitModel transitModel) { + private void addFeedInfoToGraph(TimetableRepository timetableRepository) { for (FeedInfo info : otpTransitService.getAllFeedInfos()) { - transitModel.addFeedInfo(info); + timetableRepository.addFeedInfo(info); } } - private void addAgenciesToGraph(TransitModel transitModel) { + private void addAgenciesToGraph(TimetableRepository timetableRepository) { for (Agency agency : otpTransitService.getAllAgencies()) { - transitModel.addAgency(agency); + timetableRepository.addAgency(agency); } } - private void addTransfersToGraph(TransitModel transitModel) { - transitModel.getTransferService().addAll(otpTransitService.getAllTransfers()); + private void addTransfersToGraph(TimetableRepository timetableRepository) { + timetableRepository.getTransferService().addAll(otpTransitService.getAllTransfers()); } - private void addServicesToTransitModel(TransitModel transitModel) { + private void addServicesToTimetableRepository(TimetableRepository timetableRepository) { /* Assign 0-based numeric codes to all GTFS service IDs. */ for (FeedScopedId serviceId : otpTransitService.getAllServiceIds()) { - transitModel.getServiceCodes().put(serviceId, transitModel.getServiceCodes().size()); + timetableRepository + .getServiceCodes() + .put(serviceId, timetableRepository.getServiceCodes().size()); } } - private void addTripPatternsToTransitModel(TransitModel transitModel) { + private void addTripPatternsToTimetableRepository(TimetableRepository timetableRepository) { Collection tripPatterns = otpTransitService.getTripPatterns(); /* Loop over all new TripPatterns setting the service codes. */ for (TripPattern tripPattern : tripPatterns) { // TODO this could be more elegant - tripPattern.getScheduledTimetable().setServiceCodes(transitModel.getServiceCodes()); + tripPattern.getScheduledTimetable().setServiceCodes(timetableRepository.getServiceCodes()); // Store the tripPattern in the Graph so it will be serialized and usable in routing. - transitModel.addTripPattern(tripPattern.getId(), tripPattern); + timetableRepository.addTripPattern(tripPattern.getId(), tripPattern); } } - private void addFlexTripsToGraph(TransitModel transitModel) { + private void addFlexTripsToGraph(TimetableRepository timetableRepository) { for (FlexTrip flexTrip : otpTransitService.getAllFlexTrips()) { - transitModel.addFlexTrip(flexTrip.getId(), flexTrip); + timetableRepository.addFlexTrip(flexTrip.getId(), flexTrip); } } 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 a87f28182ff..a1a0796c66a 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 @@ -18,16 +18,14 @@ import org.opentripplanner.graph_builder.module.nearbystops.StreetNearbyStopFinder; import org.opentripplanner.model.PathTransfer; import org.opentripplanner.routing.api.request.RouteRequest; -import org.opentripplanner.routing.api.request.request.StreetRequest; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.routing.graphfinder.NearbyStop; import org.opentripplanner.street.model.edge.Edge; import org.opentripplanner.street.model.vertex.TransitStopVertex; -import org.opentripplanner.street.model.vertex.Vertex; 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.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -47,18 +45,18 @@ public class DirectTransferGenerator implements GraphBuilderModule { private final List transferRequests; private final Graph graph; - private final TransitModel transitModel; + private final TimetableRepository timetableRepository; private final DataImportIssueStore issueStore; public DirectTransferGenerator( Graph graph, - TransitModel transitModel, + TimetableRepository timetableRepository, DataImportIssueStore issueStore, Duration radiusByDuration, List transferRequests ) { this.graph = graph; - this.transitModel = transitModel; + this.timetableRepository = timetableRepository; this.issueStore = issueStore; this.radiusByDuration = radiusByDuration; this.transferRequests = transferRequests; @@ -67,7 +65,7 @@ public DirectTransferGenerator( @Override public void buildGraph() { /* Initialize transit model index which is needed by the nearby stop finder. */ - transitModel.index(); + timetableRepository.index(); /* The linker will use streets if they are available, or straight-line distance otherwise. */ NearbyStopFinder nearbyStopFinder = createNearbyStopFinder(); @@ -166,7 +164,7 @@ public void buildGraph() { progress.step(m -> LOG.info(m)); }); - transitModel.addAllTransfersByStops(transfersByStop); + timetableRepository.addAllTransfersByStops(transfersByStop); LOG.info(progress.completeMessage()); LOG.info( @@ -182,7 +180,7 @@ public void buildGraph() { * enabled. */ private NearbyStopFinder createNearbyStopFinder() { - var transitService = new DefaultTransitService(transitModel); + var transitService = new DefaultTransitService(timetableRepository); NearbyStopFinder finder; if (!graph.hasStreets) { LOG.info( 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 3bb9c3745a8..ba847b96eb9 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 @@ -27,7 +27,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.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -55,15 +55,15 @@ public class OsmBoardingLocationsModule implements GraphBuilderModule { private final Graph graph; - private final TransitModel transitModel; + private final TimetableRepository timetableRepository; private final VertexFactory vertexFactory; private VertexLinker linker; @Inject - public OsmBoardingLocationsModule(Graph graph, TransitModel transitModel) { + public OsmBoardingLocationsModule(Graph graph, TimetableRepository timetableRepository) { this.graph = graph; - this.transitModel = transitModel; + this.timetableRepository = timetableRepository; this.vertexFactory = new VertexFactory(graph); } @@ -71,7 +71,7 @@ public OsmBoardingLocationsModule(Graph graph, TransitModel transitModel) { public void buildGraph() { LOG.info("Improving boarding locations by checking OSM entities..."); - StreetIndex streetIndex = graph.getStreetIndexSafe(transitModel.getStopModel()); + StreetIndex streetIndex = graph.getStreetIndexSafe(timetableRepository.getStopModel()); 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 0b17f956ae8..2b4a38da58a 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 @@ -6,26 +6,26 @@ import org.opentripplanner.graph_builder.model.GraphBuilderModule; import org.opentripplanner.transit.model.framework.AbstractTransitEntity; import org.opentripplanner.transit.model.framework.FeedScopedId; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; public class RouteToCentroidStationIdsValidator implements GraphBuilderModule { private final DataImportIssueStore issueStore; private final Collection transitRouteToStationCentroid; - private final TransitModel transitModel; + private final TimetableRepository timetableRepository; public RouteToCentroidStationIdsValidator( DataImportIssueStore issueStore, Collection transitRouteToStationCentroid, - TransitModel transitModel + TimetableRepository timetableRepository ) { this.issueStore = issueStore; this.transitRouteToStationCentroid = transitRouteToStationCentroid; - this.transitModel = transitModel; + this.timetableRepository = timetableRepository; } private void validate() { - var stationIds = transitModel + var stationIds = timetableRepository .getStopModel() .listStations() .stream() 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 a134dd3c75b..59b6a8b48a0 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 @@ -31,7 +31,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.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -48,30 +48,30 @@ public class StreetLinkerModule implements GraphBuilderModule { private static final TraverseModeSet CAR_ONLY = new TraverseModeSet(TraverseMode.CAR); private static final TraverseModeSet WALK_ONLY = new TraverseModeSet(TraverseMode.WALK); private final Graph graph; - private final TransitModel transitModel; + private final TimetableRepository timetableRepository; private final DataImportIssueStore issueStore; private final Boolean addExtraEdgesToAreas; public StreetLinkerModule( Graph graph, - TransitModel transitModel, + TimetableRepository timetableRepository, DataImportIssueStore issueStore, boolean addExtraEdgesToAreas ) { this.graph = graph; - this.transitModel = transitModel; + this.timetableRepository = timetableRepository; this.issueStore = issueStore; this.addExtraEdgesToAreas = addExtraEdgesToAreas; } @Override public void buildGraph() { - transitModel.index(); - graph.index(transitModel.getStopModel()); + timetableRepository.index(); + graph.index(timetableRepository.getStopModel()); graph.getLinker().setAddExtraEdgesToAreas(this.addExtraEdgesToAreas); if (graph.hasStreets) { - linkTransitStops(graph, transitModel); + linkTransitStops(graph, timetableRepository); linkTransitEntrances(graph); linkStationCentroids(graph); linkVehicleParks(graph, issueStore); @@ -81,7 +81,7 @@ public void buildGraph() { graph.calculateConvexHull(); } - public void linkTransitStops(Graph graph, TransitModel transitModel) { + public void linkTransitStops(Graph graph, TimetableRepository timetableRepository) { List vertices = graph.getVerticesOfType(TransitStopVertex.class); var progress = ProgressTracker.track("Linking transit stops to graph", 5000, vertices.size()); LOG.info(progress.startMessage()); @@ -90,7 +90,7 @@ public void linkTransitStops(Graph graph, TransitModel transitModel) { if (OTPFeature.FlexRouting.isOn()) { stopLocationsUsedForFlexTrips = - transitModel + timetableRepository .getAllFlexTrips() .stream() .flatMap(t -> t.getStops().stream()) diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/TimeZoneAdjusterModule.java b/application/src/main/java/org/opentripplanner/graph_builder/module/TimeZoneAdjusterModule.java index 7168066afe3..3bd33f08a52 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/TimeZoneAdjusterModule.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/TimeZoneAdjusterModule.java @@ -8,32 +8,32 @@ import java.util.Map; import org.opentripplanner.graph_builder.model.GraphBuilderModule; import org.opentripplanner.transit.model.network.TripPattern; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; /** * Adjust all scheduled times to match the transit model timezone. */ public class TimeZoneAdjusterModule implements GraphBuilderModule { - private final TransitModel transitModel; + private final TimetableRepository timetableRepository; @Inject - public TimeZoneAdjusterModule(TransitModel transitModel) { - this.transitModel = transitModel; + public TimeZoneAdjusterModule(TimetableRepository timetableRepository) { + this.timetableRepository = timetableRepository; } @Override public void buildGraph() { // TODO: We assume that all time zones follow the same DST rules. In reality we need to split up // the services for each DST transition - final Instant serviceStart = transitModel.getTransitServiceStarts().toInstant(); + final Instant serviceStart = timetableRepository.getTransitServiceStarts().toInstant(); var graphOffset = Duration.ofSeconds( - transitModel.getTimeZone().getRules().getOffset(serviceStart).getTotalSeconds() + timetableRepository.getTimeZone().getRules().getOffset(serviceStart).getTotalSeconds() ); Map agencyShift = new HashMap<>(); - transitModel + timetableRepository .getAllTripPatterns() .forEach(pattern -> { var timeShift = agencyShift.computeIfAbsent( @@ -53,8 +53,8 @@ public void buildGraph() { ) .build(); // replace the original pattern with the updated pattern in the transit model - transitModel.addTripPattern(updatedPattern.getId(), updatedPattern); + timetableRepository.addTripPattern(updatedPattern.getId(), updatedPattern); }); - transitModel.index(); + timetableRepository.index(); } } diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/TripPatternNamer.java b/application/src/main/java/org/opentripplanner/graph_builder/module/TripPatternNamer.java index 744260ba784..238ddc5dc67 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/TripPatternNamer.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/TripPatternNamer.java @@ -12,24 +12,24 @@ import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.model.timetable.TripTimes; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TripPatternNamer implements GraphBuilderModule { private static final Logger LOG = LoggerFactory.getLogger(TripPatternNamer.class); - private final TransitModel transitModel; + private final TimetableRepository timetableRepository; @Inject - public TripPatternNamer(TransitModel transitModel) { - this.transitModel = transitModel; + public TripPatternNamer(TimetableRepository timetableRepository) { + this.timetableRepository = timetableRepository; } @Override public void buildGraph() { /* Generate unique human-readable names for all the TableTripPatterns. */ - generateUniqueNames(transitModel.getAllTripPatterns()); + generateUniqueNames(timetableRepository.getAllTripPatterns()); } /** diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/configure/GraphBuilderFactory.java b/application/src/main/java/org/opentripplanner/graph_builder/module/configure/GraphBuilderFactory.java index 21b125b1188..d0d359cea3e 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/configure/GraphBuilderFactory.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/configure/GraphBuilderFactory.java @@ -33,7 +33,7 @@ import org.opentripplanner.service.worldenvelope.WorldEnvelopeRepository; import org.opentripplanner.standalone.config.BuildConfig; import org.opentripplanner.street.model.StreetLimitationParameters; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; @Singleton @Component(modules = { GraphBuilderModules.class }) @@ -77,7 +77,7 @@ interface Builder { Builder graph(Graph graph); @BindsInstance - Builder transitModel(TransitModel transitModel); + Builder timetableRepository(TimetableRepository timetableRepository); @BindsInstance Builder worldEnvelopeRepository(WorldEnvelopeRepository worldEnvelopeRepository); diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/configure/GraphBuilderModules.java b/application/src/main/java/org/opentripplanner/graph_builder/module/configure/GraphBuilderModules.java index 85b34b5704b..080d69c571e 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/configure/GraphBuilderModules.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/configure/GraphBuilderModules.java @@ -45,7 +45,7 @@ import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.standalone.config.BuildConfig; import org.opentripplanner.street.model.StreetLimitationParameters; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; /** * Configure all modules which is not simple enough to be injected. @@ -95,7 +95,7 @@ static GtfsModule provideGtfsModule( GraphBuilderDataSources dataSources, BuildConfig config, Graph graph, - TransitModel transitModel, + TimetableRepository timetableRepository, DataImportIssueStore issueStore ) { List gtfsBundles = new ArrayList<>(); @@ -108,7 +108,7 @@ static GtfsModule provideGtfsModule( } return new GtfsModule( gtfsBundles, - transitModel, + timetableRepository, graph, issueStore, config.getTransitServicePeriod(), @@ -138,13 +138,13 @@ static NetexModule provideNetexModule( GraphBuilderDataSources dataSources, BuildConfig config, Graph graph, - TransitModel transitModel, + TimetableRepository timetableRepository, DataImportIssueStore issueStore ) { return new NetexConfigure(config) .createNetexModule( dataSources.getNetexConfiguredDatasource(), - transitModel, + timetableRepository, graph, issueStore ); @@ -155,10 +155,10 @@ static NetexModule provideNetexModule( static StreetLinkerModule provideStreetLinkerModule( BuildConfig config, Graph graph, - TransitModel transitModel, + TimetableRepository timetableRepository, DataImportIssueStore issueStore ) { - return new StreetLinkerModule(graph, transitModel, issueStore, config.areaVisibility); + return new StreetLinkerModule(graph, timetableRepository, issueStore, config.areaVisibility); } @Provides @@ -166,14 +166,14 @@ static StreetLinkerModule provideStreetLinkerModule( static PruneIslands providePruneIslands( BuildConfig config, Graph graph, - TransitModel transitModel, + TimetableRepository timetableRepository, DataImportIssueStore issueStore ) { PruneIslands pruneIslands = new PruneIslands( graph, - transitModel, + timetableRepository, issueStore, - new StreetLinkerModule(graph, transitModel, issueStore, config.areaVisibility) + new StreetLinkerModule(graph, timetableRepository, issueStore, config.areaVisibility) ); pruneIslands.setPruningThresholdIslandWithoutStops( config.islandPruning.pruningThresholdIslandWithoutStops @@ -229,12 +229,12 @@ static List provideElevationModules( static DirectTransferGenerator provideDirectTransferGenerator( BuildConfig config, Graph graph, - TransitModel transitModel, + TimetableRepository timetableRepository, DataImportIssueStore issueStore ) { return new DirectTransferGenerator( graph, - transitModel, + timetableRepository, issueStore, config.maxTransferDuration, config.transferRequests @@ -246,12 +246,12 @@ static DirectTransferGenerator provideDirectTransferGenerator( static DirectTransferAnalyzer provideDirectTransferAnalyzer( BuildConfig config, Graph graph, - TransitModel transitModel, + TimetableRepository timetableRepository, DataImportIssueStore issueStore ) { return new DirectTransferAnalyzer( graph, - transitModel, + timetableRepository, issueStore, config.maxTransferDuration.toSeconds() * WalkPreferences.DEFAULT.speed() ); @@ -293,13 +293,13 @@ static DataImportIssueSummary providesDataImportIssueSummary(DataImportIssueStor @Singleton @Nullable static StopConsolidationModule providesStopConsolidationModule( - TransitModel transitModel, + TimetableRepository timetableRepository, @Nullable StopConsolidationRepository repo, GraphBuilderDataSources dataSources ) { return dataSources .stopConsolidation() - .map(ds -> StopConsolidationModule.of(transitModel, repo, ds)) + .map(ds -> StopConsolidationModule.of(timetableRepository, repo, ds)) .orElse(null); } @@ -309,12 +309,12 @@ static StopConsolidationModule providesStopConsolidationModule( static RouteToCentroidStationIdsValidator routeToCentroidStationIdValidator( DataImportIssueStore issueStore, BuildConfig config, - TransitModel transitModel + TimetableRepository timetableRepository ) { var ids = config.transitRouteToStationCentroid(); return ids.isEmpty() ? null - : new RouteToCentroidStationIdsValidator(issueStore, ids, transitModel); + : new RouteToCentroidStationIdsValidator(issueStore, ids, timetableRepository); } /* private methods */ 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 adcfe525414..151470e0c11 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 @@ -9,7 +9,7 @@ import org.opentripplanner.service.worldenvelope.model.WorldEnvelope; import org.opentripplanner.street.model.vertex.Vertex; import org.opentripplanner.transit.model.site.StopLocation; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -28,24 +28,24 @@ public class CalculateWorldEnvelopeModule implements GraphBuilderModule { private static final int LOG_EVERY_N_COORDINATE = 1_000_000; private final Graph graph; - private final TransitModel transitModel; + private final TimetableRepository timetableRepository; private final WorldEnvelopeRepository worldEnvelopeRepository; @Inject public CalculateWorldEnvelopeModule( Graph graph, - TransitModel transitModel, + TimetableRepository timetableRepository, WorldEnvelopeRepository worldEnvelopeRepository ) { this.graph = graph; - this.transitModel = transitModel; + this.timetableRepository = timetableRepository; this.worldEnvelopeRepository = worldEnvelopeRepository; } @Override public void buildGraph() { var vertices = graph.getVertices(); - var stops = transitModel.getStopModel().listStopLocations(); + var stops = timetableRepository.getStopModel().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 26349c0d803..6bb2bc83719 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 @@ -32,7 +32,7 @@ import org.opentripplanner.street.search.TraverseMode; import org.opentripplanner.street.search.request.StreetSearchRequest; import org.opentripplanner.street.search.state.State; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -48,7 +48,7 @@ public class PruneIslands implements GraphBuilderModule { private static final Logger LOG = LoggerFactory.getLogger(PruneIslands.class); private final Graph graph; - private final TransitModel transitModel; + private final TimetableRepository timetableRepository; private final DataImportIssueStore issueStore; private final StreetLinkerModule streetLinkerModule; private int pruningThresholdWithoutStops; @@ -60,12 +60,12 @@ public class PruneIslands implements GraphBuilderModule { public PruneIslands( Graph graph, - TransitModel transitModel, + TimetableRepository timetableRepository, DataImportIssueStore issueStore, StreetLinkerModule streetLinkerModule ) { this.graph = graph; - this.transitModel = transitModel; + this.timetableRepository = timetableRepository; this.issueStore = issueStore; this.streetLinkerModule = streetLinkerModule; } @@ -81,8 +81,8 @@ public void buildGraph() { adaptivePruningDistance ); - this.vertexLinker = graph.getLinkerSafe(transitModel.getStopModel()); - this.streetIndex = graph.getStreetIndexSafe(transitModel.getStopModel()); + this.vertexLinker = graph.getLinkerSafe(timetableRepository.getStopModel()); + this.streetIndex = graph.getStreetIndexSafe(timetableRepository.getStopModel()); pruneIslands(TraverseMode.BICYCLE); pruneIslands(TraverseMode.WALK); @@ -91,7 +91,7 @@ public void buildGraph() { // reconnect stops that got disconnected if (streetLinkerModule != null) { LOG.info("Reconnecting stops"); - streetLinkerModule.linkTransitStops(graph, transitModel); + streetLinkerModule.linkTransitStops(graph, timetableRepository); int isolated = 0; for (TransitStopVertex tStop : graph.getVerticesOfType(TransitStopVertex.class)) { if (tStop.getDegreeOut() + tStop.getDegreeIn() == 0) { 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 2f7feb5993e..59acabee819 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/graphbuilder/GtfsModule.java +++ b/application/src/main/java/org/opentripplanner/gtfs/graphbuilder/GtfsModule.java @@ -35,7 +35,7 @@ import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.graph_builder.model.GraphBuilderModule; -import org.opentripplanner.graph_builder.module.AddTransitModelEntitiesToGraph; +import org.opentripplanner.graph_builder.module.AddTransitEntitiesToGraph; import org.opentripplanner.graph_builder.module.GtfsFeedId; import org.opentripplanner.graph_builder.module.ValidateAndInterpolateStopTimesForEachTrip; import org.opentripplanner.graph_builder.module.geometry.GeometryProcessor; @@ -51,7 +51,7 @@ import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.standalone.config.BuildConfig; import org.opentripplanner.transit.model.framework.FeedScopedId; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -77,21 +77,21 @@ public class GtfsModule implements GraphBuilderModule { private final List gtfsBundles; private final FareServiceFactory fareServiceFactory; - private final TransitModel transitModel; + private final TimetableRepository timetableRepository; private final Graph graph; private final DataImportIssueStore issueStore; private int nextAgencyId = 1; // used for generating agency IDs to resolve ID conflicts public GtfsModule( List bundles, - TransitModel transitModel, + TimetableRepository timetableRepository, Graph graph, DataImportIssueStore issueStore, ServiceDateInterval transitPeriodLimit, FareServiceFactory fareServiceFactory ) { this.gtfsBundles = bundles; - this.transitModel = transitModel; + this.timetableRepository = timetableRepository; this.graph = graph; this.issueStore = issueStore; this.transitPeriodLimit = transitPeriodLimit; @@ -100,13 +100,13 @@ public GtfsModule( public GtfsModule( List bundles, - TransitModel transitModel, + TimetableRepository timetableRepository, Graph graph, ServiceDateInterval transitPeriodLimit ) { this( bundles, - transitModel, + timetableRepository, graph, DataImportIssueStore.NOOP, transitPeriodLimit, @@ -132,7 +132,7 @@ public void buildGraph() { feedIdsEncountered.put(feedId, gtfsBundle); GTFSToOtpTransitServiceMapper mapper = new GTFSToOtpTransitServiceMapper( - new OtpTransitServiceBuilder(transitModel.getStopModel(), issueStore), + new OtpTransitServiceBuilder(timetableRepository.getStopModel(), issueStore), feedId, issueStore, gtfsBundle.discardMinTransferTimes(), @@ -170,7 +170,7 @@ public void buildGraph() { // NB! The calls below have side effects - the builder state is updated! createTripPatterns( graph, - transitModel, + timetableRepository, builder, calendarServiceData.getServiceIds(), geometryProcessor, @@ -182,11 +182,11 @@ public void buildGraph() { // if this or previously processed gtfs bundle has transit that has not been filtered out hasTransit = hasTransit || otpTransitService.hasActiveTransit(); - addTransitModelToGraph(graph, transitModel, gtfsBundle, otpTransitService); + addTimetableRepositoryToGraph(graph, timetableRepository, gtfsBundle, otpTransitService); if (gtfsBundle.blockBasedInterlining()) { new InterlineProcessor( - transitModel.getTransferService(), + timetableRepository.getTransferService(), builder.getStaySeatedNotAllowed(), gtfsBundle.maxInterlineDistance(), issueStore, @@ -206,9 +206,9 @@ public void buildGraph() { gtfsBundles.forEach(GtfsBundle::close); } - transitModel.validateTimeZones(); + timetableRepository.validateTimeZones(); - transitModel.updateCalendarServiceData(hasTransit, calendarServiceData, issueStore); + timetableRepository.updateCalendarServiceData(hasTransit, calendarServiceData, issueStore); } /** @@ -268,7 +268,7 @@ private void validateAndInterpolateStopTimesForEachTrip( */ private void createTripPatterns( Graph graph, - TransitModel transitModel, + TimetableRepository timetableRepository, OtpTransitServiceBuilder builder, Set calServiceIds, GeometryProcessor geometryProcessor, @@ -282,25 +282,25 @@ private void createTripPatterns( geometryProcessor ); buildTPOp.run(); - transitModel.setHasFrequencyService( - transitModel.hasFrequencyService() || buildTPOp.hasFrequencyBasedTrips() + timetableRepository.setHasFrequencyService( + timetableRepository.hasFrequencyService() || buildTPOp.hasFrequencyBasedTrips() ); - transitModel.setHasScheduledService( - transitModel.hasScheduledService() || buildTPOp.hasScheduledTrips() + timetableRepository.setHasScheduledService( + timetableRepository.hasScheduledService() || buildTPOp.hasScheduledTrips() ); } - private void addTransitModelToGraph( + private void addTimetableRepositoryToGraph( Graph graph, - TransitModel transitModel, + TimetableRepository timetableRepository, GtfsBundle gtfsBundle, OtpTransitService otpTransitService ) { - AddTransitModelEntitiesToGraph.addToGraph( + AddTransitEntitiesToGraph.addToGraph( otpTransitService, gtfsBundle.subwayAccessTime, graph, - transitModel + timetableRepository ); } diff --git a/application/src/main/java/org/opentripplanner/model/TimetableSnapshot.java b/application/src/main/java/org/opentripplanner/model/TimetableSnapshot.java index 6b1190a66b3..20f1312bccd 100644 --- a/application/src/main/java/org/opentripplanner/model/TimetableSnapshot.java +++ b/application/src/main/java/org/opentripplanner/model/TimetableSnapshot.java @@ -130,7 +130,7 @@ public class TimetableSnapshot { /** * The realTimeAdded* maps are indexes on the trips created at runtime (extra-journey), and the * Route, TripPattern, TripOnServiceDate they refer to. - * They are meant to override the corresponding indexes in TransitModelIndex. + * They are meant to override the corresponding indexes in TimetableRepositoryIndex. */ private final Map realtimeAddedRoutes; private final Map realTimeAddedTrips; diff --git a/application/src/main/java/org/opentripplanner/netex/NetexBundle.java b/application/src/main/java/org/opentripplanner/netex/NetexBundle.java index a0e0aae8500..b061c9e9352 100644 --- a/application/src/main/java/org/opentripplanner/netex/NetexBundle.java +++ b/application/src/main/java/org/opentripplanner/netex/NetexBundle.java @@ -125,19 +125,19 @@ public void close() throws IOException { /** Load all files entries in the bundle */ private void loadFileEntries() { // Load global shared files - loadFilesThenMapToOtpTransitModel("shared file", hierarchy.sharedEntries()); + loadFilesThenMapToTimetableRepository("shared file", hierarchy.sharedEntries()); for (GroupEntries group : hierarchy.groups()) { LOG.info("reading group {}", group.name()); scopeInputData(() -> { // Load shared group files - loadFilesThenMapToOtpTransitModel("shared group file", group.sharedEntries()); + loadFilesThenMapToTimetableRepository("shared group file", group.sharedEntries()); for (DataSource entry : group.independentEntries()) { scopeInputData(() -> { // Load each independent file in group - loadFilesThenMapToOtpTransitModel("group file", List.of(entry)); + loadFilesThenMapToTimetableRepository("group file", List.of(entry)); }); } }); @@ -164,7 +164,7 @@ private void scopeInputData(Runnable task) { * when read, would lead to missing references, since the order entries are read is not enforced * in any way. */ - private void loadFilesThenMapToOtpTransitModel( + private void loadFilesThenMapToTimetableRepository( String fileDescription, Iterable entries ) { diff --git a/application/src/main/java/org/opentripplanner/netex/NetexModule.java b/application/src/main/java/org/opentripplanner/netex/NetexModule.java index 92ee25dbab2..4c45131389f 100644 --- a/application/src/main/java/org/opentripplanner/netex/NetexModule.java +++ b/application/src/main/java/org/opentripplanner/netex/NetexModule.java @@ -5,7 +5,7 @@ import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.graph_builder.model.GraphBuilderModule; -import org.opentripplanner.graph_builder.module.AddTransitModelEntitiesToGraph; +import org.opentripplanner.graph_builder.module.AddTransitEntitiesToGraph; import org.opentripplanner.graph_builder.module.ValidateAndInterpolateStopTimesForEachTrip; import org.opentripplanner.model.OtpTransitService; import org.opentripplanner.model.TripStopTimes; @@ -15,7 +15,7 @@ import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.routing.vehicle_parking.VehicleParkingHelper; import org.opentripplanner.standalone.config.BuildConfig; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; /** * This module is used for importing the NeTEx CEN Technical Standard for exchanging Public @@ -28,7 +28,7 @@ public class NetexModule implements GraphBuilderModule { private final int subwayAccessTime; private final Graph graph; - private final TransitModel transitModel; + private final TimetableRepository timetableRepository; private final DataImportIssueStore issueStore; /** @@ -41,14 +41,14 @@ public class NetexModule implements GraphBuilderModule { public NetexModule( Graph graph, - TransitModel transitModel, + TimetableRepository timetableRepository, DataImportIssueStore issueStore, int subwayAccessTime, ServiceDateInterval transitPeriodLimit, List netexBundles ) { this.graph = graph; - this.transitModel = transitModel; + this.timetableRepository = timetableRepository; this.issueStore = issueStore; this.subwayAccessTime = subwayAccessTime; this.transitPeriodLimit = transitPeriodLimit; @@ -70,7 +70,7 @@ public void buildGraph() { ); transitBuilder.limitServiceDays(transitPeriodLimit); for (var tripOnServiceDate : transitBuilder.getTripOnServiceDates().values()) { - transitModel.addTripOnServiceDate(tripOnServiceDate); + timetableRepository.addTripOnServiceDate(tripOnServiceDate); } calendarServiceData.add(transitBuilder.buildCalendarServiceData()); @@ -87,20 +87,20 @@ public void buildGraph() { // if this or previously processed netex bundle has transit that has not been filtered out hasActiveTransit = hasActiveTransit || otpService.hasActiveTransit(); - // TODO OTP2 - Move this into the AddTransitModelEntitiesToGraph + // TODO OTP2 - Move this into the AddTransitEntitiesToGraph // - and make sure they also work with GTFS feeds - GTFS do no // - have operators and notice assignments. - transitModel.addOperators(otpService.getAllOperators()); - transitModel.addNoticeAssignments(otpService.getNoticeAssignments()); + timetableRepository.addOperators(otpService.getAllOperators()); + timetableRepository.addNoticeAssignments(otpService.getNoticeAssignments()); - AddTransitModelEntitiesToGraph.addToGraph( + AddTransitEntitiesToGraph.addToGraph( otpService, subwayAccessTime, graph, - transitModel + timetableRepository ); - transitModel.validateTimeZones(); + timetableRepository.validateTimeZones(); var lots = transitBuilder.vehicleParkings(); graph.getVehicleParkingService().updateVehicleParking(lots, List.of()); @@ -108,7 +108,11 @@ public void buildGraph() { lots.forEach(linker::linkVehicleParkingToGraph); } - transitModel.updateCalendarServiceData(hasActiveTransit, calendarServiceData, issueStore); + timetableRepository.updateCalendarServiceData( + hasActiveTransit, + calendarServiceData, + issueStore + ); } catch (Exception e) { throw new RuntimeException(e); } 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 5f4b665e362..5d824f833db 100644 --- a/application/src/main/java/org/opentripplanner/netex/configure/NetexConfigure.java +++ b/application/src/main/java/org/opentripplanner/netex/configure/NetexConfigure.java @@ -12,7 +12,7 @@ import org.opentripplanner.netex.loader.NetexDataSourceHierarchy; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.standalone.config.BuildConfig; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; /** * Responsible for dependency injection and creating main NeTEx module objects. This decouple the @@ -35,7 +35,7 @@ public NetexConfigure(BuildConfig builderParams) { public NetexModule createNetexModule( Iterable> netexSources, - TransitModel transitModel, + TimetableRepository timetableRepository, Graph graph, DataImportIssueStore issueStore ) { @@ -43,7 +43,7 @@ public NetexModule createNetexModule( for (ConfiguredDataSource it : netexSources) { var transitServiceBuilder = new OtpTransitServiceBuilder( - transitModel.getStopModel(), + timetableRepository.getStopModel(), issueStore ); netexBundles.add(netexBundle(transitServiceBuilder, it)); @@ -51,7 +51,7 @@ public NetexModule createNetexModule( return new NetexModule( graph, - transitModel, + timetableRepository, issueStore, buildParams.getSubwayAccessTimeSeconds(), buildParams.getTransitServicePeriod(), diff --git a/application/src/main/java/org/opentripplanner/netex/mapping/TripMapper.java b/application/src/main/java/org/opentripplanner/netex/mapping/TripMapper.java index 30b87d248a0..02b5de80bb3 100644 --- a/application/src/main/java/org/opentripplanner/netex/mapping/TripMapper.java +++ b/application/src/main/java/org/opentripplanner/netex/mapping/TripMapper.java @@ -137,7 +137,7 @@ Trip mapServiceJourney(ServiceJourney serviceJourney, Supplier headsign) ); // TODO RTM - Instead of getting the first headsign from the StopTime this could be the - // - default behaviour of the TransitModel - So, in the NeTEx mapper we would just + // - default behaviour of the TimetableRepository - So, in the NeTEx mapper we would just // - ignore setting the headsign on the Trip. builder.withHeadsign(new NonLocalizedString(headsign.get())); 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 e5f0544f584..9e07c57ede7 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 @@ -17,15 +17,15 @@ import org.opentripplanner.transit.service.StopModel; /** - * This is a replica of public transportation data already present in TransitModel, but rearranged + * This is a replica of public transportation data already present in TimetableRepository, but rearranged * and indexed differently for efficient use by the Raptor router. Patterns and trips are split out * by days, retaining only the services actually running on any particular day. * * TODO RT_AB: this name may reflect usage in R5, where the TransportNetwork encompasses two * sub-aggregates (one for the streets and one for the public transit data). Here, the TransitLayer - * seems to just be an indexed and rearranged copy of the main TransitModel instance. TG has + * seems to just be an indexed and rearranged copy of the main TimetableRepository instance. TG has * indicated that "layer" should be restricted in its standard OO meaning, and this class should - * really be merged into TransitModel. + * really be merged into TimetableRepository. */ public class TransitLayer { 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 13f8facef3d..a9da73200cc 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 @@ -25,13 +25,13 @@ import org.opentripplanner.transit.model.site.StopTransferPriority; import org.opentripplanner.transit.service.DefaultTransitService; import org.opentripplanner.transit.service.StopModel; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.transit.service.TransitService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * Maps the TransitLayer object from the TransitModel object. The ServiceDay hierarchy is reversed, + * Maps the TransitLayer object from the TimetableRepository object. The ServiceDay hierarchy is reversed, * with service days at the top level, which contains TripPatternForDate objects that contain only * TripSchedules running on that particular date. This makes it faster to filter out TripSchedules * when doing Range Raptor searches. @@ -48,16 +48,16 @@ public class TransitLayerMapper { private final TransitService transitService; private final StopModel stopModel; - private TransitLayerMapper(TransitModel transitModel) { - this.transitService = new DefaultTransitService(transitModel); - this.stopModel = transitModel.getStopModel(); + private TransitLayerMapper(TimetableRepository timetableRepository) { + this.transitService = new DefaultTransitService(timetableRepository); + this.stopModel = timetableRepository.getStopModel(); } public static TransitLayer map( TransitTuningParameters tuningParameters, - TransitModel transitModel + TimetableRepository timetableRepository ) { - return new TransitLayerMapper(transitModel).map(tuningParameters); + return new TransitLayerMapper(timetableRepository).map(tuningParameters); } private TransitLayer map(TransitTuningParameters tuningParameters) { @@ -65,7 +65,7 @@ private TransitLayer map(TransitTuningParameters tuningParameters) { List> transferByStopIndex; ConstrainedTransfersForPatterns constrainedTransfers = null; - LOG.info("Mapping transitLayer from TransitModel..."); + LOG.info("Mapping transitLayer from TimetableRepository..."); Collection allTripPatterns = transitService.getAllTripPatterns(); diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerUpdater.java b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerUpdater.java index 934bec39c11..c814a48f114 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerUpdater.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerUpdater.java @@ -30,7 +30,7 @@ * the updated copy in an atomic operation. This ensures that any TransitLayer that is referenced * from the Graph is never changed. * - * This is a way of keeping the TransitLayer up to date (in sync with the TransitModel plus its most + * This is a way of keeping the TransitLayer up to date (in sync with the TimetableRepository plus its most * recent TimetableSnapshot) without repeatedly deriving it from scratch every few seconds. The same * incremental changes are applied to both the TimetableSnapshot and the TransitLayer and they are * published together. 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 1fbea77e759..bb1944d0c4b 100644 --- a/application/src/main/java/org/opentripplanner/routing/graph/Graph.java +++ b/application/src/main/java/org/opentripplanner/routing/graph/Graph.java @@ -43,10 +43,10 @@ * In OTP1, the Graph contained vertices and edges representing the entire transportation network, * including edges representing both street segments and public transit lines connecting stops. In * OTP2, the Graph edges now represent only the street network. Transit routing is performed on - * other data structures suited to the Raptor algorithm (the TransitModel). Some transit-related + * other data structures suited to the Raptor algorithm (the TimetableRepository). Some transit-related * vertices are still present in the Graph, specifically those representing transit stops, * entrances, and elevators. Their presence in the street graph creates a connection between the two - * routable data structures (identifying where stops in the TransitModel are located relative to + * routable data structures (identifying where stops in the TimetableRepository are located relative to * roads). *

* Other data structures related to street routing, such as elevation data and vehicle parking 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 b2404adc5d1..327428cfccb 100644 --- a/application/src/main/java/org/opentripplanner/routing/graph/SerializedGraphObject.java +++ b/application/src/main/java/org/opentripplanner/routing/graph/SerializedGraphObject.java @@ -35,7 +35,7 @@ import org.opentripplanner.street.model.vertex.Vertex; import org.opentripplanner.transit.model.basic.SubMode; import org.opentripplanner.transit.model.network.RoutingTripPattern; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -55,7 +55,7 @@ public class SerializedGraphObject implements Serializable { private static final Logger LOG = LoggerFactory.getLogger(SerializedGraphObject.class); public final Graph graph; - public final TransitModel transitModel; + public final TimetableRepository timetableRepository; public final WorldEnvelopeRepository worldEnvelopeRepository; private final Collection edges; @@ -82,7 +82,7 @@ public class SerializedGraphObject implements Serializable { public SerializedGraphObject( Graph graph, - TransitModel transitModel, + TimetableRepository timetableRepository, WorldEnvelopeRepository worldEnvelopeRepository, BuildConfig buildConfig, RouterConfig routerConfig, @@ -93,7 +93,7 @@ public SerializedGraphObject( ) { this.graph = graph; this.edges = graph.getEdges(); - this.transitModel = transitModel; + this.timetableRepository = timetableRepository; this.worldEnvelopeRepository = worldEnvelopeRepository; this.buildConfig = buildConfig; this.routerConfig = routerConfig; @@ -184,9 +184,9 @@ private static SerializedGraphObject load(InputStream inputStream, String source ); LOG.debug("Graph read."); serObj.reconstructEdgeLists(); - serObj.transitModel.getStopModel().reindexAfterDeserialization(); - serObj.transitModel.index(); - logSerializationCompleteStatus(serObj.graph, serObj.transitModel); + serObj.timetableRepository.getStopModel().reindexAfterDeserialization(); + serObj.timetableRepository.index(); + logSerializationCompleteStatus(serObj.graph, serObj.timetableRepository); return serObj; } catch (IOException e) { LOG.error("IO exception while loading graph: {}", e.getLocalizedMessage(), e); @@ -256,11 +256,14 @@ private void save(OutputStream outputStream, String graphName, long size) { // ((InstanceCountingClassResolver) kryo.getClassResolver()).summarize(); } - private static void logSerializationCompleteStatus(Graph graph, TransitModel transitModel) { + private static void logSerializationCompleteStatus( + Graph graph, + TimetableRepository timetableRepository + ) { var f = new OtpNumberFormat(); - var nStops = f.formatNumber(transitModel.getStopModel().stopIndexSize()); - var nTransfers = f.formatNumber(transitModel.getTransferService().listAll().size()); - var nPatterns = f.formatNumber(transitModel.getAllTripPatterns().size()); + var nStops = f.formatNumber(timetableRepository.getStopModel().stopIndexSize()); + var nTransfers = f.formatNumber(timetableRepository.getTransferService().listAll().size()); + var nPatterns = f.formatNumber(timetableRepository.getAllTripPatterns().size()); var nVertices = f.formatNumber(graph.countVertices()); var nEdges = f.formatNumber(graph.countEdges()); diff --git a/application/src/main/java/org/opentripplanner/routing/impl/DelegatingTransitAlertServiceImpl.java b/application/src/main/java/org/opentripplanner/routing/impl/DelegatingTransitAlertServiceImpl.java index 8da6fc21aa7..e63894b1a2c 100644 --- a/application/src/main/java/org/opentripplanner/routing/impl/DelegatingTransitAlertServiceImpl.java +++ b/application/src/main/java/org/opentripplanner/routing/impl/DelegatingTransitAlertServiceImpl.java @@ -11,7 +11,7 @@ import org.opentripplanner.routing.services.TransitAlertService; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.timetable.Direction; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.updater.alert.TransitAlertProvider; /** @@ -30,14 +30,14 @@ public class DelegatingTransitAlertServiceImpl implements TransitAlertService { private final ArrayList transitAlertServices = new ArrayList<>(); /** - * Constructor which scans over all existing GraphUpdaters associated with a TransitModel + * Constructor which scans over all existing GraphUpdaters associated with a TimetableRepository * instance and retains references to all their TransitAlertService instances. * This implies that these instances are expected to remain in use indefinitely (not be replaced * with new instances or taken out of service over time). */ - public DelegatingTransitAlertServiceImpl(TransitModel transitModel) { - if (transitModel.getUpdaterManager() != null) { - transitModel + public DelegatingTransitAlertServiceImpl(TimetableRepository timetableRepository) { + if (timetableRepository.getUpdaterManager() != null) { + timetableRepository .getUpdaterManager() .getUpdaterList() .stream() 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 0cc24c691e9..2662eb7d3e5 100644 --- a/application/src/main/java/org/opentripplanner/routing/impl/TransitAlertServiceImpl.java +++ b/application/src/main/java/org/opentripplanner/routing/impl/TransitAlertServiceImpl.java @@ -13,7 +13,7 @@ import org.opentripplanner.routing.services.TransitAlertService; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.timetable.Direction; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; /** * This is the primary implementation of TransitAlertService, which actually retains its own set @@ -32,12 +32,12 @@ */ public class TransitAlertServiceImpl implements TransitAlertService { - private final TransitModel transitModel; + private final TimetableRepository timetableRepository; private Multimap alerts = HashMultimap.create(); - public TransitAlertServiceImpl(TransitModel transitModel) { - this.transitModel = transitModel; + public TransitAlertServiceImpl(TimetableRepository timetableRepository) { + this.timetableRepository = timetableRepository; } @Override @@ -85,8 +85,8 @@ public Collection getStopAlerts( } if (result.isEmpty()) { // Search for alerts on parent-stop - if (transitModel != null) { - var quay = transitModel.getStopModel().getRegularStop(stopId); + if (timetableRepository != null) { + var quay = timetableRepository.getStopModel().getRegularStop(stopId); if (quay != null) { // TODO - SIRI: Add alerts from parent- and multimodal-stops /* diff --git a/application/src/main/java/org/opentripplanner/standalone/OTPMain.java b/application/src/main/java/org/opentripplanner/standalone/OTPMain.java index d865f8fa28c..915b7091ba6 100644 --- a/application/src/main/java/org/opentripplanner/standalone/OTPMain.java +++ b/application/src/main/java/org/opentripplanner/standalone/OTPMain.java @@ -17,7 +17,7 @@ import org.opentripplanner.standalone.configure.ConstructApplication; import org.opentripplanner.standalone.configure.LoadApplication; import org.opentripplanner.standalone.server.GrizzlyServer; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.updater.configure.UpdaterConfigurator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -150,7 +150,7 @@ private static void startOTPServer(CommandLineParameters cli) { // with using the embedded router config. new SerializedGraphObject( app.graph(), - app.transitModel(), + app.timetableRepository(), app.worldEnvelopeRepository(), config.buildConfig(), config.routerConfig(), @@ -187,8 +187,8 @@ private static void detectUnusedConfigParams(CommandLineParameters cli, ConfigMo private static void startOtpWebServer(CommandLineParameters params, ConstructApplication app) { // Index graph for travel search - app.transitModel().index(); - app.graph().index(app.transitModel().getStopModel()); + app.timetableRepository().index(); + app.graph().index(app.timetableRepository().getStopModel()); // publishing the config version info make it available to the APIs setOtpConfigVersionsOnServerInfo(app); @@ -205,7 +205,7 @@ private static void startOtpWebServer(CommandLineParameters params, ConstructApp if (params.doServe()) { GrizzlyServer grizzlyServer = app.createGrizzlyServer(); - registerShutdownHookToGracefullyShutDownServer(app.transitModel(), app.raptorConfig()); + registerShutdownHookToGracefullyShutDownServer(app.timetableRepository(), app.raptorConfig()); // Loop to restart server on uncaught fatal exceptions. while (true) { @@ -232,14 +232,14 @@ private static void startOtpWebServer(CommandLineParameters params, ConstructApp * */ private static void registerShutdownHookToGracefullyShutDownServer( - TransitModel transitModel, + TimetableRepository timetableRepository, RaptorConfig raptorConfig ) { ApplicationShutdownSupport.addShutdownHook( "server-shutdown", () -> { LOG.info("OTP shutdown started..."); - UpdaterConfigurator.shutdownGraph(transitModel); + UpdaterConfigurator.shutdownGraph(timetableRepository); raptorConfig.shutdown(); WeakCollectionCleaner.DEFAULT.exit(); DeferredAuthorityFactory.exit(); 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 52f7970ccd7..560f234187a 100644 --- a/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplication.java +++ b/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplication.java @@ -33,7 +33,7 @@ import org.opentripplanner.street.model.StreetLimitationParameters; import org.opentripplanner.street.model.elevation.ElevationUtils; import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.updater.configure.UpdaterConfigurator; import org.opentripplanner.visualizer.GraphVisualizer; import org.slf4j.Logger; @@ -69,7 +69,7 @@ public class ConstructApplication { ConstructApplication( CommandLineParameters cli, Graph graph, - TransitModel transitModel, + TimetableRepository timetableRepository, WorldEnvelopeRepository worldEnvelopeRepository, ConfigModel config, GraphBuilderDataSources graphBuilderDataSources, @@ -90,7 +90,7 @@ public class ConstructApplication { .builder() .configModel(config) .graph(graph) - .transitModel(transitModel) + .timetableRepository(timetableRepository) .graphVisualizer(graphVisualizer) .worldEnvelopeRepository(worldEnvelopeRepository) .emissionsDataModel(emissionsDataModel) @@ -125,7 +125,7 @@ public GraphBuilder createGraphBuilder() { buildConfig(), graphBuilderDataSources, graph(), - transitModel(), + timetableRepository(), factory.worldEnvelopeRepository(), factory.emissionsDataModel(), factory.stopConsolidationRepository(), @@ -156,25 +156,25 @@ private void setupTransitRoutingServer() { enableRequestTraceLogging(); createMetricsLogging(); - creatTransitLayerForRaptor(transitModel(), routerConfig().transitTuningConfig()); + creatTransitLayerForRaptor(timetableRepository(), routerConfig().transitTuningConfig()); /* Create updater modules from JSON config. */ UpdaterConfigurator.configure( graph(), realtimeVehicleRepository(), vehicleRentalRepository(), - transitModel(), + timetableRepository(), routerConfig().updaterConfig() ); initEllipsoidToGeoidDifference(); - initializeTransferCache(routerConfig().transitTuningConfig(), transitModel()); + initializeTransferCache(routerConfig().transitTuningConfig(), timetableRepository()); if (OTPFeature.TransmodelGraphQlApi.isOn()) { TransmodelAPI.setUp( routerConfig().transmodelApi(), - transitModel(), + timetableRepository(), routerConfig().routingRequestDefaults() ); } @@ -200,25 +200,29 @@ private void initEllipsoidToGeoidDifference() { * Create transit layer for Raptor routing. Here we map the scheduled timetables. */ public static void creatTransitLayerForRaptor( - TransitModel transitModel, + TimetableRepository timetableRepository, TransitTuningParameters tuningParameters ) { - if (!transitModel.hasTransit() || !transitModel.isIndexed()) { + if (!timetableRepository.hasTransit() || !timetableRepository.isIndexed()) { LOG.warn( "Cannot create Raptor data, that requires the graph to have transit data and be indexed." ); } LOG.info("Creating transit layer for Raptor routing."); - transitModel.setTransitLayer(TransitLayerMapper.map(tuningParameters, transitModel)); - transitModel.setRealtimeTransitLayer(new TransitLayer(transitModel.getTransitLayer())); - transitModel.setTransitLayerUpdater( - new TransitLayerUpdater(new DefaultTransitService(transitModel)) + timetableRepository.setTransitLayer( + TransitLayerMapper.map(tuningParameters, timetableRepository) + ); + timetableRepository.setRealtimeTransitLayer( + new TransitLayer(timetableRepository.getTransitLayer()) + ); + timetableRepository.setTransitLayerUpdater( + new TransitLayerUpdater(new DefaultTransitService(timetableRepository)) ); } public static void initializeTransferCache( TransitTuningParameters transitTuningConfig, - TransitModel transitModel + TimetableRepository timetableRepository ) { var transferCacheRequests = transitTuningConfig.transferCacheRequests(); if (!transferCacheRequests.isEmpty()) { @@ -231,7 +235,7 @@ public static void initializeTransferCache( LOG.info(progress.startMessage()); transferCacheRequests.forEach(request -> { - transitModel.getTransitLayer().initTransferCacheForRequest(request); + timetableRepository.getTransitLayer().initTransferCacheForRequest(request); //noinspection Convert2MethodRef progress.step(s -> LOG.info(s)); @@ -241,8 +245,8 @@ public static void initializeTransferCache( } } - public TransitModel transitModel() { - return factory.transitModel(); + public TimetableRepository timetableRepository() { + return factory.timetableRepository(); } public DataImportIssueSummary dataImportIssueSummary() { 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..e828406a35e 100644 --- a/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationFactory.java +++ b/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationFactory.java @@ -34,7 +34,7 @@ import org.opentripplanner.street.model.StreetLimitationParameters; import org.opentripplanner.street.service.StreetLimitationParametersServiceModule; import org.opentripplanner.transit.configure.TransitModule; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.transit.service.TransitService; import org.opentripplanner.visualizer.GraphVisualizer; @@ -65,7 +65,7 @@ public interface ConstructApplicationFactory { ConfigModel config(); RaptorConfig raptorConfig(); Graph graph(); - TransitModel transitModel(); + TimetableRepository timetableRepository(); WorldEnvelopeRepository worldEnvelopeRepository(); WorldEnvelopeService worldEnvelopeService(); RealtimeVehicleRepository realtimeVehicleRepository(); @@ -102,7 +102,7 @@ interface Builder { Builder graph(Graph graph); @BindsInstance - Builder transitModel(TransitModel transitModel); + Builder timetableRepository(TimetableRepository timetableRepository); @BindsInstance Builder graphVisualizer(@Nullable GraphVisualizer graphVisualizer); diff --git a/application/src/main/java/org/opentripplanner/standalone/configure/LoadApplication.java b/application/src/main/java/org/opentripplanner/standalone/configure/LoadApplication.java index 19415e489b4..300eb24f997 100644 --- a/application/src/main/java/org/opentripplanner/standalone/configure/LoadApplication.java +++ b/application/src/main/java/org/opentripplanner/standalone/configure/LoadApplication.java @@ -12,7 +12,7 @@ import org.opentripplanner.standalone.config.CommandLineParameters; import org.opentripplanner.standalone.config.ConfigModel; import org.opentripplanner.street.model.StreetLimitationParameters; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; /** * This class is responsible for loading configuration and setting up the OTP data store. @@ -54,7 +54,7 @@ public DataSource getInputGraphDataStore() { public ConstructApplication appConstruction(SerializedGraphObject obj) { return createAppConstruction( obj.graph, - obj.transitModel, + obj.timetableRepository, obj.worldEnvelopeRepository, obj.issueSummary, obj.emissionsDataModel, @@ -67,7 +67,7 @@ public ConstructApplication appConstruction(SerializedGraphObject obj) { public ConstructApplication appConstruction() { return createAppConstruction( factory.emptyGraph(), - factory.emptyTransitModel(), + factory.emptyTimetableRepository(), factory.emptyWorldEnvelopeRepository(), DataImportIssueSummary.empty(), factory.emptyEmissionsDataModel(), @@ -89,7 +89,7 @@ public ConfigModel config() { private ConstructApplication createAppConstruction( Graph graph, - TransitModel transitModel, + TimetableRepository timetableRepository, WorldEnvelopeRepository worldEnvelopeRepository, DataImportIssueSummary issueSummary, @Nullable EmissionsDataModel emissionsDataModel, @@ -99,7 +99,7 @@ private ConstructApplication createAppConstruction( return new ConstructApplication( cli, graph, - transitModel, + timetableRepository, worldEnvelopeRepository, config(), graphBuilderDataSources(), diff --git a/application/src/main/java/org/opentripplanner/standalone/configure/LoadApplicationFactory.java b/application/src/main/java/org/opentripplanner/standalone/configure/LoadApplicationFactory.java index aacb42c4336..8d11d645c48 100644 --- a/application/src/main/java/org/opentripplanner/standalone/configure/LoadApplicationFactory.java +++ b/application/src/main/java/org/opentripplanner/standalone/configure/LoadApplicationFactory.java @@ -17,7 +17,7 @@ import org.opentripplanner.standalone.config.ConfigModel; import org.opentripplanner.standalone.config.configure.LoadConfigModule; import org.opentripplanner.street.model.StreetLimitationParameters; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; /** * Dagger dependency injection Factory to create components for the OTP load application phase. @@ -41,7 +41,7 @@ public interface LoadApplicationFactory { Graph emptyGraph(); @Singleton - TransitModel emptyTransitModel(); + TimetableRepository emptyTimetableRepository(); @Singleton WorldEnvelopeRepository emptyWorldEnvelopeRepository(); diff --git a/application/src/main/java/org/opentripplanner/standalone/server/MetricsLogging.java b/application/src/main/java/org/opentripplanner/standalone/server/MetricsLogging.java index 3ed5685015b..c9161c7588a 100644 --- a/application/src/main/java/org/opentripplanner/standalone/server/MetricsLogging.java +++ b/application/src/main/java/org/opentripplanner/standalone/server/MetricsLogging.java @@ -22,7 +22,7 @@ import org.opentripplanner.graph_builder.issue.api.DataImportIssueSummary; import org.opentripplanner.raptor.configure.RaptorConfig; import org.opentripplanner.routing.algorithm.raptoradapter.transit.TripSchedule; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; /** * This class is responsible for wiring up various metrics to micrometer, which we use for @@ -32,7 +32,7 @@ public class MetricsLogging { @Inject public MetricsLogging( - TransitModel transitModel, + TimetableRepository timetableRepository, RaptorConfig raptorConfig, DataImportIssueSummary issueSummary ) { @@ -48,9 +48,9 @@ public MetricsLogging( new ProcessorMetrics().bindTo(Metrics.globalRegistry); new UptimeMetrics().bindTo(Metrics.globalRegistry); - if (transitModel.getTransitLayer() != null) { + if (timetableRepository.getTransitLayer() != null) { new GuavaCacheMetrics( - transitModel.getTransitLayer().getTransferCache().getTransferCache(), + timetableRepository.getTransitLayer().getTransferCache().getTransferCache(), "raptorTransfersCache", List.of(Tag.of("cache", "raptorTransfers")) ) @@ -63,23 +63,23 @@ public MetricsLogging( ) .bindTo(Metrics.globalRegistry); - if (transitModel.getUpdaterManager() != null) { + if (timetableRepository.getUpdaterManager() != null) { new ExecutorServiceMetrics( - transitModel.getUpdaterManager().getPollingUpdaterPool(), + timetableRepository.getUpdaterManager().getPollingUpdaterPool(), "pollingGraphUpdaters", List.of(Tag.of("pool", "pollingGraphUpdaters")) ) .bindTo(Metrics.globalRegistry); new ExecutorServiceMetrics( - transitModel.getUpdaterManager().getNonPollingUpdaterPool(), + timetableRepository.getUpdaterManager().getNonPollingUpdaterPool(), "nonPollingGraphUpdaters", List.of(Tag.of("pool", "nonPollingGraphUpdaters")) ) .bindTo(Metrics.globalRegistry); new ExecutorServiceMetrics( - transitModel.getUpdaterManager().getScheduler(), + timetableRepository.getUpdaterManager().getScheduler(), "graphUpdateScheduler", List.of(Tag.of("pool", "graphUpdateScheduler")) ) 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 ce2d3aa0ad2..62d8a727615 100644 --- a/application/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java +++ b/application/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java @@ -68,9 +68,9 @@ */ public class DefaultTransitService implements TransitEditorService { - private final TransitModel transitModel; + private final TimetableRepository timetableRepository; - private final TransitModelIndex transitModelIndex; + private final TimetableRepositoryIndex timetableRepositoryIndex; /** * This should only be accessed through the getTimetableSnapshot method. @@ -78,113 +78,113 @@ public class DefaultTransitService implements TransitEditorService { private TimetableSnapshot timetableSnapshot; @Inject - public DefaultTransitService(TransitModel transitModel) { - this.transitModel = transitModel; - this.transitModelIndex = transitModel.getTransitModelIndex(); + public DefaultTransitService(TimetableRepository timetableRepository) { + this.timetableRepository = timetableRepository; + this.timetableRepositoryIndex = timetableRepository.getTimetableRepositoryIndex(); } public DefaultTransitService( - TransitModel transitModel, + TimetableRepository timetableRepository, TimetableSnapshot timetableSnapshotBuffer ) { - this(transitModel); + this(timetableRepository); this.timetableSnapshot = timetableSnapshotBuffer; } @Override public Collection getFeedIds() { - return this.transitModel.getFeedIds(); + return this.timetableRepository.getFeedIds(); } @Override public Collection getAgencies() { OTPRequestTimeoutException.checkForTimeout(); - return this.transitModel.getAgencies(); + return this.timetableRepository.getAgencies(); } @Override public Optional findAgencyById(FeedScopedId id) { - return this.transitModel.findAgencyById(id); + return this.timetableRepository.findAgencyById(id); } @Override public FeedInfo getFeedInfo(String feedId) { - return this.transitModel.getFeedInfo(feedId); + return this.timetableRepository.getFeedInfo(feedId); } @Override public void addAgency(Agency agency) { - this.transitModel.addAgency(agency); + this.timetableRepository.addAgency(agency); } @Override public void addFeedInfo(FeedInfo info) { - this.transitModel.addFeedInfo(info); + this.timetableRepository.addFeedInfo(info); } @Override public Collection getNoticesByEntity(AbstractTransitEntity entity) { - return this.transitModel.getNoticesByElement().get(entity); + return this.timetableRepository.getNoticesByElement().get(entity); } @Override public TripPattern getTripPatternForId(FeedScopedId id) { - return this.transitModel.getTripPatternForId(id); + return this.timetableRepository.getTripPatternForId(id); } @Override public Collection getAllTripPatterns() { OTPRequestTimeoutException.checkForTimeout(); - return this.transitModel.getAllTripPatterns(); + return this.timetableRepository.getAllTripPatterns(); } @Override public Collection getNotices() { OTPRequestTimeoutException.checkForTimeout(); - return this.transitModel.getNoticesByElement().values(); + return this.timetableRepository.getNoticesByElement().values(); } @Override public Station getStationById(FeedScopedId id) { - return this.transitModel.getStopModel().getStationById(id); + return this.timetableRepository.getStopModel().getStationById(id); } @Override public MultiModalStation getMultiModalStation(FeedScopedId id) { - return this.transitModel.getStopModel().getMultiModalStation(id); + return this.timetableRepository.getStopModel().getMultiModalStation(id); } @Override public Collection getStations() { OTPRequestTimeoutException.checkForTimeout(); - return this.transitModel.getStopModel().listStations(); + return this.timetableRepository.getStopModel().listStations(); } @Override public Integer getServiceCodeForId(FeedScopedId id) { - return this.transitModel.getServiceCodes().get(id); + return this.timetableRepository.getServiceCodes().get(id); } @Override public TIntSet getServiceCodesRunningForDate(LocalDate serviceDate) { - return transitModelIndex + return timetableRepositoryIndex .getServiceCodesRunningForDate() .getOrDefault(serviceDate, new TIntHashSet()); } @Override public AreaStop getAreaStop(FeedScopedId id) { - return this.transitModel.getStopModel().getAreaStop(id); + return this.timetableRepository.getStopModel().getAreaStop(id); } @Override public Agency getAgencyForId(FeedScopedId id) { - return this.transitModelIndex.getAgencyForId(id); + return this.timetableRepositoryIndex.getAgencyForId(id); } @Override public RegularStop getRegularStop(FeedScopedId id) { - return this.transitModel.getStopModel().getRegularStop(id); + return this.timetableRepository.getStopModel().getRegularStop(id); } @Override @@ -196,7 +196,7 @@ public Route getRouteForId(FeedScopedId id) { return realtimeAddedRoute; } } - return transitModelIndex.getRouteForId(id); + return timetableRepositoryIndex.getRouteForId(id); } /** @@ -205,75 +205,75 @@ public Route getRouteForId(FeedScopedId id) { */ @Override public void addRoutes(Route route) { - this.transitModelIndex.addRoutes(route); + this.timetableRepositoryIndex.addRoutes(route); } @Override public Set getRoutesForStop(StopLocation stop) { OTPRequestTimeoutException.checkForTimeout(); - return this.transitModelIndex.getRoutesForStop(stop); + return this.timetableRepositoryIndex.getRoutesForStop(stop); } @Override public Collection getPatternsForStop(StopLocation stop) { OTPRequestTimeoutException.checkForTimeout(); - return this.transitModelIndex.getPatternsForStop(stop); + return this.timetableRepositoryIndex.getPatternsForStop(stop); } @Override public Collection getTripsForStop(StopLocation stop) { OTPRequestTimeoutException.checkForTimeout(); - return this.transitModelIndex.getTripsForStop(stop); + return this.timetableRepositoryIndex.getTripsForStop(stop); } @Override public Collection getAllOperators() { OTPRequestTimeoutException.checkForTimeout(); - return this.transitModel.getOperators(); + return this.timetableRepository.getOperators(); } @Override public Operator getOperatorForId(FeedScopedId id) { - return this.transitModelIndex.getOperatorForId(id); + return this.timetableRepositoryIndex.getOperatorForId(id); } @Override public Collection listStopLocations() { OTPRequestTimeoutException.checkForTimeout(); - return transitModel.getStopModel().listStopLocations(); + return timetableRepository.getStopModel().listStopLocations(); } @Override public Collection listRegularStops() { OTPRequestTimeoutException.checkForTimeout(); - return transitModel.getStopModel().listRegularStops(); + return timetableRepository.getStopModel().listRegularStops(); } @Override public Collection listGroupStops() { OTPRequestTimeoutException.checkForTimeout(); - return transitModel.getStopModel().listGroupStops(); + return timetableRepository.getStopModel().listGroupStops(); } @Override public StopLocation getStopLocation(FeedScopedId id) { - return transitModel.getStopModel().getStopLocation(id); + return timetableRepository.getStopModel().getStopLocation(id); } @Override public Collection getStopOrChildStops(FeedScopedId id) { - return transitModel.getStopModel().findStopOrChildStops(id); + return timetableRepository.getStopModel().findStopOrChildStops(id); } @Override public Collection listStopLocationGroups() { OTPRequestTimeoutException.checkForTimeout(); - return transitModel.getStopModel().listStopLocationGroups(); + return timetableRepository.getStopModel().listStopLocationGroups(); } @Override public StopLocationsGroup getStopLocationsGroup(FeedScopedId id) { - return transitModel.getStopModel().getStopLocationsGroup(id); + return timetableRepository.getStopModel().getStopLocationsGroup(id); } @Override @@ -291,7 +291,7 @@ public Trip getTripForId(FeedScopedId id) { @Nullable @Override public Trip getScheduledTripForId(FeedScopedId id) { - return this.transitModelIndex.getTripForId(id); + return this.timetableRepositoryIndex.getTripForId(id); } @Override @@ -300,11 +300,11 @@ public Collection getAllTrips() { TimetableSnapshot currentSnapshot = lazyGetTimeTableSnapShot(); if (currentSnapshot != null) { return new CollectionsView<>( - transitModelIndex.getAllTrips(), + timetableRepositoryIndex.getAllTrips(), currentSnapshot.listRealTimeAddedTrips() ); } - return Collections.unmodifiableCollection(transitModelIndex.getAllTrips()); + return Collections.unmodifiableCollection(timetableRepositoryIndex.getAllTrips()); } @Override @@ -313,11 +313,11 @@ public Collection getAllRoutes() { TimetableSnapshot currentSnapshot = lazyGetTimeTableSnapShot(); if (currentSnapshot != null) { return new CollectionsView<>( - transitModelIndex.getAllRoutes(), + timetableRepositoryIndex.getAllRoutes(), currentSnapshot.listRealTimeAddedRoutes() ); } - return transitModelIndex.getAllRoutes(); + return timetableRepositoryIndex.getAllRoutes(); } @Override @@ -329,7 +329,7 @@ public TripPattern getPatternForTrip(Trip trip) { return realtimeAddedTripPattern; } } - return this.transitModelIndex.getPatternForTrip(trip); + return this.timetableRepositoryIndex.getPatternForTrip(trip); } @Override @@ -345,7 +345,7 @@ public TripPattern getPatternForTrip(Trip trip, LocalDate serviceDate) { public Collection getPatternsForRoute(Route route) { OTPRequestTimeoutException.checkForTimeout(); Collection tripPatterns = new HashSet<>( - transitModelIndex.getPatternsForRoute(route) + timetableRepositoryIndex.getPatternsForRoute(route) ); TimetableSnapshot currentSnapshot = lazyGetTimeTableSnapShot(); if (currentSnapshot != null) { @@ -359,7 +359,7 @@ public Collection getPatternsForRoute(Route route) { @Override public MultiModalStation getMultiModalStationForStation(Station station) { - return this.transitModel.getStopModel().getMultiModalStationForStation(station); + return this.timetableRepository.getStopModel().getMultiModalStationForStation(station); } /** @@ -465,7 +465,7 @@ public List stopTimesForPatternAtStop( * Returns all the patterns for a specific stop. If includeRealtimeUpdates is set, new patterns * added by realtime updates are added to the collection. * A set is used here because trip patterns - * that were updated by realtime data is both part of the TransitModelIndex and the TimetableSnapshot + * that were updated by realtime data is both part of the TimetableRepositoryIndex and the TimetableSnapshot */ @Override public Collection getPatternsForStop( @@ -486,18 +486,18 @@ public Collection getPatternsForStop( @Override public Collection getGroupsOfRoutes() { OTPRequestTimeoutException.checkForTimeout(); - return transitModelIndex.getAllGroupOfRoutes(); + return timetableRepositoryIndex.getAllGroupOfRoutes(); } @Override public Collection getRoutesForGroupOfRoutes(GroupOfRoutes groupOfRoutes) { OTPRequestTimeoutException.checkForTimeout(); - return transitModelIndex.getRoutesForGroupOfRoutes(groupOfRoutes); + return timetableRepositoryIndex.getRoutesForGroupOfRoutes(groupOfRoutes); } @Override public GroupOfRoutes getGroupOfRoutesForId(FeedScopedId id) { - return transitModelIndex.getGroupOfRoutesForId(id); + return timetableRepositoryIndex.getGroupOfRoutesForId(id); } /** @@ -540,7 +540,7 @@ public boolean hasNewTripPatternsForModifiedTrips() { @Nullable private TimetableSnapshot lazyGetTimeTableSnapShot() { if (this.timetableSnapshot == null) { - timetableSnapshot = transitModel.getTimetableSnapshot(); + timetableSnapshot = timetableRepository.getTimetableSnapshot(); } return this.timetableSnapshot; } @@ -556,7 +556,7 @@ public TripOnServiceDate getTripOnServiceDateById(FeedScopedId tripOnServiceDate return tripOnServiceDate; } } - return transitModel.getTripOnServiceDateById(tripOnServiceDateId); + return timetableRepository.getTripOnServiceDateById(tripOnServiceDateId); } @Override @@ -564,11 +564,11 @@ public Collection getAllTripOnServiceDates() { TimetableSnapshot currentSnapshot = lazyGetTimeTableSnapShot(); if (currentSnapshot != null) { return new CollectionsView<>( - transitModel.getAllTripsOnServiceDates(), + timetableRepository.getAllTripsOnServiceDates(), currentSnapshot.listRealTimeAddedTripOnServiceDate() ); } - return transitModel.getAllTripsOnServiceDates(); + return timetableRepository.getAllTripsOnServiceDates(); } @Override @@ -584,7 +584,7 @@ public TripOnServiceDate getTripOnServiceDateForTripAndDay( return tripOnServiceDate; } } - return transitModelIndex.getTripOnServiceDateForTripAndDay(tripIdAndServiceDate); + return timetableRepositoryIndex.getTripOnServiceDateForTripAndDay(tripIdAndServiceDate); } /** @@ -605,96 +605,96 @@ public List getTripOnServiceDates(TripOnServiceDateRequest re */ @Override public FeedScopedId getOrCreateServiceIdForDate(LocalDate serviceDate) { - return transitModel.getOrCreateServiceIdForDate(serviceDate); + return timetableRepository.getOrCreateServiceIdForDate(serviceDate); } @Override public void addTransitMode(TransitMode mode) { - this.transitModel.addTransitMode(mode); + this.timetableRepository.addTransitMode(mode); } @Override public Set getTransitModes() { - return this.transitModel.getTransitModes(); + return this.timetableRepository.getTransitModes(); } @Override public Collection getTransfersByStop(StopLocation stop) { - return this.transitModel.getTransfersByStop(stop); + return this.timetableRepository.getTransfersByStop(stop); } @Override public TransitLayer getTransitLayer() { OTPRequestTimeoutException.checkForTimeout(); - return this.transitModel.getTransitLayer(); + return this.timetableRepository.getTransitLayer(); } @Override public TransitLayer getRealtimeTransitLayer() { OTPRequestTimeoutException.checkForTimeout(); - return this.transitModel.getRealtimeTransitLayer(); + return this.timetableRepository.getRealtimeTransitLayer(); } @Override public void setTransitLayer(TransitLayer transitLayer) { - this.transitModel.setTransitLayer(transitLayer); + this.timetableRepository.setTransitLayer(transitLayer); } @Override public void setRealtimeTransitLayer(TransitLayer realtimeTransitLayer) { - transitModel.setRealtimeTransitLayer(realtimeTransitLayer); + timetableRepository.setRealtimeTransitLayer(realtimeTransitLayer); } @Override public boolean hasRealtimeTransitLayer() { - return transitModel.hasRealtimeTransitLayer(); + return timetableRepository.hasRealtimeTransitLayer(); } @Override public CalendarService getCalendarService() { - return this.transitModel.getCalendarService(); + return this.timetableRepository.getCalendarService(); } @Override public ZoneId getTimeZone() { - return this.transitModel.getTimeZone(); + return this.timetableRepository.getTimeZone(); } @Override public TransitAlertService getTransitAlertService() { - return this.transitModel.getTransitAlertService(); + return this.timetableRepository.getTransitAlertService(); } @Override public FlexIndex getFlexIndex() { - return this.transitModelIndex.getFlexIndex(); + return this.timetableRepositoryIndex.getFlexIndex(); } @Override public ZonedDateTime getTransitServiceEnds() { - return transitModel.getTransitServiceEnds(); + return timetableRepository.getTransitServiceEnds(); } @Override public ZonedDateTime getTransitServiceStarts() { - return transitModel.getTransitServiceStarts(); + return timetableRepository.getTransitServiceStarts(); } @Override public Collection findRegularStops(Envelope envelope) { OTPRequestTimeoutException.checkForTimeout(); - return transitModel.getStopModel().findRegularStops(envelope); + return timetableRepository.getStopModel().findRegularStops(envelope); } @Override public Collection findAreaStops(Envelope envelope) { OTPRequestTimeoutException.checkForTimeout(); - return transitModel.getStopModel().findAreaStops(envelope); + return timetableRepository.getStopModel().findAreaStops(envelope); } @Override public GraphUpdaterStatus getUpdaterStatus() { - return transitModel.getUpdaterManager(); + return timetableRepository.getUpdaterManager(); } @Override @@ -712,17 +712,19 @@ public List getModesOfStopLocation(StopLocation stop) { @Override public Deduplicator getDeduplicator() { - return transitModel.getDeduplicator(); + return timetableRepository.getDeduplicator(); } @Override public Set getAllServiceCodes() { - return Collections.unmodifiableSet(transitModelIndex.getServiceCodesRunningForDate().keySet()); + return Collections.unmodifiableSet( + timetableRepositoryIndex.getServiceCodesRunningForDate().keySet() + ); } @Override public Map getServiceCodesRunningForDate() { - return Collections.unmodifiableMap(transitModelIndex.getServiceCodesRunningForDate()); + return Collections.unmodifiableMap(timetableRepositoryIndex.getServiceCodesRunningForDate()); } /** @@ -738,12 +740,12 @@ private Stream getPatternModesOfStop(StopLocation stop) { @Override public TransferService getTransferService() { - return transitModel.getTransferService(); + return timetableRepository.getTransferService(); } @Override public boolean transitFeedCovers(Instant dateTime) { - return transitModel.transitFeedCovers(dateTime); + return timetableRepository.transitFeedCovers(dateTime); } /** diff --git a/application/src/main/java/org/opentripplanner/transit/service/TransitModel.java b/application/src/main/java/org/opentripplanner/transit/service/TimetableRepository.java similarity index 93% rename from application/src/main/java/org/opentripplanner/transit/service/TransitModel.java rename to application/src/main/java/org/opentripplanner/transit/service/TimetableRepository.java index 91c5ba8e5d9..dc092cc26c2 100644 --- a/application/src/main/java/org/opentripplanner/transit/service/TransitModel.java +++ b/application/src/main/java/org/opentripplanner/transit/service/TimetableRepository.java @@ -55,32 +55,32 @@ import org.slf4j.LoggerFactory; /** - * The TransitModel groups together all instances making up OTP's primary internal representation + * The TimetableRepository groups together all instances making up OTP's primary internal representation * of the public transportation network. Although the names of many entities are derived from * GTFS concepts, these are actually independent of the data source from which they are loaded. * Both GTFS and NeTEx entities are mapped to these same internal OTP entities. If a concept exists * in both GTFS and NeTEx, the GTFS name is used in the internal model. For concepts that exist * only in NeTEx, the NeTEx name is used in the internal model. * - * A TransitModel instance also includes references to some transient indexes of its contents, to + * A TimetableRepository instance also includes references to some transient indexes of its contents, to * the TransitLayer derived from it, and to some other services and utilities that operate upon * its contents. * - * The TransitModel stands in opposition to two other aggregates: the Graph (representing the - * street network) and the TransitLayer (representing many of the same things in the TransitModel + * The TimetableRepository stands in opposition to two other aggregates: the Graph (representing the + * street network) and the TransitLayer (representing many of the same things in the TimetableRepository * but rearranged to be more efficient for Raptor routing). * - * At this point the TransitModel is not often read directly. Many requests will look at the - * TransitLayer rather than the TransitModel it's derived from. Both are often accessed via the - * TransitService rather than directly reading the fields of TransitModel or TransitLayer. + * At this point the TimetableRepository is not often read directly. Many requests will look at the + * TransitLayer rather than the TimetableRepository it's derived from. Both are often accessed via the + * TransitService rather than directly reading the fields of TimetableRepository or TransitLayer. * * TODO RT_AB: consider renaming. By some definitions this is not really the model, but a top-level * object grouping together instances of model classes with things that operate on and map those * instances. */ -public class TransitModel implements Serializable { +public class TimetableRepository implements Serializable { - private static final Logger LOG = LoggerFactory.getLogger(TransitModel.class); + private static final Logger LOG = LoggerFactory.getLogger(TimetableRepository.class); private final Collection agencies = new ArrayList<>(); private final Collection operators = new ArrayList<>(); @@ -101,22 +101,22 @@ public class TransitModel implements Serializable { private ZonedDateTime transitServiceEnds = LocalDate.MIN.atStartOfDay(ZoneId.systemDefault()); /** - * The TransitLayer representation (optimized and rearranged for Raptor) of this TransitModel's + * The TransitLayer representation (optimized and rearranged for Raptor) of this TimetableRepository's * scheduled (non-realtime) contents. */ private transient TransitLayer transitLayer; /** * This updater applies realtime changes queued up for the next TimetableSnapshot such that - * this TransitModel.realtimeSnapshot remains aligned with the service represented in - * (this TransitModel instance + that next TimetableSnapshot). This is a way of keeping the + * this TimetableRepository.realtimeSnapshot remains aligned with the service represented in + * (this TimetableRepository instance + that next TimetableSnapshot). This is a way of keeping the * TransitLayer up to date without repeatedly deriving it from scratch every few seconds. The * same incremental changes are applied to both sets of data and they are published together. */ private transient TransitLayerUpdater transitLayerUpdater; /** - * An optionally present second TransitLayer representing the contents of this TransitModel plus + * An optionally present second TransitLayer representing the contents of this TimetableRepository plus * the results of realtime updates in the latest TimetableSnapshot. */ private final transient ConcurrentPublished realtimeTransitLayer = new ConcurrentPublished<>(); @@ -125,7 +125,7 @@ public class TransitModel implements Serializable { private final CalendarServiceData calendarServiceData = new CalendarServiceData(); - private transient TransitModelIndex index; + private transient TimetableRepositoryIndex index; private transient TimetableSnapshotProvider timetableSnapshotProvider = null; private ZoneId timeZone = null; private boolean timeZoneExplicitlySet = false; @@ -145,13 +145,13 @@ public class TransitModel implements Serializable { private transient TransitAlertService transitAlertService; @Inject - public TransitModel(StopModel stopModel, Deduplicator deduplicator) { + public TimetableRepository(StopModel stopModel, Deduplicator deduplicator) { this.stopModel = Objects.requireNonNull(stopModel); this.deduplicator = deduplicator; } /** No-argument constructor, required for deserialization. */ - public TransitModel() { + public TimetableRepository() { this(new StopModel(), new Deduplicator()); } @@ -164,7 +164,7 @@ 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) - this.index = new TransitModelIndex(this); + this.index = new TimetableRepositoryIndex(this); LOG.info("Index transit model complete."); } } @@ -548,7 +548,7 @@ public void setHasScheduledService(boolean hasScheduledService) { * possibility that the index is not initialized (during graph build). */ @Nullable - TransitModelIndex getTransitModelIndex() { + TimetableRepositoryIndex getTimetableRepositoryIndex() { return index; } diff --git a/application/src/main/java/org/opentripplanner/transit/service/TransitModelIndex.java b/application/src/main/java/org/opentripplanner/transit/service/TimetableRepositoryIndex.java similarity index 90% rename from application/src/main/java/org/opentripplanner/transit/service/TransitModelIndex.java rename to application/src/main/java/org/opentripplanner/transit/service/TimetableRepositoryIndex.java index 7f44854eb9a..dc618b0943f 100644 --- a/application/src/main/java/org/opentripplanner/transit/service/TransitModelIndex.java +++ b/application/src/main/java/org/opentripplanner/transit/service/TimetableRepositoryIndex.java @@ -35,9 +35,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 TransitModelIndex { +class TimetableRepositoryIndex { - private static final Logger LOG = LoggerFactory.getLogger(TransitModelIndex.class); + private static final Logger LOG = LoggerFactory.getLogger(TimetableRepositoryIndex.class); // TODO: consistently key on model object or id string private final Map agencyForId = new HashMap<>(); @@ -58,18 +58,18 @@ class TransitModelIndex { private final Map groupOfRoutesForId = new HashMap<>(); private FlexIndex flexIndex = null; - TransitModelIndex(TransitModel transitModel) { + TimetableRepositoryIndex(TimetableRepository timetableRepository) { LOG.info("Transit model index init..."); - for (Agency agency : transitModel.getAgencies()) { + for (Agency agency : timetableRepository.getAgencies()) { this.agencyForId.put(agency.getId(), agency); } - for (Operator operator : transitModel.getOperators()) { + for (Operator operator : timetableRepository.getOperators()) { this.operatorForId.put(operator.getId(), operator); } - for (TripPattern pattern : transitModel.getAllTripPatterns()) { + for (TripPattern pattern : timetableRepository.getAllTripPatterns()) { patternsForRoute.put(pattern.getRoute(), pattern); pattern .scheduledTripsAsStream() @@ -91,7 +91,7 @@ class TransitModelIndex { groupOfRoutesForId.put(groupOfRoutes.getId(), groupOfRoutes); } - for (TripOnServiceDate tripOnServiceDate : transitModel.getAllTripsOnServiceDates()) { + for (TripOnServiceDate tripOnServiceDate : timetableRepository.getAllTripsOnServiceDates()) { tripOnServiceDateForTripAndDay.put( new TripIdAndServiceDate( tripOnServiceDate.getTrip().getId(), @@ -101,10 +101,10 @@ class TransitModelIndex { ); } - initalizeServiceCodesForDate(transitModel); + initalizeServiceCodesForDate(timetableRepository); if (OTPFeature.FlexRouting.isOn()) { - flexIndex = new FlexIndex(transitModel); + flexIndex = new FlexIndex(timetableRepository); for (Route route : flexIndex.getAllFlexRoutes()) { routeForId.put(route.getId(), route); } @@ -185,8 +185,8 @@ FlexIndex getFlexIndex() { return flexIndex; } - private void initalizeServiceCodesForDate(TransitModel transitModel) { - CalendarService calendarService = transitModel.getCalendarService(); + private void initalizeServiceCodesForDate(TimetableRepository timetableRepository) { + CalendarService calendarService = timetableRepository.getCalendarService(); if (calendarService == null) { return; @@ -216,7 +216,7 @@ private void initalizeServiceCodesForDate(TransitModel transitModel) { for (LocalDate serviceDate : serviceIdsForServiceDate.keySet()) { TIntSet serviceCodesRunning = new TIntHashSet(); for (FeedScopedId serviceId : serviceIdsForServiceDate.get(serviceDate)) { - serviceCodesRunning.add(transitModel.getServiceCodes().get(serviceId)); + serviceCodesRunning.add(timetableRepository.getServiceCodes().get(serviceId)); } serviceCodesRunningForDate.put(serviceDate, serviceCodesRunning); } diff --git a/application/src/main/java/org/opentripplanner/transit/service/TransitService.java b/application/src/main/java/org/opentripplanner/transit/service/TransitService.java index 12fcbc9bc46..7be2a29065a 100644 --- a/application/src/main/java/org/opentripplanner/transit/service/TransitService.java +++ b/application/src/main/java/org/opentripplanner/transit/service/TransitService.java @@ -54,12 +54,12 @@ * fetching tables of specific information like the routes passing through a particular stop, or for * gaining access to the entirety of the data to perform routing. *

- * TODO RT_AB: this interface seems to provide direct access to TransitLayer but not TransitModel. - * Is this intentional, because TransitLayer is meant to be read-only and TransitModel is not? + * TODO RT_AB: this interface seems to provide direct access to TransitLayer but not TimetableRepository. + * Is this intentional, because TransitLayer is meant to be read-only and TimetableRepository is not? * Should this be renamed TransitDataService since it seems to provide access to the data but * not to transit routing functionality (which is provided by the RoutingService)? - * The DefaultTransitService implementation has a TransitModel instance and many of its methods - * read through to that TransitModel instance. But that field itself is not exposed, while the + * The DefaultTransitService implementation has a TimetableRepository instance and many of its methods + * read through to that TimetableRepository instance. But that field itself is not exposed, while the * TransitLayer is here. It seems like exposing the raw TransitLayer is still a risk since it's * copy-on-write and shares a lot of objects with any other TransitLayer instances. */ diff --git a/application/src/main/java/org/opentripplanner/updater/DefaultRealTimeUpdateContext.java b/application/src/main/java/org/opentripplanner/updater/DefaultRealTimeUpdateContext.java index a7f8e77dc00..f30111608cc 100644 --- a/application/src/main/java/org/opentripplanner/updater/DefaultRealTimeUpdateContext.java +++ b/application/src/main/java/org/opentripplanner/updater/DefaultRealTimeUpdateContext.java @@ -3,7 +3,7 @@ import org.opentripplanner.model.TimetableSnapshot; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.transit.service.TransitService; import org.opentripplanner.updater.siri.EntityResolver; import org.opentripplanner.updater.siri.SiriFuzzyTripMatcher; @@ -16,18 +16,18 @@ public class DefaultRealTimeUpdateContext implements RealTimeUpdateContext { public DefaultRealTimeUpdateContext( Graph graph, - TransitModel transitModel, + TimetableRepository timetableRepository, TimetableSnapshot timetableSnapshotBuffer ) { this.graph = graph; - this.transitService = new DefaultTransitService(transitModel, timetableSnapshotBuffer); + this.transitService = new DefaultTransitService(timetableRepository, timetableSnapshotBuffer); } /** * Constructor for unit tests only. */ - public DefaultRealTimeUpdateContext(Graph graph, TransitModel transitModel) { - this(graph, transitModel, null); + public DefaultRealTimeUpdateContext(Graph graph, TimetableRepository timetableRepository) { + this(graph, timetableRepository, null); } @Override 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 728c07690ab..23b6d741e10 100644 --- a/application/src/main/java/org/opentripplanner/updater/alert/GtfsRealtimeAlertsUpdater.java +++ b/application/src/main/java/org/opentripplanner/updater/alert/GtfsRealtimeAlertsUpdater.java @@ -7,7 +7,7 @@ import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.impl.TransitAlertServiceImpl; import org.opentripplanner.routing.services.TransitAlertService; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.updater.spi.HttpHeaders; import org.opentripplanner.updater.spi.PollingGraphUpdater; import org.opentripplanner.updater.spi.WriteToGraphCallback; @@ -31,12 +31,12 @@ public class GtfsRealtimeAlertsUpdater extends PollingGraphUpdater implements Tr public GtfsRealtimeAlertsUpdater( GtfsRealtimeAlertsUpdaterParameters config, - TransitModel transitModel + TimetableRepository timetableRepository ) { super(config); this.url = config.url(); this.headers = HttpHeaders.of().acceptProtobuf().add(config.headers()).build(); - TransitAlertService transitAlertService = new TransitAlertServiceImpl(transitModel); + TransitAlertService transitAlertService = new TransitAlertServiceImpl(timetableRepository); this.transitAlertService = transitAlertService; diff --git a/application/src/main/java/org/opentripplanner/updater/configure/UpdaterConfigurator.java b/application/src/main/java/org/opentripplanner/updater/configure/UpdaterConfigurator.java index df7014f2151..feea541741c 100644 --- a/application/src/main/java/org/opentripplanner/updater/configure/UpdaterConfigurator.java +++ b/application/src/main/java/org/opentripplanner/updater/configure/UpdaterConfigurator.java @@ -13,7 +13,7 @@ import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.service.realtimevehicles.RealtimeVehicleRepository; import org.opentripplanner.service.vehiclerental.VehicleRentalRepository; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.updater.DefaultRealTimeUpdateContext; import org.opentripplanner.updater.GraphUpdaterManager; import org.opentripplanner.updater.UpdatersParameters; @@ -45,7 +45,7 @@ public class UpdaterConfigurator { private final Graph graph; - private final TransitModel transitModel; + private final TimetableRepository timetableRepository; private final UpdatersParameters updatersParameters; private final RealtimeVehicleRepository realtimeVehicleRepository; private final VehicleRentalRepository vehicleRentalRepository; @@ -56,13 +56,13 @@ private UpdaterConfigurator( Graph graph, RealtimeVehicleRepository realtimeVehicleRepository, VehicleRentalRepository vehicleRentalRepository, - TransitModel transitModel, + TimetableRepository timetableRepository, UpdatersParameters updatersParameters ) { this.graph = graph; this.realtimeVehicleRepository = realtimeVehicleRepository; this.vehicleRentalRepository = vehicleRentalRepository; - this.transitModel = transitModel; + this.timetableRepository = timetableRepository; this.updatersParameters = updatersParameters; } @@ -70,14 +70,14 @@ public static void configure( Graph graph, RealtimeVehicleRepository realtimeVehicleRepository, VehicleRentalRepository vehicleRentalRepository, - TransitModel transitModel, + TimetableRepository timetableRepository, UpdatersParameters updatersParameters ) { new UpdaterConfigurator( graph, realtimeVehicleRepository, vehicleRentalRepository, - transitModel, + timetableRepository, updatersParameters ) .configure(); @@ -102,7 +102,7 @@ private void configure() { timetableSnapshotBuffer = gtfsTimetableSnapshotSource.getTimetableSnapshotBuffer(); } GraphUpdaterManager updaterManager = new GraphUpdaterManager( - new DefaultRealTimeUpdateContext(graph, transitModel, timetableSnapshotBuffer), + new DefaultRealTimeUpdateContext(graph, timetableRepository, timetableSnapshotBuffer), updaters ); @@ -116,12 +116,12 @@ private void configure() { } // Otherwise add it to the graph else { - transitModel.setUpdaterManager(updaterManager); + timetableRepository.setUpdaterManager(updaterManager); } } - public static void shutdownGraph(TransitModel transitModel) { - GraphUpdaterManager updaterManager = transitModel.getUpdaterManager(); + public static void shutdownGraph(TimetableRepository timetableRepository) { + GraphUpdaterManager updaterManager = timetableRepository.getUpdaterManager(); if (updaterManager != null) { updaterManager.stop(); } @@ -167,7 +167,7 @@ private List createUpdatersFromConfig() { } } for (var configItem : updatersParameters.getGtfsRealtimeAlertsUpdaterParameters()) { - updaters.add(new GtfsRealtimeAlertsUpdater(configItem, transitModel)); + updaters.add(new GtfsRealtimeAlertsUpdater(configItem, timetableRepository)); } for (var configItem : updatersParameters.getPollingStoptimeUpdaterParameters()) { updaters.add(new PollingTripUpdater(configItem, provideGtfsTimetableSnapshot())); @@ -182,7 +182,7 @@ private List createUpdatersFromConfig() { updaters.add(new SiriETGooglePubsubUpdater(configItem, provideSiriTimetableSnapshot())); } for (var configItem : updatersParameters.getSiriSXUpdaterParameters()) { - updaters.add(new SiriSXUpdater(configItem, transitModel)); + updaters.add(new SiriSXUpdater(configItem, timetableRepository)); } for (var configItem : updatersParameters.getMqttGtfsRealtimeUpdaterParameters()) { updaters.add(new MqttGtfsRealtimeUpdater(configItem, provideGtfsTimetableSnapshot())); @@ -219,7 +219,7 @@ private List createUpdatersFromConfig() { updaters.add(new SiriAzureETUpdater(configItem, provideSiriTimetableSnapshot())); } for (var configItem : updatersParameters.getSiriAzureSXUpdaterParameters()) { - updaters.add(new SiriAzureSXUpdater(configItem, transitModel)); + updaters.add(new SiriAzureSXUpdater(configItem, timetableRepository)); } return updaters; @@ -230,7 +230,7 @@ private SiriTimetableSnapshotSource provideSiriTimetableSnapshot() { this.siriTimetableSnapshotSource = new SiriTimetableSnapshotSource( updatersParameters.timetableSnapshotParameters(), - transitModel + timetableRepository ); } @@ -240,7 +240,10 @@ private SiriTimetableSnapshotSource provideSiriTimetableSnapshot() { private TimetableSnapshotSource provideGtfsTimetableSnapshot() { if (gtfsTimetableSnapshotSource == null) { this.gtfsTimetableSnapshotSource = - new TimetableSnapshotSource(updatersParameters.timetableSnapshotParameters(), transitModel); + new TimetableSnapshotSource( + updatersParameters.timetableSnapshotParameters(), + timetableRepository + ); } return gtfsTimetableSnapshotSource; } 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 b3f9a3e4e00..c3bb31ed068 100644 --- a/application/src/main/java/org/opentripplanner/updater/siri/AddedTripBuilder.java +++ b/application/src/main/java/org/opentripplanner/updater/siri/AddedTripBuilder.java @@ -180,7 +180,7 @@ Result build() { } route = createRoute(agency); isAddedRoute = true; - LOG.info("Adding route {} to transitModel.", route); + LOG.info("Adding route {} to timetableRepository.", route); } Trip trip = createTrip(route, calServiceId); 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 ad49af38235..b6aa5310d83 100644 --- a/application/src/main/java/org/opentripplanner/updater/siri/SiriTimetableSnapshotSource.java +++ b/application/src/main/java/org/opentripplanner/updater/siri/SiriTimetableSnapshotSource.java @@ -24,8 +24,8 @@ import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.model.timetable.TripTimes; import org.opentripplanner.transit.service.DefaultTransitService; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.transit.service.TransitEditorService; -import org.opentripplanner.transit.service.TransitModel; import org.opentripplanner.updater.TimetableSnapshotSourceParameters; import org.opentripplanner.updater.spi.DataValidationExceptionMapper; import org.opentripplanner.updater.spi.UpdateError; @@ -69,20 +69,20 @@ public class SiriTimetableSnapshotSource implements TimetableSnapshotProvider { public SiriTimetableSnapshotSource( TimetableSnapshotSourceParameters parameters, - TransitModel transitModel + TimetableRepository timetableRepository ) { this.snapshotManager = new TimetableSnapshotManager( - transitModel.getTransitLayerUpdater(), + timetableRepository.getTransitLayerUpdater(), parameters, - () -> LocalDate.now(transitModel.getTimeZone()) + () -> LocalDate.now(timetableRepository.getTimeZone()) ); this.transitEditorService = - new DefaultTransitService(transitModel, getTimetableSnapshotBuffer()); + new DefaultTransitService(timetableRepository, getTimetableSnapshotBuffer()); this.tripPatternCache = new SiriTripPatternCache(tripPatternIdGenerator, transitEditorService::getPatternForTrip); - transitModel.initTimetableSnapshotProvider(this); + timetableRepository.initTimetableSnapshotProvider(this); } /** @@ -293,7 +293,7 @@ private Result handleModifiedTrip( } /** - * Add a (new) trip to the transitModel and the buffer + * Add a (new) trip to the timetableRepository and the buffer */ private Result addTripToGraphAndBuffer(TripUpdate tripUpdate) { Trip trip = tripUpdate.tripTimes().getTrip(); diff --git a/application/src/main/java/org/opentripplanner/updater/siri/SiriTripPatternCache.java b/application/src/main/java/org/opentripplanner/updater/siri/SiriTripPatternCache.java index b750df8b69f..19816bd085f 100644 --- a/application/src/main/java/org/opentripplanner/updater/siri/SiriTripPatternCache.java +++ b/application/src/main/java/org/opentripplanner/updater/siri/SiriTripPatternCache.java @@ -100,7 +100,7 @@ public synchronized TripPattern getOrCreateTripPattern( .withCreatedByRealtimeUpdater(true) .withOriginalTripPattern(originalTripPattern) .build(); - // TODO: Add pattern to transitModel index? + // TODO: Add pattern to timetableRepository index? // Add pattern to cache cache.put(key, tripPattern); diff --git a/application/src/main/java/org/opentripplanner/updater/siri/updater/SiriSXUpdater.java b/application/src/main/java/org/opentripplanner/updater/siri/updater/SiriSXUpdater.java index 5eeb6ffc66e..83200db30d3 100644 --- a/application/src/main/java/org/opentripplanner/updater/siri/updater/SiriSXUpdater.java +++ b/application/src/main/java/org/opentripplanner/updater/siri/updater/SiriSXUpdater.java @@ -9,7 +9,7 @@ import org.opentripplanner.framework.retry.OtpRetryBuilder; import org.opentripplanner.routing.impl.TransitAlertServiceImpl; import org.opentripplanner.routing.services.TransitAlertService; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.updater.alert.TransitAlertProvider; import org.opentripplanner.updater.siri.SiriAlertsUpdateHandler; import org.opentripplanner.updater.spi.PollingGraphUpdater; @@ -43,7 +43,7 @@ public class SiriSXUpdater extends PollingGraphUpdater implements TransitAlertPr private final SiriHttpLoader siriHttpLoader; private final OtpRetry retry; - public SiriSXUpdater(SiriSXUpdaterParameters config, TransitModel transitModel) { + public SiriSXUpdater(SiriSXUpdaterParameters config, TimetableRepository timetableRepository) { super(config); // TODO: add options to choose different patch services this.url = config.url(); @@ -56,7 +56,7 @@ public SiriSXUpdater(SiriSXUpdaterParameters config, TransitModel transitModel) //Keeping original requestorRef use as base for updated requestorRef to be used in retries this.originalRequestorRef = requestorRef; this.blockReadinessUntilInitialized = config.blockReadinessUntilInitialized(); - this.transitAlertService = new TransitAlertServiceImpl(transitModel); + this.transitAlertService = new TransitAlertServiceImpl(timetableRepository); this.updateHandler = new SiriAlertsUpdateHandler(config.feedId(), transitAlertService, config.earlyStart()); siriHttpLoader = new SiriHttpLoader(url, config.timeout(), config.requestHeaders()); @@ -120,11 +120,11 @@ private void updateSiri() { // Such runnables should be illustrated in documentation as e.g. a little box labeled // "change trip ABC123 by making stop 53 late by 2 minutes." // Also clarify how this runnable works without even using the supplied - // (graph, transitModel) parameters. There are multiple TransitAlertServices and they + // (graph, timetableRepository) parameters. There are multiple TransitAlertServices and they // are not versioned along with the Graph, they are attached to updaters. // // This is submitting a runnable to an executor, but that runnable only writes back to - // objects referenced by updateHandler itself, rather than the graph or transitModel + // objects referenced by updateHandler itself, rather than the graph or timetableRepository // supplied for writing, and apparently with no versioning. This seems like a // misinterpretation of the realtime design. // If this is an intentional choice to live-patch a single server-wide instance of an 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 6273de676b5..f83fa9d247e 100644 --- a/application/src/main/java/org/opentripplanner/updater/trip/TimetableSnapshotSource.java +++ b/application/src/main/java/org/opentripplanner/updater/trip/TimetableSnapshotSource.java @@ -60,8 +60,8 @@ import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.model.timetable.TripTimesFactory; import org.opentripplanner.transit.service.DefaultTransitService; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.transit.service.TransitEditorService; -import org.opentripplanner.transit.service.TransitModel; import org.opentripplanner.updater.GtfsRealtimeFuzzyTripMatcher; import org.opentripplanner.updater.GtfsRealtimeMapper; import org.opentripplanner.updater.TimetableSnapshotSourceParameters; @@ -108,9 +108,9 @@ public class TimetableSnapshotSource implements TimetableSnapshotProvider { public TimetableSnapshotSource( TimetableSnapshotSourceParameters parameters, - TransitModel transitModel + TimetableRepository timetableRepository ) { - this(parameters, transitModel, () -> LocalDate.now(transitModel.getTimeZone())); + this(parameters, timetableRepository, () -> LocalDate.now(timetableRepository.getTimeZone())); } /** @@ -119,20 +119,24 @@ public TimetableSnapshotSource( */ TimetableSnapshotSource( TimetableSnapshotSourceParameters parameters, - TransitModel transitModel, + TimetableRepository timetableRepository, Supplier localDateNow ) { this.snapshotManager = - new TimetableSnapshotManager(transitModel.getTransitLayerUpdater(), parameters, localDateNow); - this.timeZone = transitModel.getTimeZone(); + new TimetableSnapshotManager( + timetableRepository.getTransitLayerUpdater(), + parameters, + localDateNow + ); + this.timeZone = timetableRepository.getTimeZone(); this.transitEditorService = - new DefaultTransitService(transitModel, snapshotManager.getTimetableSnapshotBuffer()); - this.deduplicator = transitModel.getDeduplicator(); - this.serviceCodes = transitModel.getServiceCodes(); + new DefaultTransitService(timetableRepository, snapshotManager.getTimetableSnapshotBuffer()); + this.deduplicator = timetableRepository.getDeduplicator(); + this.serviceCodes = timetableRepository.getServiceCodes(); this.localDateNow = localDateNow; // Inject this into the transit model - transitModel.initTimetableSnapshotProvider(this); + timetableRepository.initTimetableSnapshotProvider(this); } /** diff --git a/application/src/test/java/org/opentripplanner/ConstantsForTests.java b/application/src/test/java/org/opentripplanner/ConstantsForTests.java index b9ec788dac0..241cc245da1 100644 --- a/application/src/test/java/org/opentripplanner/ConstantsForTests.java +++ b/application/src/test/java/org/opentripplanner/ConstantsForTests.java @@ -44,7 +44,7 @@ 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.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; public class ConstantsForTests { @@ -124,7 +124,7 @@ public static TestOtpModel buildNewPortlandGraph(boolean withElevation) { try { var deduplicator = new Deduplicator(); var graph = new Graph(deduplicator); - var transitModel = new TransitModel(new StopModel(), deduplicator); + var timetableRepository = new TimetableRepository(new StopModel(), deduplicator); // Add street data from OSM { OsmProvider osmProvider = new OsmProvider(PORTLAND_CENTRAL_OSM, false); @@ -137,10 +137,16 @@ public static TestOtpModel buildNewPortlandGraph(boolean withElevation) { } // Add transit data from GTFS { - addGtfsToGraph(graph, transitModel, PORTLAND_GTFS, new DefaultFareServiceFactory(), "prt"); + addGtfsToGraph( + graph, + timetableRepository, + PORTLAND_GTFS, + new DefaultFareServiceFactory(), + "prt" + ); } // Link transit stops to streets - TestStreetLinkerModule.link(graph, transitModel); + TestStreetLinkerModule.link(graph, timetableRepository); // Add elevation data if (withElevation) { @@ -155,10 +161,10 @@ public static TestOtpModel buildNewPortlandGraph(boolean withElevation) { addPortlandVehicleRentals(graph); - transitModel.index(); - graph.index(transitModel.getStopModel()); + timetableRepository.index(); + graph.index(timetableRepository.getStopModel()); - return new TestOtpModel(graph, transitModel); + return new TestOtpModel(graph, timetableRepository); } catch (Exception e) { throw new RuntimeException(e); } @@ -169,12 +175,12 @@ public static TestOtpModel buildOsmGraph(File osmFile) { var deduplicator = new Deduplicator(); var stopModel = new StopModel(); var graph = new Graph(deduplicator); - var transitModel = new TransitModel(stopModel, deduplicator); + var timetableRepository = new TimetableRepository(stopModel, deduplicator); // Add street data from OSM OsmProvider osmProvider = new OsmProvider(osmFile, true); OsmModule osmModule = OsmModule.of(osmProvider, graph).build(); osmModule.buildGraph(); - return new TestOtpModel(graph, transitModel); + return new TestOtpModel(graph, timetableRepository); } catch (Exception e) { throw new RuntimeException(e); } @@ -185,14 +191,14 @@ public static TestOtpModel buildOsmAndGtfsGraph(File osmPath, File gtfsPath) { addGtfsToGraph( otpModel.graph(), - otpModel.transitModel(), + otpModel.timetableRepository(), gtfsPath, new DefaultFareServiceFactory(), null ); // Link transit stops to streets - TestStreetLinkerModule.link(otpModel.graph(), otpModel.transitModel()); + TestStreetLinkerModule.link(otpModel.graph(), otpModel.timetableRepository()); return otpModel; } @@ -205,9 +211,9 @@ public static TestOtpModel buildGtfsGraph(File gtfsFile, FareServiceFactory fare var deduplicator = new Deduplicator(); var stopModel = new StopModel(); var graph = new Graph(deduplicator); - var transitModel = new TransitModel(stopModel, deduplicator); - addGtfsToGraph(graph, transitModel, gtfsFile, fareServiceFactory, null); - return new TestOtpModel(graph, transitModel); + var timetableRepository = new TimetableRepository(stopModel, deduplicator); + addGtfsToGraph(graph, timetableRepository, gtfsFile, fareServiceFactory, null); + return new TestOtpModel(graph, timetableRepository); } public static TestOtpModel buildNewMinimalNetexGraph() { @@ -215,7 +221,7 @@ public static TestOtpModel buildNewMinimalNetexGraph() { var deduplicator = new Deduplicator(); var stopModel = new StopModel(); var graph = new Graph(deduplicator); - var transitModel = new TransitModel(stopModel, deduplicator); + var timetableRepository = new TimetableRepository(stopModel, deduplicator); // Add street data from OSM { OsmProvider osmProvider = new OsmProvider(OSLO_EAST_OSM, false); @@ -232,13 +238,13 @@ public static TestOtpModel buildNewMinimalNetexGraph() { var sources = List.of(new ConfiguredDataSource<>(NETEX_MINIMAL_DATA_SOURCE, netexConfig)); new NetexConfigure(buildConfig) - .createNetexModule(sources, transitModel, graph, DataImportIssueStore.NOOP) + .createNetexModule(sources, timetableRepository, graph, DataImportIssueStore.NOOP) .buildGraph(); } // Link transit stops to streets - TestStreetLinkerModule.link(graph, transitModel); + TestStreetLinkerModule.link(graph, timetableRepository); - return new TestOtpModel(graph, transitModel); + return new TestOtpModel(graph, timetableRepository); } catch (Exception e) { throw new RuntimeException(e); } @@ -266,7 +272,7 @@ public synchronized TestOtpModel getCachedPortlandGraphWithElevation() { public static void addGtfsToGraph( Graph graph, - TransitModel transitModel, + TimetableRepository timetableRepository, File file, FareServiceFactory fareServiceFactory, @Nullable String feedId @@ -276,7 +282,7 @@ public static void addGtfsToGraph( var module = new GtfsModule( List.of(bundle), - transitModel, + timetableRepository, graph, DataImportIssueStore.NOOP, ServiceDateInterval.unbounded(), @@ -285,8 +291,8 @@ public static void addGtfsToGraph( module.buildGraph(); - transitModel.index(); - graph.index(transitModel.getStopModel()); + timetableRepository.index(); + graph.index(timetableRepository.getStopModel()); } 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 9b37c488b8e..0e862c38901 100644 --- a/application/src/test/java/org/opentripplanner/GtfsTest.java +++ b/application/src/test/java/org/opentripplanner/GtfsTest.java @@ -40,7 +40,7 @@ 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.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.updater.TimetableSnapshotSourceParameters; import org.opentripplanner.updater.alert.AlertsUpdateHandler; import org.opentripplanner.updater.trip.TimetableSnapshotSource; @@ -50,7 +50,7 @@ public abstract class GtfsTest { public Graph graph; - public TransitModel transitModel; + public TimetableRepository timetableRepository; AlertsUpdateHandler alertsUpdateHandler; TimetableSnapshotSource timetableSnapshotSource; @@ -194,27 +194,27 @@ protected void setUp() throws Exception { alertsUpdateHandler = new AlertsUpdateHandler(false); var deduplicator = new Deduplicator(); graph = new Graph(deduplicator); - transitModel = new TransitModel(new StopModel(), deduplicator); + timetableRepository = new TimetableRepository(new StopModel(), deduplicator); GtfsModule gtfsGraphBuilderImpl = new GtfsModule( gtfsBundleList, - transitModel, + timetableRepository, graph, ServiceDateInterval.unbounded() ); gtfsGraphBuilderImpl.buildGraph(); - transitModel.index(); - graph.index(transitModel.getStopModel()); - serverContext = TestServerContext.createServerContext(graph, transitModel); + timetableRepository.index(); + graph.index(timetableRepository.getStopModel()); + serverContext = TestServerContext.createServerContext(graph, timetableRepository); timetableSnapshotSource = new TimetableSnapshotSource( TimetableSnapshotSourceParameters.DEFAULT .withPurgeExpiredData(true) .withMaxSnapshotFrequency(Duration.ZERO), - transitModel + timetableRepository ); - alertPatchServiceImpl = new TransitAlertServiceImpl(transitModel); + alertPatchServiceImpl = new TransitAlertServiceImpl(timetableRepository); alertsUpdateHandler.setTransitAlertService(alertPatchServiceImpl); alertsUpdateHandler.setFeedId(feedId.getId()); diff --git a/application/src/test/java/org/opentripplanner/TestOtpModel.java b/application/src/test/java/org/opentripplanner/TestOtpModel.java index a2fc5305ce9..36caf1dec43 100644 --- a/application/src/test/java/org/opentripplanner/TestOtpModel.java +++ b/application/src/test/java/org/opentripplanner/TestOtpModel.java @@ -1,12 +1,12 @@ package org.opentripplanner; import org.opentripplanner.routing.graph.Graph; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; -public record TestOtpModel(Graph graph, TransitModel transitModel) { +public record TestOtpModel(Graph graph, TimetableRepository timetableRepository) { public TestOtpModel index() { - transitModel.index(); - graph.index(transitModel.getStopModel()); + timetableRepository.index(); + graph.index(timetableRepository.getStopModel()); return this; } } diff --git a/application/src/test/java/org/opentripplanner/TestServerContext.java b/application/src/test/java/org/opentripplanner/TestServerContext.java index 90dca6ff840..04a222c4434 100644 --- a/application/src/test/java/org/opentripplanner/TestServerContext.java +++ b/application/src/test/java/org/opentripplanner/TestServerContext.java @@ -24,7 +24,7 @@ import org.opentripplanner.street.service.DefaultStreetLimitationParametersService; import org.opentripplanner.street.service.StreetLimitationParametersService; import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.transit.service.TransitService; public class TestServerContext { @@ -34,17 +34,17 @@ private TestServerContext() {} /** Create a context for unit testing, using the default RouteRequest. */ public static OtpServerRequestContext createServerContext( Graph graph, - TransitModel transitModel + TimetableRepository timetableRepository ) { - transitModel.index(); + timetableRepository.index(); final RouterConfig routerConfig = RouterConfig.DEFAULT; - var transitService = new DefaultTransitService(transitModel); + var transitService = new DefaultTransitService(timetableRepository); DefaultServerRequestContext context = DefaultServerRequestContext.create( routerConfig.transitTuningConfig(), routerConfig.routingRequestDefaults(), new RaptorConfig<>(routerConfig.transitTuningConfig()), graph, - new DefaultTransitService(transitModel), + new DefaultTransitService(timetableRepository), Metrics.globalRegistry, routerConfig.vectorTileConfig(), createWorldEnvelopeService(), @@ -58,7 +58,7 @@ public static OtpServerRequestContext createServerContext( null, null ); - creatTransitLayerForRaptor(transitModel, routerConfig.transitTuningConfig()); + creatTransitLayerForRaptor(timetableRepository, routerConfig.transitTuningConfig()); return context; } 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 416ca6c364e..730ea4e2ed3 100644 --- a/application/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java +++ b/application/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java @@ -11,7 +11,7 @@ import static org.opentripplanner.model.plan.TestItineraryBuilder.newItinerary; import static org.opentripplanner.service.realtimevehicles.model.RealtimeVehicle.StopStatus.IN_TRANSIT_TO; import static org.opentripplanner.test.support.JsonAssertions.assertEqualJson; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import static org.opentripplanner.transit.model.basic.TransitMode.BUS; import static org.opentripplanner.transit.model.basic.TransitMode.FERRY; import static org.opentripplanner.transit.model.timetable.OccupancyStatus.FEW_SEATS_AVAILABLE; @@ -79,7 +79,7 @@ import org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle; import org.opentripplanner.standalone.config.framework.json.JsonSupport; import org.opentripplanner.test.support.FilePatternSource; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.Money; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.AbstractBuilder; @@ -94,13 +94,13 @@ import org.opentripplanner.transit.model.timetable.RealTimeTripTimes; import org.opentripplanner.transit.model.timetable.TripTimesFactory; import org.opentripplanner.transit.service.DefaultTransitService; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.transit.service.TransitEditorService; -import org.opentripplanner.transit.service.TransitModel; import org.opentripplanner.transit.service.TransitService; class GraphQLIntegrationTest { - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final Place A = TEST_MODEL.place("A", 5.0, 8.0); private static final Place B = TEST_MODEL.place("B", 6.0, 8.5); @@ -115,7 +115,7 @@ class GraphQLIntegrationTest { .of(A, B, C, D, E, F, G, H) .map(p -> (RegularStop) p.stop) .toList(); - private static final Route ROUTE = TransitModelForTest.route("a-route").build(); + private static final Route ROUTE = TimetableRepositoryForTest.route("a-route").build(); private static VehicleRentalStation VEHICLE_RENTAL_STATION = new TestVehicleRentalStationBuilder() .withVehicles(10) @@ -160,9 +160,12 @@ static void setup() { var stopModel = TEST_MODEL.stopModelBuilder(); STOP_LOCATIONS.forEach(stopModel::withRegularStop); var model = stopModel.build(); - var transitModel = new TransitModel(model, DEDUPLICATOR); + var timetableRepository = new TimetableRepository(model, DEDUPLICATOR); - var trip = TransitModelForTest.trip("123").withHeadsign(I18NString.of("Trip Headsign")).build(); + var trip = TimetableRepositoryForTest + .trip("123") + .withHeadsign(I18NString.of("Trip Headsign")) + .build(); var stopTimes = TEST_MODEL.stopTimesEvery5Minutes(3, trip, T11_00); var tripTimes = TripTimesFactory.tripTimes(trip, stopTimes, DEDUPLICATOR); final TripPattern pattern = TEST_MODEL @@ -170,11 +173,11 @@ static void setup() { .withScheduledTimeTableBuilder(builder -> builder.addTripTimes(tripTimes)) .build(); - transitModel.addTripPattern(id("pattern-1"), pattern); + timetableRepository.addTripPattern(id("pattern-1"), pattern); var feedId = "testfeed"; var feedInfo = FeedInfo.dummyForTest(feedId); - transitModel.addFeedInfo(feedInfo); + timetableRepository.addFeedInfo(feedInfo); var agency = Agency .of(new FeedScopedId(feedId, "agency-xx")) @@ -182,15 +185,15 @@ static void setup() { .withUrl("www.otp-foo.bar") .withTimezone("Europe/Berlin") .build(); - transitModel.addAgency(agency); + timetableRepository.addAgency(agency); - transitModel.initTimeZone(ZoneIds.BERLIN); - transitModel.index(); + timetableRepository.initTimeZone(ZoneIds.BERLIN); + timetableRepository.index(); var routes = Arrays .stream(TransitMode.values()) .sorted(Comparator.comparing(Enum::name)) .map(m -> - TransitModelForTest + TimetableRepositoryForTest .route(m.name()) .withMode(m) .withLongName(I18NString.of("Long name for %s".formatted(m))) @@ -201,8 +204,10 @@ static void setup() { .toList(); var busRoute = routes.stream().filter(r -> r.getMode().equals(BUS)).findFirst().get(); - TransitEditorService transitService = new DefaultTransitService(transitModel) { - private final TransitAlertService alertService = new TransitAlertServiceImpl(transitModel); + TransitEditorService transitService = new DefaultTransitService(timetableRepository) { + private final TransitAlertService alertService = new TransitAlertServiceImpl( + timetableRepository + ); @Override public List getModesOfStopLocation(StopLocation stop) { @@ -464,7 +469,7 @@ public List findClosestPlaces( List filterByNetwork, TransitService transitService ) { - var stop = TransitModelForTest.of().stop("A").build(); + var stop = TimetableRepositoryForTest.of().stop("A").build(); return List.of( new PlaceAtDistance(stop, 0), new PlaceAtDistance(VEHICLE_RENTAL_STATION, 30), 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 f2992a30d92..3ca29f7c531 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 @@ -38,7 +38,7 @@ import org.opentripplanner.service.vehiclerental.internal.DefaultVehicleRentalService; import org.opentripplanner.street.search.TraverseMode; import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; class LegacyRouteRequestMapperTest implements PlanTestConstants { @@ -46,9 +46,9 @@ class LegacyRouteRequestMapperTest implements PlanTestConstants { static { Graph graph = new Graph(); - var transitModel = new TransitModel(); - transitModel.initTimeZone(ZoneIds.BERLIN); - final DefaultTransitService transitService = new DefaultTransitService(transitModel); + var timetableRepository = new TimetableRepository(); + timetableRepository.initTimeZone(ZoneIds.BERLIN); + final DefaultTransitService transitService = new DefaultTransitService(timetableRepository); context = new GraphQLRequestContext( new TestRoutingService(List.of()), diff --git a/application/src/test/java/org/opentripplanner/apis/gtfs/mapping/routerequest/RouteRequestMapperTest.java b/application/src/test/java/org/opentripplanner/apis/gtfs/mapping/routerequest/RouteRequestMapperTest.java index f47f7a7004a..d4e48b63141 100644 --- a/application/src/test/java/org/opentripplanner/apis/gtfs/mapping/routerequest/RouteRequestMapperTest.java +++ b/application/src/test/java/org/opentripplanner/apis/gtfs/mapping/routerequest/RouteRequestMapperTest.java @@ -34,7 +34,7 @@ import org.opentripplanner.service.vehiclerental.internal.DefaultVehicleRentalService; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; class RouteRequestMapperTest { @@ -62,9 +62,9 @@ class RouteRequestMapperTest { static { Graph graph = new Graph(); - var transitModel = new TransitModel(); - transitModel.initTimeZone(ZoneIds.BERLIN); - final DefaultTransitService transitService = new DefaultTransitService(transitModel); + var timetableRepository = new TimetableRepository(); + timetableRepository.initTimeZone(ZoneIds.BERLIN); + final DefaultTransitService transitService = new DefaultTransitService(timetableRepository); CONTEXT = new GraphQLRequestContext( new TestRoutingService(List.of()), 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..b8eeb2d13d9 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 @@ -54,25 +54,25 @@ import org.opentripplanner.standalone.server.DefaultServerRequestContext; import org.opentripplanner.street.model.StreetLimitationParameters; import org.opentripplanner.street.service.DefaultStreetLimitationParametersService; -import org.opentripplanner.transit.model._data.TransitModelForTest; +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.TripPattern; 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.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; public class TripRequestMapperTest implements PlanTestConstants { - private static TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final Duration MAX_FLEXIBLE = Duration.ofMinutes(20); private static final Function STOP_TO_ID = s -> s.getId().toString(); - private static final Route route1 = TransitModelForTest.route("route1").build(); - private static final Route route2 = TransitModelForTest.route("route2").build(); + private static final Route route1 = TimetableRepositoryForTest.route("route1").build(); + private static final Route route2 = TimetableRepositoryForTest.route("route2").build(); private static final RegularStop stop1 = TEST_MODEL.stop("ST:stop1", 1, 1).build(); private static final RegularStop stop2 = TEST_MODEL.stop("ST:stop2", 2, 1).build(); @@ -96,20 +96,24 @@ public class TripRequestMapperTest implements PlanTestConstants { .withRegularStop(stop3) .build(); - var transitModel = new TransitModel(stopModel, new Deduplicator()); - transitModel.initTimeZone(ZoneIds.STOCKHOLM); + var timetableRepository = new TimetableRepository(stopModel, new Deduplicator()); + timetableRepository.initTimeZone(ZoneIds.STOCKHOLM); var calendarServiceData = new CalendarServiceData(); LocalDate serviceDate = itinerary.startTime().toLocalDate(); patterns.forEach(pattern -> { - transitModel.addTripPattern(pattern.getId(), pattern); + timetableRepository.addTripPattern(pattern.getId(), pattern); final int serviceCode = pattern.getScheduledTimetable().getTripTimes(0).getServiceCode(); - transitModel.getServiceCodes().put(pattern.getId(), serviceCode); + timetableRepository.getServiceCodes().put(pattern.getId(), serviceCode); calendarServiceData.putServiceDatesForServiceId(pattern.getId(), List.of(serviceDate)); }); - transitModel.updateCalendarServiceData(true, calendarServiceData, DataImportIssueStore.NOOP); - transitModel.index(); - transitService = new DefaultTransitService(transitModel); + timetableRepository.updateCalendarServiceData( + true, + calendarServiceData, + DataImportIssueStore.NOOP + ); + timetableRepository.index(); + transitService = new DefaultTransitService(timetableRepository); } @BeforeEach 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 579f9b73761..58054a3c778 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 @@ -11,7 +11,7 @@ import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.Place; import org.opentripplanner.model.plan.TestItineraryBuilder; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; class TripPlanTimePenaltyDtoTest { @@ -20,7 +20,7 @@ class TripPlanTimePenaltyDtoTest { Cost.costOfSeconds(21) ); - private final TransitModelForTest testModel = TransitModelForTest.of(); + private final TimetableRepositoryForTest testModel = TimetableRepositoryForTest.of(); private final Place placeA = Place.forStop(testModel.stop("A").build()); private final Place placeB = Place.forStop(testModel.stop("B").build()); diff --git a/application/src/test/java/org/opentripplanner/ext/restapi/resources/PlannerResourceTest.java b/application/src/test/java/org/opentripplanner/ext/restapi/resources/PlannerResourceTest.java index a86e270a2af..dc924ac765a 100644 --- a/application/src/test/java/org/opentripplanner/ext/restapi/resources/PlannerResourceTest.java +++ b/application/src/test/java/org/opentripplanner/ext/restapi/resources/PlannerResourceTest.java @@ -15,14 +15,14 @@ import org.opentripplanner.routing.api.request.RequestModes; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.standalone.api.OtpServerRequestContext; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; class PlannerResourceTest { static OtpServerRequestContext context() { - var transitModel = new TransitModel(); - transitModel.initTimeZone(ZoneIds.BERLIN); - return TestServerContext.createServerContext(new Graph(), transitModel); + var timetableRepository = new TimetableRepository(); + timetableRepository.initTimeZone(ZoneIds.BERLIN); + return TestServerContext.createServerContext(new Graph(), timetableRepository); } @Test 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 002c386d151..bb3144aa904 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 @@ -26,7 +26,7 @@ import org.opentripplanner.street.model.edge.Edge; import org.opentripplanner.street.model.vertex.StreetVertex; import org.opentripplanner.street.model.vertex.TransitStopVertex; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.network.StopPattern; import org.opentripplanner.transit.model.network.TripPattern; @@ -54,7 +54,7 @@ class DirectTransferGeneratorTest extends GraphRoutingTest { public void testDirectTransfersWithoutPatterns() { var otpModel = model(false); var graph = otpModel.graph(); - var transitModel = otpModel.transitModel(); + var timetableRepository = otpModel.timetableRepository(); var req = new RouteRequest(); req.journey().transfer().setMode(StreetMode.WALK); var transferRequests = List.of(req); @@ -62,14 +62,14 @@ public void testDirectTransfersWithoutPatterns() { new DirectTransferGenerator( graph, - transitModel, + timetableRepository, DataImportIssueStore.NOOP, MAX_TRANSFER_DURATION, transferRequests ) .buildGraph(); - assertTransfers(transitModel.getAllPathTransfers()); + assertTransfers(timetableRepository.getAllPathTransfers()); } @Test @@ -77,14 +77,14 @@ public void testDirectTransfersWithPatterns() { var otpModel = model(true); var graph = otpModel.graph(); graph.hasStreets = false; - var transitModel = otpModel.transitModel(); + var timetableRepository = otpModel.timetableRepository(); var req = new RouteRequest(); req.journey().transfer().setMode(StreetMode.WALK); var transferRequests = List.of(req); new DirectTransferGenerator( graph, - transitModel, + timetableRepository, DataImportIssueStore.NOOP, MAX_TRANSFER_DURATION, transferRequests @@ -92,7 +92,7 @@ public void testDirectTransfersWithPatterns() { .buildGraph(); assertTransfers( - transitModel.getAllPathTransfers(), + timetableRepository.getAllPathTransfers(), tr(S0, 556, S11), tr(S0, 935, S21), tr(S11, 751, S21), @@ -111,12 +111,12 @@ public void testDirectTransfersWithRestrictedPatterns() { var otpModel = model(true, true); var graph = otpModel.graph(); graph.hasStreets = false; - var transitModel = otpModel.transitModel(); + var timetableRepository = otpModel.timetableRepository(); var transferRequests = List.of(new RouteRequest()); new DirectTransferGenerator( graph, - transitModel, + timetableRepository, DataImportIssueStore.NOOP, MAX_TRANSFER_DURATION, transferRequests @@ -124,7 +124,7 @@ public void testDirectTransfersWithRestrictedPatterns() { .buildGraph(); assertTransfers( - transitModel.getAllPathTransfers(), + timetableRepository.getAllPathTransfers(), tr(S0, 2780, S12), tr(S0, 935, S21), tr(S11, 2224, S12), @@ -148,18 +148,18 @@ public void testSingleRequestWithoutPatterns() { var otpModel = model(false); var graph = otpModel.graph(); graph.hasStreets = true; - var transitModel = otpModel.transitModel(); + var timetableRepository = otpModel.timetableRepository(); new DirectTransferGenerator( graph, - transitModel, + timetableRepository, DataImportIssueStore.NOOP, MAX_TRANSFER_DURATION, transferRequests ) .buildGraph(); - assertTransfers(transitModel.getAllPathTransfers()); + assertTransfers(timetableRepository.getAllPathTransfers()); } @Test @@ -171,11 +171,11 @@ public void testSingleRequestWithPatterns() { var otpModel = model(true); var graph = otpModel.graph(); graph.hasStreets = true; - var transitModel = otpModel.transitModel(); + var timetableRepository = otpModel.timetableRepository(); new DirectTransferGenerator( graph, - transitModel, + timetableRepository, DataImportIssueStore.NOOP, MAX_TRANSFER_DURATION, transferRequests @@ -183,7 +183,7 @@ public void testSingleRequestWithPatterns() { .buildGraph(); assertTransfers( - transitModel.getAllPathTransfers(), + timetableRepository.getAllPathTransfers(), tr(S0, 100, List.of(V0, V11), S11), tr(S0, 100, List.of(V0, V21), S21), tr(S11, 100, List.of(V11, V21), S21) @@ -203,18 +203,18 @@ public void testMultipleRequestsWithoutPatterns() { var otpModel = model(false); var graph = otpModel.graph(); graph.hasStreets = true; - var transitModel = otpModel.transitModel(); + var timetableRepository = otpModel.timetableRepository(); new DirectTransferGenerator( graph, - transitModel, + timetableRepository, DataImportIssueStore.NOOP, MAX_TRANSFER_DURATION, transferRequests ) .buildGraph(); - assertTransfers(transitModel.getAllPathTransfers()); + assertTransfers(timetableRepository.getAllPathTransfers()); } @Test @@ -230,11 +230,11 @@ public void testMultipleRequestsWithPatterns() { TestOtpModel model = model(true); var graph = model.graph(); graph.hasStreets = true; - var transitModel = model.transitModel(); + var timetableRepository = model.timetableRepository(); new DirectTransferGenerator( graph, - transitModel, + timetableRepository, DataImportIssueStore.NOOP, MAX_TRANSFER_DURATION, transferRequests @@ -242,7 +242,7 @@ public void testMultipleRequestsWithPatterns() { .buildGraph(); assertTransfers( - transitModel.getAllPathTransfers(), + timetableRepository.getAllPathTransfers(), tr(S0, 100, List.of(V0, V11), S11), tr(S0, 100, List.of(V0, V21), S21), tr(S11, 100, List.of(V11, V21), S21), @@ -256,21 +256,21 @@ public void testTransferOnIsolatedStations() { var graph = otpModel.graph(); graph.hasStreets = false; - var transitModel = otpModel.transitModel(); + var timetableRepository = otpModel.timetableRepository(); var req = new RouteRequest(); req.journey().transfer().setMode(StreetMode.WALK); var transferRequests = List.of(req); new DirectTransferGenerator( graph, - transitModel, + timetableRepository, DataImportIssueStore.NOOP, MAX_TRANSFER_DURATION, transferRequests ) .buildGraph(); - assertTrue(transitModel.getAllPathTransfers().isEmpty()); + assertTrue(timetableRepository.getAllPathTransfers().isEmpty()); } private TestOtpModel model(boolean addPatterns) { @@ -332,11 +332,11 @@ public void build() { street(V11, V22, 110, StreetTraversalPermission.PEDESTRIAN_AND_BICYCLE); if (addPatterns) { - var agency = TransitModelForTest.agency("Agency"); + var agency = TimetableRepositoryForTest.agency("Agency"); tripPattern( TripPattern - .of(TransitModelForTest.id("TP1")) + .of(TimetableRepositoryForTest.id("TP1")) .withRoute(route("R1", TransitMode.BUS, agency)) .withStopPattern( new StopPattern(List.of(st(S11, !withBoardingConstraint, true), st(S12), st(S13))) @@ -346,7 +346,7 @@ public void build() { tripPattern( TripPattern - .of(TransitModelForTest.id("TP2")) + .of(TimetableRepositoryForTest.id("TP2")) .withRoute(route("R2", TransitMode.BUS, agency)) .withStopPattern(new StopPattern(List.of(st(S21), st(S22), st(S23)))) .build() 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 8123661990e..650282d6e7d 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 @@ -19,7 +19,7 @@ import org.opentripplanner.test.support.ResourceLoader; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.service.StopModel; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; class GtfsModuleTest { @@ -30,14 +30,14 @@ void addShapesForFrequencyTrips() { var bundle = new GtfsBundle(ConstantsForTests.SIMPLE_GTFS); var module = new GtfsModule( List.of(bundle), - model.transitModel, + model.timetableRepository, model.graph, ServiceDateInterval.unbounded() ); module.buildGraph(); - var frequencyTripPattern = model.transitModel + var frequencyTripPattern = model.timetableRepository .getAllTripPatterns() .stream() .filter(p -> !p.getScheduledTimetable().getFrequencyEntries().isEmpty()) @@ -49,7 +49,7 @@ void addShapesForFrequencyTrips() { assertNotNull(tripPattern.getGeometry()); assertNotNull(tripPattern.getHopGeometry(0)); - var pattern = model.transitModel.getTripPatternForId(tripPattern.getId()); + var pattern = model.timetableRepository.getTripPatternForId(tripPattern.getId()); assertNotNull(pattern.getGeometry()); assertNotNull(pattern.getHopGeometry(0)); } @@ -61,7 +61,7 @@ void duplicateFeedId() { var module = new GtfsModule( bundles, - model.transitModel, + model.timetableRepository, model.graph, ServiceDateInterval.unbounded() ); @@ -72,11 +72,11 @@ private static TestModels buildTestModel() { var deduplicator = new Deduplicator(); var stopModel = new StopModel(); var graph = new Graph(deduplicator); - var transitModel = new TransitModel(stopModel, deduplicator); - return new TestModels(graph, transitModel); + var timetableRepository = new TimetableRepository(stopModel, deduplicator); + return new TestModels(graph, timetableRepository); } - record TestModels(Graph graph, TransitModel transitModel) {} + record TestModels(Graph graph, TimetableRepository timetableRepository) {} static GtfsBundle bundle(String feedId) { var b = new GtfsBundle(ResourceLoader.of(GtfsModuleTest.class).file("/gtfs/interlining")); @@ -109,14 +109,17 @@ void interline(List bundles, int expectedTransfers) { var module = new GtfsModule( bundles, - model.transitModel, + model.timetableRepository, model.graph, ServiceDateInterval.unbounded() ); module.buildGraph(); - assertEquals(expectedTransfers, model.transitModel.getTransferService().listAll().size()); + assertEquals( + expectedTransfers, + model.timetableRepository.getTransferService().listAll().size() + ); } } } 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 9409171920f..f411bf6757c 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 @@ -24,12 +24,12 @@ import org.opentripplanner.street.model.vertex.VertexFactory; import org.opentripplanner.street.model.vertex.VertexLabel; import org.opentripplanner.test.support.ResourceLoader; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; 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.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; /** * We test that the platform area at Herrenberg station (https://www.openstreetmap.org/way/27558650) @@ -37,7 +37,7 @@ */ class OsmBoardingLocationsModuleTest { - private final TransitModelForTest testModel = TransitModelForTest.of(); + private final TimetableRepositoryForTest testModel = TimetableRepositoryForTest.of(); File file = ResourceLoader .of(OsmBoardingLocationsModuleTest.class) @@ -69,7 +69,7 @@ static Stream testCases() { void addAndLinkBoardingLocations(boolean areaVisibility, Set linkedVertices) { var deduplicator = new Deduplicator(); var graph = new Graph(deduplicator); - var transitModel = new TransitModel(new StopModel(), deduplicator); + var timetableRepository = new TimetableRepository(new StopModel(), deduplicator); var factory = new VertexFactory(graph); var provider = new OsmProvider(file, false); @@ -97,8 +97,8 @@ void addAndLinkBoardingLocations(boolean areaVisibility, Set linkedVerti TransitStopVertex.of().withStop(busStop).withModes(Set.of(TransitMode.BUS)) ); - transitModel.index(); - graph.index(transitModel.getStopModel()); + timetableRepository.index(); + graph.index(timetableRepository.getStopModel()); assertEquals(0, busVertex.getIncoming().size()); assertEquals(0, busVertex.getOutgoing().size()); @@ -106,7 +106,7 @@ void addAndLinkBoardingLocations(boolean areaVisibility, Set linkedVerti assertEquals(0, platformVertex.getIncoming().size()); assertEquals(0, platformVertex.getOutgoing().size()); - new OsmBoardingLocationsModule(graph, transitModel).buildGraph(); + new OsmBoardingLocationsModule(graph, timetableRepository).buildGraph(); var boardingLocations = graph.getVerticesOfType(OsmBoardingLocationVertex.class); assertEquals(5, boardingLocations.size()); // 3 nodes connected to the street network, plus one "floating" and one area centroid created by the module 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 06b10575ef9..f9957a09b95 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 @@ -7,7 +7,7 @@ import static org.opentripplanner._support.geometry.Coordinates.KONGSBERG_PLATFORM_1; import static org.opentripplanner.street.model.StreetTraversalPermission.CAR; import static org.opentripplanner.street.model.StreetTraversalPermission.PEDESTRIAN; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.util.List; import org.junit.jupiter.api.Test; @@ -21,11 +21,11 @@ import org.opentripplanner.street.model.edge.StreetTransitStopLink; import org.opentripplanner.street.model.vertex.SplitterVertex; import org.opentripplanner.street.model.vertex.TransitStopVertex; -import org.opentripplanner.transit.model._data.TransitModelForTest; +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.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; class StreetLinkerModuleTest { @@ -67,7 +67,7 @@ void linkRegularStop() { void linkFlexStop() { OTPFeature.FlexRouting.testOn(() -> { var model = new TestModel(); - var flexTrip = TransitModelForTest.of().unscheduledTrip("flex", model.stop()); + var flexTrip = TimetableRepositoryForTest.of().unscheduledTrip("flex", model.stop()); model.withFlexTrip(flexTrip); var module = model.streetLinkerModule(); @@ -97,7 +97,7 @@ private static class TestModel { private final TransitStopVertex stopVertex; private final StreetLinkerModule module; private final RegularStop stop; - private final TransitModel transitModel; + private final TimetableRepository timetableRepository; public TestModel() { var from = StreetModelForTest.intersectionVertex( @@ -123,13 +123,13 @@ public TestModel() { .build(); builder.withRegularStop(stop); - transitModel = new TransitModel(builder.build(), new Deduplicator()); + timetableRepository = new TimetableRepository(builder.build(), new Deduplicator()); stopVertex = TransitStopVertex.of().withStop(stop).build(); graph.addVertex(stopVertex); graph.hasStreets = true; - module = new StreetLinkerModule(graph, transitModel, DataImportIssueStore.NOOP, false); + module = new StreetLinkerModule(graph, timetableRepository, DataImportIssueStore.NOOP, false); assertFalse(stopVertex.isConnectedToGraph()); assertTrue(stopVertex.getIncoming().isEmpty()); @@ -153,7 +153,7 @@ public RegularStop stop() { } public void withFlexTrip(UnscheduledTrip flexTrip) { - transitModel.addFlexTrip(flexTrip.getId(), flexTrip); + timetableRepository.addFlexTrip(flexTrip.getId(), flexTrip); } } } diff --git a/application/src/test/java/org/opentripplanner/graph_builder/module/TestStreetLinkerModule.java b/application/src/test/java/org/opentripplanner/graph_builder/module/TestStreetLinkerModule.java index 38680c357c4..49627c6231d 100644 --- a/application/src/test/java/org/opentripplanner/graph_builder/module/TestStreetLinkerModule.java +++ b/application/src/test/java/org/opentripplanner/graph_builder/module/TestStreetLinkerModule.java @@ -2,12 +2,12 @@ import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.routing.graph.Graph; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; public class TestStreetLinkerModule { /** For test only */ - public static void link(Graph graph, TransitModel model) { + public static void link(Graph graph, TimetableRepository model) { new StreetLinkerModule(graph, model, DataImportIssueStore.NOOP, false).buildGraph(); } } diff --git a/application/src/test/java/org/opentripplanner/graph_builder/module/VehicleParkingLinkingTest.java b/application/src/test/java/org/opentripplanner/graph_builder/module/VehicleParkingLinkingTest.java index 23f4ffc72ca..d7f75f530d1 100644 --- a/application/src/test/java/org/opentripplanner/graph_builder/module/VehicleParkingLinkingTest.java +++ b/application/src/test/java/org/opentripplanner/graph_builder/module/VehicleParkingLinkingTest.java @@ -2,7 +2,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.util.List; import org.junit.jupiter.api.BeforeEach; @@ -18,12 +18,12 @@ import org.opentripplanner.street.model.vertex.IntersectionVertex; import org.opentripplanner.street.model.vertex.VehicleParkingEntranceVertex; import org.opentripplanner.street.model.vertex.VertexFactory; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; public class VehicleParkingLinkingTest { private Graph graph; - private TransitModel transitModel; + private TimetableRepository timetableRepository; private IntersectionVertex A; private IntersectionVertex B; @@ -36,7 +36,7 @@ public void setup() { VehicleParkingTestGraphData graphData = new VehicleParkingTestGraphData(); graphData.initGraph(); graph = graphData.getGraph(); - transitModel = graphData.getTransitModel(); + timetableRepository = graphData.getTimetableRepository(); A = graphData.getAVertex(); B = graphData.getBVertex(); vertexFactory = new VertexFactory(graph); @@ -53,7 +53,7 @@ public void entranceWithVertexLinkingTest() { .build(); var parkingVertex = vertexFactory.vehicleParkingEntrance(parking); - TestStreetLinkerModule.link(graph, transitModel); + TestStreetLinkerModule.link(graph, timetableRepository); assertEquals(1, parkingVertex.getOutgoing().size()); parkingVertex.getOutgoing().forEach(e -> assertEquals(e.getToVertex(), A)); @@ -76,7 +76,7 @@ public void entranceWithoutVertexLinkingTest() { .build(); var parkingVertex = vertexFactory.vehicleParkingEntrance(parking.getEntrances().get(0)); - TestStreetLinkerModule.link(graph, transitModel); + TestStreetLinkerModule.link(graph, timetableRepository); var streetLinks = graph.getEdgesOfType(StreetVehicleParkingLink.class); assertEquals(2, streetLinks.size()); @@ -110,7 +110,7 @@ public void carParkingEntranceToAllTraversableStreetLinkingTest() { .build(); var parkingVertex = vertexFactory.vehicleParkingEntrance(parking.getEntrances().get(0)); - TestStreetLinkerModule.link(graph, transitModel); + TestStreetLinkerModule.link(graph, timetableRepository); var streetLinks = graph.getEdgesOfType(StreetVehicleParkingLink.class); assertEquals(4, streetLinks.size()); @@ -145,7 +145,7 @@ public void removeEntranceWithNonExistingVertexTest() { graph.remove(A); - TestStreetLinkerModule.link(graph, transitModel); + TestStreetLinkerModule.link(graph, timetableRepository); assertEquals(1, vehicleParking.getEntrances().size()); @@ -175,7 +175,7 @@ public void removeVehicleParkingWithOneEntranceAndNonExistingVertexTest() { graph.remove(A); - TestStreetLinkerModule.link(graph, transitModel); + TestStreetLinkerModule.link(graph, timetableRepository); assertEquals(0, graph.getVerticesOfType(VehicleParkingEntranceVertex.class).size()); diff --git a/application/src/test/java/org/opentripplanner/graph_builder/module/geometry/CalculateWorldEnvelopeModuleTest.java b/application/src/test/java/org/opentripplanner/graph_builder/module/geometry/CalculateWorldEnvelopeModuleTest.java index 9157f8433b8..4f9a837ef6c 100644 --- a/application/src/test/java/org/opentripplanner/graph_builder/module/geometry/CalculateWorldEnvelopeModuleTest.java +++ b/application/src/test/java/org/opentripplanner/graph_builder/module/geometry/CalculateWorldEnvelopeModuleTest.java @@ -7,12 +7,12 @@ import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.street.model.vertex.Vertex; import org.opentripplanner.street.model.vertex.VertexLabel; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.site.RegularStop; class CalculateWorldEnvelopeModuleTest { - private final TransitModelForTest testModel = TransitModelForTest.of(); + private final TimetableRepositoryForTest testModel = TimetableRepositoryForTest.of(); private final List vertexes = List.of(new V(10d, 12d), new V(11d, 13d), new V(14d, 15d)); 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 72d9f817bd8..bb15be82d9e 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 @@ -7,7 +7,7 @@ import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.service.StopModel; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; class IslandPruningUtils { @@ -21,20 +21,20 @@ static Graph buildOsmGraph( try { var deduplicator = new Deduplicator(); var graph = new Graph(deduplicator); - var transitModel = new TransitModel(new StopModel(), deduplicator); + var timetableRepository = new TimetableRepository(new StopModel(), deduplicator); // Add street data from OSM OsmProvider osmProvider = new OsmProvider(osmFile, true); OsmModule osmModule = OsmModule.of(osmProvider, graph).withEdgeNamer(new TestNamer()).build(); osmModule.buildGraph(); - transitModel.index(); - graph.index(transitModel.getStopModel()); + timetableRepository.index(); + graph.index(timetableRepository.getStopModel()); // Prune floating islands and set noThru where necessary PruneIslands pruneIslands = new PruneIslands( graph, - transitModel, + timetableRepository, DataImportIssueStore.NOOP, null ); diff --git a/application/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/SubgraphOnlyFerryTest.java b/application/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/SubgraphOnlyFerryTest.java index f069a518fc0..2085e7a238a 100644 --- a/application/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/SubgraphOnlyFerryTest.java +++ b/application/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/SubgraphOnlyFerryTest.java @@ -6,13 +6,13 @@ import java.util.Set; import org.junit.jupiter.api.Test; import org.opentripplanner.street.model.vertex.TransitStopVertex; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.site.RegularStop; class SubgraphOnlyFerryTest { - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final RegularStop regularStop1 = TEST_MODEL.stop("TEST-1").build(); private static final RegularStop regularStop2 = TEST_MODEL.stop("TEST-2").build(); 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 a51095163fc..adef7774936 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 @@ -33,7 +33,7 @@ import org.opentripplanner.test.support.ResourceLoader; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.service.StopModel; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; public class LinkingTest { @@ -114,16 +114,16 @@ public void testStopsLinkedIdentically() { // build the graph without the added stops TestOtpModel model = buildGraphNoTransit(); Graph g1 = model.graph(); - TransitModel transitModel1 = model.transitModel(); + TimetableRepository timetableRepository1 = model.timetableRepository(); addRegularStopGrid(g1); - link(g1, transitModel1); + link(g1, timetableRepository1); TestOtpModel model2 = buildGraphNoTransit(); Graph g2 = model2.graph(); - TransitModel transitModel2 = model2.transitModel(); + TimetableRepository timetableRepository2 = model2.timetableRepository(); addExtraStops(g2); addRegularStopGrid(g2); - link(g2, transitModel2); + link(g2, timetableRepository2); var transitStopVertices = g1.getVerticesOfType(TransitStopVertex.class); assertEquals(1350, transitStopVertices.size()); @@ -152,7 +152,7 @@ public static TestOtpModel buildGraphNoTransit() { var deduplicator = new Deduplicator(); var stopModel = new StopModel(); var gg = new Graph(deduplicator); - var transitModel = new TransitModel(stopModel, deduplicator); + var timetableRepository = new TimetableRepository(stopModel, deduplicator); File file = ResourceLoader.of(LinkingTest.class).file("columbus.osm.pbf"); OsmProvider provider = new OsmProvider(file, false); @@ -160,7 +160,7 @@ public static TestOtpModel buildGraphNoTransit() { OsmModule osmModule = OsmModule.of(provider, gg).build(); osmModule.buildGraph(); - return new TestOtpModel(gg, transitModel); + return new TestOtpModel(gg, timetableRepository); } private static List outgoingStls(final TransitStopVertex tsv) { 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 a45b8eef239..4c8b6a176d3 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 @@ -8,9 +8,9 @@ import org.opentripplanner.street.model.vertex.TransitStopVertex; import org.opentripplanner.street.search.TraverseMode; import org.opentripplanner.street.search.TraverseModeSet; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.site.RegularStop; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; /** * Get graphs of Columbus Ohio with real OSM streets and a synthetic transit system for use in @@ -18,7 +18,7 @@ */ class TestGraph { - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); /** Add a regular grid of stops to the graph */ public static void addRegularStopGrid(Graph graph) { @@ -60,9 +60,9 @@ public static void addExtraStops(Graph graph) { } /** link the stops in the graph */ - public static void link(Graph graph, TransitModel transitModel) { - transitModel.index(); - graph.index(transitModel.getStopModel()); + public static void link(Graph graph, TimetableRepository timetableRepository) { + timetableRepository.index(); + graph.index(timetableRepository.getStopModel()); 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 be1666824f3..75c56dd2fb3 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 @@ -20,7 +20,7 @@ import org.opentripplanner.test.support.ResourceLoader; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.service.StopModel; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; public class UnconnectedAreasTest { @@ -159,7 +159,7 @@ private Graph buildOsmGraph(String osmFileName, DataImportIssueStore issueStore) var deduplicator = new Deduplicator(); var stopModel = new StopModel(); var graph = new Graph(deduplicator); - var transitModel = new TransitModel(stopModel, deduplicator); + var timetableRepository = new TimetableRepository(stopModel, deduplicator); OsmProvider provider = new OsmProvider(RESOURCE_LOADER.file(osmFileName), false); OsmModule loader = OsmModule .of(provider, graph) @@ -171,7 +171,7 @@ private Graph buildOsmGraph(String osmFileName, DataImportIssueStore issueStore) loader.buildGraph(); - TestStreetLinkerModule.link(graph, transitModel); + TestStreetLinkerModule.link(graph, timetableRepository); return graph; } diff --git a/application/src/test/java/org/opentripplanner/gtfs/GenerateTripPatternsOperationTest.java b/application/src/test/java/org/opentripplanner/gtfs/GenerateTripPatternsOperationTest.java index 74819deabc2..8b91e3c3d08 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/GenerateTripPatternsOperationTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/GenerateTripPatternsOperationTest.java @@ -1,6 +1,6 @@ package org.opentripplanner.gtfs; -import static org.opentripplanner.transit.model._data.TransitModelForTest.trip; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.trip; import java.util.Collection; import java.util.List; @@ -19,7 +19,7 @@ import org.opentripplanner.graph_builder.module.geometry.GeometryProcessor; import org.opentripplanner.model.StopTime; import org.opentripplanner.model.impl.OtpTransitServiceBuilder; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.FeedScopedId; @@ -50,12 +50,12 @@ class GenerateTripPatternsOperationTest { @BeforeAll static void setupClass() { - TransitModelForTest transitModelForTest = TransitModelForTest.of(); - stopA = transitModelForTest.stop("stopA").build(); - stopB = transitModelForTest.stop("stopB").build(); - stopC = transitModelForTest.stop("stopC").build(); + TimetableRepositoryForTest timetableRepositoryForTest = TimetableRepositoryForTest.of(); + stopA = timetableRepositoryForTest.stop("stopA").build(); + stopB = timetableRepositoryForTest.stop("stopB").build(); + stopC = timetableRepositoryForTest.stop("stopC").build(); stopModel = - transitModelForTest + timetableRepositoryForTest .stopModelBuilder() .withRegularStop(stopA) .withRegularStop(stopB) @@ -69,7 +69,7 @@ static void setupClass() { stopTimeC = new StopTime(); stopTimeC.setStop(stopC); - FeedScopedId serviceId1 = TransitModelForTest.id("SERVICE_ID_1"); + FeedScopedId serviceId1 = TimetableRepositoryForTest.id("SERVICE_ID_1"); trip1 = trip("TRIP_ID_1") .withServiceId(serviceId1) @@ -79,7 +79,7 @@ static void setupClass() { .build(); // same route, mode, submode and direction as trip1 - FeedScopedId serviceId2 = TransitModelForTest.id("SERVICE_ID_2"); + FeedScopedId serviceId2 = TimetableRepositoryForTest.id("SERVICE_ID_2"); trip2 = trip("TRIP_ID_2") .withServiceId(serviceId2) @@ -90,7 +90,7 @@ static void setupClass() { .build(); // same route, direction as trip1, different mode - FeedScopedId serviceId3 = TransitModelForTest.id("SERVICE_ID_3"); + FeedScopedId serviceId3 = TimetableRepositoryForTest.id("SERVICE_ID_3"); trip3 = trip("TRIP_ID_3") .withServiceId(serviceId3) @@ -100,7 +100,7 @@ static void setupClass() { .build(); // same route, mode, direction as trip1, different submode - FeedScopedId serviceId4 = TransitModelForTest.id("SERVICE_ID_4"); + FeedScopedId serviceId4 = TimetableRepositoryForTest.id("SERVICE_ID_4"); trip4 = trip("TRIP_ID_4") .withServiceId(serviceId4) @@ -111,7 +111,7 @@ static void setupClass() { .build(); // same route, mode as trip1, different direction - FeedScopedId serviceId5 = TransitModelForTest.id("SERVICE_ID_5"); + FeedScopedId serviceId5 = TimetableRepositoryForTest.id("SERVICE_ID_5"); trip5 = trip("TRIP_ID_5") .withServiceId(serviceId5) diff --git a/application/src/test/java/org/opentripplanner/gtfs/interlining/InterlineProcessorTest.java b/application/src/test/java/org/opentripplanner/gtfs/interlining/InterlineProcessorTest.java index e14a33cd276..1fd24f17f3b 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/interlining/InterlineProcessorTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/interlining/InterlineProcessorTest.java @@ -16,7 +16,7 @@ import org.opentripplanner.model.calendar.CalendarServiceData; import org.opentripplanner.model.plan.PlanTestConstants; import org.opentripplanner.model.transfer.DefaultTransferService; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.StopPattern; @@ -25,7 +25,7 @@ class InterlineProcessorTest implements PlanTestConstants { - private static TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); List patterns = List.of( tripPattern("trip-1", "block-1", "service-1"), @@ -150,7 +150,7 @@ void staySeatedNotAllowed() { } private static TripPattern tripPattern(String tripId, String blockId, String serviceId) { - var trip = TransitModelForTest + var trip = TimetableRepositoryForTest .trip(tripId) .withGtfsBlockId(blockId) .withServiceId(new FeedScopedId("1", serviceId)) @@ -165,7 +165,7 @@ private static TripPattern tripPattern(String tripId, String blockId, String ser var tripTimes = TripTimesFactory.tripTimes(trip, stopTimes, new Deduplicator()); return TripPattern - .of(TransitModelForTest.id(tripId)) + .of(TimetableRepositoryForTest.id(tripId)) .withRoute(trip.getRoute()) .withStopPattern(stopPattern) .withScheduledTimeTableBuilder(builder -> builder.addTripTimes(tripTimes)) 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 c37df887927..e0390fee6b2 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/mapping/AgencyMapperTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/mapping/AgencyMapperTest.java @@ -11,7 +11,7 @@ import java.util.Collections; import org.junit.jupiter.api.Test; import org.onebusaway.gtfs.model.Agency; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; public class AgencyMapperTest { @@ -32,7 +32,7 @@ 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(TransitModelForTest.FEED_ID); + private final AgencyMapper subject = new AgencyMapper(TimetableRepositoryForTest.FEED_ID); static { AGENCY.setId(ID); @@ -58,7 +58,7 @@ public void testMap() throws Exception { result = subject.map(AGENCY); - assertEquals(TransitModelForTest.FEED_ID, result.getId().getFeedId()); + assertEquals(TimetableRepositoryForTest.FEED_ID, result.getId().getFeedId()); assertEquals(ID, result.getId().getId()); assertEquals(NAME, result.getName()); assertEquals(LANG, result.getLang()); diff --git a/application/src/test/java/org/opentripplanner/gtfs/mapping/BoardingAreaMapperTest.java b/application/src/test/java/org/opentripplanner/gtfs/mapping/BoardingAreaMapperTest.java index 083db3bcb84..cb4ff3caaa3 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/mapping/BoardingAreaMapperTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/mapping/BoardingAreaMapperTest.java @@ -12,7 +12,7 @@ import org.junit.jupiter.api.Test; import org.onebusaway.gtfs.model.AgencyAndId; import org.onebusaway.gtfs.model.Stop; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.Accessibility; import org.opentripplanner.transit.model.site.BoardingArea; import org.opentripplanner.transit.model.site.RegularStop; @@ -40,7 +40,7 @@ public class BoardingAreaMapperTest { private static final int VEHICLE_TYPE = 5; private static final int WHEELCHAIR_BOARDING = 1; - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final RegularStop PARENT_STOP = TEST_MODEL.stop(PARENT).build(); 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 01eeaa662fa..2119c7299d0 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/mapping/RouteMapperTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/mapping/RouteMapperTest.java @@ -14,7 +14,7 @@ import org.onebusaway.gtfs.model.AgencyAndId; import org.onebusaway.gtfs.model.Route; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.network.BikeAccess; import org.opentripplanner.transit.model.organization.Branding; @@ -51,7 +51,7 @@ public class RouteMapperTest { private static final Route ROUTE = new Route(); private final RouteMapper subject = new RouteMapper( - new AgencyMapper(TransitModelForTest.FEED_ID), + new AgencyMapper(TimetableRepositoryForTest.FEED_ID), DataImportIssueStore.NOOP, new TranslationHelper() ); diff --git a/application/src/test/java/org/opentripplanner/inspector/vector/VectorTileResponseFactoryTest.java b/application/src/test/java/org/opentripplanner/inspector/vector/VectorTileResponseFactoryTest.java index 1489cd87c13..6c874c7108f 100644 --- a/application/src/test/java/org/opentripplanner/inspector/vector/VectorTileResponseFactoryTest.java +++ b/application/src/test/java/org/opentripplanner/inspector/vector/VectorTileResponseFactoryTest.java @@ -11,13 +11,13 @@ import org.opentripplanner.inspector.vector.geofencing.GeofencingZonesLayerBuilder; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.standalone.api.OtpServerRequestContext; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; class VectorTileResponseFactoryTest { public static final OtpServerRequestContext SERVER_CONTEXT = TestServerContext.createServerContext( new Graph(), - new TransitModel() + new TimetableRepository() ); enum LayerType { diff --git a/application/src/test/java/org/opentripplanner/model/ShapeGeometryTest.java b/application/src/test/java/org/opentripplanner/model/ShapeGeometryTest.java index 167bd2a2972..bcfd93513ce 100644 --- a/application/src/test/java/org/opentripplanner/model/ShapeGeometryTest.java +++ b/application/src/test/java/org/opentripplanner/model/ShapeGeometryTest.java @@ -6,17 +6,17 @@ import org.opentripplanner.ConstantsForTests; import org.opentripplanner.TestOtpModel; import org.opentripplanner.transit.model.network.TripPattern; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; public class ShapeGeometryTest { @Test public void useShapeGeometries() { TestOtpModel model = ConstantsForTests.buildGtfsGraph(ConstantsForTests.SHAPE_DIST_GTFS); - TransitModel transitModel = model.transitModel(); + TimetableRepository timetableRepository = model.timetableRepository(); // data includes 2 trips, of which one has incorrect shape_dist_traveled parametrization in stop_times - for (TripPattern pattern : transitModel.getAllTripPatterns()) { + for (TripPattern pattern : timetableRepository.getAllTripPatterns()) { // examine if shape extraction worked at first stop intervals, where dist parameter is wrong assertTrue(pattern.getHopGeometry(0).getCoordinates().length > 2); assertTrue(pattern.getHopGeometry(1).getCoordinates().length > 2); diff --git a/application/src/test/java/org/opentripplanner/model/TimetableSnapshotTest.java b/application/src/test/java/org/opentripplanner/model/TimetableSnapshotTest.java index ffdfc027b76..77f6f94266c 100644 --- a/application/src/test/java/org/opentripplanner/model/TimetableSnapshotTest.java +++ b/application/src/test/java/org/opentripplanner/model/TimetableSnapshotTest.java @@ -26,7 +26,7 @@ import org.opentripplanner.transit.model.framework.Result; import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.timetable.TripTimes; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.updater.spi.UpdateError; import org.opentripplanner.updater.trip.BackwardsDelayPropagationType; @@ -39,12 +39,12 @@ public class TimetableSnapshotTest { @BeforeAll public static void setUp() throws Exception { TestOtpModel model = ConstantsForTests.buildGtfsGraph(ConstantsForTests.SIMPLE_GTFS); - TransitModel transitModel = model.transitModel(); + TimetableRepository timetableRepository = model.timetableRepository(); - feedId = transitModel.getFeedIds().iterator().next(); + feedId = timetableRepository.getFeedIds().iterator().next(); patternIndex = new HashMap<>(); - for (TripPattern tripPattern : transitModel.getAllTripPatterns()) { + for (TripPattern tripPattern : timetableRepository.getAllTripPatterns()) { tripPattern .scheduledTripsAsStream() .forEach(trip -> patternIndex.put(trip.getId(), tripPattern)); diff --git a/application/src/test/java/org/opentripplanner/model/TimetableTest.java b/application/src/test/java/org/opentripplanner/model/TimetableTest.java index dca4d3e828d..a615041d7a1 100644 --- a/application/src/test/java/org/opentripplanner/model/TimetableTest.java +++ b/application/src/test/java/org/opentripplanner/model/TimetableTest.java @@ -32,7 +32,7 @@ import org.opentripplanner.transit.model.framework.Result; import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.timetable.RealTimeState; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.updater.spi.UpdateError; import org.opentripplanner.updater.trip.BackwardsDelayPropagationType; import org.opentripplanner.updater.trip.TripUpdateBuilder; @@ -51,12 +51,12 @@ public class TimetableTest { @BeforeAll public static void setUp() throws Exception { TestOtpModel model = ConstantsForTests.buildGtfsGraph(ConstantsForTests.SIMPLE_GTFS); - TransitModel transitModel = model.transitModel(); + TimetableRepository timetableRepository = model.timetableRepository(); - feedId = transitModel.getFeedIds().stream().findFirst().get(); + feedId = timetableRepository.getFeedIds().stream().findFirst().get(); patternIndex = new HashMap<>(); - for (TripPattern pattern : transitModel.getAllTripPatterns()) { + for (TripPattern pattern : timetableRepository.getAllTripPatterns()) { pattern.scheduledTripsAsStream().forEach(trip -> patternIndex.put(trip.getId(), pattern)); } diff --git a/application/src/test/java/org/opentripplanner/model/TripPatternTest.java b/application/src/test/java/org/opentripplanner/model/TripPatternTest.java index bad159eb3cd..f629902f3e1 100644 --- a/application/src/test/java/org/opentripplanner/model/TripPatternTest.java +++ b/application/src/test/java/org/opentripplanner/model/TripPatternTest.java @@ -8,7 +8,7 @@ import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.LineString; import org.opentripplanner.framework.geometry.GeometryUtils; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.StopPattern; import org.opentripplanner.transit.model.network.TripPattern; @@ -28,7 +28,7 @@ public class TripPatternTest { */ @Test public void testSetHopGeometriesFromPattern() { - var testModel = TransitModelForTest.of(); + var testModel = TimetableRepositoryForTest.of(); var stationOrigin = testModel.station("S1").withCoordinate(0.0, 0.0).build(); var stationDestination = testModel.station("S2").withCoordinate(1.0, 1.0).build(); var stopOrigin = testModel @@ -103,7 +103,7 @@ public TripPattern setupTripPattern( } var stopPattern = builder.build(); - var route = TransitModelForTest.route("R1").build(); + var route = TimetableRepositoryForTest.route("R1").build(); return TripPattern .of(new FeedScopedId("Test", "T1")) diff --git a/application/src/test/java/org/opentripplanner/model/TripTimeOnDateTest.java b/application/src/test/java/org/opentripplanner/model/TripTimeOnDateTest.java index 78002e46eae..97e34b134bf 100644 --- a/application/src/test/java/org/opentripplanner/model/TripTimeOnDateTest.java +++ b/application/src/test/java/org/opentripplanner/model/TripTimeOnDateTest.java @@ -5,7 +5,7 @@ import java.time.LocalTime; import org.junit.jupiter.api.Test; import org.opentripplanner.model.plan.PlanTestConstants; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.timetable.TripTimesFactory; @@ -14,9 +14,9 @@ class TripTimeOnDateTest implements PlanTestConstants { @Test void gtfsSequence() { - var testModel = TransitModelForTest.of(); + var testModel = TimetableRepositoryForTest.of(); var pattern = testModel.pattern(TransitMode.BUS).build(); - var trip = TransitModelForTest.trip("123").build(); + var trip = TimetableRepositoryForTest.trip("123").build(); var stopTimes = testModel.stopTimesEvery5Minutes(3, trip, T11_00); var tripTimes = TripTimesFactory.tripTimes(trip, stopTimes, new Deduplicator()); 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 135a3045c3c..9516ce03a32 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 @@ -8,7 +8,7 @@ import static org.opentripplanner.gtfs.GtfsContextBuilder.contextBuilder; import static org.opentripplanner.model.calendar.ServiceCalendarDate.EXCEPTION_TYPE_REMOVE; import static org.opentripplanner.model.calendar.impl.CalendarServiceDataFactoryImpl.merge; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.io.IOException; import java.time.LocalDate; @@ -28,7 +28,7 @@ import org.opentripplanner.model.calendar.CalendarServiceData; import org.opentripplanner.model.calendar.ServiceCalendarDate; import org.opentripplanner.model.impl.OtpTransitServiceBuilder; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.FeedScopedId; /** @@ -123,7 +123,7 @@ public void testServiceGetServiceDatesForServiceId() { private static GtfsContext createCtxBuilder() throws IOException { GtfsContextBuilder ctxBuilder = contextBuilder( - TransitModelForTest.FEED_ID, + TimetableRepositoryForTest.FEED_ID, ConstantsForTests.SIMPLE_GTFS ); OtpTransitServiceBuilder builder = ctxBuilder @@ -132,7 +132,7 @@ private static GtfsContext createCtxBuilder() throws IOException { // Supplement test data with at least one entity in all collections builder.getCalendarDates().add(removeMondayFromAlldays()); - builder.getFeedInfos().add(FeedInfo.dummyForTest(TransitModelForTest.FEED_ID)); + builder.getFeedInfos().add(FeedInfo.dummyForTest(TimetableRepositoryForTest.FEED_ID)); return ctxBuilder.build(); } 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 27e6e56c645..b37a0f55703 100644 --- a/application/src/test/java/org/opentripplanner/model/impl/OtpTransitServiceBuilderLimitPeriodTest.java +++ b/application/src/test/java/org/opentripplanner/model/impl/OtpTransitServiceBuilderLimitPeriodTest.java @@ -16,7 +16,7 @@ import org.opentripplanner.model.calendar.ServiceCalendar; import org.opentripplanner.model.calendar.ServiceCalendarDate; import org.opentripplanner.model.calendar.ServiceDateInterval; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.EntityById; import org.opentripplanner.transit.model.framework.FeedScopedId; @@ -45,12 +45,12 @@ public class OtpTransitServiceBuilderLimitPeriodTest { private static final LocalDate D1 = LocalDate.of(2020, 1, 8); private static final LocalDate D2 = LocalDate.of(2020, 1, 15); private static final LocalDate D3 = LocalDate.of(2020, 1, 31); - private static final FeedScopedId SERVICE_C_IN = TransitModelForTest.id("CalSrvIn"); - private static final FeedScopedId SERVICE_D_IN = TransitModelForTest.id("CalSrvDIn"); - private static final FeedScopedId SERVICE_C_OUT = TransitModelForTest.id("CalSrvOut"); - private static final FeedScopedId SERVICE_D_OUT = TransitModelForTest.id("CalSrvDOut"); + private static final FeedScopedId SERVICE_C_IN = TimetableRepositoryForTest.id("CalSrvIn"); + private static final FeedScopedId SERVICE_D_IN = TimetableRepositoryForTest.id("CalSrvDIn"); + private static final FeedScopedId SERVICE_C_OUT = TimetableRepositoryForTest.id("CalSrvOut"); + private static final FeedScopedId SERVICE_D_OUT = TimetableRepositoryForTest.id("CalSrvDOut"); private static final Deduplicator DEDUPLICATOR = new Deduplicator(); - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final RegularStop STOP_1 = TEST_MODEL.stop("Stop-1").build(); private static final RegularStop STOP_2 = TEST_MODEL.stop("Stop-2").build(); private static final List STOP_TIMES = List.of( @@ -59,7 +59,7 @@ public class OtpTransitServiceBuilderLimitPeriodTest { ); private static final StopPattern STOP_PATTERN = new StopPattern(STOP_TIMES); private static int SEQ_NR = 0; - private final Route route = TransitModelForTest.route(newId().getId()).build(); + private final Route route = TimetableRepositoryForTest.route(newId().getId()).build(); private final Trip tripCSIn = createTrip("TCalIn", SERVICE_C_IN); private final Trip tripCSOut = createTrip("TCalOut", SERVICE_C_OUT); private final Trip tripCSDIn = createTrip("TDateIn", SERVICE_D_IN); @@ -192,11 +192,11 @@ private static StopTime createStopTime(RegularStop stop, int time) { } private static FeedScopedId newId() { - return TransitModelForTest.id(Integer.toString(++SEQ_NR)); + return TimetableRepositoryForTest.id(Integer.toString(++SEQ_NR)); } private TripPattern createTripPattern(Collection trips) { - FeedScopedId patternId = TransitModelForTest.id( + FeedScopedId patternId = TimetableRepositoryForTest.id( trips.stream().map(t -> t.getId().getId()).collect(Collectors.joining(":")) ); TripPatternBuilder tpb = TripPattern @@ -213,7 +213,7 @@ private TripPattern createTripPattern(Collection trips) { } private Trip createTrip(String id, FeedScopedId serviceId) { - return TransitModelForTest + return TimetableRepositoryForTest .trip(id) .withServiceId(serviceId) .withDirection(Direction.INBOUND) diff --git a/application/src/test/java/org/opentripplanner/model/impl/OtpTransitServiceBuilderTest.java b/application/src/test/java/org/opentripplanner/model/impl/OtpTransitServiceBuilderTest.java index 9fd0bd4d8cb..d1c406d4ae1 100644 --- a/application/src/test/java/org/opentripplanner/model/impl/OtpTransitServiceBuilderTest.java +++ b/application/src/test/java/org/opentripplanner/model/impl/OtpTransitServiceBuilderTest.java @@ -17,15 +17,15 @@ import org.opentripplanner.model.ShapePoint; import org.opentripplanner.model.calendar.ServiceCalendar; import org.opentripplanner.model.calendar.ServiceCalendarDate; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.organization.Agency; public class OtpTransitServiceBuilderTest { - private static final String FEED_ID = TransitModelForTest.FEED_ID; - private static final FeedScopedId SERVICE_WEEKDAYS_ID = TransitModelForTest.id("weekdays"); + private static final String FEED_ID = TimetableRepositoryForTest.FEED_ID; + private static final FeedScopedId SERVICE_WEEKDAYS_ID = TimetableRepositoryForTest.id("weekdays"); private static OtpTransitServiceBuilder subject; 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 9ecdbbeb451..48bff78273f 100644 --- a/application/src/test/java/org/opentripplanner/model/impl/OtpTransitServiceImplTest.java +++ b/application/src/test/java/org/opentripplanner/model/impl/OtpTransitServiceImplTest.java @@ -6,7 +6,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.opentripplanner.gtfs.GtfsContextBuilder.contextBuilder; -import static org.opentripplanner.transit.model._data.TransitModelForTest.FEED_ID; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.FEED_ID; import java.io.IOException; import java.util.ArrayList; @@ -20,7 +20,7 @@ import org.opentripplanner.model.OtpTransitService; import org.opentripplanner.model.ShapePoint; import org.opentripplanner.model.StopTime; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.organization.Agency; import org.opentripplanner.transit.model.site.Pathway; @@ -31,7 +31,7 @@ public class OtpTransitServiceImplTest { - private static final FeedScopedId STATION_ID = TransitModelForTest.id("station"); + private static final FeedScopedId STATION_ID = TimetableRepositoryForTest.id("station"); // The subject is used as read only; hence static is ok private static OtpTransitService subject; @@ -132,7 +132,7 @@ public void testGetAllTrips() { @Test public void testGetStopForId() { - RegularStop stop = subject.stopModel().getRegularStop(TransitModelForTest.id("P")); + RegularStop stop = subject.stopModel().getRegularStop(TimetableRepositoryForTest.id("P")); assertEquals("RegularStop{F:P P}", stop.toString()); } @@ -146,7 +146,9 @@ public void testGetStopsForStation() { @Test public void testGetShapePointsForShapeId() { - List shapePoints = subject.getShapePointsForShapeId(TransitModelForTest.id("5")); + List shapePoints = subject.getShapePointsForShapeId( + TimetableRepositoryForTest.id("5") + ); assertEquals( "[#1 (41,-72), #2 (41,-72), #3 (40,-72), #4 (41,-73), #5 (41,-74)]", shapePoints.stream().map(OtpTransitServiceImplTest::toString).toList().toString() diff --git a/application/src/test/java/org/opentripplanner/model/plan/ItineraryTest.java b/application/src/test/java/org/opentripplanner/model/plan/ItineraryTest.java index 1372af0f405..58bb8d84ba0 100644 --- a/application/src/test/java/org/opentripplanner/model/plan/ItineraryTest.java +++ b/application/src/test/java/org/opentripplanner/model/plan/ItineraryTest.java @@ -16,7 +16,7 @@ import org.opentripplanner.framework.model.TimeAndCost; import org.opentripplanner.model.SystemNotice; import org.opentripplanner.street.search.TraverseMode; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.TransitMode; public class ItineraryTest implements PlanTestConstants { @@ -65,7 +65,7 @@ void testDerivedFieldsWithBusAllTheWay() { assertEquals(newTime(T11_00), result.firstLeg().getStartTime()); assertEquals(newTime(T11_10), result.firstLeg().getEndTime()); assertEquals(TransitMode.BUS, result.getTransitLeg(0).getMode()); - assertEquals(TransitModelForTest.id("55"), result.firstLeg().getTrip().getId()); + assertEquals(TimetableRepositoryForTest.id("55"), result.firstLeg().getTrip().getId()); assertEquals(7500, result.firstLeg().getDistanceMeters(), 1E-3); assertEquals("A ~ BUS 55 11:00 11:10 ~ B [C₁720]", result.toStr()); @@ -89,7 +89,7 @@ void testDerivedFieldsWithTrainAllTheWay() { assertEquals(newTime(T11_05), result.firstLeg().getStartTime()); assertEquals(newTime(T11_15), result.firstLeg().getEndTime()); assertEquals(TransitMode.RAIL, result.getTransitLeg(0).getMode()); - assertEquals(TransitModelForTest.id("20"), result.firstLeg().getTrip().getId()); + assertEquals(TimetableRepositoryForTest.id("20"), result.firstLeg().getTrip().getId()); assertEquals(15_000, result.firstLeg().getDistanceMeters(), 1E-3); assertEquals("A ~ RAIL R2 11:05 11:15 ~ B [C₁720]", result.toStr()); 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 95d7cf629a2..3062d71facd 100644 --- a/application/src/test/java/org/opentripplanner/model/plan/PlaceTest.java +++ b/application/src/test/java/org/opentripplanner/model/plan/PlaceTest.java @@ -16,7 +16,7 @@ import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.street.model.vertex.SimpleVertex; -import org.opentripplanner.transit.model._data.TransitModelForTest; +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; @@ -51,7 +51,7 @@ public void sameLocationBasedOnCoordinates() { @Test public void sameLocationBasedOnStopId() { - var testModel = TransitModelForTest.of(); + var testModel = TimetableRepositoryForTest.of(); var s1 = testModel.stop("1").withCoordinate(1.0, 1.0).build(); var s2 = testModel.stop("2").withCoordinate(1.0, 2.0).build(); 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 edb967b5b16..e5ec76af8af 100644 --- a/application/src/test/java/org/opentripplanner/model/plan/PlanTestConstants.java +++ b/application/src/test/java/org/opentripplanner/model/plan/PlanTestConstants.java @@ -3,7 +3,7 @@ import static org.opentripplanner.framework.time.TimeUtils.time; import org.opentripplanner.framework.time.DurationUtils; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; public interface PlanTestConstants { int NOT_SET = -999_999; @@ -55,55 +55,55 @@ public interface PlanTestConstants { int T11_55 = time("11:55"); /** - * @deprecated Create the TransitModelForTest per test, do not share between tests - it has state + * @deprecated Create the TimetableRepositoryForTest per test, do not share between tests - it has state */ @Deprecated - TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); /** - * @deprecated Depend on TransitModelForTest. Create per test, do not share between tests - it has state + * @deprecated Depend on TimetableRepositoryForTest. Create per test, do not share between tests - it has state */ @Deprecated Place A = Place.forStop(TEST_MODEL.stop("A").withCoordinate(5.0, 8.0).build()); /** - * @deprecated Depend on TransitModelForTest. Create per test, do not share between tests - it has state + * @deprecated Depend on TimetableRepositoryForTest. Create per test, do not share between tests - it has state */ @Deprecated Place B = Place.forStop(TEST_MODEL.stop("B").withCoordinate(6.0, 8.5).build()); /** - * @deprecated Depend on TransitModelForTest. Create per test, do not share between tests - it has state + * @deprecated Depend on TimetableRepositoryForTest. Create per test, do not share between tests - it has state */ @Deprecated Place C = Place.forStop(TEST_MODEL.stop("C").withCoordinate(7.0, 9.0).build()); /** - * @deprecated Depend on TransitModelForTest. Create per test, do not share between tests - it has state + * @deprecated Depend on TimetableRepositoryForTest. Create per test, do not share between tests - it has state */ @Deprecated Place D = Place.forStop(TEST_MODEL.stop("D").withCoordinate(8.0, 9.5).build()); /** - * @deprecated Depend on TransitModelForTest. Create per test, do not share between tests - it has state + * @deprecated Depend on TimetableRepositoryForTest. Create per test, do not share between tests - it has state */ @Deprecated Place E = Place.forStop(TEST_MODEL.stop("E").withCoordinate(9.0, 10.0).build()); /** - * @deprecated Depend on TransitModelForTest. Create per test, do not share between tests - it has state + * @deprecated Depend on TimetableRepositoryForTest. Create per test, do not share between tests - it has state */ @Deprecated Place F = Place.forStop(TEST_MODEL.stop("F").withCoordinate(9.0, 10.5).build()); /** - * @deprecated Depend on TransitModelForTest. Create per test, do not share between tests - it has state + * @deprecated Depend on TimetableRepositoryForTest. Create per test, do not share between tests - it has state */ @Deprecated Place G = Place.forStop(TEST_MODEL.stop("G").withCoordinate(9.5, 11.0).build()); /** - * @deprecated Depend on TransitModelForTest. Create per test, do not share between tests - it has state + * @deprecated Depend on TimetableRepositoryForTest. Create per test, do not share between tests - it has state */ @Deprecated Place H = Place.forStop(TEST_MODEL.stop("H").withCoordinate(10.0, 11.5).build()); diff --git a/application/src/test/java/org/opentripplanner/model/plan/ScheduledTransitLegBuilderTest.java b/application/src/test/java/org/opentripplanner/model/plan/ScheduledTransitLegBuilderTest.java index 4b26ccb1c55..8d3d6ed7c1e 100644 --- a/application/src/test/java/org/opentripplanner/model/plan/ScheduledTransitLegBuilderTest.java +++ b/application/src/test/java/org/opentripplanner/model/plan/ScheduledTransitLegBuilderTest.java @@ -5,14 +5,14 @@ import java.time.LocalDate; import org.junit.jupiter.api.Test; import org.opentripplanner._support.time.ZoneIds; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.TransitMode; class ScheduledTransitLegBuilderTest { @Test void transferZoneId() { - var pattern = TransitModelForTest.of().pattern(TransitMode.BUS).build(); + var pattern = TimetableRepositoryForTest.of().pattern(TransitMode.BUS).build(); var leg = new ScheduledTransitLegBuilder<>() .withZoneId(ZoneIds.BERLIN) .withServiceDate(LocalDate.of(2023, 11, 15)) diff --git a/application/src/test/java/org/opentripplanner/model/plan/ScheduledTransitLegTest.java b/application/src/test/java/org/opentripplanner/model/plan/ScheduledTransitLegTest.java index b41ace81e8d..89eb13c56af 100644 --- a/application/src/test/java/org/opentripplanner/model/plan/ScheduledTransitLegTest.java +++ b/application/src/test/java/org/opentripplanner/model/plan/ScheduledTransitLegTest.java @@ -3,14 +3,14 @@ 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.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.time.OffsetDateTime; import java.time.ZonedDateTime; import java.util.List; import org.junit.jupiter.api.Test; import org.opentripplanner._support.time.ZoneIds; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.timetable.RealTimeTripTimes; @@ -22,13 +22,13 @@ class ScheduledTransitLegTest { static final ZonedDateTime TIME = OffsetDateTime .parse("2023-04-17T17:49:06+02:00") .toZonedDateTime(); - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); - private static final Route ROUTE = TransitModelForTest.route(id("2")).build(); - private static final TripPattern PATTERN = TransitModelForTest + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); + private static final Route ROUTE = TimetableRepositoryForTest.route(id("2")).build(); + private static final TripPattern PATTERN = TimetableRepositoryForTest .tripPattern("1", ROUTE) .withStopPattern(TEST_MODEL.stopPattern(3)) .build(); - private static final Trip TRIP = TransitModelForTest.trip("trip1").build(); + private static final Trip TRIP = TimetableRepositoryForTest.trip("trip1").build(); private static final ScheduledTripTimes TRIP_TIMES = ScheduledTripTimes .of() .withArrivalTimes("10:00 11:00 12:00") 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 7b963ae8ee6..d23759907c2 100644 --- a/application/src/test/java/org/opentripplanner/model/plan/TestItineraryBuilder.java +++ b/application/src/test/java/org/opentripplanner/model/plan/TestItineraryBuilder.java @@ -4,9 +4,9 @@ import static org.opentripplanner.street.search.TraverseMode.BICYCLE; import static org.opentripplanner.street.search.TraverseMode.CAR; import static org.opentripplanner.street.search.TraverseMode.WALK; -import static org.opentripplanner.transit.model._data.TransitModelForTest.FEED_ID; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; -import static org.opentripplanner.transit.model._data.TransitModelForTest.route; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.FEED_ID; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.route; import java.time.Duration; import java.time.LocalDate; @@ -29,7 +29,7 @@ import org.opentripplanner.model.transfer.TransferConstraint; import org.opentripplanner.street.model._data.StreetModelForTest; import org.opentripplanner.street.search.TraverseMode; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.Money; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.Deduplicator; @@ -440,7 +440,7 @@ public Itinerary build() { /** Create a dummy trip */ private static Trip trip(String id, Route route) { - return TransitModelForTest + return TimetableRepositoryForTest .trip(id) .withRoute(route) .withHeadsign(I18NString.of("Trip headsign %s".formatted(id))) diff --git a/application/src/test/java/org/opentripplanner/model/plan/legreference/LegReferenceSerializerTest.java b/application/src/test/java/org/opentripplanner/model/plan/legreference/LegReferenceSerializerTest.java index 2d7df788ad3..d0d17cc95ab 100644 --- a/application/src/test/java/org/opentripplanner/model/plan/legreference/LegReferenceSerializerTest.java +++ b/application/src/test/java/org/opentripplanner/model/plan/legreference/LegReferenceSerializerTest.java @@ -6,18 +6,18 @@ import java.time.LocalDate; import org.junit.jupiter.api.Test; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.FeedScopedId; class LegReferenceSerializerTest { - private static final FeedScopedId TRIP_ID = TransitModelForTest.id("Trip"); + private static final FeedScopedId TRIP_ID = TimetableRepositoryForTest.id("Trip"); private static final LocalDate SERVICE_DATE = LocalDate.of(2022, 1, 31); private static final int FROM_STOP_POS = 1; - private static final FeedScopedId FROM_STOP_ID = TransitModelForTest.id("Boarding Stop"); + private static final FeedScopedId FROM_STOP_ID = TimetableRepositoryForTest.id("Boarding Stop"); private static final int TO_STOP_POS = 3; - private static final FeedScopedId TO_STOP_ID = TransitModelForTest.id("Alighting Stop"); + private static final FeedScopedId TO_STOP_ID = TimetableRepositoryForTest.id("Alighting Stop"); /** * Token based on the initial format, without stop ids. 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 277f65cfcae..d663e7bed2f 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 @@ -4,7 +4,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.time.LocalDate; import java.util.List; @@ -14,7 +14,7 @@ import org.opentripplanner.model.calendar.CalendarServiceData; import org.opentripplanner.model.plan.PlanTestConstants; import org.opentripplanner.model.plan.ScheduledTransitLeg; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.TripPattern; @@ -25,12 +25,12 @@ import org.opentripplanner.transit.model.timetable.TripTimesFactory; import org.opentripplanner.transit.service.DefaultTransitService; import org.opentripplanner.transit.service.StopModel; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.transit.service.TransitService; class ScheduledTransitLegReferenceTest { - private static TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final int SERVICE_CODE = 555; private static final LocalDate SERVICE_DATE = LocalDate.of(2023, 1, 1); private static final int NUMBER_OF_STOPS = 3; @@ -53,16 +53,16 @@ static void buildTransitService() { stop4 = TEST_MODEL.stop("STOP4", 0, 0).withParentStation(parentStation).build(); // build transit data - Trip trip = TransitModelForTest.trip("1").build(); + Trip trip = TimetableRepositoryForTest.trip("1").build(); var tripTimes = TripTimesFactory.tripTimes( trip, TEST_MODEL.stopTimesEvery5Minutes(5, trip, PlanTestConstants.T11_00), new Deduplicator() ); tripTimes.setServiceCode(SERVICE_CODE); - TripPattern tripPattern = TransitModelForTest - .tripPattern("1", TransitModelForTest.route(id("1")).build()) - .withStopPattern(TransitModelForTest.stopPattern(stop1, stop2, stop3)) + TripPattern tripPattern = TimetableRepositoryForTest + .tripPattern("1", TimetableRepositoryForTest.route(id("1")).build()) + .withStopPattern(TimetableRepositoryForTest.stopPattern(stop1, stop2, stop3)) .withScheduledTimeTableBuilder(builder -> builder.addTripTimes(tripTimes)) .build(); @@ -79,14 +79,21 @@ static void buildTransitService() { .withRegularStop(stop3) .withRegularStop(stop4) .build(); - TransitModel transitModel = new TransitModel(stopModel, new Deduplicator()); - transitModel.addTripPattern(tripPattern.getId(), tripPattern); - transitModel.getServiceCodes().put(tripPattern.getId(), SERVICE_CODE); + TimetableRepository timetableRepository = new TimetableRepository( + stopModel, + new Deduplicator() + ); + timetableRepository.addTripPattern(tripPattern.getId(), tripPattern); + timetableRepository.getServiceCodes().put(tripPattern.getId(), SERVICE_CODE); CalendarServiceData calendarServiceData = new CalendarServiceData(); calendarServiceData.putServiceDatesForServiceId(tripPattern.getId(), List.of(SERVICE_DATE)); - transitModel.updateCalendarServiceData(true, calendarServiceData, DataImportIssueStore.NOOP); + timetableRepository.updateCalendarServiceData( + true, + calendarServiceData, + DataImportIssueStore.NOOP + ); - transitModel.addTripOnServiceDate( + timetableRepository.addTripOnServiceDate( TripOnServiceDate .of(TRIP_ON_SERVICE_DATE_ID) .withTrip(trip) @@ -94,10 +101,10 @@ static void buildTransitService() { .build() ); - transitModel.index(); + timetableRepository.index(); // build transit service - transitService = new DefaultTransitService(transitModel); + transitService = new DefaultTransitService(timetableRepository); } @Test @@ -170,7 +177,7 @@ void getLegFromReferenceMismatchOnBoardingStop() { SERVICE_DATE, 0, 1, - TransitModelForTest.id("invalid stop id"), + TimetableRepositoryForTest.id("invalid stop id"), stopIdAtPosition1, null ); @@ -219,7 +226,7 @@ void legReferenceCannotReferToBothTripAndTripOnServiceDate() { NUMBER_OF_STOPS, stopIdAtPosition0, stopIdAtPosition1, - TransitModelForTest.id("trip on date id") + TimetableRepositoryForTest.id("trip on date id") ) ); } @@ -247,7 +254,7 @@ void getLegFromReferenceWithUnknownTripOnDate() { NUMBER_OF_STOPS, stopIdAtPosition0, stopIdAtPosition1, - TransitModelForTest.id("unknown trip on date id") + TimetableRepositoryForTest.id("unknown trip on date id") ); assertNull(scheduledTransitLegReference.getLeg(transitService)); } 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 10b59007c17..f9896c66d6a 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 @@ -27,11 +27,11 @@ import org.opentripplanner.model.plan.PlanTestConstants; import org.opentripplanner.model.plan.SortOrder; import org.opentripplanner.model.plan.TestItineraryBuilder; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; class PageCursorTest implements PlanTestConstants { - public static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + public static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); public static final Place A = Place.forStop( TEST_MODEL.stop("A").withCoordinate(5.0, 8.0).build() ); diff --git a/application/src/test/java/org/opentripplanner/model/transfer/TransferTestData.java b/application/src/test/java/org/opentripplanner/model/transfer/TransferTestData.java index 19e0f82e8d5..6d70936657d 100644 --- a/application/src/test/java/org/opentripplanner/model/transfer/TransferTestData.java +++ b/application/src/test/java/org/opentripplanner/model/transfer/TransferTestData.java @@ -1,6 +1,6 @@ package org.opentripplanner.model.transfer; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.Station; @@ -8,7 +8,7 @@ public class TransferTestData { - private static TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); static final Station STATION = TEST_MODEL.station("Central Station").build(); @@ -32,14 +32,14 @@ public class TransferTestData { .build(); static final RegularStop ANY_STOP = TEST_MODEL.stop("any", 60.0, 11.0).build(); - static final Route ROUTE_1 = TransitModelForTest.route("1").build(); - static final Route ROUTE_2 = TransitModelForTest.route("2").build(); - static final Route ANY_ROUTE = TransitModelForTest.route("ANY").build(); + static final Route ROUTE_1 = TimetableRepositoryForTest.route("1").build(); + static final Route ROUTE_2 = TimetableRepositoryForTest.route("2").build(); + static final Route ANY_ROUTE = TimetableRepositoryForTest.route("ANY").build(); - static final Trip TRIP_11 = TransitModelForTest.trip("11").withRoute(ROUTE_1).build(); - static final Trip TRIP_12 = TransitModelForTest.trip("12").withRoute(ROUTE_1).build(); - static final Trip TRIP_21 = TransitModelForTest.trip("21").withRoute(ROUTE_2).build(); - static final Trip ANY_TRIP = TransitModelForTest.trip("999").withRoute(ANY_ROUTE).build(); + static final Trip TRIP_11 = TimetableRepositoryForTest.trip("11").withRoute(ROUTE_1).build(); + static final Trip TRIP_12 = TimetableRepositoryForTest.trip("12").withRoute(ROUTE_1).build(); + static final Trip TRIP_21 = TimetableRepositoryForTest.trip("21").withRoute(ROUTE_2).build(); + static final Trip ANY_TRIP = TimetableRepositoryForTest.trip("999").withRoute(ANY_ROUTE).build(); static final TransferPoint STATION_POINT = new StationTransferPoint(STATION); 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 7529ae52a34..4721ef03bf3 100644 --- a/application/src/test/java/org/opentripplanner/netex/mapping/FlexStopsMapperTest.java +++ b/application/src/test/java/org/opentripplanner/netex/mapping/FlexStopsMapperTest.java @@ -17,7 +17,7 @@ import org.locationtech.jts.geom.Coordinate; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.site.AreaStop; import org.opentripplanner.transit.model.site.GroupStop; @@ -126,7 +126,7 @@ class FlexStopsMapperTest { .withValue("UnrestrictedPublicTransportAreas") ); - private final TransitModelForTest testModel = TransitModelForTest.of(); + private final TimetableRepositoryForTest testModel = TimetableRepositoryForTest.of(); private final StopModelBuilder stopModelBuilder = testModel.stopModelBuilder(); @Test diff --git a/application/src/test/java/org/opentripplanner/netex/mapping/MultiModalStationMapperTest.java b/application/src/test/java/org/opentripplanner/netex/mapping/MultiModalStationMapperTest.java index 218942d29ef..47442ce5fe2 100644 --- a/application/src/test/java/org/opentripplanner/netex/mapping/MultiModalStationMapperTest.java +++ b/application/src/test/java/org/opentripplanner/netex/mapping/MultiModalStationMapperTest.java @@ -1,6 +1,7 @@ package org.opentripplanner.netex.mapping; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; import java.util.List; import org.junit.jupiter.api.Test; @@ -8,7 +9,7 @@ import org.opentripplanner.graph_builder.issue.service.DefaultDataImportIssueStore; import org.opentripplanner.netex.NetexTestDataSupport; import org.opentripplanner.netex.mapping.support.FeedScopedIdFactory; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.rutebanken.netex.model.StopPlace; class MultiModalStationMapperTest { @@ -16,7 +17,9 @@ class MultiModalStationMapperTest { @Test void testMissingCoordinates() { DataImportIssueStore dataIssueStore = new DefaultDataImportIssueStore(); - FeedScopedIdFactory feedScopeIdFactory = new FeedScopedIdFactory(TransitModelForTest.FEED_ID); + FeedScopedIdFactory feedScopeIdFactory = new FeedScopedIdFactory( + TimetableRepositoryForTest.FEED_ID + ); MultiModalStationMapper multiModalStationMapper = new MultiModalStationMapper( dataIssueStore, feedScopeIdFactory diff --git a/application/src/test/java/org/opentripplanner/netex/mapping/NetexTestDataSample.java b/application/src/test/java/org/opentripplanner/netex/mapping/NetexTestDataSample.java index b72c9b05277..56c672c7ef8 100644 --- a/application/src/test/java/org/opentripplanner/netex/mapping/NetexTestDataSample.java +++ b/application/src/test/java/org/opentripplanner/netex/mapping/NetexTestDataSample.java @@ -14,7 +14,7 @@ import java.util.List; import org.opentripplanner.netex.index.hierarchy.HierarchicalMap; import org.opentripplanner.netex.index.hierarchy.HierarchicalMapById; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.DefaultEntityById; import org.opentripplanner.transit.model.framework.EntityById; import org.opentripplanner.transit.model.site.RegularStop; @@ -63,7 +63,7 @@ public class NetexTestDataSample { .withName(new MultilingualString().withValue("everyday")); private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - private final TransitModelForTest testModel = TransitModelForTest.of(); + private final TimetableRepositoryForTest testModel = TimetableRepositoryForTest.of(); private final JourneyPattern journeyPattern; private final HierarchicalMapById journeyPatternById = new HierarchicalMapById<>(); @@ -89,7 +89,7 @@ public NetexTestDataSample() { JAXBElement lineRef = createWrappedRef(line.getId(), LineRefStructure.class); // Add OTP Route (correspond to Netex Line) - otpRouteByid.add(TransitModelForTest.route(line.getId()).build()); + otpRouteByid.add(TimetableRepositoryForTest.route(line.getId()).build()); // Add Netex Route (not the same as an OTP Route) String routeId = "RUT:Route:1"; diff --git a/application/src/test/java/org/opentripplanner/netex/mapping/NoticeAssignmentMapperTest.java b/application/src/test/java/org/opentripplanner/netex/mapping/NoticeAssignmentMapperTest.java index 99fcc2cb0e8..09a806169ab 100644 --- a/application/src/test/java/org/opentripplanner/netex/mapping/NoticeAssignmentMapperTest.java +++ b/application/src/test/java/org/opentripplanner/netex/mapping/NoticeAssignmentMapperTest.java @@ -11,7 +11,7 @@ import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.model.StopTime; import org.opentripplanner.netex.index.hierarchy.HierarchicalMapById; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.AbstractTransitEntity; import org.opentripplanner.transit.model.framework.DefaultEntityById; import org.opentripplanner.transit.model.framework.EntityById; @@ -47,7 +47,7 @@ public void mapNoticeAssignment() { noticeAssignment.setNoticedObjectRef(new VersionOfObjectRefStructure().withRef(ROUTE_ID)); noticeAssignment.setNotice(NOTICE); - Route route = TransitModelForTest.route(ROUTE_ID).build(); + Route route = TimetableRepositoryForTest.route(ROUTE_ID).build(); EntityById routesById = new DefaultEntityById<>(); routesById.add(route); @@ -89,7 +89,7 @@ public void mapNoticeAssignmentOnStopPoint() { ) ); - var trip = TransitModelForTest.trip("1").build(); + var trip = TimetableRepositoryForTest.trip("1").build(); StopTime stopTime1 = createStopTime(1, trip); StopTime stopTime2 = createStopTime(2, trip); 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 665650d0389..955a3fec34a 100644 --- a/application/src/test/java/org/opentripplanner/netex/mapping/RouteMapperTest.java +++ b/application/src/test/java/org/opentripplanner/netex/mapping/RouteMapperTest.java @@ -15,7 +15,7 @@ import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.model.impl.OtpTransitServiceBuilder; import org.opentripplanner.netex.index.NetexEntityIndex; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.DefaultEntityById; import org.opentripplanner.transit.model.network.BikeAccess; import org.opentripplanner.transit.model.network.GroupOfRoutes; @@ -102,7 +102,7 @@ void mapRouteWithAgencySpecified() { transitBuilder.getGroupsOfRoutesByRouteId(), transitBuilder.getGroupOfRouteById(), netexIndex.readOnlyView(), - TransitModelForTest.TIME_ZONE_ID, + TimetableRepositoryForTest.TIME_ZONE_ID, EMPTY_FERRY_WITHOUT_BICYCLE_IDS ); @@ -210,7 +210,7 @@ void mapRouteWithBranding() { ArrayListMultimap.create(), new DefaultEntityById<>(), netexIndex.readOnlyView(), - TransitModelForTest.TIME_ZONE_ID, + TimetableRepositoryForTest.TIME_ZONE_ID, EMPTY_FERRY_WITHOUT_BICYCLE_IDS ); @@ -246,7 +246,7 @@ void mapRouteWithGroupOfRoutes() { transitBuilder.getGroupsOfRoutesByRouteId(), transitBuilder.getGroupOfRouteById(), netexIndex.readOnlyView(), - TransitModelForTest.TIME_ZONE_ID, + TimetableRepositoryForTest.TIME_ZONE_ID, EMPTY_FERRY_WITHOUT_BICYCLE_IDS ); @@ -278,7 +278,7 @@ private Line createExampleFerry(String id) { } private Agency createAgency() { - return TransitModelForTest + return TimetableRepositoryForTest .agency("Ruter AS") .copy() .withId(MappingSupport.ID_FACTORY.createId(AUTHORITY_ID)) diff --git a/application/src/test/java/org/opentripplanner/netex/mapping/StopTimesMapperTest.java b/application/src/test/java/org/opentripplanner/netex/mapping/StopTimesMapperTest.java index 54f38421b8d..1f1ade2aa66 100644 --- a/application/src/test/java/org/opentripplanner/netex/mapping/StopTimesMapperTest.java +++ b/application/src/test/java/org/opentripplanner/netex/mapping/StopTimesMapperTest.java @@ -17,7 +17,7 @@ import org.opentripplanner.model.StopTime; import org.opentripplanner.netex.index.hierarchy.HierarchicalMap; import org.opentripplanner.netex.index.hierarchy.HierarchicalMapById; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.DefaultEntityById; import org.opentripplanner.transit.model.timetable.Trip; import org.rutebanken.netex.model.StopPointInJourneyPattern; @@ -30,7 +30,7 @@ public class StopTimesMapperTest { private static final BigInteger TWO = BigInteger.valueOf(2); private static final LocalTime QUARTER_PAST_FIVE = LocalTime.of(5, 15); - public static final Trip TRIP = TransitModelForTest.trip("T1").build(); + public static final Trip TRIP = TimetableRepositoryForTest.trip("T1").build(); @Test public void testCalculateOtpTime() { 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 ebb83d44709..a4684fdba8f 100644 --- a/application/src/test/java/org/opentripplanner/netex/mapping/TripMapperTest.java +++ b/application/src/test/java/org/opentripplanner/netex/mapping/TripMapperTest.java @@ -12,7 +12,7 @@ import org.opentripplanner.model.impl.OtpTransitServiceBuilder; import org.opentripplanner.netex.index.hierarchy.HierarchicalMap; import org.opentripplanner.netex.index.hierarchy.HierarchicalMapById; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.Accessibility; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.timetable.Trip; @@ -33,7 +33,7 @@ public class TripMapperTest { private static final String ROUTE_ID = "RUT:Route:1"; private static final String SERVICE_JOURNEY_ID = NetexTestDataSample.SERVICE_JOURNEY_ID; private static final String JOURNEY_PATTERN_ID = "RUT:JourneyPattern:1"; - private static final FeedScopedId SERVICE_ID = TransitModelForTest.id("S001"); + private static final FeedScopedId SERVICE_ID = TimetableRepositoryForTest.id("S001"); private static final DataImportIssueStore issueStore = DataImportIssueStore.NOOP; private static final JAXBElement LINE_REF = MappingSupport.createWrappedRef( @@ -50,7 +50,7 @@ public void mapTripWithWheelchairAccess() { var access = new AccessibilityAssessment(); var transitBuilder = new OtpTransitServiceBuilder(new StopModel(), issueStore); - transitBuilder.getRoutes().add(TransitModelForTest.route(ROUTE_ID).build()); + transitBuilder.getRoutes().add(TimetableRepositoryForTest.route(ROUTE_ID).build()); TripMapper tripMapper = new TripMapper( ID_FACTORY, @@ -82,7 +82,7 @@ public void mapTrip() { new StopModel(), issueStore ); - transitBuilder.getRoutes().add(TransitModelForTest.route(ROUTE_ID).build()); + transitBuilder.getRoutes().add(TimetableRepositoryForTest.route(ROUTE_ID).build()); TripMapper tripMapper = new TripMapper( ID_FACTORY, @@ -109,7 +109,7 @@ public void mapTripWithRouteRefViaJourneyPattern() { new StopModel(), issueStore ); - transitBuilder.getRoutes().add(TransitModelForTest.route(ROUTE_ID).build()); + transitBuilder.getRoutes().add(TimetableRepositoryForTest.route(ROUTE_ID).build()); JourneyPattern journeyPattern = new JourneyPattern().withId(JOURNEY_PATTERN_ID); journeyPattern.setRouteRef(new RouteRefStructure().withRef(ROUTE_ID)); diff --git a/application/src/test/java/org/opentripplanner/netex/mapping/TripPatternMapperTest.java b/application/src/test/java/org/opentripplanner/netex/mapping/TripPatternMapperTest.java index 95af8f623e5..3af2f41391d 100644 --- a/application/src/test/java/org/opentripplanner/netex/mapping/TripPatternMapperTest.java +++ b/application/src/test/java/org/opentripplanner/netex/mapping/TripPatternMapperTest.java @@ -13,7 +13,7 @@ import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.netex.index.hierarchy.HierarchicalMap; import org.opentripplanner.netex.index.hierarchy.HierarchicalMapById; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.DefaultEntityById; import org.opentripplanner.transit.model.framework.FeedScopedId; @@ -31,7 +31,7 @@ */ class TripPatternMapperTest { - private static final FeedScopedId SERVICE_ID = TransitModelForTest.id("S01"); + private static final FeedScopedId SERVICE_ID = TimetableRepositoryForTest.id("S01"); @Test void testMapTripPattern() { diff --git a/application/src/test/java/org/opentripplanner/netex/mapping/calendar/CalendarServiceBuilderTest.java b/application/src/test/java/org/opentripplanner/netex/mapping/calendar/CalendarServiceBuilderTest.java index aff56902c07..042887aee7a 100644 --- a/application/src/test/java/org/opentripplanner/netex/mapping/calendar/CalendarServiceBuilderTest.java +++ b/application/src/test/java/org/opentripplanner/netex/mapping/calendar/CalendarServiceBuilderTest.java @@ -2,7 +2,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.fail; -import static org.opentripplanner.transit.model._data.TransitModelForTest.FEED_ID; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.FEED_ID; import java.time.LocalDate; import java.util.Collection; @@ -10,7 +10,7 @@ import org.junit.jupiter.api.Test; import org.opentripplanner.model.calendar.ServiceCalendarDate; import org.opentripplanner.netex.mapping.support.FeedScopedIdFactory; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.FeedScopedId; public class CalendarServiceBuilderTest { @@ -18,9 +18,9 @@ public class CalendarServiceBuilderTest { private static final LocalDate D1 = LocalDate.of(2020, 11, 1); private static final LocalDate D2 = LocalDate.of(2020, 11, 2); - private static final FeedScopedId EXP_SID_1 = TransitModelForTest.id("S000001"); - private static final FeedScopedId EXP_SID_2 = TransitModelForTest.id("S000002"); - private static final FeedScopedId EXP_SID_3 = TransitModelForTest.id("S000003"); + private static final FeedScopedId EXP_SID_1 = TimetableRepositoryForTest.id("S000001"); + private static final FeedScopedId EXP_SID_2 = TimetableRepositoryForTest.id("S000002"); + private static final FeedScopedId EXP_SID_3 = TimetableRepositoryForTest.id("S000003"); @Test public void addDatesForAGivenService() { @@ -64,8 +64,8 @@ public void createServiceCalendar() { @Test public void createServiceId() { CalendarServiceBuilder subject = new CalendarServiceBuilder(new FeedScopedIdFactory(FEED_ID)); - assertEquals(TransitModelForTest.id("S000001"), subject.createServiceId()); - assertEquals(TransitModelForTest.id("S000002"), subject.createServiceId()); + assertEquals(TimetableRepositoryForTest.id("S000001"), subject.createServiceId()); + assertEquals(TimetableRepositoryForTest.id("S000002"), subject.createServiceId()); } private void assertServiceDateExistInList( diff --git a/application/src/test/java/org/opentripplanner/raptor/moduletests/D03_UnpreferredRouteTest.java b/application/src/test/java/org/opentripplanner/raptor/moduletests/D03_UnpreferredRouteTest.java index 41f2fb2ca12..4a7aac19e01 100644 --- a/application/src/test/java/org/opentripplanner/raptor/moduletests/D03_UnpreferredRouteTest.java +++ b/application/src/test/java/org/opentripplanner/raptor/moduletests/D03_UnpreferredRouteTest.java @@ -19,7 +19,7 @@ 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.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.FeedScopedId; /** @@ -32,8 +32,8 @@ 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 = TransitModelForTest.id("1"); - private static final FeedScopedId ROUTE_ID_2 = TransitModelForTest.id("2"); + 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<>(); @@ -45,11 +45,17 @@ public class D03_UnpreferredRouteTest implements RaptorTestConstants { public void setup() { // Given 2 identical routes R1 and R2 data.withRoute( - route(pattern("R1", STOP_A, STOP_B).withRoute(TransitModelForTest.route(ROUTE_ID_1).build())) + 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(TransitModelForTest.route(ROUTE_ID_2).build())) + route( + pattern("R2", STOP_A, STOP_B) + .withRoute(TimetableRepositoryForTest.route(ROUTE_ID_2).build()) + ) .withTimetable(schedule("00:01, 00:02:40")) ); diff --git a/application/src/test/java/org/opentripplanner/routing/TestHalfEdges.java b/application/src/test/java/org/opentripplanner/routing/TestHalfEdges.java index 7b6db0a5acf..2411444db49 100644 --- a/application/src/test/java/org/opentripplanner/routing/TestHalfEdges.java +++ b/application/src/test/java/org/opentripplanner/routing/TestHalfEdges.java @@ -48,21 +48,21 @@ import org.opentripplanner.street.search.request.StreetSearchRequestBuilder; import org.opentripplanner.street.search.state.State; import org.opentripplanner.street.search.strategy.EuclideanRemainingWeightHeuristic; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.Deduplicator; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; public class TestHalfEdges { - private final TransitModelForTest testModel = TransitModelForTest.of(); + private final TimetableRepositoryForTest testModel = TimetableRepositoryForTest.of(); private Graph graph; private StreetEdge top, bottom, left, right, leftBack, rightBack; private IntersectionVertex br, tr, bl, tl; private TransitStopVertex station1; private TransitStopVertex station2; - private TransitModel transitModel; + private TimetableRepository timetableRepository; @BeforeEach public void setUp() { @@ -162,7 +162,7 @@ public void setUp() { var s2 = testModel.stop("morx station", 40.0099999, -74.002).build(); stopModelBuilder.withRegularStop(s1).withRegularStop(s2); - transitModel = new TransitModel(stopModelBuilder.build(), deduplicator); + timetableRepository = new TimetableRepository(stopModelBuilder.build(), deduplicator); station1 = factory.transitStop(TransitStopVertex.of().withStop(s1)); station2 = factory.transitStop(TransitStopVertex.of().withStop(s2)); @@ -172,8 +172,8 @@ public void setUp() { //Linkers aren't run otherwise in testNetworkLinker graph.hasStreets = true; - transitModel.index(); - graph.index(transitModel.getStopModel()); + timetableRepository.index(); + graph.index(timetableRepository.getStopModel()); } @Test @@ -595,7 +595,9 @@ public void testStreetSplittingAlerts() { @Test public void testStreetLocationFinder() { StreetIndex finder = graph.getStreetIndex(); - GraphFinder graphFinder = new DirectGraphFinder(transitModel.getStopModel()::findRegularStops); + GraphFinder graphFinder = new DirectGraphFinder( + timetableRepository.getStopModel()::findRegularStops + ); Set tempEdges = new HashSet<>(); // test that the local stop finder finds stops assertTrue(graphFinder.findClosestStops(new Coordinate(-74.005000001, 40.01), 100).size() > 0); @@ -674,7 +676,7 @@ public void testTemporaryVerticesContainer() { @Test public void testNetworkLinker() { int numVerticesBefore = graph.getVertices().size(); - TestStreetLinkerModule.link(graph, transitModel); + TestStreetLinkerModule.link(graph, timetableRepository); int numVerticesAfter = graph.getVertices().size(); assertEquals(4, numVerticesAfter - numVerticesBefore); Collection outgoing = station1.getOutgoing(); diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/FilterTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/FilterTest.java index de40617d3d3..958bf97d41a 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/FilterTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/FilterTest.java @@ -2,7 +2,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.util.Collection; import java.util.List; @@ -10,7 +10,7 @@ import org.junit.jupiter.api.Test; import org.opentripplanner.routing.api.request.request.filter.SelectRequest; import org.opentripplanner.routing.api.request.request.filter.TransitFilterRequest; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.MainAndSubMode; import org.opentripplanner.transit.model.basic.SubMode; import org.opentripplanner.transit.model.basic.TransitMode; @@ -27,17 +27,17 @@ public class FilterTest { static final String AGENCY_ID_2 = "RUT:Agency:2"; static final String AGENCY_ID_3 = "RUT:Agency:3"; - static final Agency AGENCY_1 = TransitModelForTest + static final Agency AGENCY_1 = TimetableRepositoryForTest .agency("A") .copy() .withId(id(AGENCY_ID_1)) .build(); - static final Agency AGENCY_2 = TransitModelForTest + static final Agency AGENCY_2 = TimetableRepositoryForTest .agency("B") .copy() .withId(id(AGENCY_ID_2)) .build(); - static final Agency AGENCY_3 = TransitModelForTest + static final Agency AGENCY_3 = TimetableRepositoryForTest .agency("C") .copy() .withId(id(AGENCY_ID_3)) @@ -53,7 +53,7 @@ public class FilterTest { static final String JOURNEY_PATTERN_ID_3 = "RUT:JourneyPattern:3"; static final String JOURNEY_PATTERN_ID_4 = "RUT:JourneyPattern:4"; - static final StopPattern STOP_PATTERN = TransitModelForTest.of().stopPattern(2); + static final StopPattern STOP_PATTERN = TimetableRepositoryForTest.of().stopPattern(2); private static final SubMode LOCAL_BUS = SubMode.getOrBuildAndCacheForever("localBus"); private static final SubMode NIGHT_BUS = SubMode.getOrBuildAndCacheForever("nightBus"); @@ -61,10 +61,10 @@ public class FilterTest { final String GROUP_OF_Routes_ID_1 = "RUT:GroupOfLines:1"; final String GROUP_OF_Routes_ID_2 = "RUT:GroupOfLines:2"; - final GroupOfRoutes GROUP_OF_ROUTES_1 = TransitModelForTest + final GroupOfRoutes GROUP_OF_ROUTES_1 = TimetableRepositoryForTest .groupOfRoutes(GROUP_OF_Routes_ID_1) .build(); - final GroupOfRoutes GROUP_OF_ROUTES_2 = TransitModelForTest + final GroupOfRoutes GROUP_OF_ROUTES_2 = TimetableRepositoryForTest .groupOfRoutes(GROUP_OF_Routes_ID_2) .build(); @@ -83,20 +83,20 @@ public class FilterTest { """ ) public void testOne() { - Route route1 = TransitModelForTest.route(ROUTE_ID_1).withAgency(AGENCY_1).build(); - Route route2 = TransitModelForTest.route(ROUTE_ID_2).withAgency(AGENCY_2).build(); - Route route3 = TransitModelForTest.route(ROUTE_ID_3).withAgency(AGENCY_3).build(); + Route route1 = TimetableRepositoryForTest.route(ROUTE_ID_1).withAgency(AGENCY_1).build(); + Route route2 = TimetableRepositoryForTest.route(ROUTE_ID_2).withAgency(AGENCY_2).build(); + Route route3 = TimetableRepositoryForTest.route(ROUTE_ID_3).withAgency(AGENCY_3).build(); var patterns = List.of( - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_1, route1) .withStopPattern(STOP_PATTERN) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_2, route2) .withStopPattern(STOP_PATTERN) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_3, route3) .withStopPattern(STOP_PATTERN) .build() @@ -129,20 +129,20 @@ public void testOne() { """ ) public void testTwo() { - Route route1 = TransitModelForTest.route(ROUTE_ID_1).withAgency(AGENCY_1).build(); - Route route2 = TransitModelForTest.route(ROUTE_ID_2).withAgency(AGENCY_2).build(); - Route route3 = TransitModelForTest.route(ROUTE_ID_3).withAgency(AGENCY_3).build(); + Route route1 = TimetableRepositoryForTest.route(ROUTE_ID_1).withAgency(AGENCY_1).build(); + Route route2 = TimetableRepositoryForTest.route(ROUTE_ID_2).withAgency(AGENCY_2).build(); + Route route3 = TimetableRepositoryForTest.route(ROUTE_ID_3).withAgency(AGENCY_3).build(); var patterns = List.of( - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_1, route1) .withStopPattern(STOP_PATTERN) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_2, route2) .withStopPattern(STOP_PATTERN) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_3, route3) .withStopPattern(STOP_PATTERN) .build() @@ -174,34 +174,34 @@ public void testTwo() { """ ) public void testThree() { - Route route1 = TransitModelForTest + Route route1 = TimetableRepositoryForTest .route(ROUTE_ID_1) .withAgency(AGENCY_1) .withMode(TransitMode.BUS) .withNetexSubmode("schoolBus") .build(); - Route route2 = TransitModelForTest + Route route2 = TimetableRepositoryForTest .route(ROUTE_ID_2) .withAgency(AGENCY_2) .withMode(TransitMode.RAIL) .withNetexSubmode("railShuttle") .build(); - Route route3 = TransitModelForTest + Route route3 = TimetableRepositoryForTest .route(ROUTE_ID_3) .withAgency(AGENCY_3) .withMode(TransitMode.TRAM) .build(); var patterns = List.of( - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_1, route1) .withStopPattern(STOP_PATTERN) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_2, route2) .withStopPattern(STOP_PATTERN) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_3, route3) .withStopPattern(STOP_PATTERN) .build() @@ -249,20 +249,20 @@ public void testThree() { """ ) public void testFour() { - Route route1 = TransitModelForTest.route(ROUTE_ID_1).build(); - Route route2 = TransitModelForTest.route(ROUTE_ID_2).build(); - Route route3 = TransitModelForTest.route(ROUTE_ID_3).build(); + Route route1 = TimetableRepositoryForTest.route(ROUTE_ID_1).build(); + Route route2 = TimetableRepositoryForTest.route(ROUTE_ID_2).build(); + Route route3 = TimetableRepositoryForTest.route(ROUTE_ID_3).build(); var patterns = List.of( - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_1, route1) .withStopPattern(STOP_PATTERN) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_2, route2) .withStopPattern(STOP_PATTERN) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_3, route3) .withStopPattern(STOP_PATTERN) .build() @@ -302,15 +302,15 @@ public void testFour() { """ ) public void testFive() { - Route route1 = TransitModelForTest.route(ROUTE_ID_1).build(); - Route route2 = TransitModelForTest.route(ROUTE_ID_2).build(); + Route route1 = TimetableRepositoryForTest.route(ROUTE_ID_1).build(); + Route route2 = TimetableRepositoryForTest.route(ROUTE_ID_2).build(); var patterns = List.of( - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_1, route1) .withStopPattern(STOP_PATTERN) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_2, route2) .withStopPattern(STOP_PATTERN) .build() @@ -347,20 +347,20 @@ public void testFive() { """ ) public void testSix() { - Route route1 = TransitModelForTest.route(ROUTE_ID_1).withAgency(AGENCY_1).build(); - Route route2 = TransitModelForTest.route(ROUTE_ID_2).withAgency(AGENCY_1).build(); - Route route3 = TransitModelForTest.route(ROUTE_ID_3).withAgency(AGENCY_1).build(); + Route route1 = TimetableRepositoryForTest.route(ROUTE_ID_1).withAgency(AGENCY_1).build(); + Route route2 = TimetableRepositoryForTest.route(ROUTE_ID_2).withAgency(AGENCY_1).build(); + Route route3 = TimetableRepositoryForTest.route(ROUTE_ID_3).withAgency(AGENCY_1).build(); var patterns = List.of( - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_1, route1) .withStopPattern(STOP_PATTERN) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_2, route2) .withStopPattern(STOP_PATTERN) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_3, route3) .withStopPattern(STOP_PATTERN) .build() @@ -397,20 +397,20 @@ public void testSix() { """ ) public void testSeven() { - Route route1 = TransitModelForTest.route(ROUTE_ID_1).withAgency(AGENCY_1).build(); - Route route2 = TransitModelForTest.route(ROUTE_ID_2).withAgency(AGENCY_2).build(); - Route route3 = TransitModelForTest.route(ROUTE_ID_3).withAgency(AGENCY_2).build(); + Route route1 = TimetableRepositoryForTest.route(ROUTE_ID_1).withAgency(AGENCY_1).build(); + Route route2 = TimetableRepositoryForTest.route(ROUTE_ID_2).withAgency(AGENCY_2).build(); + Route route3 = TimetableRepositoryForTest.route(ROUTE_ID_3).withAgency(AGENCY_2).build(); var patterns = List.of( - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_1, route1) .withStopPattern(STOP_PATTERN) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_2, route2) .withStopPattern(STOP_PATTERN) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_3, route3) .withStopPattern(STOP_PATTERN) .build() @@ -448,32 +448,32 @@ public void testSeven() { """ ) public void testEight() { - final Route route1 = TransitModelForTest + final Route route1 = TimetableRepositoryForTest .route(ROUTE_ID_1) .withMode(TransitMode.BUS) .withAgency(AGENCY_1) .build(); - final Route route2 = TransitModelForTest + final Route route2 = TimetableRepositoryForTest .route(ROUTE_ID_2) .withMode(TransitMode.RAIL) .withAgency(AGENCY_1) .build(); - final Route route3 = TransitModelForTest + final Route route3 = TimetableRepositoryForTest .route(ROUTE_ID_3) .withMode(TransitMode.BUS) .withAgency(AGENCY_2) .build(); var patterns = List.of( - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_1, route1) .withStopPattern(STOP_PATTERN) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_2, route2) .withStopPattern(STOP_PATTERN) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_3, route3) .withStopPattern(STOP_PATTERN) .build() @@ -513,41 +513,41 @@ public void testEight() { """ ) public void testNine() { - Route route1 = TransitModelForTest + Route route1 = TimetableRepositoryForTest .route(ROUTE_ID_1) .withAgency(AGENCY_1) .withMode(TransitMode.BUS) .build(); - Route route2 = TransitModelForTest + Route route2 = TimetableRepositoryForTest .route(ROUTE_ID_2) .withAgency(AGENCY_1) .withMode(TransitMode.RAIL) .build(); - Route route3 = TransitModelForTest + Route route3 = TimetableRepositoryForTest .route(ROUTE_ID_3) .withAgency(AGENCY_1) .withMode(TransitMode.BUS) .build(); - Route route4 = TransitModelForTest + Route route4 = TimetableRepositoryForTest .route(ROUTE_ID_4) .withAgency(AGENCY_2) .withMode(TransitMode.BUS) .build(); var patterns = List.of( - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_1, route1) .withStopPattern(STOP_PATTERN) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_2, route2) .withStopPattern(STOP_PATTERN) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_3, route3) .withStopPattern(STOP_PATTERN) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_4, route4) .withStopPattern(STOP_PATTERN) .build() @@ -589,37 +589,37 @@ public void testNine() { """ ) public void testTen() { - final Route route1 = TransitModelForTest + final Route route1 = TimetableRepositoryForTest .route(ROUTE_ID_1) .withMode(TransitMode.BUS) .withAgency(AGENCY_1) .build(); - final Route route2 = TransitModelForTest + final Route route2 = TimetableRepositoryForTest .route(ROUTE_ID_2) .withMode(TransitMode.RAIL) .withAgency(AGENCY_1) .build(); - final Route route3 = TransitModelForTest + final Route route3 = TimetableRepositoryForTest .route(ROUTE_ID_3) .withMode(TransitMode.BUS) .withAgency(AGENCY_1) .build(); - final Route route4 = TransitModelForTest.route(ROUTE_ID_4).withAgency(AGENCY_2).build(); + final Route route4 = TimetableRepositoryForTest.route(ROUTE_ID_4).withAgency(AGENCY_2).build(); var patterns = List.of( - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_1, route1) .withStopPattern(STOP_PATTERN) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_2, route2) .withStopPattern(STOP_PATTERN) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_3, route3) .withStopPattern(STOP_PATTERN) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_4, route4) .withStopPattern(STOP_PATTERN) .build() @@ -646,19 +646,19 @@ public void testTen() { @Test void testDifferentSubModesInRoute() { - final Route route1 = TransitModelForTest + final Route route1 = TimetableRepositoryForTest .route(ROUTE_ID_1) .withMode(TransitMode.BUS) .withAgency(AGENCY_1) .build(); var patterns = List.of( - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_1, route1) .withStopPattern(STOP_PATTERN) .withNetexSubmode(LOCAL_BUS) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_2, route1) .withStopPattern(STOP_PATTERN) .withNetexSubmode(NIGHT_BUS) @@ -696,21 +696,21 @@ private static Collection bannedPatterns( @Test public void testGroupOfLinesSelectFunctionality() { - var route1 = TransitModelForTest + var route1 = TimetableRepositoryForTest .route(ROUTE_ID_1) .withGroupOfRoutes(List.of(GROUP_OF_ROUTES_1)) .build(); - var route2 = TransitModelForTest + var route2 = TimetableRepositoryForTest .route(ROUTE_ID_2) .withGroupOfRoutes(List.of(GROUP_OF_ROUTES_2)) .build(); var patterns = List.of( - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_1, route1) .withStopPattern(STOP_PATTERN) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_2, route2) .withStopPattern(STOP_PATTERN) .build() @@ -734,21 +734,21 @@ public void testGroupOfLinesSelectFunctionality() { @Test public void testGroupOfLinesExcludeFunctionality() { - var route1 = TransitModelForTest + var route1 = TimetableRepositoryForTest .route(ROUTE_ID_1) .withGroupOfRoutes(List.of(GROUP_OF_ROUTES_1)) .build(); - var route2 = TransitModelForTest + var route2 = TimetableRepositoryForTest .route(ROUTE_ID_2) .withGroupOfRoutes(List.of(GROUP_OF_ROUTES_2)) .build(); var patterns = List.of( - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_1, route1) .withStopPattern(STOP_PATTERN) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern(JOURNEY_PATTERN_ID_2, route2) .withStopPattern(STOP_PATTERN) .build() 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 4a09d140371..8108274c318 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/GraphRoutingTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/GraphRoutingTest.java @@ -48,7 +48,7 @@ import org.opentripplanner.street.model.vertex.Vertex; import org.opentripplanner.street.model.vertex.VertexFactory; import org.opentripplanner.street.model.vertex.VertexLabel; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.Accessibility; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.Deduplicator; @@ -62,7 +62,7 @@ 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.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; public abstract class GraphRoutingTest { @@ -71,21 +71,21 @@ public abstract class GraphRoutingTest { protected TestOtpModel modelOf(Builder builder) { builder.build(); Graph graph = builder.graph(); - TransitModel transitModel = builder.transitModel(); - return new TestOtpModel(graph, transitModel).index(); + TimetableRepository timetableRepository = builder.timetableRepository(); + return new TestOtpModel(graph, timetableRepository).index(); } public abstract static class Builder { private final Graph graph; - private final TransitModel transitModel; + private final TimetableRepository timetableRepository; private final VertexFactory vertexFactory; private final VehicleParkingHelper vehicleParkingHelper; protected Builder() { var deduplicator = new Deduplicator(); graph = new Graph(deduplicator); - transitModel = new TransitModel(new StopModel(), deduplicator); + timetableRepository = new TimetableRepository(new StopModel(), deduplicator); vertexFactory = new VertexFactory(graph); vehicleParkingHelper = new VehicleParkingHelper(graph); } @@ -96,8 +96,8 @@ public Graph graph() { return graph; } - public TransitModel transitModel() { - return transitModel; + public TimetableRepository timetableRepository() { + return timetableRepository; } public T v(VertexLabel label) { @@ -229,7 +229,7 @@ public List elevator(StreetTraversalPermission permission, Vertex. // -- Transit network (pathways, linking) public Entrance entranceEntity(String id, double latitude, double longitude) { return Entrance - .of(TransitModelForTest.id(id)) + .of(TimetableRepositoryForTest.id(id)) .withName(new NonLocalizedString(id)) .withCode(id) .withCoordinate(latitude, longitude) @@ -242,8 +242,8 @@ RegularStop stopEntity( double longitude, @Nullable Station parentStation ) { - var stopModelBuilder = transitModel.getStopModel().withContext(); - var testModel = new TransitModelForTest(stopModelBuilder); + var stopModelBuilder = timetableRepository.getStopModel().withContext(); + var testModel = new TimetableRepositoryForTest(stopModelBuilder); var stopBuilder = testModel.stop(id).withCoordinate(latitude, longitude); if (parentStation != null) { @@ -251,19 +251,19 @@ RegularStop stopEntity( } var stop = stopBuilder.build(); - transitModel.mergeStopModels(stopModelBuilder.withRegularStop(stop).build()); + timetableRepository.mergeStopModels(stopModelBuilder.withRegularStop(stop).build()); return stop; } public Station stationEntity(String id, Consumer stationBuilder) { - var stopModelBuilder = transitModel.getStopModel().withContext(); - var testModel = new TransitModelForTest(stopModelBuilder); + var stopModelBuilder = timetableRepository.getStopModel().withContext(); + var testModel = new TimetableRepositoryForTest(stopModelBuilder); var builder = testModel.station(id); stationBuilder.accept(builder); var station = builder.build(); - transitModel.mergeStopModels(stopModelBuilder.withStation(station).build()); + timetableRepository.mergeStopModels(stopModelBuilder.withStation(station).build()); return station; } @@ -454,7 +454,7 @@ public VehicleParking vehicleParking( ) { var vehicleParking = VehicleParking .builder() - .id(TransitModelForTest.id(id)) + .id(TimetableRepositoryForTest.id(id)) .coordinate(new WgsCoordinate(y, x)) .bicyclePlaces(bicyclePlaces) .carPlaces(carPlaces) @@ -477,7 +477,7 @@ public VehicleParking.VehicleParkingEntranceCreator vehicleParkingEntrance( ) { return builder -> builder - .entranceId(TransitModelForTest.id(id)) + .entranceId(TimetableRepositoryForTest.id(id)) .name(new NonLocalizedString(id)) .coordinate(new WgsCoordinate(streetVertex.getCoordinate())) .vertex(streetVertex) @@ -501,12 +501,12 @@ public List biLink( } public Route route(String id, TransitMode mode, Agency agency) { - return TransitModelForTest.route(id).withAgency(agency).withMode(mode).build(); + return TimetableRepositoryForTest.route(id).withAgency(agency).withMode(mode).build(); } // Transit public void tripPattern(TripPattern tripPattern) { - transitModel.addTripPattern(tripPattern.getId(), tripPattern); + timetableRepository.addTripPattern(tripPattern.getId(), tripPattern); } public StopTime st(TransitStopVertex s1) { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/StreetModeLinkingTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/StreetModeLinkingTest.java index 1a098591288..1ee0ec9c481 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/StreetModeLinkingTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/StreetModeLinkingTest.java @@ -15,7 +15,7 @@ import org.opentripplanner.street.model.StreetTraversalPermission; import org.opentripplanner.street.model.vertex.Vertex; import org.opentripplanner.street.search.TemporaryVerticesContainer; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; /** * This tests linking of GenericLocations to streets for each StreetMode. The test has 5 parallel @@ -77,7 +77,7 @@ public void build() { graph = otpModel.graph(); graph.hasStreets = true; - TestStreetLinkerModule.link(graph, otpModel.transitModel()); + TestStreetLinkerModule.link(graph, otpModel.timetableRepository()); } @Test @@ -110,8 +110,8 @@ public void testCarParkLinking() { assertLinking(setup.apply(47.501, 19.04), "E1E2 street", "D1D2 street", StreetMode.CAR_TO_PARK); assertLinking( rr -> { - rr.setFrom(new GenericLocation(null, TransitModelForTest.id("STOP"), null, null)); - rr.setTo(new GenericLocation(null, TransitModelForTest.id("STOP"), null, null)); + rr.setFrom(new GenericLocation(null, TimetableRepositoryForTest.id("STOP"), null, null)); + rr.setTo(new GenericLocation(null, TimetableRepositoryForTest.id("STOP"), null, null)); }, "E1E2 street", "D1D2 street", @@ -180,8 +180,8 @@ private void assertLinkedFromTo( private void assertLinkedFromTo(String stopId, String streetName, StreetMode... streetModes) { assertLinking( rr -> { - rr.setFrom(new GenericLocation(null, TransitModelForTest.id(stopId), null, null)); - rr.setTo(new GenericLocation(null, TransitModelForTest.id(stopId), null, null)); + rr.setFrom(new GenericLocation(null, TimetableRepositoryForTest.id(stopId), null, null)); + rr.setTo(new GenericLocation(null, TimetableRepositoryForTest.id(stopId), null, null)); }, streetName, streetName, diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/TestBanning.java b/application/src/test/java/org/opentripplanner/routing/algorithm/TestBanning.java index 075fceed4eb..07d9074c350 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/TestBanning.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/TestBanning.java @@ -2,14 +2,14 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.util.Collection; import java.util.List; import org.junit.jupiter.api.Test; import org.opentripplanner.routing.api.request.request.filter.SelectRequest; import org.opentripplanner.routing.api.request.request.filter.TransitFilterRequest; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.network.StopPattern; @@ -56,24 +56,32 @@ public void testSetWhiteListedOnRequest() { } private List getTestPatterns() { - Agency agency1 = TransitModelForTest.agency("A").copy().withId(id("RUT:Agency:1")).build(); - Agency agency2 = TransitModelForTest.agency("B").copy().withId(id("RUT:Agency:2")).build(); + Agency agency1 = TimetableRepositoryForTest + .agency("A") + .copy() + .withId(id("RUT:Agency:1")) + .build(); + Agency agency2 = TimetableRepositoryForTest + .agency("B") + .copy() + .withId(id("RUT:Agency:2")) + .build(); - Route route1 = TransitModelForTest.route("RUT:Route:1").withAgency(agency1).build(); - Route route2 = TransitModelForTest.route("RUT:Route:2").withAgency(agency1).build(); - Route route3 = TransitModelForTest.route("RUT:Route:3").withAgency(agency2).build(); + Route route1 = TimetableRepositoryForTest.route("RUT:Route:1").withAgency(agency1).build(); + Route route2 = TimetableRepositoryForTest.route("RUT:Route:2").withAgency(agency1).build(); + Route route3 = TimetableRepositoryForTest.route("RUT:Route:3").withAgency(agency2).build(); - final StopPattern stopPattern = TransitModelForTest.of().stopPattern(2); + final StopPattern stopPattern = TimetableRepositoryForTest.of().stopPattern(2); return List.of( - TransitModelForTest + TimetableRepositoryForTest .tripPattern("RUT:JourneyPattern:1", route1) .withStopPattern(stopPattern) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern("RUT:JourneyPattern:2", route2) .withStopPattern(stopPattern) .build(), - TransitModelForTest + TimetableRepositoryForTest .tripPattern("RUT:JourneyPattern:3", route3) .withStopPattern(stopPattern) .build() 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 2bf4afee7fb..1cd19823f17 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 @@ -35,7 +35,7 @@ import org.opentripplanner.routing.api.response.RoutingError; import org.opentripplanner.routing.api.response.RoutingErrorCode; import org.opentripplanner.routing.services.TransitAlertService; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.FeedScopedId; /** @@ -44,7 +44,7 @@ */ class ItineraryListFilterChainTest implements PlanTestConstants { - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final Place A = Place.forStop(TEST_MODEL.stop("A").build()); private static final Place B = Place.forStop(TEST_MODEL.stop("B").build()); private static final Place C = Place.forStop(TEST_MODEL.stop("C").build()); 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 751dcc7ad3c..713e72e344c 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 @@ -20,11 +20,11 @@ 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.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; public class PagingFilterTest implements PlanTestConstants { - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final Place A = TEST_MODEL.place("A", 10, 11); private static final Place B = TEST_MODEL.place("B", 10, 13); diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/SingleCriteriaComparatorTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/SingleCriteriaComparatorTest.java index 3626ada63b3..da55d884d5c 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/SingleCriteriaComparatorTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/SingleCriteriaComparatorTest.java @@ -9,12 +9,12 @@ import org.junit.jupiter.api.Test; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.Place; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.network.grouppriority.DefaultTransitGroupPriorityCalculator; class SingleCriteriaComparatorTest { - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final DefaultTransitGroupPriorityCalculator GROUP_PRIORITY_CALCULATOR = new DefaultTransitGroupPriorityCalculator(); private static final Place A = TEST_MODEL.place("A", 10, 11); diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/mcmax/ItemTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/mcmax/ItemTest.java index c8cd04212e5..ea8ed58ae3a 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/mcmax/ItemTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/mcmax/ItemTest.java @@ -9,11 +9,11 @@ import org.junit.jupiter.api.Test; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.Place; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; class ItemTest { - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final Place A = TEST_MODEL.place("A", 10, 11); private static final Place B = TEST_MODEL.place("B", 10, 11); private static final Itinerary ITINERARY = newItinerary(A).bus(1, 1, 2, B).build(); diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/mcmax/McMaxLimitFilterTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/mcmax/McMaxLimitFilterTest.java index d5f2323ad90..3a192853684 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/mcmax/McMaxLimitFilterTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/system/mcmax/McMaxLimitFilterTest.java @@ -11,12 +11,12 @@ import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.Place; import org.opentripplanner.routing.algorithm.filterchain.filters.system.SingleCriteriaComparator; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.network.grouppriority.DefaultTransitGroupPriorityCalculator; class McMaxLimitFilterTest { - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final DefaultTransitGroupPriorityCalculator GROUP_PRIORITY_CALCULATOR = new DefaultTransitGroupPriorityCalculator(); private static final Place A = TEST_MODEL.place("A", 10, 11); diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/transit/TransitAlertFilterTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/transit/TransitAlertFilterTest.java index 379eb207155..8c64d7231d8 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/transit/TransitAlertFilterTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/filters/transit/TransitAlertFilterTest.java @@ -12,7 +12,7 @@ import org.opentripplanner.routing.alertpatch.TransitAlert; import org.opentripplanner.routing.impl.TransitAlertServiceImpl; import org.opentripplanner.transit.model.framework.FeedScopedId; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; class TransitAlertFilterTest implements PlanTestConstants { @@ -20,7 +20,7 @@ class TransitAlertFilterTest implements PlanTestConstants { @Test void testFilter() { - var transitAlertService = new TransitAlertServiceImpl(new TransitModel()); + var transitAlertService = new TransitAlertServiceImpl(new TimetableRepository()); transitAlertService.setAlerts( List.of( TransitAlert diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/framework/groupids/GroupByAllSameStationsTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/framework/groupids/GroupByAllSameStationsTest.java index 692f3a61ca7..7ee32b845f2 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/framework/groupids/GroupByAllSameStationsTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/framework/groupids/GroupByAllSameStationsTest.java @@ -7,13 +7,13 @@ import org.junit.jupiter.api.Test; import org.opentripplanner.model.plan.Place; import org.opentripplanner.model.plan.PlanTestConstants; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.site.RegularStopBuilder; import org.opentripplanner.transit.model.site.Station; class GroupByAllSameStationsTest implements PlanTestConstants { - private final TransitModelForTest testModel = TransitModelForTest.of(); + private final TimetableRepositoryForTest testModel = TimetableRepositoryForTest.of(); Station STATION_1 = testModel.station("1").build(); Station STATION_2 = testModel.station("2").build(); diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/framework/groupids/GroupBySameRoutesAndStopsTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/framework/groupids/GroupBySameRoutesAndStopsTest.java index 26d3ca1d04b..48772cb69e2 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/framework/groupids/GroupBySameRoutesAndStopsTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/filterchain/framework/groupids/GroupBySameRoutesAndStopsTest.java @@ -8,13 +8,13 @@ import org.junit.jupiter.api.Test; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.PlanTestConstants; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.network.Route; class GroupBySameRoutesAndStopsTest implements PlanTestConstants { - Route routeA = TransitModelForTest.route("A").build(); - Route routeB = TransitModelForTest.route("B").build(); + Route routeA = TimetableRepositoryForTest.route("A").build(); + Route routeB = TimetableRepositoryForTest.route("B").build(); Itinerary i1 = newItinerary(A) .bus(routeA, 21, T11_06, T11_28, E) 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 d10504978a4..d1940119655 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 @@ -58,7 +58,7 @@ import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.street.search.state.State; import org.opentripplanner.street.search.state.TestStateBuilder; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.network.StopPattern; @@ -66,11 +66,11 @@ import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.timetable.booking.RoutingBookingInfo; import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; public class RaptorPathToItineraryMapperTest { - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final int BOARD_COST_SEC = 60; private static final int TRANSFER_COST_SEC = 120; private static final double[] TRANSIT_RELUCTANCE = new double[] { 1.0 }; @@ -79,7 +79,7 @@ public class RaptorPathToItineraryMapperTest { private static final int TRANSIT_START = TimeUtils.time("10:00"); private static final int TRANSIT_END = TimeUtils.time("11:00"); - private static final Route ROUTE = TransitModelForTest.route("route").build(); + private static final Route ROUTE = TimetableRepositoryForTest.route("route").build(); public static final RaptorCostCalculator COST_CALCULATOR = new DefaultCostCalculator<>( BOARD_COST_SEC, @@ -294,11 +294,11 @@ private RaptorPathToItineraryMapper getRaptorPathToItineraryMa .of(2022, Month.OCTOBER, 10, 12, 0, 0) .atZone(ZoneIds.STOCKHOLM) .toInstant(); - TransitModel transitModel = new TransitModel(); - transitModel.initTimeZone(ZoneIds.CET); + TimetableRepository timetableRepository = new TimetableRepository(); + timetableRepository.initTimeZone(ZoneIds.CET); return new RaptorPathToItineraryMapper<>( new Graph(), - new DefaultTransitService(transitModel), + new DefaultTransitService(timetableRepository), getTransitLayer(), dateTime.atZone(ZoneIds.CET), new RouteRequest() 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 8dbf5536ea2..98acfeeb7af 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 @@ -85,7 +85,8 @@ public static void loadGraphBeforeClass(boolean withElevation) { protected OtpServerRequestContext serverContext() { if (serverContext == null) { TestOtpModel model = getGraph(); - serverContext = TestServerContext.createServerContext(model.graph(), model.transitModel()); + serverContext = + TestServerContext.createServerContext(model.graph(), model.timetableRepository()); } return serverContext; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TransitLayerTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TransitLayerTest.java index 58a56ccb96f..db41d9b5768 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TransitLayerTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TransitLayerTest.java @@ -10,7 +10,7 @@ import java.util.Map; import org.junit.jupiter.api.Test; import org.opentripplanner.model.StopTime; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.network.RoutingTripPattern; import org.opentripplanner.transit.model.network.StopPattern; @@ -20,7 +20,7 @@ class TransitLayerTest { - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final TripTimes TRIP_TIMES; private static final RoutingTripPattern TRIP_PATTERN; @@ -30,17 +30,17 @@ class TransitLayerTest { var stopTime = new StopTime(); stopTime.setStop(stop); var stopPattern = new StopPattern(List.of(stopTime)); - var route = TransitModelForTest.route("1").build(); + var route = TimetableRepositoryForTest.route("1").build(); TRIP_PATTERN = TripPattern - .of(TransitModelForTest.id("P1")) + .of(TimetableRepositoryForTest.id("P1")) .withRoute(route) .withStopPattern(stopPattern) .build() .getRoutingTripPattern(); TRIP_TIMES = TripTimesFactory.tripTimes( - TransitModelForTest.trip("1").withRoute(route).build(), + TimetableRepositoryForTest.trip("1").withRoute(route).build(), List.of(new StopTime()), new Deduplicator() ); diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TripPatternForDateTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TripPatternForDateTest.java index dd9a2fffa66..c7f76fc3377 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TripPatternForDateTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/TripPatternForDateTest.java @@ -11,7 +11,7 @@ import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.model.Frequency; import org.opentripplanner.model.StopTime; -import org.opentripplanner.transit.model._data.TransitModelForTest; +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; @@ -24,11 +24,11 @@ class TripPatternForDateTest { - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final RegularStop STOP = TEST_MODEL.stop("TEST:STOP", 0, 0).build(); - private static final Route ROUTE = TransitModelForTest.route("1").build(); + private static final Route ROUTE = TimetableRepositoryForTest.route("1").build(); private static final TripTimes tripTimes = TripTimesFactory.tripTimes( - TransitModelForTest.trip("1").withRoute(ROUTE).build(), + TimetableRepositoryForTest.trip("1").withRoute(ROUTE).build(), List.of(new StopTime()), new Deduplicator() ); @@ -46,7 +46,7 @@ void shouldExcludeAndIncludeBasedOnFrequency(List freqs) { stopTime.setStop(STOP); StopPattern stopPattern = new StopPattern(List.of(stopTime)); RoutingTripPattern tripPattern = TripPattern - .of(TransitModelForTest.id("P1")) + .of(TimetableRepositoryForTest.id("P1")) .withRoute(ROUTE) .withStopPattern(stopPattern) .build() diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/constrainedtransfer/ConstrainedBoardingSearchTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/constrainedtransfer/ConstrainedBoardingSearchTest.java index 214ea55eb3c..80ec5de7ed4 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/constrainedtransfer/ConstrainedBoardingSearchTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/constrainedtransfer/ConstrainedBoardingSearchTest.java @@ -26,7 +26,7 @@ import org.opentripplanner.raptor.spi.RaptorBoardOrAlightEvent; import org.opentripplanner.routing.algorithm.raptoradapter.transit.TripSchedule; import org.opentripplanner.routing.algorithm.raptoradapter.transit.request.TestRouteData; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.RoutingTripPattern; @@ -35,7 +35,7 @@ public class ConstrainedBoardingSearchTest { - private static final FeedScopedId ID = TransitModelForTest.id("ID"); + private static final FeedScopedId ID = TimetableRepositoryForTest.id("ID"); private static final TransferConstraint GUARANTEED_CONSTRAINT = TransferConstraint .of() .guaranteed() 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 fb2a9bf04d0..1aaf3dcd8ef 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 @@ -4,8 +4,8 @@ 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.transit.model._data.TransitModelForTest.agency; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.agency; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.time.Duration; import java.util.List; @@ -25,7 +25,7 @@ import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.framework.CostLinearFunction; import org.opentripplanner.test.support.TestTableParser; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.RouteBuilder; import org.opentripplanner.transit.model.organization.Agency; @@ -212,7 +212,7 @@ RouteRequest createRouteRequest() { } private static TestTripPattern pattern(boolean unpreferredRoute, boolean unpreferredAgency) { - RouteBuilder builder = TransitModelForTest.route( + RouteBuilder builder = TimetableRepositoryForTest.route( unpreferredRoute ? UNPREFERRED_ROUTE_ID : DEFAULT_ROUTE_ID ); 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 35aa9e1d7a2..9f7458376cc 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 @@ -1,9 +1,9 @@ package org.opentripplanner.routing.algorithm.raptoradapter.transit.mappers; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.transit.model._data.TransitModelForTest.agency; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; -import static org.opentripplanner.transit.model._data.TransitModelForTest.route; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.agency; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.route; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; 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 87e90e61b2e..a8e00056a3f 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 @@ -20,13 +20,13 @@ import org.opentripplanner.routing.api.request.framework.CostLinearFunction; import org.opentripplanner.routing.api.request.via.PassThroughViaLocation; import org.opentripplanner.routing.api.request.via.VisitViaLocation; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.site.StopLocation; class RaptorRequestMapperTest { - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final StopLocation STOP_A = TEST_MODEL.stop("Stop:A").build(); private static final List ACCESS = List.of(TestAccessEgress.walk(12, 45)); private static final List EGRESS = List.of(TestAccessEgress.walk(144, 54)); 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 9296ee2730c..1301eea3844 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 @@ -6,7 +6,7 @@ import java.util.List; import org.junit.jupiter.api.Test; import org.opentripplanner.routing.algorithm.raptoradapter.transit.TransitTuningParameters; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.Station; import org.opentripplanner.transit.model.site.StopLocation; @@ -15,7 +15,7 @@ class TransitLayerMapperTest { - private final TransitModelForTest testModel = TransitModelForTest.of(); + private final TimetableRepositoryForTest testModel = TimetableRepositoryForTest.of(); private final Station STATION_A = testModel .station("A") diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TripPatternForDateMapperTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TripPatternForDateMapperTest.java index 3f41c1d29c7..2b0751c7456 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TripPatternForDateMapperTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TripPatternForDateMapperTest.java @@ -15,14 +15,14 @@ import org.opentripplanner.model.Timetable; import org.opentripplanner.model.plan.PlanTestConstants; import org.opentripplanner.routing.algorithm.raptoradapter.transit.TripPatternForDate; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.timetable.TripTimes; import org.opentripplanner.transit.model.timetable.TripTimesFactory; public class TripPatternForDateMapperTest { - private static TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final LocalDate SERVICE_DATE = LocalDate.of(2009, 8, 7); private static final int SERVICE_CODE = 555; @@ -35,7 +35,7 @@ public class TripPatternForDateMapperTest { @BeforeAll public static void setUp() throws Exception { var pattern = TEST_MODEL.pattern(BUS).build(); - var trip = TransitModelForTest.trip("1").build(); + var trip = TimetableRepositoryForTest.trip("1").build(); var tripTimes = TripTimesFactory.tripTimes( trip, TEST_MODEL.stopTimesEvery5Minutes(5, trip, PlanTestConstants.T11_00), 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 ea815a2f47f..b81792877ae 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 @@ -1,7 +1,7 @@ package org.opentripplanner.routing.algorithm.raptoradapter.transit.request; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.time.LocalDate; import java.time.ZonedDateTime; @@ -13,7 +13,7 @@ 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.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.RoutingTripPattern; @@ -25,7 +25,7 @@ public class RaptorRoutingRequestTransitDataCreatorTest { - private static TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); public static final FeedScopedId TP_ID_1 = id("1"); public static final FeedScopedId TP_ID_2 = id("2"); @@ -101,7 +101,7 @@ private static TripPatternForDates findTripPatternForDate( private TripTimes createTripTimesForTest() { return ScheduledTripTimes .of() - .withTrip(TransitModelForTest.trip("Test").build()) + .withTrip(TimetableRepositoryForTest.trip("Test").build()) .withDepartureTimes("00:00 02:00") .build(); } @@ -120,7 +120,7 @@ private static StopTime createStopTime() { private static RoutingTripPattern createTripPattern(FeedScopedId id) { return TripPattern .of(id) - .withRoute(TransitModelForTest.route("1").withMode(TransitMode.BUS).build()) + .withRoute(TimetableRepositoryForTest.route("1").withMode(TransitMode.BUS).build()) .withStopPattern(new StopPattern(List.of(createStopTime(), createStopTime()))) .build() .getRoutingTripPattern(); diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilterTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilterTest.java index be6266ccdbe..8b52f1b58fa 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilterTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RouteRequestTransitDataProviderFilterTest.java @@ -26,7 +26,7 @@ import org.opentripplanner.routing.api.request.request.filter.SelectRequest; import org.opentripplanner.routing.api.request.request.filter.TransitFilter; import org.opentripplanner.routing.api.request.request.filter.TransitFilterRequest; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.Accessibility; import org.opentripplanner.transit.model.basic.MainAndSubMode; import org.opentripplanner.transit.model.basic.SubMode; @@ -49,11 +49,11 @@ class RouteRequestTransitDataProviderFilterTest { - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); - private static final Route ROUTE = TransitModelForTest.route("1").build(); + private static final Route ROUTE = TimetableRepositoryForTest.route("1").build(); - private static final FeedScopedId TRIP_ID = TransitModelForTest.id("T1"); + private static final FeedScopedId TRIP_ID = TimetableRepositoryForTest.id("T1"); private static final RegularStop STOP_FOR_TEST = TEST_MODEL.stop("TEST:STOP", 0, 0).build(); @@ -100,8 +100,8 @@ void testWheelchairAccess(Accessibility wheelchair, WheelchairPreferences access var stopPattern = new StopPattern(List.of(stopTimeStart, stopTimeEnd)); var tripPattern = TripPattern - .of(TransitModelForTest.id("P1")) - .withRoute(TransitModelForTest.route("1").build()) + .of(TimetableRepositoryForTest.id("P1")) + .withRoute(TimetableRepositoryForTest.route("1").build()) .withStopPattern(stopPattern) .build() .getRoutingTripPattern(); @@ -150,8 +150,8 @@ void testRealtimeCancelledStops(boolean includeRealtimeCancellations) { var stopTime4 = getStopTime("TEST:4", PickDrop.SCHEDULED); var stopPattern = new StopPattern(List.of(stopTime1, stopTime2, stopTime3, stopTime4)); var tripPattern = TripPattern - .of(TransitModelForTest.id("P1")) - .withRoute(TransitModelForTest.route("1").build()) + .of(TimetableRepositoryForTest.id("P1")) + .withRoute(TimetableRepositoryForTest.route("1").build()) .withStopPattern(stopPattern) .build() .getRoutingTripPattern(); @@ -294,7 +294,7 @@ void matchModeFilterAndBannedAgencyFilter() { SubMode.of(TransmodelTransportSubmode.UNKNOWN.getValue()) ) ), - List.of(TransitModelForTest.OTHER_AGENCY.getId()) + List.of(TimetableRepositoryForTest.OTHER_AGENCY.getId()) ) ); @@ -329,7 +329,7 @@ void matchCombinedModesAndBannedAgencyFilter() { SubMode.of(TransmodelTransportSubmode.UNKNOWN.getValue()) ) ), - List.of(TransitModelForTest.OTHER_AGENCY.getId()) + List.of(TimetableRepositoryForTest.OTHER_AGENCY.getId()) ) ); @@ -357,7 +357,10 @@ void matchSelectedAgencyExcludedSubMode() { TransitFilterRequest .of() .addSelect( - SelectRequest.of().withAgencies(List.of(TransitModelForTest.AGENCY.getId())).build() + SelectRequest + .of() + .withAgencies(List.of(TimetableRepositoryForTest.AGENCY.getId())) + .build() ) .addNot( SelectRequest @@ -675,8 +678,8 @@ void includeRealtimeCancellationsTest() { @Test void testBikesAllowed() { - RouteBuilder routeBuilder = TransitModelForTest.route("1"); - TripBuilder trip = Trip.of(TransitModelForTest.id("T1")).withRoute(routeBuilder.build()); + RouteBuilder routeBuilder = TimetableRepositoryForTest.route("1"); + TripBuilder trip = Trip.of(TimetableRepositoryForTest.id("T1")).withRoute(routeBuilder.build()); assertEquals( BikeAccess.UNKNOWN, @@ -803,20 +806,20 @@ private boolean validateModesOnTripTimes( } private TripPatternForDate createTestTripPatternForDate() { - Route route = TransitModelForTest.route("1").build(); + Route route = TimetableRepositoryForTest.route("1").build(); var stopTime = new StopTime(); stopTime.setStop(STOP_FOR_TEST); StopPattern stopPattern = new StopPattern(List.of(stopTime)); RoutingTripPattern tripPattern = TripPattern - .of(TransitModelForTest.id("P1")) + .of(TimetableRepositoryForTest.id("P1")) .withRoute(route) .withStopPattern(stopPattern) .build() .getRoutingTripPattern(); TripTimes tripTimes = TripTimesFactory.tripTimes( - TransitModelForTest.trip("1").withRoute(route).build(), + TimetableRepositoryForTest.trip("1").withRoute(route).build(), List.of(new StopTime()), new Deduplicator() ); 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 8648ea20324..1d266ce9953 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 @@ -17,7 +17,7 @@ import org.opentripplanner.raptor.spi.RaptorTimeTable; import org.opentripplanner.routing.algorithm.raptoradapter.transit.TripPatternForDate; import org.opentripplanner.routing.algorithm.raptoradapter.transit.TripSchedule; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.network.Route; @@ -59,7 +59,7 @@ public TestRouteData(Route route, List stops, List times) { tripPattern = TripPattern - .of(TransitModelForTest.id("TP:" + route)) + .of(TimetableRepositoryForTest.id("TP:" + route)) .withRoute(this.route) .withStopPattern(new StopPattern(stopTimesFistTrip)) .withScheduledTimeTableBuilder(builder -> builder.addAllTripTimes(tripTimes)) @@ -167,7 +167,7 @@ private Trip parseTripInfo( Deduplicator deduplicator ) { var trip = Trip - .of(TransitModelForTest.id(route + "-" + stopTimesByTrip.size() + 1)) + .of(TimetableRepositoryForTest.id(route + "-" + stopTimesByTrip.size() + 1)) .withRoute(this.route) .build(); var stopTimes = stopTimes(trip, stops, tripTimes); @@ -260,9 +260,12 @@ public Builder withSubmode(String submode) { } public TestRouteData build() { - var routeBuilder = TransitModelForTest.route(route).withMode(mode).withShortName(route); + var routeBuilder = TimetableRepositoryForTest + .route(route) + .withMode(mode) + .withShortName(route); if (agency != null) { - routeBuilder.withAgency(TransitModelForTest.agency(agency)); + routeBuilder.withAgency(TimetableRepositoryForTest.agency(agency)); } if (submode != null) { routeBuilder.withNetexSubmode(submode); diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TestTransitCaseData.java b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TestTransitCaseData.java index c8d99f1bfaf..729b643667a 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TestTransitCaseData.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/TestTransitCaseData.java @@ -1,13 +1,13 @@ package org.opentripplanner.routing.algorithm.raptoradapter.transit.request; import java.time.LocalDate; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.Station; public final class TestTransitCaseData { - private static TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); public static final Station STATION_A = TEST_MODEL .station("A") 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 4155d46fe63..90dd9e5915e 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 @@ -11,7 +11,7 @@ import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.routing.algorithm.transferoptimization.model.TripStopTime; import org.opentripplanner.routing.algorithm.transferoptimization.model.TripToTripTransfer; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.timetable.Trip; /** @@ -154,7 +154,7 @@ public TripToTripTransfer build() { private static Trip createDummyTrip(T trip) { // Set an uniq id: pattern + the first stop departure time - return TransitModelForTest + return TimetableRepositoryForTest .trip(trip.pattern().debugInfo() + ":" + TimeUtils.timeToStrCompact(trip.departure(0))) .build(); } 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 4425aa10ccd..7b2a4d7e7a6 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 @@ -21,7 +21,7 @@ import org.opentripplanner.routing.api.request.request.JourneyRequest; import org.opentripplanner.routing.api.response.RoutingResponse; import org.opentripplanner.routing.api.response.ViaRoutingResponseConnection; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; /** * Create search from point A to point B via point C. Search will start at 12:00 and will find two @@ -50,7 +50,7 @@ public class ViaRoutingWorkerTest { private static List firstSearch; private static List secondSearch; - private final TransitModelForTest testModel = TransitModelForTest.of(); + private final TimetableRepositoryForTest testModel = TimetableRepositoryForTest.of(); private final Place fromA = testModel.place("A", 5.0, 8.0); private final Place viaC = testModel.place("C", 7.0, 9.0); diff --git a/application/src/test/java/org/opentripplanner/routing/core/ItineraryFaresTest.java b/application/src/test/java/org/opentripplanner/routing/core/ItineraryFaresTest.java index 2e64952d351..7e40bb9670e 100644 --- a/application/src/test/java/org/opentripplanner/routing/core/ItineraryFaresTest.java +++ b/application/src/test/java/org/opentripplanner/routing/core/ItineraryFaresTest.java @@ -12,7 +12,7 @@ import static org.opentripplanner.model.plan.PlanTestConstants.T11_30; import static org.opentripplanner.model.plan.PlanTestConstants.T11_50; import static org.opentripplanner.model.plan.TestItineraryBuilder.newItinerary; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.util.List; import org.junit.jupiter.api.Test; diff --git a/application/src/test/java/org/opentripplanner/routing/graph/DefaultRoutingServiceTest.java b/application/src/test/java/org/opentripplanner/routing/graph/DefaultRoutingServiceTest.java index 8c56bb89a1f..a019a7059e5 100644 --- a/application/src/test/java/org/opentripplanner/routing/graph/DefaultRoutingServiceTest.java +++ b/application/src/test/java/org/opentripplanner/routing/graph/DefaultRoutingServiceTest.java @@ -36,7 +36,7 @@ public class DefaultRoutingServiceTest extends GtfsTest { @Override public void setUp() throws Exception { super.setUp(); - transitService = new DefaultTransitService(transitModel); + transitService = new DefaultTransitService(timetableRepository); } @Override 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 f1f9ff8bfe6..03bd2d2b5cc 100644 --- a/application/src/test/java/org/opentripplanner/routing/graph/GraphSerializationTest.java +++ b/application/src/test/java/org/opentripplanner/routing/graph/GraphSerializationTest.java @@ -29,7 +29,7 @@ import org.opentripplanner.standalone.config.RouterConfig; import org.opentripplanner.street.model.StreetLimitationParameters; import org.opentripplanner.transit.model.framework.Deduplicator; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; /** * Tests that saving a graph and reloading it (round trip through serialization and deserialization) @@ -67,7 +67,7 @@ public void testRoundTripSerializationForGTFSGraph() throws Exception { TestOtpModel model = ConstantsForTests.buildNewPortlandGraph(true); var weRepo = new DefaultWorldEnvelopeRepository(); var emissionsDataModel = new EmissionsDataModel(); - testRoundTrip(model.graph(), model.transitModel(), weRepo, emissionsDataModel); + testRoundTrip(model.graph(), model.timetableRepository(), weRepo, emissionsDataModel); } /** @@ -78,7 +78,12 @@ public void testRoundTripSerializationForNetexGraph() throws Exception { TestOtpModel model = ConstantsForTests.buildNewMinimalNetexGraph(); var worldEnvelopeRepository = new DefaultWorldEnvelopeRepository(); var emissionsDataModel = new EmissionsDataModel(); - testRoundTrip(model.graph(), model.transitModel(), worldEnvelopeRepository, emissionsDataModel); + testRoundTrip( + model.graph(), + model.timetableRepository(), + worldEnvelopeRepository, + emissionsDataModel + ); } // Ideally we'd also test comparing two separate but identical complex graphs, built separately from the same inputs. @@ -175,7 +180,7 @@ private static void assertNoDifferences(Graph g1, Graph g2) { */ private void testRoundTrip( Graph originalGraph, - TransitModel originalTransitModel, + TimetableRepository originalTimetableRepository, WorldEnvelopeRepository worldEnvelopeRepository, EmissionsDataModel emissionsDataModel ) throws Exception { @@ -185,7 +190,7 @@ private void testRoundTrip( streetLimitationParameters.initMaxCarSpeed(40); SerializedGraphObject serializedObj = new SerializedGraphObject( originalGraph, - originalTransitModel, + originalTimetableRepository, worldEnvelopeRepository, BuildConfig.DEFAULT, RouterConfig.DEFAULT, @@ -197,23 +202,23 @@ private void testRoundTrip( serializedObj.save(new FileDataSource(tempFile, FileType.GRAPH)); SerializedGraphObject deserializedGraph = SerializedGraphObject.load(tempFile); Graph copiedGraph1 = deserializedGraph.graph; - TransitModel copiedTransitModel1 = deserializedGraph.transitModel; + TimetableRepository copiedTimetableRepository1 = deserializedGraph.timetableRepository; // Index both graph - we do no know if the original is indexed, because it is cached and // might be indexed by other tests. - originalTransitModel.index(); - originalGraph.index(originalTransitModel.getStopModel()); + originalTimetableRepository.index(); + originalGraph.index(originalTimetableRepository.getStopModel()); - copiedTransitModel1.index(); - copiedGraph1.index(copiedTransitModel1.getStopModel()); + copiedTimetableRepository1.index(); + copiedGraph1.index(copiedTimetableRepository1.getStopModel()); assertNoDifferences(originalGraph, copiedGraph1); SerializedGraphObject deserializedGraph2 = SerializedGraphObject.load(tempFile); Graph copiedGraph2 = deserializedGraph2.graph; - TransitModel copiedTransitModel2 = deserializedGraph2.transitModel; - copiedTransitModel2.index(); - copiedGraph2.index(copiedTransitModel2.getStopModel()); + TimetableRepository copiedTimetableRepository2 = deserializedGraph2.timetableRepository; + copiedTimetableRepository2.index(); + copiedGraph2.index(copiedTimetableRepository2.getStopModel()); 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 cb439a9cea3..c407fa08098 100644 --- a/application/src/test/java/org/opentripplanner/routing/graphfinder/DirectGraphFinderTest.java +++ b/application/src/test/java/org/opentripplanner/routing/graphfinder/DirectGraphFinderTest.java @@ -29,7 +29,7 @@ public void build() { } } ); - stopModel = model.transitModel().getStopModel(); + stopModel = model.timetableRepository().getStopModel(); } @Test diff --git a/application/src/test/java/org/opentripplanner/routing/graphfinder/NearbyStopTest.java b/application/src/test/java/org/opentripplanner/routing/graphfinder/NearbyStopTest.java index a81d7c39c5e..6f5fe5c3760 100644 --- a/application/src/test/java/org/opentripplanner/routing/graphfinder/NearbyStopTest.java +++ b/application/src/test/java/org/opentripplanner/routing/graphfinder/NearbyStopTest.java @@ -4,11 +4,11 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; class NearbyStopTest { - private static TransitModelForTest MODEL = TransitModelForTest.of(); + private static TimetableRepositoryForTest MODEL = TimetableRepositoryForTest.of(); // TODO Add tests for all public methods in NearbyStop here diff --git a/application/src/test/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitorTest.java b/application/src/test/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitorTest.java index b69a6533334..95ad1aa316e 100644 --- a/application/src/test/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitorTest.java +++ b/application/src/test/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitorTest.java @@ -4,9 +4,9 @@ import static org.opentripplanner.model.plan.PlanTestConstants.T11_00; import static org.opentripplanner.model.plan.PlanTestConstants.T11_05; import static org.opentripplanner.model.plan.PlanTestConstants.T11_10; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; -import static org.opentripplanner.transit.model._data.TransitModelForTest.route; -import static org.opentripplanner.transit.model._data.TransitModelForTest.tripPattern; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.route; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.tripPattern; import java.util.List; import org.junit.jupiter.api.Test; @@ -15,7 +15,7 @@ import org.opentripplanner.model.StopTime; import org.opentripplanner.service.vehiclerental.model.TestVehicleRentalStationBuilder; import org.opentripplanner.street.search.state.TestStateBuilder; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.network.StopPattern; @@ -23,11 +23,11 @@ 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.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; public class PlaceFinderTraverseVisitorTest { - static TransitModelForTest model = TransitModelForTest.of(); + static TimetableRepositoryForTest model = TimetableRepositoryForTest.of(); static final Station STATION1 = Station .of(id("S1")) .withName(new NonLocalizedString("Station 1")) @@ -55,7 +55,7 @@ public class PlaceFinderTraverseVisitorTest { static final Route r = route("r").build(); - static TransitModel a = new TransitModel(); + static TimetableRepository a = new TimetableRepository(); static { a.addTransitMode(TransitMode.BUS); diff --git a/application/src/test/java/org/opentripplanner/routing/graphfinder/StopFinderTraverseVisitorTest.java b/application/src/test/java/org/opentripplanner/routing/graphfinder/StopFinderTraverseVisitorTest.java index 428e476babd..92bafe8e36b 100644 --- a/application/src/test/java/org/opentripplanner/routing/graphfinder/StopFinderTraverseVisitorTest.java +++ b/application/src/test/java/org/opentripplanner/routing/graphfinder/StopFinderTraverseVisitorTest.java @@ -6,12 +6,12 @@ import org.junit.jupiter.api.Test; import org.opentripplanner.street.model.vertex.TransitStopVertex; import org.opentripplanner.street.search.state.TestStateBuilder; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.site.RegularStop; class StopFinderTraverseVisitorTest { - static final RegularStop STOP = TransitModelForTest.of().stop("a-stop", 1, 1).build(); + static final RegularStop STOP = TimetableRepositoryForTest.of().stop("a-stop", 1, 1).build(); @Test void deduplicateStops() { diff --git a/application/src/test/java/org/opentripplanner/routing/graphfinder/StreetGraphFinderTest.java b/application/src/test/java/org/opentripplanner/routing/graphfinder/StreetGraphFinderTest.java index 76f231577dd..622b76a431a 100644 --- a/application/src/test/java/org/opentripplanner/routing/graphfinder/StreetGraphFinderTest.java +++ b/application/src/test/java/org/opentripplanner/routing/graphfinder/StreetGraphFinderTest.java @@ -13,7 +13,7 @@ import org.opentripplanner.street.model.StreetTraversalPermission; import org.opentripplanner.street.model.vertex.IntersectionVertex; import org.opentripplanner.street.model.vertex.TransitStopVertex; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.network.StopPattern; @@ -39,7 +39,7 @@ protected void setUp() throws Exception { new Builder() { @Override public void build() { - var a = TransitModelForTest.agency("Agency"); + var a = TimetableRepositoryForTest.agency("Agency"); R1 = route("R1", TransitMode.BUS, a); R2 = route("R2", TransitMode.TRAM, a); @@ -99,7 +99,7 @@ public void build() { tripPattern( TP1 = TripPattern - .of(TransitModelForTest.id("TP1")) + .of(TimetableRepositoryForTest.id("TP1")) .withRoute(R1) .withStopPattern(new StopPattern(List.of(st(S1), st(S2)))) .build() @@ -107,7 +107,7 @@ public void build() { tripPattern( TP2 = TripPattern - .of(TransitModelForTest.id("TP2")) + .of(TimetableRepositoryForTest.id("TP2")) .withRoute(R2) .withStopPattern(new StopPattern(List.of(st(S1), st(S3)))) .build() @@ -116,7 +116,7 @@ public void build() { } ); - transitService = new DefaultTransitService(otpModel.transitModel()); + transitService = new DefaultTransitService(otpModel.timetableRepository()); graphFinder = new StreetGraphFinder(otpModel.graph()); } 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 23607d2e0b3..f0ddc08087e 100644 --- a/application/src/test/java/org/opentripplanner/routing/linking/LinkStopToPlatformTest.java +++ b/application/src/test/java/org/opentripplanner/routing/linking/LinkStopToPlatformTest.java @@ -29,11 +29,11 @@ import org.opentripplanner.street.model.vertex.Vertex; import org.opentripplanner.street.search.TraverseMode; import org.opentripplanner.street.search.TraverseModeSet; -import org.opentripplanner.transit.model._data.TransitModelForTest; +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.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -41,13 +41,13 @@ public class LinkStopToPlatformTest { private static final Logger LOG = LoggerFactory.getLogger(LinkStopToPlatformTest.class); private static final GeometryFactory geometryFactory = GeometryUtils.getGeometryFactory(); - private final TransitModelForTest testModel = TransitModelForTest.of(); + private final TimetableRepositoryForTest testModel = TimetableRepositoryForTest.of(); private Graph prepareTest(Coordinate[] platform, int[] visible, Coordinate[] stops) { var deduplicator = new Deduplicator(); var stopModel = new StopModel(); Graph graph = new Graph(deduplicator); - var transitModel = new TransitModel(stopModel, deduplicator); + var timetableRepository = new TimetableRepository(stopModel, deduplicator); ArrayList vertices = new ArrayList<>(); Coordinate[] closedGeom = new Coordinate[platform.length + 1]; @@ -106,8 +106,8 @@ private Graph prepareTest(Coordinate[] platform, int[] visible, Coordinate[] sto transitStops[i] = testModel.stop("TestStop " + i).withCoordinate(stop.y, stop.x).build(); } - transitModel.index(); - graph.index(transitModel.getStopModel()); + timetableRepository.index(); + graph.index(timetableRepository.getStopModel()); for (RegularStop s : transitStops) { var v = TransitStopVertex.of().withStop(s).build(); diff --git a/application/src/test/java/org/opentripplanner/routing/stoptimes/AlternativeLegsTest.java b/application/src/test/java/org/opentripplanner/routing/stoptimes/AlternativeLegsTest.java index a4699ece2ed..055fba784a9 100644 --- a/application/src/test/java/org/opentripplanner/routing/stoptimes/AlternativeLegsTest.java +++ b/application/src/test/java/org/opentripplanner/routing/stoptimes/AlternativeLegsTest.java @@ -34,7 +34,7 @@ public String getFeedName() { @Test void testPreviousLegs() { - var transitService = new DefaultTransitService(transitModel); + var transitService = new DefaultTransitService(timetableRepository); var originalLeg = new ScheduledTransitLegReference( new FeedScopedId(this.feedId.getId(), "1.2"), @@ -68,7 +68,7 @@ void testPreviousLegs() { @Test void testNextLegs() { - var transitService = new DefaultTransitService(transitModel); + var transitService = new DefaultTransitService(timetableRepository); var originalLeg = new ScheduledTransitLegReference( new FeedScopedId(this.feedId.getId(), "2.2"), @@ -102,7 +102,7 @@ void testNextLegs() { @Test void testCircularRoutes() { - var transitService = new DefaultTransitService(transitModel); + var transitService = new DefaultTransitService(timetableRepository); var originalLeg = new ScheduledTransitLegReference( new FeedScopedId(this.feedId.getId(), "19.1"), @@ -130,7 +130,7 @@ void testCircularRoutes() { @Test void testComplexCircularRoutes() { - var transitService = new DefaultTransitService(transitModel); + var transitService = new DefaultTransitService(timetableRepository); var originalLeg = new ScheduledTransitLegReference( new FeedScopedId(this.feedId.getId(), "19.1"), diff --git a/application/src/test/java/org/opentripplanner/routing/stoptimes/StopTimesHelperTest.java b/application/src/test/java/org/opentripplanner/routing/stoptimes/StopTimesHelperTest.java index 61fffd7a905..b5b4d471e53 100644 --- a/application/src/test/java/org/opentripplanner/routing/stoptimes/StopTimesHelperTest.java +++ b/application/src/test/java/org/opentripplanner/routing/stoptimes/StopTimesHelperTest.java @@ -16,7 +16,7 @@ import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; class StopTimesHelperTest { @@ -29,9 +29,9 @@ class StopTimesHelperTest { @BeforeAll public static void setUp() throws Exception { TestOtpModel model = ConstantsForTests.buildGtfsGraph(ConstantsForTests.SIMPLE_GTFS); - TransitModel transitModel = model.transitModel(); - transitService = new DefaultTransitService(transitModel); - feedId = transitModel.getFeedIds().iterator().next(); + TimetableRepository timetableRepository = model.timetableRepository(); + transitService = new DefaultTransitService(timetableRepository); + feedId = timetableRepository.getFeedIds().iterator().next(); stopId = new FeedScopedId(feedId, "J"); var originalPattern = transitService.getPatternForTrip( transitService.getTripForId(new FeedScopedId(feedId, "5.1")) @@ -45,9 +45,9 @@ public static void setUp() throws Exception { .withScheduledTimeTableBuilder(builder -> builder.addOrUpdateTripTimes(newTripTimes)) .build(); // replace the original pattern by the updated pattern in the transit model - transitModel.addTripPattern(pattern.getId(), pattern); - transitModel.index(); - transitService = new DefaultTransitService(transitModel); + timetableRepository.addTripPattern(pattern.getId(), pattern); + timetableRepository.index(); + transitService = new DefaultTransitService(timetableRepository); } /** diff --git a/application/src/test/java/org/opentripplanner/routing/trippattern/FrequencyEntryTest.java b/application/src/test/java/org/opentripplanner/routing/trippattern/FrequencyEntryTest.java index 49ca6d9221b..130438eb75b 100644 --- a/application/src/test/java/org/opentripplanner/routing/trippattern/FrequencyEntryTest.java +++ b/application/src/test/java/org/opentripplanner/routing/trippattern/FrequencyEntryTest.java @@ -7,7 +7,7 @@ import org.junit.jupiter.api.Test; import org.opentripplanner.model.Frequency; import org.opentripplanner.model.StopTime; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.site.RegularStop; @@ -22,15 +22,15 @@ public class FrequencyEntryTest { private static final TripTimes tripTimes; static { - Trip trip = TransitModelForTest.trip("testtrip").build(); + Trip trip = TimetableRepositoryForTest.trip("testtrip").build(); List stopTimes = new ArrayList<>(); int time = 0; for (int i = 0; i < STOP_NUM; ++i) { - FeedScopedId id = TransitModelForTest.id(i + ""); + FeedScopedId id = TimetableRepositoryForTest.id(i + ""); - RegularStop stop = TransitModelForTest.of().stop(id.getId(), 0.0, 0.0).build(); + RegularStop stop = TimetableRepositoryForTest.of().stop(id.getId(), 0.0, 0.0).build(); StopTime stopTime = new StopTime(); stopTime.setStop(stop); 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 9fe74c66353..7dee554efdd 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 @@ -7,7 +7,7 @@ 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.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; public class VehicleParkingTestGraphData { @@ -15,13 +15,13 @@ public class VehicleParkingTestGraphData { protected Graph graph; - protected TransitModel transitModel; + protected TimetableRepository timetableRepository; public void initGraph() { var deduplicator = new Deduplicator(); var stopModel = new StopModel(); graph = new Graph(deduplicator); - transitModel = new TransitModel(stopModel, deduplicator); + timetableRepository = new TimetableRepository(stopModel, deduplicator); graph.hasStreets = true; var factory = new VertexFactory(graph); @@ -36,8 +36,8 @@ public Graph getGraph() { return graph; } - public TransitModel getTransitModel() { - return transitModel; + public TimetableRepository getTimetableRepository() { + return timetableRepository; } public IntersectionVertex getAVertex() { 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 938a201576f..c4db100b56f 100644 --- a/application/src/test/java/org/opentripplanner/service/paging/TestPagingModel.java +++ b/application/src/test/java/org/opentripplanner/service/paging/TestPagingModel.java @@ -14,7 +14,7 @@ import org.opentripplanner.model.plan.TestItineraryBuilder; import org.opentripplanner.model.plan.paging.cursor.PageCursor; import org.opentripplanner.routing.algorithm.filterchain.framework.sort.SortOrderComparator; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; class TestPagingModel { @@ -54,7 +54,7 @@ class TestPagingModel { private static final Instant TRANSIT_START_TIME = TestItineraryBuilder.newTime(0).toInstant(); - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final Place A = Place.forStop(TEST_MODEL.stop("A").build()); private static final Place B = Place.forStop(TEST_MODEL.stop("B").build()); diff --git a/application/src/test/java/org/opentripplanner/service/realtimevehicles/internal/DefaultRealtimeVehicleServiceTest.java b/application/src/test/java/org/opentripplanner/service/realtimevehicles/internal/DefaultRealtimeVehicleServiceTest.java index a1c9dddaab0..7ca1ac6a760 100644 --- a/application/src/test/java/org/opentripplanner/service/realtimevehicles/internal/DefaultRealtimeVehicleServiceTest.java +++ b/application/src/test/java/org/opentripplanner/service/realtimevehicles/internal/DefaultRealtimeVehicleServiceTest.java @@ -2,25 +2,25 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.opentripplanner.framework.geometry.WgsCoordinate.GREENWICH; -import static org.opentripplanner.transit.model._data.TransitModelForTest.route; -import static org.opentripplanner.transit.model._data.TransitModelForTest.tripPattern; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.route; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.tripPattern; import java.time.Instant; import java.util.List; import org.junit.jupiter.api.Test; import org.opentripplanner.service.realtimevehicles.model.RealtimeVehicle; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; 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.service.DefaultTransitService; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; class DefaultRealtimeVehicleServiceTest { private static final Route ROUTE = route("r1").build(); - private static final TransitModelForTest MODEL = TransitModelForTest.of(); - private static final StopPattern STOP_PATTERN = TransitModelForTest.stopPattern( + private static final TimetableRepositoryForTest MODEL = TimetableRepositoryForTest.of(); + private static final StopPattern STOP_PATTERN = TimetableRepositoryForTest.stopPattern( MODEL.stop("1").build(), MODEL.stop("2").build() ); @@ -34,7 +34,9 @@ class DefaultRealtimeVehicleServiceTest { @Test void originalPattern() { - var service = new DefaultRealtimeVehicleService(new DefaultTransitService(new TransitModel())); + var service = new DefaultRealtimeVehicleService( + new DefaultTransitService(new TimetableRepository()) + ); service.setRealtimeVehicles(ORIGINAL, VEHICLES); var updates = service.getRealtimeVehicles(ORIGINAL); assertEquals(VEHICLES, updates); @@ -42,7 +44,9 @@ void originalPattern() { @Test void realtimeAddedPattern() { - var service = new DefaultRealtimeVehicleService(new DefaultTransitService(new TransitModel())); + var service = new DefaultRealtimeVehicleService( + new DefaultTransitService(new TimetableRepository()) + ); var realtimePattern = tripPattern("realtime-added", ROUTE) .withStopPattern(STOP_PATTERN) .withOriginalTripPattern(ORIGINAL) 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 f969c5d18ed..60daef889b0 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.transitModel().getStopModel()); + graph.index(model.timetableRepository().getStopModel()); } /** 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 2c52d0649f5..d5d6f7452db 100644 --- a/application/src/test/java/org/opentripplanner/street/integration/BicycleRoutingTest.java +++ b/application/src/test/java/org/opentripplanner/street/integration/BicycleRoutingTest.java @@ -34,8 +34,8 @@ public class BicycleRoutingTest { ); herrenbergGraph = model.graph(); - model.transitModel().index(); - herrenbergGraph.index(model.transitModel().getStopModel()); + model.timetableRepository().index(); + herrenbergGraph.index(model.timetableRepository().getStopModel()); } /** 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 1dad09faec4..50ab7d5ea55 100644 --- a/application/src/test/java/org/opentripplanner/street/integration/WalkRoutingTest.java +++ b/application/src/test/java/org/opentripplanner/street/integration/WalkRoutingTest.java @@ -29,8 +29,8 @@ class WalkRoutingTest { ); roundabout = model.graph(); - model.transitModel().index(); - roundabout.index(model.transitModel().getStopModel()); + model.timetableRepository().index(); + roundabout.index(model.timetableRepository().getStopModel()); } /** diff --git a/application/src/test/java/org/opentripplanner/street/model/_data/StreetModelForTest.java b/application/src/test/java/org/opentripplanner/street/model/_data/StreetModelForTest.java index a57e4227a6b..8d06e06a0c1 100644 --- a/application/src/test/java/org/opentripplanner/street/model/_data/StreetModelForTest.java +++ b/application/src/test/java/org/opentripplanner/street/model/_data/StreetModelForTest.java @@ -1,6 +1,6 @@ package org.opentripplanner.street.model._data; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.LineString; diff --git a/application/src/test/java/org/opentripplanner/street/model/edge/StreetTransitEntityLinkTest.java b/application/src/test/java/org/opentripplanner/street/model/edge/StreetTransitEntityLinkTest.java index 6ba4dea0216..748e3b608fe 100644 --- a/application/src/test/java/org/opentripplanner/street/model/edge/StreetTransitEntityLinkTest.java +++ b/application/src/test/java/org/opentripplanner/street/model/edge/StreetTransitEntityLinkTest.java @@ -25,7 +25,7 @@ import org.opentripplanner.street.search.request.StreetSearchRequest; import org.opentripplanner.street.search.state.State; import org.opentripplanner.street.search.state.TestStateBuilder; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.Accessibility; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.site.RegularStop; @@ -33,7 +33,7 @@ class StreetTransitEntityLinkTest { - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final RegularStop ACCESSIBLE_STOP = stopForTest( "A:accessible", diff --git a/application/src/test/java/org/opentripplanner/street/model/edge/StreetVehicleParkingLinkTest.java b/application/src/test/java/org/opentripplanner/street/model/edge/StreetVehicleParkingLinkTest.java index 8a3316e44e0..8c6127e716e 100644 --- a/application/src/test/java/org/opentripplanner/street/model/edge/StreetVehicleParkingLinkTest.java +++ b/application/src/test/java/org/opentripplanner/street/model/edge/StreetVehicleParkingLinkTest.java @@ -5,7 +5,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.params.provider.Arguments.of; import static org.opentripplanner.street.model._data.StreetModelForTest.intersectionVertex; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.util.Set; import java.util.stream.Stream; diff --git a/application/src/test/java/org/opentripplanner/street/model/edge/VehicleParkingEdgeTest.java b/application/src/test/java/org/opentripplanner/street/model/edge/VehicleParkingEdgeTest.java index 81bee23ad54..e28bf75583d 100644 --- a/application/src/test/java/org/opentripplanner/street/model/edge/VehicleParkingEdgeTest.java +++ b/application/src/test/java/org/opentripplanner/street/model/edge/VehicleParkingEdgeTest.java @@ -14,7 +14,7 @@ import org.opentripplanner.street.model.vertex.VehicleParkingEntranceVertex; import org.opentripplanner.street.search.request.StreetSearchRequest; import org.opentripplanner.street.search.state.State; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; class VehicleParkingEdgeTest { @@ -133,7 +133,7 @@ private VehicleParking createVehicleParking( ) { return StreetModelForTest .vehicleParking() - .id(TransitModelForTest.id("VehicleParking")) + .id(TimetableRepositoryForTest.id("VehicleParking")) .bicyclePlaces(bicyclePlaces) .carPlaces(carPlaces) .availability(availability) @@ -145,7 +145,7 @@ private VehicleParking.VehicleParkingEntranceCreator vehicleParkingEntrance() { String id = "Entrance"; return builder -> builder - .entranceId(TransitModelForTest.id(id)) + .entranceId(TimetableRepositoryForTest.id(id)) .name(new NonLocalizedString(id)) .coordinate(new WgsCoordinate(0, 0)); } diff --git a/application/src/test/java/org/opentripplanner/street/model/vertex/OsmVertexTest.java b/application/src/test/java/org/opentripplanner/street/model/vertex/OsmVertexTest.java index 61da00ed2c6..298e4fe467f 100644 --- a/application/src/test/java/org/opentripplanner/street/model/vertex/OsmVertexTest.java +++ b/application/src/test/java/org/opentripplanner/street/model/vertex/OsmVertexTest.java @@ -6,12 +6,12 @@ import java.util.List; import org.junit.jupiter.api.Test; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.site.AreaStop; class OsmVertexTest { - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final AreaStop AREA_STOP1 = TEST_MODEL.areaStop("flex-zone-1").build(); private static final AreaStop AREA_STOP2 = TEST_MODEL.areaStop("flex-zone-2").build(); diff --git a/application/src/test/java/org/opentripplanner/street/search/request/StreetSearchRequestMapperTest.java b/application/src/test/java/org/opentripplanner/street/search/request/StreetSearchRequestMapperTest.java index 3c33573621e..4e7f222a26f 100644 --- a/application/src/test/java/org/opentripplanner/street/search/request/StreetSearchRequestMapperTest.java +++ b/application/src/test/java/org/opentripplanner/street/search/request/StreetSearchRequestMapperTest.java @@ -10,7 +10,7 @@ import org.opentripplanner.routing.api.request.RequestModes; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.StreetMode; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; class StreetSearchRequestMapperTest { @@ -20,7 +20,7 @@ void map() { Instant dateTime = Instant.parse("2022-11-10T10:00:00Z"); routeRequest.setDateTime(dateTime); - var from = new GenericLocation(null, TransitModelForTest.id("STOP"), null, null); + var from = new GenericLocation(null, TimetableRepositoryForTest.id("STOP"), null, null); routeRequest.setFrom(from); var to = new GenericLocation(60.0, 20.0); routeRequest.setTo(to); @@ -44,7 +44,7 @@ void mapToTransferRequest() { Instant dateTime = Instant.parse("2022-11-10T10:00:00Z"); routeRequest.setDateTime(dateTime); - var from = new GenericLocation(null, TransitModelForTest.id("STOP"), null, null); + var from = new GenericLocation(null, TimetableRepositoryForTest.id("STOP"), null, null); routeRequest.setFrom(from); var to = new GenericLocation(60.0, 20.0); routeRequest.setTo(to); diff --git a/application/src/test/java/org/opentripplanner/street/search/state/TestStateBuilder.java b/application/src/test/java/org/opentripplanner/street/search/state/TestStateBuilder.java index 1b66152ec09..9605d950ae0 100644 --- a/application/src/test/java/org/opentripplanner/street/search/state/TestStateBuilder.java +++ b/application/src/test/java/org/opentripplanner/street/search/state/TestStateBuilder.java @@ -35,7 +35,7 @@ import org.opentripplanner.street.model.vertex.TransitStopVertex; import org.opentripplanner.street.search.TraverseMode; import org.opentripplanner.street.search.request.StreetSearchRequest; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.Accessibility; import org.opentripplanner.transit.model.site.RegularStop; @@ -44,7 +44,7 @@ */ public class TestStateBuilder { - private final TransitModelForTest testModel = TransitModelForTest.of(); + private final TimetableRepositoryForTest testModel = TimetableRepositoryForTest.of(); private static final Instant DEFAULT_START_TIME = OffsetDateTime .parse("2023-04-18T12:00:00+02:00") diff --git a/application/src/test/java/org/opentripplanner/transit/model/TransitModelArchitectureTest.java b/application/src/test/java/org/opentripplanner/transit/model/TimetableRepositoryArchitectureTest.java similarity index 98% rename from application/src/test/java/org/opentripplanner/transit/model/TransitModelArchitectureTest.java rename to application/src/test/java/org/opentripplanner/transit/model/TimetableRepositoryArchitectureTest.java index 11db763d97f..d2ae7e2e47d 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/TransitModelArchitectureTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/TimetableRepositoryArchitectureTest.java @@ -15,7 +15,7 @@ import org.opentripplanner._support.arch.ArchComponent; import org.opentripplanner._support.arch.Package; -public class TransitModelArchitectureTest { +public class TimetableRepositoryArchitectureTest { private static final Package TRANSIT_FRAMEWORK = TRANSIT_MODEL.subPackage("framework"); private static final Package BASIC = TRANSIT_MODEL.subPackage("basic"); 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 0b149ae4ee4..5b3883005de 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 @@ -1,6 +1,6 @@ package org.opentripplanner.transit.model._data; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.Route; @@ -13,17 +13,22 @@ public class PatternTestModel { - public static final Route ROUTE_1 = TransitModelForTest.route("1").build(); + public static final Route ROUTE_1 = TimetableRepositoryForTest.route("1").build(); private static final FeedScopedId SERVICE_ID = id("service"); - private static final Trip TRIP = TransitModelForTest + private static final Trip TRIP = TimetableRepositoryForTest .trip("t1") .withRoute(ROUTE_1) .withServiceId(SERVICE_ID) .build(); - private static final TransitModelForTest MODEL = new TransitModelForTest(StopModel.of()); + private static final TimetableRepositoryForTest MODEL = new TimetableRepositoryForTest( + StopModel.of() + ); private static final RegularStop STOP_1 = MODEL.stop("1").build(); - private static final StopPattern STOP_PATTERN = TransitModelForTest.stopPattern(STOP_1, STOP_1); + private static final StopPattern STOP_PATTERN = TimetableRepositoryForTest.stopPattern( + STOP_1, + STOP_1 + ); /** * Creates a trip pattern that has a stop pattern, trip times and a trip with a service id. @@ -36,7 +41,7 @@ public static TripPattern pattern() { .withDepartureTimes("10:00 10:05") .build(); - return TransitModelForTest + return TimetableRepositoryForTest .tripPattern("1", ROUTE_1) .withStopPattern(STOP_PATTERN) .withScheduledTimeTableBuilder(builder -> builder.addTripTimes(tt)) diff --git a/application/src/test/java/org/opentripplanner/transit/model/_data/TransitModelForTest.java b/application/src/test/java/org/opentripplanner/transit/model/_data/TimetableRepositoryForTest.java similarity index 97% rename from application/src/test/java/org/opentripplanner/transit/model/_data/TransitModelForTest.java rename to application/src/test/java/org/opentripplanner/transit/model/_data/TimetableRepositoryForTest.java index 0f6d872c639..1da4b5b06e0 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/_data/TransitModelForTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/_data/TimetableRepositoryForTest.java @@ -50,7 +50,7 @@ * state between tests. For now, it is just the stop index - but we want to * use this to encapsulate the StopModel completely. */ -public class TransitModelForTest { +public class TimetableRepositoryForTest { public static final String FEED_ID = "F"; public static final String TIME_ZONE_ID = "Europe/Paris"; @@ -91,12 +91,12 @@ public class TransitModelForTest { private final StopModelBuilder stopModelBuilder; - public TransitModelForTest(StopModelBuilder stopModelBuilder) { + public TimetableRepositoryForTest(StopModelBuilder stopModelBuilder) { this.stopModelBuilder = stopModelBuilder; } - public static TransitModelForTest of() { - return new TransitModelForTest(StopModel.of()); + public static TimetableRepositoryForTest of() { + return new TimetableRepositoryForTest(StopModel.of()); } public static FeedScopedId id(String id) { diff --git a/application/src/test/java/org/opentripplanner/transit/model/basic/NoticeTest.java b/application/src/test/java/org/opentripplanner/transit/model/basic/NoticeTest.java index 5cdd6f37e5c..5306d31077a 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/basic/NoticeTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/basic/NoticeTest.java @@ -7,7 +7,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; class NoticeTest { @@ -16,7 +16,7 @@ class NoticeTest { private static final String PUBLIC_CODE = "public code"; private static final Notice subject = Notice - .of(TransitModelForTest.id(ID)) + .of(TimetableRepositoryForTest.id(ID)) .withPublicCode(PUBLIC_CODE) .withText(TEXT) .build(); @@ -45,7 +45,7 @@ void copy() { @Test void sameAs() { assertTrue(subject.sameAs(subject.copy().build())); - assertFalse(subject.sameAs(subject.copy().withId(TransitModelForTest.id("X")).build())); + assertFalse(subject.sameAs(subject.copy().withId(TimetableRepositoryForTest.id("X")).build())); assertFalse(subject.sameAs(subject.copy().withPublicCode("X").build())); assertFalse(subject.sameAs(subject.copy().withText("X").build())); } diff --git a/application/src/test/java/org/opentripplanner/transit/model/framework/EntityByIdTest.java b/application/src/test/java/org/opentripplanner/transit/model/framework/EntityByIdTest.java index f7f1aed4666..c89d45cc036 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/framework/EntityByIdTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/framework/EntityByIdTest.java @@ -6,16 +6,16 @@ import java.util.Collections; import org.junit.jupiter.api.Test; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; public class EntityByIdTest { - private static final FeedScopedId ID = TransitModelForTest.id("99"); + private static final FeedScopedId ID = TimetableRepositoryForTest.id("99"); private static final TestEntity E = TestEntity.of(ID).build(); private static final String E_TO_STRING = E.toString(); private static final String LIST_OF_E_TO_STRING = String.format("[%s]", E_TO_STRING); private static final String MAP_OF_E_TO_STRING = String.format("{%s=%s}", ID, E_TO_STRING); - private static final FeedScopedId FAKE_ID = TransitModelForTest.id("77"); + private static final FeedScopedId FAKE_ID = TimetableRepositoryForTest.id("77"); private final EntityById subject = new DefaultEntityById<>(); @Test diff --git a/application/src/test/java/org/opentripplanner/transit/model/network/GroupOfRoutesTest.java b/application/src/test/java/org/opentripplanner/transit/model/network/GroupOfRoutesTest.java index ca61e3c30f3..2788b62bae9 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/network/GroupOfRoutesTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/network/GroupOfRoutesTest.java @@ -7,7 +7,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; public class GroupOfRoutesTest { @@ -18,7 +18,7 @@ public class GroupOfRoutesTest { private static final String DESCRIPTION = "description"; private static final GroupOfRoutes subject = GroupOfRoutes - .of(TransitModelForTest.id(ID)) + .of(TimetableRepositoryForTest.id(ID)) .withPrivateCode(PRIVATE_CODE) .withShortName(SHORT_NAME) .withName(NAME) @@ -52,7 +52,7 @@ public void sameValue() { // Make a copy, and set the same name (nothing is changed) var other = subject.copy().build(); assertTrue(subject.sameAs(other)); - assertFalse(subject.sameAs(subject.copy().withId(TransitModelForTest.id("X")).build())); + assertFalse(subject.sameAs(subject.copy().withId(TimetableRepositoryForTest.id("X")).build())); assertFalse(subject.sameAs(subject.copy().withName("X").build())); assertFalse(subject.sameAs(subject.copy().withDescription("X").build())); assertFalse(subject.sameAs(subject.copy().withShortName("X").build())); diff --git a/application/src/test/java/org/opentripplanner/transit/model/network/RouteTest.java b/application/src/test/java/org/opentripplanner/transit/model/network/RouteTest.java index e21465547a1..65bc3bb53a9 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/network/RouteTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/network/RouteTest.java @@ -8,7 +8,7 @@ import org.junit.jupiter.api.Test; import org.opentripplanner.framework.i18n.NonLocalizedString; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.SubMode; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.FeedScopedId; @@ -39,9 +39,9 @@ class RouteTest { private static final String FLEXIBLE_LINE_TYPE = "flexible line type"; private static final Integer GTFS_SORT_ORDER = 0; private static final String URL = "url"; - public static final Agency AGENCY = TransitModelForTest.AGENCY; + public static final Agency AGENCY = TimetableRepositoryForTest.AGENCY; private static final Route subject = Route - .of(TransitModelForTest.id(ID)) + .of(TimetableRepositoryForTest.id(ID)) .withShortName(SHORT_NAME) .withLongName(LONG_NAME) .withDescription(DESCRIPTION) @@ -96,7 +96,7 @@ void copy() { @Test void sameAs() { assertTrue(subject.sameAs(subject.copy().build())); - assertFalse(subject.sameAs(subject.copy().withId(TransitModelForTest.id("X")).build())); + assertFalse(subject.sameAs(subject.copy().withId(TimetableRepositoryForTest.id("X")).build())); assertFalse(subject.sameAs(subject.copy().withShortName("X").build())); assertFalse(subject.sameAs(subject.copy().withLongName(new NonLocalizedString("X")).build())); assertFalse(subject.sameAs(subject.copy().withDescription("X").build())); @@ -116,7 +116,9 @@ void sameAs() { .build() ) ); - assertFalse(subject.sameAs(subject.copy().withAgency(TransitModelForTest.agency("X")).build())); + assertFalse( + subject.sameAs(subject.copy().withAgency(TimetableRepositoryForTest.agency("X")).build()) + ); assertFalse( subject.sameAs( subject diff --git a/application/src/test/java/org/opentripplanner/transit/model/network/StopPatternTest.java b/application/src/test/java/org/opentripplanner/transit/model/network/StopPatternTest.java index 1bce2edf9dc..2b3a59cefab 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/network/StopPatternTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/network/StopPatternTest.java @@ -6,12 +6,12 @@ import java.util.List; import org.junit.jupiter.api.Test; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.timetable.Trip; class StopPatternTest { - private final TransitModelForTest testModel = TransitModelForTest.of(); + private final TimetableRepositoryForTest testModel = TimetableRepositoryForTest.of(); @Test void boardingAlightingConditions() { @@ -25,7 +25,7 @@ void boardingAlightingConditions() { var areaStop = testModel.areaStop("area").build(); - Trip t = TransitModelForTest.trip("trip").build(); + Trip t = TimetableRepositoryForTest.trip("trip").build(); StopPattern stopPattern = new StopPattern( List.of( @@ -54,7 +54,7 @@ void replaceStop() { var s3 = testModel.stop("3").build(); var s4 = testModel.stop("4").build(); - var pattern = TransitModelForTest.stopPattern(s1, s2, s3); + var pattern = TimetableRepositoryForTest.stopPattern(s1, s2, s3); assertEquals(List.of(s1, s2, s3), pattern.getStops()); 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 b2adc7544a3..bb0ec765331 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 @@ -6,13 +6,13 @@ import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.opentripplanner.framework.geometry.GeometryUtils.makeLineString; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.locationtech.jts.geom.LineString; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.site.RegularStop; @@ -20,13 +20,13 @@ class TripPatternTest { private static final String ID = "1"; private static final String NAME = "short name"; - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); - private static final Route ROUTE = TransitModelForTest.route("routeId").build(); + 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_B = TEST_MODEL.stop("B").build(); public static final RegularStop STOP_C = TEST_MODEL.stop("C").build(); - private static final StopPattern STOP_PATTERN = TransitModelForTest.stopPattern( + private static final StopPattern STOP_PATTERN = TimetableRepositoryForTest.stopPattern( STOP_A, STOP_B, STOP_C @@ -77,7 +77,7 @@ void sameAs() { assertFalse(subject.sameAs(subject.copy().withName("X").build())); assertFalse( subject.sameAs( - subject.copy().withRoute(TransitModelForTest.route("anotherId").build()).build() + subject.copy().withRoute(TimetableRepositoryForTest.route("anotherId").build()).build() ) ); assertFalse(subject.sameAs(subject.copy().withMode(TransitMode.RAIL).build())); diff --git a/application/src/test/java/org/opentripplanner/transit/model/network/grouppriority/TripAdapterTest.java b/application/src/test/java/org/opentripplanner/transit/model/network/grouppriority/TripAdapterTest.java index c1aeeea1a59..997d16bcff8 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/network/grouppriority/TripAdapterTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/network/grouppriority/TripAdapterTest.java @@ -3,12 +3,12 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.timetable.Trip; class TripAdapterTest { - private final Trip trip = TransitModelForTest.trip("Trip").build(); + private final Trip trip = TimetableRepositoryForTest.trip("Trip").build(); private final TripAdapter subject = new TripAdapter(trip); 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 b2cf1a57db3..d5b0bff33a3 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 @@ -7,7 +7,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; class AgencyTest { @@ -21,7 +21,7 @@ class AgencyTest { private static final String LANG = "image"; private static final Agency subject = Agency - .of(TransitModelForTest.id(ID)) + .of(TimetableRepositoryForTest.id(ID)) .withName(NAME) .withUrl(URL) .withTimezone(TIMEZONE) @@ -60,7 +60,7 @@ void copy() { @Test void sameAs() { assertTrue(subject.sameAs(subject.copy().build())); - assertFalse(subject.sameAs(subject.copy().withId(TransitModelForTest.id("X")).build())); + assertFalse(subject.sameAs(subject.copy().withId(TimetableRepositoryForTest.id("X")).build())); assertFalse(subject.sameAs(subject.copy().withName("X").build())); assertFalse(subject.sameAs(subject.copy().withUrl("X").build())); assertFalse(subject.sameAs(subject.copy().withTimezone("CET").build())); diff --git a/application/src/test/java/org/opentripplanner/transit/model/organization/BrandingTest.java b/application/src/test/java/org/opentripplanner/transit/model/organization/BrandingTest.java index 39b081fc6d8..37e6217cd15 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/organization/BrandingTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/organization/BrandingTest.java @@ -7,7 +7,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; public class BrandingTest { @@ -19,7 +19,7 @@ public class BrandingTest { private static final String IMAGE = "test_image"; Branding subject = Branding - .of(TransitModelForTest.id(ID)) + .of(TimetableRepositoryForTest.id(ID)) .withShortName(SHORT_NAME) .withName(NAME) .withUrl(URL) @@ -53,7 +53,7 @@ void copy() { @Test void sameAs() { assertTrue(subject.sameAs(subject.copy().build())); - assertFalse(subject.sameAs(subject.copy().withId(TransitModelForTest.id("X")).build())); + assertFalse(subject.sameAs(subject.copy().withId(TimetableRepositoryForTest.id("X")).build())); assertFalse(subject.sameAs(subject.copy().withName("X").build())); assertFalse(subject.sameAs(subject.copy().withShortName("X").build())); assertFalse(subject.sameAs(subject.copy().withUrl("X").build())); diff --git a/application/src/test/java/org/opentripplanner/transit/model/organization/OperatorTest.java b/application/src/test/java/org/opentripplanner/transit/model/organization/OperatorTest.java index 44374f54e91..12decb1fc82 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/organization/OperatorTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/organization/OperatorTest.java @@ -7,7 +7,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; class OperatorTest { @@ -17,7 +17,7 @@ class OperatorTest { private static final String PHONE = "+47 95566333"; private static final Operator subject = Operator - .of(TransitModelForTest.id(ID)) + .of(TimetableRepositoryForTest.id(ID)) .withName(NAME) .withUrl(URL) .withPhone(PHONE) @@ -46,7 +46,7 @@ void copy() { @Test void sameAs() { assertTrue(subject.sameAs(subject.copy().build())); - assertFalse(subject.sameAs(subject.copy().withId(TransitModelForTest.id("X")).build())); + assertFalse(subject.sameAs(subject.copy().withId(TimetableRepositoryForTest.id("X")).build())); assertFalse(subject.sameAs(subject.copy().withName("X").build())); assertFalse(subject.sameAs(subject.copy().withUrl("X").build())); assertFalse(subject.sameAs(subject.copy().withPhone("X").build())); 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 a36b6611368..542dcaadc36 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 @@ -13,7 +13,7 @@ import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.service.StopModel; class AreaStopTest { @@ -24,7 +24,7 @@ class AreaStopTest { private static final I18NString URL = new NonLocalizedString("url"); - private static final String ZONE_ID = TransitModelForTest.TIME_ZONE_ID; + private static final String ZONE_ID = TimetableRepositoryForTest.TIME_ZONE_ID; private static final Geometry GEOMETRY = Polygons.OSLO; @@ -35,7 +35,7 @@ class AreaStopTest { private static AreaStopBuilder areaStopBuilder() { return StopModel .of() - .areaStop(TransitModelForTest.id(ID)) + .areaStop(TimetableRepositoryForTest.id(ID)) .withName(NAME) .withDescription(DESCRIPTION) .withUrl(URL) @@ -70,7 +70,7 @@ void copy() { @Test void sameAs() { assertTrue(subject.sameAs(subject.copy().build())); - assertFalse(subject.sameAs(subject.copy().withId(TransitModelForTest.id("X")).build())); + assertFalse(subject.sameAs(subject.copy().withId(TimetableRepositoryForTest.id("X")).build())); assertFalse(subject.sameAs(subject.copy().withName(new NonLocalizedString("X")).build())); assertFalse( subject.sameAs(subject.copy().withDescription(new NonLocalizedString("X")).build()) diff --git a/application/src/test/java/org/opentripplanner/transit/model/site/BoardingAreaTest.java b/application/src/test/java/org/opentripplanner/transit/model/site/BoardingAreaTest.java index bc7c3455c24..235f4c089ff 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/site/BoardingAreaTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/site/BoardingAreaTest.java @@ -10,17 +10,20 @@ import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; class BoardingAreaTest { private static final String ID = "1"; private static final I18NString NAME = new NonLocalizedString("name"); private static final I18NString DESCRIPTION = new NonLocalizedString("description"); - private static final RegularStop PARENT_STOP = TransitModelForTest.of().stop("stopId").build(); + private static final RegularStop PARENT_STOP = TimetableRepositoryForTest + .of() + .stop("stopId") + .build(); private static final BoardingArea subject = BoardingArea - .of(TransitModelForTest.id(ID)) + .of(TimetableRepositoryForTest.id(ID)) .withName(NAME) .withDescription(DESCRIPTION) .withParentStop(PARENT_STOP) @@ -52,7 +55,7 @@ void copy() { @Test void sameAs() { assertTrue(subject.sameAs(subject.copy().build())); - assertFalse(subject.sameAs(subject.copy().withId(TransitModelForTest.id("X")).build())); + assertFalse(subject.sameAs(subject.copy().withId(TimetableRepositoryForTest.id("X")).build())); assertFalse(subject.sameAs(subject.copy().withName(new NonLocalizedString("X")).build())); assertFalse( subject.sameAs(subject.copy().withDescription(new NonLocalizedString("X")).build()) diff --git a/application/src/test/java/org/opentripplanner/transit/model/site/EntranceTest.java b/application/src/test/java/org/opentripplanner/transit/model/site/EntranceTest.java index 738238caa0f..0a9bb5cb5a4 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/site/EntranceTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/site/EntranceTest.java @@ -10,7 +10,7 @@ import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.Accessibility; class EntranceTest { @@ -23,11 +23,11 @@ class EntranceTest { public static final WgsCoordinate COORDINATE = new WgsCoordinate(0, 0); private static final StopLevel LEVEL = new StopLevel("level", 0); private static final Accessibility WHEELCHAIR_ACCESSIBILITY = Accessibility.POSSIBLE; - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final Station PARENT_STATION = TEST_MODEL.station("stationId").build(); private static final Entrance subject = Entrance - .of(TransitModelForTest.id(ID)) + .of(TimetableRepositoryForTest.id(ID)) .withName(NAME) .withDescription(DESCRIPTION) .withCode(CODE) @@ -67,7 +67,7 @@ void copy() { @Test void sameAs() { assertTrue(subject.sameAs(subject.copy().build())); - assertFalse(subject.sameAs(subject.copy().withId(TransitModelForTest.id("X")).build())); + assertFalse(subject.sameAs(subject.copy().withId(TimetableRepositoryForTest.id("X")).build())); assertFalse(subject.sameAs(subject.copy().withName(new NonLocalizedString("X")).build())); assertFalse( subject.sameAs(subject.copy().withDescription(new NonLocalizedString("X")).build()) diff --git a/application/src/test/java/org/opentripplanner/transit/model/site/FareZoneTest.java b/application/src/test/java/org/opentripplanner/transit/model/site/FareZoneTest.java index 442ca61377f..c98f18d7aec 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/site/FareZoneTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/site/FareZoneTest.java @@ -7,14 +7,14 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; class FareZoneTest { private static final String ID = "1"; private static final String NAME = "name"; private static final FareZone subject = FareZone - .of(TransitModelForTest.id(ID)) + .of(TimetableRepositoryForTest.id(ID)) .withName(NAME) .build(); @@ -41,7 +41,7 @@ void copy() { @Test void sameAs() { assertTrue(subject.sameAs(subject.copy().build())); - assertFalse(subject.sameAs(subject.copy().withId(TransitModelForTest.id("X")).build())); + assertFalse(subject.sameAs(subject.copy().withId(TimetableRepositoryForTest.id("X")).build())); assertFalse(subject.sameAs(subject.copy().withName("X").build())); } } diff --git a/application/src/test/java/org/opentripplanner/transit/model/site/GroupOfStationsTest.java b/application/src/test/java/org/opentripplanner/transit/model/site/GroupOfStationsTest.java index 9b340f3d331..f1816e5a4b7 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/site/GroupOfStationsTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/site/GroupOfStationsTest.java @@ -9,11 +9,11 @@ import org.junit.jupiter.api.Test; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; class GroupOfStationsTest { - private static TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final String ID = "1"; private static final I18NString NAME = new NonLocalizedString("name"); @@ -26,7 +26,7 @@ class GroupOfStationsTest { .build(); private static final GroupOfStations subject = GroupOfStations - .of(TransitModelForTest.id(ID)) + .of(TimetableRepositoryForTest.id(ID)) .withName(NAME) .addChildStation(STATION) .build(); @@ -55,7 +55,7 @@ void copy() { @Test void sameAs() { assertTrue(subject.sameAs(subject.copy().build())); - assertFalse(subject.sameAs(subject.copy().withId(TransitModelForTest.id("X")).build())); + assertFalse(subject.sameAs(subject.copy().withId(TimetableRepositoryForTest.id("X")).build())); assertFalse(subject.sameAs(subject.copy().withName(new NonLocalizedString("X")).build())); assertFalse( subject.sameAs( 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 b57566b68ed..654ec304792 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 @@ -14,12 +14,12 @@ import org.opentripplanner._support.geometry.Polygons; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.service.StopModel; class GroupStopTest { - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final String ID = "1"; private static final I18NString NAME = new NonLocalizedString("name"); @@ -29,7 +29,7 @@ class GroupStopTest { .build(); private static final GroupStop subject = StopModel .of() - .groupStop(TransitModelForTest.id(ID)) + .groupStop(TimetableRepositoryForTest.id(ID)) .withName(NAME) .addLocation(STOP_LOCATION) .build(); @@ -45,7 +45,7 @@ void testGroupStopGeometry() { GroupStop groupStop = StopModel .of() - .groupStop(TransitModelForTest.id(ID)) + .groupStop(TimetableRepositoryForTest.id(ID)) .withName(NAME) .addLocation(stopLocation1) .addLocation(stopLocation2) @@ -66,7 +66,7 @@ void testGroupStopEncompassingAreaGeometry() { GroupStop groupStop = StopModel .of() - .groupStop(TransitModelForTest.id(ID)) + .groupStop(TimetableRepositoryForTest.id(ID)) .withName(NAME) .addLocation(stopLocation) .withEncompassingAreaGeometries(List.of(Polygons.BERLIN)) @@ -105,11 +105,14 @@ void copy() { @Test void sameAs() { assertTrue(subject.sameAs(subject.copy().build())); - assertFalse(subject.sameAs(subject.copy().withId(TransitModelForTest.id("X")).build())); + assertFalse(subject.sameAs(subject.copy().withId(TimetableRepositoryForTest.id("X")).build())); assertFalse(subject.sameAs(subject.copy().withName(new NonLocalizedString("X")).build())); assertFalse( subject.sameAs( - subject.copy().addLocation(TransitModelForTest.of().stop("2:stop", 1d, 2d).build()).build() + subject + .copy() + .addLocation(TimetableRepositoryForTest.of().stop("2:stop", 1d, 2d).build()) + .build() ) ); } diff --git a/application/src/test/java/org/opentripplanner/transit/model/site/MultiModalStationTest.java b/application/src/test/java/org/opentripplanner/transit/model/site/MultiModalStationTest.java index 615b0c49674..93be75e5c13 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/site/MultiModalStationTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/site/MultiModalStationTest.java @@ -11,20 +11,20 @@ import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; class MultiModalStationTest { private static final String ID = "1"; private static final I18NString NAME = new NonLocalizedString("name"); - private static TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final Station STATION_1 = TEST_MODEL.station("1:1").build(); private static final Station STATION_2 = TEST_MODEL.station("1:2").build(); public static final Set CHILD_STATIONS = Set.of(STATION_1, STATION_2); private static final MultiModalStation subject = MultiModalStation - .of(TransitModelForTest.id(ID)) + .of(TimetableRepositoryForTest.id(ID)) .withName(NAME) .withChildStations(CHILD_STATIONS) .withCoordinate(new WgsCoordinate(1, 1)) @@ -54,7 +54,7 @@ void copy() { @Test void sameAs() { assertTrue(subject.sameAs(subject.copy().build())); - assertFalse(subject.sameAs(subject.copy().withId(TransitModelForTest.id("X")).build())); + assertFalse(subject.sameAs(subject.copy().withId(TimetableRepositoryForTest.id("X")).build())); assertFalse(subject.sameAs(subject.copy().withName(new NonLocalizedString("X")).build())); assertFalse(subject.sameAs(subject.copy().withChildStations(Set.of(STATION_1)).build())); } diff --git a/application/src/test/java/org/opentripplanner/transit/model/site/PathwayNodeTest.java b/application/src/test/java/org/opentripplanner/transit/model/site/PathwayNodeTest.java index c5cdae2b54b..77de36ceb71 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/site/PathwayNodeTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/site/PathwayNodeTest.java @@ -10,7 +10,7 @@ import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.Accessibility; class PathwayNodeTest { @@ -18,7 +18,7 @@ class PathwayNodeTest { private static final String ID = "1"; private static final I18NString NAME = new NonLocalizedString("name"); private static final I18NString DESCRIPTION = new NonLocalizedString("description"); - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final Station PARENT_STATION = TEST_MODEL.station("stationId").build(); private static final String CODE = "code"; @@ -26,7 +26,7 @@ class PathwayNodeTest { private static final StopLevel LEVEL = new StopLevel("level", 0); private static final Accessibility WHEELCHAIR_ACCESSIBILITY = Accessibility.POSSIBLE; private static final PathwayNode subject = PathwayNode - .of(TransitModelForTest.id(ID)) + .of(TimetableRepositoryForTest.id(ID)) .withName(NAME) .withDescription(DESCRIPTION) .withCode(CODE) @@ -66,7 +66,7 @@ void copy() { @Test void sameAs() { assertTrue(subject.sameAs(subject.copy().build())); - assertFalse(subject.sameAs(subject.copy().withId(TransitModelForTest.id("X")).build())); + assertFalse(subject.sameAs(subject.copy().withId(TimetableRepositoryForTest.id("X")).build())); assertFalse(subject.sameAs(subject.copy().withName(new NonLocalizedString("X")).build())); assertFalse( subject.sameAs(subject.copy().withDescription(new NonLocalizedString("X")).build()) diff --git a/application/src/test/java/org/opentripplanner/transit/model/site/PathwayTest.java b/application/src/test/java/org/opentripplanner/transit/model/site/PathwayTest.java index 9b5e526b6dd..09bf034e6ba 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/site/PathwayTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/site/PathwayTest.java @@ -9,7 +9,7 @@ import org.junit.jupiter.api.Test; import org.opentripplanner.framework.geometry.WgsCoordinate; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; class PathwayTest { @@ -17,14 +17,14 @@ class PathwayTest { private static final String NAME = "name"; private static final PathwayMode MODE = PathwayMode.ESCALATOR; private static final PathwayNode FROM = PathwayNode - .of(TransitModelForTest.id("1:node")) + .of(TimetableRepositoryForTest.id("1:node")) .withCoordinate(new WgsCoordinate(20, 30)) .build(); - private static final RegularStop TO = TransitModelForTest.of().stop("1:stop").build(); + private static final RegularStop TO = TimetableRepositoryForTest.of().stop("1:stop").build(); public static final int TRAVERSAL_TIME = 120; private final Pathway subject = Pathway - .of(TransitModelForTest.id(ID)) + .of(TimetableRepositoryForTest.id(ID)) .withPathwayMode(MODE) .withSignpostedAs(NAME) .withFromStop(FROM) @@ -66,7 +66,7 @@ void copy() { @Test void sameAs() { assertTrue(subject.sameAs(subject.copy().build())); - assertFalse(subject.sameAs(subject.copy().withId(TransitModelForTest.id("X")).build())); + assertFalse(subject.sameAs(subject.copy().withId(TimetableRepositoryForTest.id("X")).build())); assertFalse(subject.sameAs(subject.copy().withSignpostedAs("X").build())); assertFalse(subject.sameAs(subject.copy().withReverseSignpostedAs("X").build())); assertFalse(subject.sameAs(subject.copy().withPathwayMode(PathwayMode.ELEVATOR).build())); 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 104d732e37e..028a8b0b218 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 @@ -11,7 +11,7 @@ import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.Accessibility; import org.opentripplanner.transit.model.basic.SubMode; import org.opentripplanner.transit.model.basic.TransitMode; @@ -22,7 +22,7 @@ class RegularStopTest { private static final String ID = "1"; private static final I18NString NAME = new NonLocalizedString("name"); private static final I18NString DESCRIPTION = new NonLocalizedString("description"); - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final Station PARENT_STATION = TEST_MODEL.station("stationId").build(); private static final String CODE = "code"; @@ -32,12 +32,12 @@ class RegularStopTest { private static final String NETEX_SUBMODE_NAME = "submode"; private static final SubMode NETEX_SUBMODE = SubMode.of(NETEX_SUBMODE_NAME); private static final TransitMode VEHICLE_TYPE = TransitMode.BUS; - public static final ZoneId TIME_ZONE = ZoneId.of(TransitModelForTest.TIME_ZONE_ID); + 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 .of() - .regularStop(TransitModelForTest.id(ID)) + .regularStop(TimetableRepositoryForTest.id(ID)) .withName(NAME) .withDescription(DESCRIPTION) .withCode(CODE) @@ -86,7 +86,7 @@ void copy() { @Test void sameAs() { assertTrue(subject.sameAs(subject.copy().build())); - assertFalse(subject.sameAs(subject.copy().withId(TransitModelForTest.id("X")).build())); + assertFalse(subject.sameAs(subject.copy().withId(TimetableRepositoryForTest.id("X")).build())); assertFalse(subject.sameAs(subject.copy().withName(new NonLocalizedString("X")).build())); assertFalse( subject.sameAs(subject.copy().withDescription(new NonLocalizedString("X")).build()) @@ -97,7 +97,10 @@ void sameAs() { assertFalse(subject.sameAs(subject.copy().withVehicleType(TransitMode.TRAM).build())); assertFalse( subject.sameAs( - subject.copy().withTimeZone(ZoneId.of(TransitModelForTest.OTHER_TIME_ZONE_ID)).build() + subject + .copy() + .withTimeZone(ZoneId.of(TimetableRepositoryForTest.OTHER_TIME_ZONE_ID)) + .build() ) ); assertFalse(subject.sameAs(subject.copy().withPlatformCode("X").build())); diff --git a/application/src/test/java/org/opentripplanner/transit/model/site/StationTest.java b/application/src/test/java/org/opentripplanner/transit/model/site/StationTest.java index 9ff75583bfc..958816bc74d 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/site/StationTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/site/StationTest.java @@ -11,7 +11,7 @@ import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; class StationTest { @@ -22,13 +22,13 @@ class StationTest { public static final WgsCoordinate COORDINATE = new WgsCoordinate(0, 0); private static final StopTransferPriority PRIORITY = StopTransferPriority.ALLOWED; - private static final ZoneId TIMEZONE = ZoneId.of(TransitModelForTest.TIME_ZONE_ID); + private static final ZoneId TIMEZONE = ZoneId.of(TimetableRepositoryForTest.TIME_ZONE_ID); private static final I18NString URL = new NonLocalizedString("url"); - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final Station PARENT_STATION = TEST_MODEL.station("stationId").build(); private static final Station subject = Station - .of(TransitModelForTest.id(ID)) + .of(TimetableRepositoryForTest.id(ID)) .withName(NAME) .withDescription(DESCRIPTION) .withCode(CODE) @@ -67,7 +67,7 @@ void copy() { @Test void sameAs() { assertTrue(subject.sameAs(subject.copy().build())); - assertFalse(subject.sameAs(subject.copy().withId(TransitModelForTest.id("X")).build())); + assertFalse(subject.sameAs(subject.copy().withId(TimetableRepositoryForTest.id("X")).build())); assertFalse(subject.sameAs(subject.copy().withName(new NonLocalizedString("X")).build())); assertFalse(subject.sameAs(subject.copy().withCode("X").build())); assertFalse( @@ -80,7 +80,10 @@ void sameAs() { assertFalse(subject.sameAs(subject.copy().withUrl(new NonLocalizedString("X")).build())); assertFalse( subject.sameAs( - subject.copy().withTimezone(ZoneId.of(TransitModelForTest.OTHER_TIME_ZONE_ID)).build() + subject + .copy() + .withTimezone(ZoneId.of(TimetableRepositoryForTest.OTHER_TIME_ZONE_ID)) + .build() ) ); } diff --git a/application/src/test/java/org/opentripplanner/transit/model/timetable/RealTimeTripTimesTest.java b/application/src/test/java/org/opentripplanner/transit/model/timetable/RealTimeTripTimesTest.java index 5b3a8f76052..29da6582d8f 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/timetable/RealTimeTripTimesTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/timetable/RealTimeTripTimesTest.java @@ -5,7 +5,7 @@ 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.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import static org.opentripplanner.transit.model.timetable.TimetableValidationError.ErrorCode.NEGATIVE_DWELL_TIME; import static org.opentripplanner.transit.model.timetable.TimetableValidationError.ErrorCode.NEGATIVE_HOP_TIME; @@ -16,7 +16,7 @@ import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.model.StopTime; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.DataValidationException; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.FeedScopedId; @@ -24,7 +24,7 @@ class RealTimeTripTimesTest { - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final String TRIP_ID = "testTripId"; @@ -40,7 +40,7 @@ class RealTimeTripTimesTest { ); static TripTimes createInitialTripTimes() { - Trip trip = TransitModelForTest.trip(TRIP_ID).build(); + Trip trip = TimetableRepositoryForTest.trip(TRIP_ID).build(); List stopTimes = new LinkedList<>(); @@ -69,7 +69,7 @@ class Headsign { @Test void shouldHandleBothNullScenario() { - Trip trip = TransitModelForTest.trip("TRIP").build(); + Trip trip = TimetableRepositoryForTest.trip("TRIP").build(); List stopTimes = List.of(EMPTY_STOPPOINT, EMPTY_STOPPOINT, EMPTY_STOPPOINT); TripTimes tripTimes = TripTimesFactory.tripTimes(trip, stopTimes, new Deduplicator()); @@ -80,7 +80,7 @@ void shouldHandleBothNullScenario() { @Test void shouldHandleTripOnlyHeadSignScenario() { - Trip trip = TransitModelForTest.trip("TRIP").withHeadsign(DIRECTION).build(); + Trip trip = TimetableRepositoryForTest.trip("TRIP").withHeadsign(DIRECTION).build(); List stopTimes = List.of(EMPTY_STOPPOINT, EMPTY_STOPPOINT, EMPTY_STOPPOINT); TripTimes tripTimes = TripTimesFactory.tripTimes(trip, stopTimes, new Deduplicator()); @@ -91,7 +91,7 @@ void shouldHandleTripOnlyHeadSignScenario() { @Test void shouldHandleStopsOnlyHeadSignScenario() { - Trip trip = TransitModelForTest.trip("TRIP").build(); + Trip trip = TimetableRepositoryForTest.trip("TRIP").build(); StopTime stopWithHeadsign = new StopTime(); stopWithHeadsign.setStopHeadsign(STOP_TEST_DIRECTION); List stopTimes = List.of(stopWithHeadsign, stopWithHeadsign, stopWithHeadsign); @@ -104,7 +104,7 @@ void shouldHandleStopsOnlyHeadSignScenario() { @Test void shouldHandleStopsEqualToTripHeadSignScenario() { - Trip trip = TransitModelForTest.trip("TRIP").withHeadsign(DIRECTION).build(); + Trip trip = TimetableRepositoryForTest.trip("TRIP").withHeadsign(DIRECTION).build(); StopTime stopWithHeadsign = new StopTime(); stopWithHeadsign.setStopHeadsign(DIRECTION); List stopTimes = List.of(stopWithHeadsign, stopWithHeadsign, stopWithHeadsign); @@ -117,7 +117,7 @@ void shouldHandleStopsEqualToTripHeadSignScenario() { @Test void shouldHandleDifferingTripAndStopHeadSignScenario() { - Trip trip = TransitModelForTest.trip("TRIP").withHeadsign(DIRECTION).build(); + Trip trip = TimetableRepositoryForTest.trip("TRIP").withHeadsign(DIRECTION).build(); StopTime stopWithHeadsign = new StopTime(); stopWithHeadsign.setStopHeadsign(STOP_TEST_DIRECTION); List stopTimes = List.of(stopWithHeadsign, EMPTY_STOPPOINT, EMPTY_STOPPOINT); 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 e2c1148ef51..75bf99a3fcc 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 @@ -5,20 +5,20 @@ 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 static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; 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.TransitModelForTest; +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; class ScheduledTripTimesTest { - private static final Trip TRIP = TransitModelForTest.trip("Trip-1").build(); + private static final Trip TRIP = TimetableRepositoryForTest.trip("Trip-1").build(); private static final List STOP_IDS = List.of(id("A"), id("B"), id("C")); private static final int SERVICE_CODE = 5; diff --git a/application/src/test/java/org/opentripplanner/transit/model/timetable/StopTimeKeyTest.java b/application/src/test/java/org/opentripplanner/transit/model/timetable/StopTimeKeyTest.java index a4051211c51..e86b4133256 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/timetable/StopTimeKeyTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/timetable/StopTimeKeyTest.java @@ -5,7 +5,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; class StopTimeKeyTest { @@ -13,7 +13,7 @@ class StopTimeKeyTest { private static final int STOP_SEQUENCE_NUMBER = 1; private static final StopTimeKey subject = StopTimeKey - .of(TransitModelForTest.id(ID), STOP_SEQUENCE_NUMBER) + .of(TimetableRepositoryForTest.id(ID), STOP_SEQUENCE_NUMBER) .build(); @Test @@ -29,6 +29,6 @@ void copy() { @Test void sameAs() { assertTrue(subject.sameAs(subject.copy().build())); - assertFalse(subject.sameAs(subject.copy().withId(TransitModelForTest.id("X")).build())); + assertFalse(subject.sameAs(subject.copy().withId(TimetableRepositoryForTest.id("X")).build())); } } diff --git a/application/src/test/java/org/opentripplanner/transit/model/timetable/TimetableValidationErrorTest.java b/application/src/test/java/org/opentripplanner/transit/model/timetable/TimetableValidationErrorTest.java index 7dd67665e92..acccea2b531 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/timetable/TimetableValidationErrorTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/timetable/TimetableValidationErrorTest.java @@ -3,7 +3,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.TransitMode; class TimetableValidationErrorTest { @@ -11,7 +11,7 @@ class TimetableValidationErrorTest { private TimetableValidationError subject = new TimetableValidationError( TimetableValidationError.ErrorCode.NEGATIVE_HOP_TIME, 3, - TransitModelForTest.trip("A").withMode(TransitMode.BUS).withShortName("Line A").build() + TimetableRepositoryForTest.trip("A").withMode(TransitMode.BUS).withShortName("Line A").build() ); @Test diff --git a/application/src/test/java/org/opentripplanner/transit/model/timetable/TripOnServiceDateTest.java b/application/src/test/java/org/opentripplanner/transit/model/timetable/TripOnServiceDateTest.java index c72d56b6aeb..d84af565fab 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/timetable/TripOnServiceDateTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/timetable/TripOnServiceDateTest.java @@ -7,20 +7,20 @@ import java.time.LocalDate; import java.util.List; import org.junit.jupiter.api.Test; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; class TripOnServiceDateTest { private static final String ID = "1"; private static final TripAlteration TRIP_ALTERATION = TripAlteration.CANCELLATION; private static final List REPLACEMENT_FOR = List.of( - TripOnServiceDate.of(TransitModelForTest.id("id1")).build() + TripOnServiceDate.of(TimetableRepositoryForTest.id("id1")).build() ); public static final LocalDate SERVICE_DATE = LocalDate.now(); public static final String TRIP_ID = "tripId"; private static final TripOnServiceDate subject = TripOnServiceDate - .of(TransitModelForTest.id(ID)) - .withTrip(TransitModelForTest.trip(TRIP_ID).build()) + .of(TimetableRepositoryForTest.id(ID)) + .withTrip(TimetableRepositoryForTest.trip(TRIP_ID).build()) .withServiceDate(SERVICE_DATE) .withTripAlteration(TRIP_ALTERATION) .withReplacementFor(REPLACEMENT_FOR) @@ -43,7 +43,7 @@ void copy() { @Test void sameAs() { assertTrue(subject.sameAs(subject.copy().build())); - assertFalse(subject.sameAs(subject.copy().withId(TransitModelForTest.id("X")).build())); + assertFalse(subject.sameAs(subject.copy().withId(TimetableRepositoryForTest.id("X")).build())); assertFalse( subject.sameAs(subject.copy().withServiceDate(LocalDate.now().plusDays(1)).build()) ); @@ -52,7 +52,9 @@ void sameAs() { subject.sameAs( subject .copy() - .withReplacementFor(List.of(TripOnServiceDate.of(TransitModelForTest.id("id2")).build())) + .withReplacementFor( + List.of(TripOnServiceDate.of(TimetableRepositoryForTest.id("id2")).build()) + ) .build() ) ); diff --git a/application/src/test/java/org/opentripplanner/transit/model/timetable/TripTest.java b/application/src/test/java/org/opentripplanner/transit/model/timetable/TripTest.java index 3a3f35643fa..5d50548564a 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/timetable/TripTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/timetable/TripTest.java @@ -6,7 +6,7 @@ import org.junit.jupiter.api.Test; import org.opentripplanner.framework.i18n.NonLocalizedString; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.Accessibility; import org.opentripplanner.transit.model.basic.SubMode; import org.opentripplanner.transit.model.basic.TransitMode; @@ -20,7 +20,7 @@ class TripTest { private static final String ID = "1"; private static final String SHORT_NAME = "name"; private static final Accessibility WHEELCHAIR_ACCESSIBILITY = Accessibility.POSSIBLE; - public static final Route ROUTE = TransitModelForTest.route("routeId").build(); + public static final Route ROUTE = TimetableRepositoryForTest.route("routeId").build(); 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; @@ -37,7 +37,7 @@ class TripTest { private static final FeedScopedId SERVICE_ID = FeedScopedId.parse("x:serviceId"); private static final FeedScopedId SHAPE_ID = FeedScopedId.parse("x:shapeId"); private static final Trip subject = Trip - .of(TransitModelForTest.id(ID)) + .of(TimetableRepositoryForTest.id(ID)) .withShortName(SHORT_NAME) .withRoute(ROUTE) .withDirection(DIRECTION) @@ -63,7 +63,7 @@ void shouldCopyFieldsFromRoute() { .withBikesAllowed(BIKE_ACCESS) .build(); - var subject = Trip.of(TransitModelForTest.id(ID)).withRoute(routeWithModes).build(); + var subject = Trip.of(TimetableRepositoryForTest.id(ID)).withRoute(routeWithModes).build(); assertEquals(TRANSIT_MODE, subject.getMode()); assertEquals(NETEX_SUBMODE, subject.getNetexSubMode()); @@ -97,14 +97,14 @@ void copy() { @Test void sameAs() { assertTrue(subject.sameAs(subject.copy().build())); - assertFalse(subject.sameAs(subject.copy().withId(TransitModelForTest.id("X")).build())); + assertFalse(subject.sameAs(subject.copy().withId(TimetableRepositoryForTest.id("X")).build())); assertFalse(subject.sameAs(subject.copy().withShortName("X").build())); assertFalse( subject.sameAs(subject.copy().withWheelchairBoarding(Accessibility.NOT_POSSIBLE).build()) ); assertFalse( subject.sameAs( - subject.copy().withRoute(TransitModelForTest.route("otherRouteId").build()).build() + subject.copy().withRoute(TimetableRepositoryForTest.route("otherRouteId").build()).build() ) ); assertFalse(subject.sameAs(subject.copy().withDirection(Direction.OUTBOUND).build())); 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 b04a1258984..ec95c91a3f7 100644 --- a/application/src/test/java/org/opentripplanner/transit/service/DefaultTransitServiceTest.java +++ b/application/src/test/java/org/opentripplanner/transit/service/DefaultTransitServiceTest.java @@ -14,7 +14,7 @@ import org.junit.jupiter.api.Test; import org.opentripplanner.model.RealTimeTripUpdate; import org.opentripplanner.model.TimetableSnapshot; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.network.StopPattern; import org.opentripplanner.transit.model.network.TripPattern; @@ -26,7 +26,7 @@ class DefaultTransitServiceTest { - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); static TransitService service; static Station STATION = TEST_MODEL.station("C").build(); @@ -40,7 +40,10 @@ class DefaultTransitServiceTest { static TripPattern FERRY_PATTERN = TEST_MODEL.pattern(FERRY).build(); static TripPattern BUS_PATTERN = TEST_MODEL.pattern(BUS).build(); - static StopPattern REAL_TIME_STOP_PATTERN = TransitModelForTest.stopPattern(STOP_A, STOP_B); + static StopPattern REAL_TIME_STOP_PATTERN = TimetableRepositoryForTest.stopPattern( + STOP_A, + STOP_B + ); static TripPattern REAL_TIME_PATTERN = TEST_MODEL .pattern(BUS) .withStopPattern(REAL_TIME_STOP_PATTERN) @@ -56,16 +59,16 @@ static void setup() { .withStation(STATION) .build(); - var transitModel = new TransitModel(stopModel, new Deduplicator()); - transitModel.addTripPattern(RAIL_PATTERN.getId(), RAIL_PATTERN); - transitModel.index(); + var timetableRepository = new TimetableRepository(stopModel, new Deduplicator()); + timetableRepository.addTripPattern(RAIL_PATTERN.getId(), RAIL_PATTERN); + timetableRepository.index(); - transitModel.initTimetableSnapshotProvider(() -> { + timetableRepository.initTimetableSnapshotProvider(() -> { TimetableSnapshot timetableSnapshot = new TimetableSnapshot(); RealTimeTripTimes tripTimes = RealTimeTripTimes.of( ScheduledTripTimes .of() - .withTrip(TransitModelForTest.trip("REAL_TIME_TRIP").build()) + .withTrip(TimetableRepositoryForTest.trip("REAL_TIME_TRIP").build()) .withDepartureTimes(new int[] { 0, 1 }) .build() ); @@ -77,7 +80,7 @@ static void setup() { }); service = - new DefaultTransitService(transitModel) { + new DefaultTransitService(timetableRepository) { @Override public Collection getPatternsForStop(StopLocation stop) { if (stop.equals(STOP_B)) { diff --git a/application/src/test/java/org/opentripplanner/transit/service/StopModelTest.java b/application/src/test/java/org/opentripplanner/transit/service/StopModelTest.java index b24b547a07e..aa98a85b0a7 100644 --- a/application/src/test/java/org/opentripplanner/transit/service/StopModelTest.java +++ b/application/src/test/java/org/opentripplanner/transit/service/StopModelTest.java @@ -11,7 +11,7 @@ import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.NonLocalizedString; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.site.AreaStop; import org.opentripplanner.transit.model.site.GroupOfStations; @@ -28,7 +28,7 @@ class StopModelTest { .getGeometryFactory() .createPoint(COOR_A.asJtsCoordinate()); public static final NonLocalizedString NAME = NonLocalizedString.ofNullable("Name"); - private static final FeedScopedId ID = TransitModelForTest.id("A"); + private static final FeedScopedId ID = TimetableRepositoryForTest.id("A"); private static final Station STATION = Station .of(ID) .withName(NAME) diff --git a/application/src/test/java/org/opentripplanner/transit/service/TransitModelTest.java b/application/src/test/java/org/opentripplanner/transit/service/TimetableRepositoryTest.java similarity index 71% rename from application/src/test/java/org/opentripplanner/transit/service/TransitModelTest.java rename to application/src/test/java/org/opentripplanner/transit/service/TimetableRepositoryTest.java index 213d1f7b514..04740f655e3 100644 --- a/application/src/test/java/org/opentripplanner/transit/service/TransitModelTest.java +++ b/application/src/test/java/org/opentripplanner/transit/service/TimetableRepositoryTest.java @@ -16,11 +16,13 @@ import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.timetable.Trip; -class TransitModelTest { +class TimetableRepositoryTest { public static final String FAKE_FEED_ID = "FAKE"; public static final FeedScopedId SAMPLE_TRIP_ID = new FeedScopedId(FAKE_FEED_ID, "1.2"); - private static final ResourceLoader RESOURCE_LOADER = ResourceLoader.of(TransitModelTest.class); + private static final ResourceLoader RESOURCE_LOADER = ResourceLoader.of( + TimetableRepositoryTest.class + ); @Test void validateTimeZones() { @@ -28,22 +30,22 @@ void validateTimeZones() { var deduplicator = new Deduplicator(); var stopModel = new StopModel(); var graph = new Graph(deduplicator); - var transitModel = new TransitModel(stopModel, deduplicator); + var timetableRepository = new TimetableRepository(stopModel, deduplicator); ConstantsForTests.addGtfsToGraph( graph, - transitModel, + timetableRepository, ConstantsForTests.SIMPLE_GTFS, new DefaultFareServiceFactory(), FAKE_FEED_ID ); // Then time zone should match the one provided in the feed - assertEquals("America/New_York", transitModel.getTimeZone().getId()); + assertEquals("America/New_York", timetableRepository.getTimeZone().getId()); // Then trip times should be same as in input data - TransitModelIndex transitModelIndex = transitModel.getTransitModelIndex(); - Trip trip = transitModelIndex.getTripForId(SAMPLE_TRIP_ID); - Timetable timetable = transitModelIndex.getPatternForTrip(trip).getScheduledTimetable(); + TimetableRepositoryIndex timetableRepositoryIndex = timetableRepository.getTimetableRepositoryIndex(); + Trip trip = timetableRepositoryIndex.getTripForId(SAMPLE_TRIP_ID); + Timetable timetable = timetableRepositoryIndex.getPatternForTrip(trip).getScheduledTimetable(); assertEquals(20 * 60, timetable.getTripTimes(trip).getDepartureTime(0)); // Should throw on second bundle, with different agency time zone @@ -52,7 +54,7 @@ void validateTimeZones() { () -> ConstantsForTests.addGtfsToGraph( graph, - transitModel, + timetableRepository, RESOURCE_LOADER.file("kcm_gtfs.zip"), new DefaultFareServiceFactory(), null @@ -70,15 +72,15 @@ void validateTimeZonesWithExplicitTimeZone() { var deduplicator = new Deduplicator(); var stopModel = new StopModel(); var graph = new Graph(deduplicator); - var transitModel = new TransitModel(stopModel, deduplicator); + var timetableRepository = new TimetableRepository(stopModel, deduplicator); // Whit explicit time zone - transitModel.initTimeZone(ZoneIds.CHICAGO); + timetableRepository.initTimeZone(ZoneIds.CHICAGO); // First GTFS bundle should be added successfully ConstantsForTests.addGtfsToGraph( graph, - transitModel, + timetableRepository, ConstantsForTests.SIMPLE_GTFS, new DefaultFareServiceFactory(), FAKE_FEED_ID @@ -87,22 +89,22 @@ void validateTimeZonesWithExplicitTimeZone() { // Should load second bundle, with different agency time zone ConstantsForTests.addGtfsToGraph( graph, - transitModel, + timetableRepository, RESOURCE_LOADER.file("kcm_gtfs.zip"), new DefaultFareServiceFactory(), null ); - new TimeZoneAdjusterModule(transitModel).buildGraph(); + new TimeZoneAdjusterModule(timetableRepository).buildGraph(); - TransitModelIndex transitModelIndex = transitModel.getTransitModelIndex(); + TimetableRepositoryIndex timetableRepositoryIndex = timetableRepository.getTimetableRepositoryIndex(); // Then time zone should match the one provided in the feed - assertEquals("America/Chicago", transitModel.getTimeZone().getId()); + assertEquals("America/Chicago", timetableRepository.getTimeZone().getId()); // Then trip times should be on hour less than in input data - Trip trip = transitModelIndex.getTripForId(SAMPLE_TRIP_ID); - Timetable timetable = transitModelIndex.getPatternForTrip(trip).getScheduledTimetable(); + Trip trip = timetableRepositoryIndex.getTripForId(SAMPLE_TRIP_ID); + Timetable timetable = timetableRepositoryIndex.getPatternForTrip(trip).getScheduledTimetable(); assertEquals(20 * 60 - 60 * 60, timetable.getTripTimes(trip).getDepartureTime(0)); } } diff --git a/application/src/test/java/org/opentripplanner/transit/speed_test/SpeedIntegrationTest.java b/application/src/test/java/org/opentripplanner/transit/speed_test/SpeedIntegrationTest.java index 61a23b10ff6..fe847aa9efc 100644 --- a/application/src/test/java/org/opentripplanner/transit/speed_test/SpeedIntegrationTest.java +++ b/application/src/test/java/org/opentripplanner/transit/speed_test/SpeedIntegrationTest.java @@ -90,7 +90,7 @@ void runMultiCriteriaWithDestinationPruning() { private static void runProfile(SpeedTestProfile profile) { var opts = speedTestOptions(profile); var config = SpeedTestConfig.config(opts.rootDir()); - var speedTest = new SpeedTest(opts, config, model.graph(), model.transitModel()); + var speedTest = new SpeedTest(opts, config, model.graph(), model.timetableRepository()); // We want to validate the Raptor paths without changes done by the OptimizeTransfers // and itinerary filter chain(set to debug in config) 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..38fb11712b8 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 @@ -32,7 +32,7 @@ import org.opentripplanner.standalone.config.routerconfig.VectorTileConfig; import org.opentripplanner.standalone.server.DefaultServerRequestContext; import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.transit.speed_test.model.SpeedTestProfile; import org.opentripplanner.transit.speed_test.model.testcase.CsvFileSupport; import org.opentripplanner.transit.speed_test.model.testcase.ExpectedResults; @@ -53,7 +53,7 @@ public class SpeedTest { private static final String TRAVEL_SEARCH_FILENAME = "travelSearch"; - private final TransitModel transitModel; + private final TimetableRepository timetableRepository; private final SpeedTestTimer timer = new SpeedTestTimer(); @@ -73,11 +73,11 @@ public SpeedTest( SpeedTestCmdLineOpts opts, SpeedTestConfig config, Graph graph, - TransitModel transitModel + TimetableRepository timetableRepository ) { this.opts = opts; this.config = config; - this.transitModel = transitModel; + this.timetableRepository = timetableRepository; this.tcIO = new CsvFileSupport( @@ -91,17 +91,17 @@ public SpeedTest( this.testCaseDefinitions = tcIO.readTestCaseDefinitions(); this.expectedResultsByTcId = tcIO.readExpectedResults(); - var transitService = new DefaultTransitService(transitModel); + var transitService = new DefaultTransitService(timetableRepository); UpdaterConfigurator.configure( graph, new DefaultRealtimeVehicleService(transitService), new DefaultVehicleRentalService(), - transitModel, + timetableRepository, config.updatersConfig ); - if (transitModel.getUpdaterManager() != null) { - transitModel.getUpdaterManager().startUpdaters(); + if (timetableRepository.getUpdaterManager() != null) { + timetableRepository.getUpdaterManager().startUpdaters(); } this.serverContext = @@ -110,7 +110,7 @@ public SpeedTest( config.request, new RaptorConfig<>(config.transitRoutingParams), graph, - new DefaultTransitService(transitModel), + new DefaultTransitService(timetableRepository), timer.getRegistry(), VectorTileConfig.DEFAULT, TestServerContext.createWorldEnvelopeService(), @@ -124,11 +124,11 @@ public SpeedTest( null, null ); - // Creating transitLayerForRaptor should be integrated into the TransitModel, but for now + // Creating transitLayerForRaptor should be integrated into the TimetableRepository, but for now // we do it manually here - creatTransitLayerForRaptor(transitModel, config.transitRoutingParams); + creatTransitLayerForRaptor(timetableRepository, config.transitRoutingParams); - initializeTransferCache(config.transitRoutingParams, transitModel); + initializeTransferCache(config.transitRoutingParams, timetableRepository); timer.setUp(opts.groupResultsByCategory()); } @@ -145,20 +145,20 @@ public static void main(String[] args) { var config = SpeedTestConfig.config(opts.rootDir()); loadOtpFeatures(opts); var model = loadGraph(opts.rootDir(), config.graph); - var transitModel = model.transitModel(); + var timetableRepository = model.timetableRepository(); var buildConfig = model.buildConfig(); var graph = model.graph(); // create a new test - var speedTest = new SpeedTest(opts, config, graph, transitModel); + var speedTest = new SpeedTest(opts, config, graph, timetableRepository); - assertTestDateHasData(transitModel, config, buildConfig); + assertTestDateHasData(timetableRepository, config, buildConfig); // and run it speedTest.runTest(); - if (speedTest.transitModel.getUpdaterManager() != null) { - speedTest.transitModel.getUpdaterManager().stop(); + if (speedTest.timetableRepository.getUpdaterManager() != null) { + speedTest.timetableRepository.getUpdaterManager().stop(); } } catch (OtpAppException ae) { System.err.println(ae.getMessage()); @@ -249,7 +249,7 @@ private RoutingResponse performRouting(TestCase testCase) { opts, config, profile, - transitModel.getTimeZone() + timetableRepository.getTimeZone() ); var routingRequest = speedTestRequest.toRouteRequest(); return serverContext.routingService().route(routingRequest); @@ -272,10 +272,10 @@ private static LoadModel loadGraph(File baseDir, URI path) { throw new IllegalStateException(); } - TransitModel transitModel = serializedGraphObject.transitModel; - transitModel.index(); - graph.index(transitModel.getStopModel()); - return new LoadModel(graph, transitModel, serializedGraphObject.buildConfig); + TimetableRepository timetableRepository = serializedGraphObject.timetableRepository; + timetableRepository.index(); + graph.index(timetableRepository.getStopModel()); + return new LoadModel(graph, timetableRepository, serializedGraphObject.buildConfig); } private void initProfileStatistics() { @@ -361,5 +361,5 @@ private List trimItineraries(RoutingResponse routingResponse) { /* inline classes */ - record LoadModel(Graph graph, TransitModel transitModel, BuildConfig buildConfig) {} + record LoadModel(Graph graph, TimetableRepository timetableRepository, BuildConfig buildConfig) {} } diff --git a/application/src/test/java/org/opentripplanner/transit/speed_test/support/AssertSpeedTestSetup.java b/application/src/test/java/org/opentripplanner/transit/speed_test/support/AssertSpeedTestSetup.java index 4113d5979b1..82db561bddf 100644 --- a/application/src/test/java/org/opentripplanner/transit/speed_test/support/AssertSpeedTestSetup.java +++ b/application/src/test/java/org/opentripplanner/transit/speed_test/support/AssertSpeedTestSetup.java @@ -3,17 +3,17 @@ import org.opentripplanner.framework.application.OtpAppException; import org.opentripplanner.framework.application.OtpFileNames; import org.opentripplanner.standalone.config.BuildConfig; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.transit.speed_test.options.SpeedTestConfig; public class AssertSpeedTestSetup { public static void assertTestDateHasData( - TransitModel transitModel, + TimetableRepository timetableRepository, SpeedTestConfig config, BuildConfig buildConfig ) { - int numberOfPatternForTestDate = transitModel + int numberOfPatternForTestDate = timetableRepository .getTransitLayer() .getTripPatternsForRunningDate(config.testDate) .size(); diff --git a/application/src/test/java/org/opentripplanner/updater/GtfsRealtimeFuzzyTripMatcherTest.java b/application/src/test/java/org/opentripplanner/updater/GtfsRealtimeFuzzyTripMatcherTest.java index ffd150095b6..4da03a6b517 100644 --- a/application/src/test/java/org/opentripplanner/updater/GtfsRealtimeFuzzyTripMatcherTest.java +++ b/application/src/test/java/org/opentripplanner/updater/GtfsRealtimeFuzzyTripMatcherTest.java @@ -12,10 +12,10 @@ public class GtfsRealtimeFuzzyTripMatcherTest extends GtfsTest { @Test public void testMatch() { - String feedId = transitModel.getFeedIds().iterator().next(); + String feedId = timetableRepository.getFeedIds().iterator().next(); GtfsRealtimeFuzzyTripMatcher matcher = new GtfsRealtimeFuzzyTripMatcher( - new DefaultTransitService(transitModel) + new DefaultTransitService(timetableRepository) ); TripDescriptor trip1 = TripDescriptor .newBuilder() diff --git a/application/src/test/java/org/opentripplanner/updater/alert/AlertsUpdateHandlerTest.java b/application/src/test/java/org/opentripplanner/updater/alert/AlertsUpdateHandlerTest.java index 6e590ce4957..077de6d072d 100644 --- a/application/src/test/java/org/opentripplanner/updater/alert/AlertsUpdateHandlerTest.java +++ b/application/src/test/java/org/opentripplanner/updater/alert/AlertsUpdateHandlerTest.java @@ -25,13 +25,15 @@ import org.opentripplanner.routing.alertpatch.TransitAlert; import org.opentripplanner.routing.impl.TransitAlertServiceImpl; import org.opentripplanner.routing.services.TransitAlertService; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; public class AlertsUpdateHandlerTest { private AlertsUpdateHandler handler; - private final TransitAlertService service = new TransitAlertServiceImpl(new TransitModel()); + private final TransitAlertService service = new TransitAlertServiceImpl( + new TimetableRepository() + ); @BeforeEach public void setUp() { 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 6a36bbe12dd..d5d8c9e8a74 100644 --- a/application/src/test/java/org/opentripplanner/updater/siri/AddedTripBuilderTest.java +++ b/application/src/test/java/org/opentripplanner/updater/siri/AddedTripBuilderTest.java @@ -18,7 +18,7 @@ import org.junit.jupiter.params.provider.CsvSource; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.model.calendar.CalendarServiceData; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.SubMode; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.AbstractTransitEntity; @@ -34,27 +34,27 @@ import org.opentripplanner.transit.model.timetable.TripOnServiceDate; import org.opentripplanner.transit.service.DefaultTransitService; import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.transit.service.TransitEditorService; -import org.opentripplanner.transit.service.TransitModel; import org.opentripplanner.updater.siri.mapper.SiriTransportModeMapper; import org.opentripplanner.updater.spi.UpdateError; import uk.org.siri.siri20.VehicleModesEnumeration; class AddedTripBuilderTest { - private static final Agency AGENCY = TransitModelForTest.AGENCY; + private static final Agency AGENCY = TimetableRepositoryForTest.AGENCY; private static final ZoneId TIME_ZONE = AGENCY.getTimezone(); private static final Operator OPERATOR = Operator - .of(TransitModelForTest.id("OPERATOR_ID")) + .of(TimetableRepositoryForTest.id("OPERATOR_ID")) .withName("OPERATOR_NAME") .build(); - private static final Route REPLACED_ROUTE = TransitModelForTest + private static final Route REPLACED_ROUTE = TimetableRepositoryForTest .route("REPLACED_ROUTE") .withAgency(AGENCY) .withOperator(OPERATOR) .build(); private static final String LINE_REF = "ROUTE_ID"; - private static final FeedScopedId TRIP_ID = TransitModelForTest.id("TRIP_ID"); + private static final FeedScopedId TRIP_ID = TimetableRepositoryForTest.id("TRIP_ID"); private static final LocalDate SERVICE_DATE = LocalDate.of(2023, 2, 17); private static final TransitMode TRANSIT_MODE = TransitMode.RAIL; private static final String SUB_MODE = "replacementRailService"; @@ -62,7 +62,7 @@ class AddedTripBuilderTest { private static final String HEADSIGN = "TEST TRIP TOWARDS TEST ISLAND"; /* Transit model */ - private static final TransitModelForTest MODEL_TEST = TransitModelForTest.of(); + private static final TimetableRepositoryForTest MODEL_TEST = TimetableRepositoryForTest.of(); private static final RegularStop STOP_A = MODEL_TEST.stop("A").build(); private static final RegularStop STOP_B = MODEL_TEST.stop("B").build(); @@ -77,7 +77,10 @@ class AddedTripBuilderTest { .build(); private final Deduplicator DEDUPLICATOR = new Deduplicator(); - private final TransitModel TRANSIT_MODEL = new TransitModel(STOP_MODEL, DEDUPLICATOR); + private final TimetableRepository TRANSIT_MODEL = new TimetableRepository( + STOP_MODEL, + DEDUPLICATOR + ); private TransitEditorService transitService; private EntityResolver ENTITY_RESOLVER; @@ -85,15 +88,15 @@ class AddedTripBuilderTest { void setUp() { // Add entities to transit model for the entity resolver TRANSIT_MODEL.addAgency(AGENCY); - final TripPattern pattern = TransitModelForTest + final TripPattern pattern = TimetableRepositoryForTest .tripPattern("REPLACED_ROUTE_PATTERN_ID", REPLACED_ROUTE) - .withStopPattern(TransitModelForTest.stopPattern(STOP_A, STOP_B)) + .withStopPattern(TimetableRepositoryForTest.stopPattern(STOP_A, STOP_B)) .build(); TRANSIT_MODEL.addTripPattern(pattern.getId(), pattern); // Crate a scheduled calendar, to have the SERVICE_DATE be within the transit feed coverage CalendarServiceData calendarServiceData = new CalendarServiceData(); - var cal_id = TransitModelForTest.id("CAL_1"); + var cal_id = TimetableRepositoryForTest.id("CAL_1"); calendarServiceData.putServiceDatesForServiceId( cal_id, List.of(SERVICE_DATE.minusDays(1), SERVICE_DATE, SERVICE_DATE.plusDays(1)) @@ -107,7 +110,10 @@ void setUp() { // Create the entity resolver only after the model has been indexed ENTITY_RESOLVER = - new EntityResolver(new DefaultTransitService(TRANSIT_MODEL), TransitModelForTest.FEED_ID); + new EntityResolver( + new DefaultTransitService(TRANSIT_MODEL), + TimetableRepositoryForTest.FEED_ID + ); } @Test @@ -250,7 +256,7 @@ void testAddedTripOnAddedRoute() { var firstTrip = firstAddedTrip.successValue().tripTimes().getTrip(); - var tripId2 = TransitModelForTest.id("TRIP_ID_2"); + var tripId2 = TimetableRepositoryForTest.id("TRIP_ID_2"); var secondAddedTrip = new AddedTripBuilder( transitService, @@ -559,7 +565,7 @@ void testGetTransportMode( ) { // Arrange var route = Route - .of(TransitModelForTest.id(LINE_REF)) + .of(TimetableRepositoryForTest.id(LINE_REF)) .withShortName(SHORT_NAME) .withAgency(AGENCY) .withMode(TransitMode.valueOf(replacedRouteMode)) 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 3323aaee74c..17fee84cc56 100644 --- a/application/src/test/java/org/opentripplanner/updater/siri/ModifiedTripBuilderTest.java +++ b/application/src/test/java/org/opentripplanner/updater/siri/ModifiedTripBuilderTest.java @@ -17,7 +17,7 @@ import org.opentripplanner.model.PickDrop; import org.opentripplanner.model.StopTime; import org.opentripplanner.model.calendar.CalendarServiceData; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.Route; @@ -32,7 +32,7 @@ import org.opentripplanner.transit.model.timetable.TripTimesFactory; import org.opentripplanner.transit.service.DefaultTransitService; import org.opentripplanner.transit.service.StopModel; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.updater.spi.UpdateError; import uk.org.siri.siri20.DepartureBoardingActivityEnumeration; @@ -40,9 +40,9 @@ class ModifiedTripBuilderTest { /* Transit model */ - private static final Agency AGENCY = TransitModelForTest.AGENCY; + private static final Agency AGENCY = TimetableRepositoryForTest.AGENCY; private static final ZoneId TIME_ZONE = AGENCY.getTimezone(); - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); private static final Station STATION_A = TEST_MODEL.station("A").build(); private static final Station STATION_B = TEST_MODEL.station("B").build(); private static final Station STATION_C = TEST_MODEL.station("C").build(); @@ -65,19 +65,19 @@ class ModifiedTripBuilderTest { .build(); private static final RegularStop STOP_D = TEST_MODEL.stop("D").build(); - private static final Route ROUTE = TransitModelForTest + private static final Route ROUTE = TimetableRepositoryForTest .route("ROUTE_ID") .withAgency(AGENCY) .build(); - private static final TripPattern PATTERN = TransitModelForTest + private static final TripPattern PATTERN = TimetableRepositoryForTest .tripPattern("PATTERN_ID", ROUTE) - .withStopPattern(TransitModelForTest.stopPattern(STOP_A_1, STOP_B_1, STOP_C_1)) + .withStopPattern(TimetableRepositoryForTest.stopPattern(STOP_A_1, STOP_B_1, STOP_C_1)) .build(); - private static final FeedScopedId SERVICE_ID = TransitModelForTest.id("CAL_1"); + private static final FeedScopedId SERVICE_ID = TimetableRepositoryForTest.id("CAL_1"); - private static final Trip TRIP = TransitModelForTest + private static final Trip TRIP = TimetableRepositoryForTest .trip("TRIP") .withRoute(ROUTE) .withServiceId(SERVICE_ID) @@ -127,14 +127,17 @@ class ModifiedTripBuilderTest { .withRegularStop(STOP_C_1) .withRegularStop(STOP_D) .build(); - private final TransitModel transitModel = new TransitModel(stopModel, DEDUPLICATOR); + private final TimetableRepository timetableRepository = new TimetableRepository( + stopModel, + DEDUPLICATOR + ); private EntityResolver entityResolver; @BeforeEach void setUp() { // Add entities to transit model for the entity resolver - transitModel.addAgency(AGENCY); - transitModel.addTripPattern(PATTERN.getId(), PATTERN); + timetableRepository.addAgency(AGENCY); + timetableRepository.addTripPattern(PATTERN.getId(), PATTERN); // Crate a scheduled calendar, to have the SERVICE_DATE be within the transit feed coverage CalendarServiceData calendarServiceData = new CalendarServiceData(); @@ -142,15 +145,22 @@ void setUp() { SERVICE_ID, List.of(SERVICE_DATE.minusDays(1), SERVICE_DATE, SERVICE_DATE.plusDays(1)) ); - transitModel.getServiceCodes().put(SERVICE_ID, 0); - transitModel.updateCalendarServiceData(true, calendarServiceData, DataImportIssueStore.NOOP); + timetableRepository.getServiceCodes().put(SERVICE_ID, 0); + timetableRepository.updateCalendarServiceData( + true, + calendarServiceData, + DataImportIssueStore.NOOP + ); // Create transit model index - transitModel.index(); + timetableRepository.index(); // Create the entity resolver only after the model has been indexed entityResolver = - new EntityResolver(new DefaultTransitService(transitModel), TransitModelForTest.FEED_ID); + new EntityResolver( + new DefaultTransitService(timetableRepository), + TimetableRepositoryForTest.FEED_ID + ); } @Test @@ -159,7 +169,7 @@ void testUpdateNoCalls() { TRIP_TIMES, PATTERN, SERVICE_DATE, - transitModel.getTimeZone(), + timetableRepository.getTimeZone(), entityResolver, List.of(), false, @@ -188,7 +198,7 @@ void testUpdateCancellation() { TRIP_TIMES, PATTERN, SERVICE_DATE, - transitModel.getTimeZone(), + timetableRepository.getTimeZone(), entityResolver, List.of(), true, @@ -211,7 +221,7 @@ void testUpdateSameStops() { TRIP_TIMES, PATTERN, SERVICE_DATE, - transitModel.getTimeZone(), + timetableRepository.getTimeZone(), entityResolver, List.of( TestCall @@ -261,7 +271,7 @@ void testUpdateValidationFailure() { TRIP_TIMES, PATTERN, SERVICE_DATE, - transitModel.getTimeZone(), + timetableRepository.getTimeZone(), entityResolver, List.of( TestCall @@ -309,7 +319,7 @@ void testUpdateSameStopsDepartEarly() { TRIP_TIMES, PATTERN, SERVICE_DATE, - transitModel.getTimeZone(), + timetableRepository.getTimeZone(), entityResolver, List.of( TestCall @@ -359,7 +369,7 @@ void testUpdateUpdatedStop() { TRIP_TIMES, PATTERN, SERVICE_DATE, - transitModel.getTimeZone(), + timetableRepository.getTimeZone(), entityResolver, List.of( TestCall @@ -414,7 +424,7 @@ void testUpdateCascading() { TRIP_TIMES, PATTERN, SERVICE_DATE, - transitModel.getTimeZone(), + timetableRepository.getTimeZone(), entityResolver, List.of( TestCall @@ -464,7 +474,7 @@ void testUpdateCascading() { firstResult.successValue().tripTimes(), PATTERN, SERVICE_DATE, - transitModel.getTimeZone(), + timetableRepository.getTimeZone(), entityResolver, List.of( TestCall 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 12bdcbbedce..94c4af8d22e 100644 --- a/application/src/test/java/org/opentripplanner/updater/siri/SiriAlertsUpdateHandlerTest.java +++ b/application/src/test/java/org/opentripplanner/updater/siri/SiriAlertsUpdateHandlerTest.java @@ -34,7 +34,6 @@ import org.opentripplanner.updater.DefaultRealTimeUpdateContext; import org.opentripplanner.updater.GraphUpdaterManager; import org.opentripplanner.updater.RealTimeUpdateContext; -import org.opentripplanner.updater.siri.SiriAlertsUpdateHandler; import uk.org.ifopt.siri20.StopPlaceRef; import uk.org.siri.siri20.AffectedLineStructure; import uk.org.siri.siri20.AffectedRouteStructure; @@ -81,15 +80,17 @@ public String getFeedName() { public void setUp() throws Exception { super.setUp(); - realTimeUpdateContext = new DefaultRealTimeUpdateContext(graph, transitModel); + realTimeUpdateContext = new DefaultRealTimeUpdateContext(graph, timetableRepository); if (transitService == null) { - transitService = new DefaultTransitService(transitModel); - transitModel.setUpdaterManager(new GraphUpdaterManager(realTimeUpdateContext, List.of())); + transitService = new DefaultTransitService(timetableRepository); + timetableRepository.setUpdaterManager( + new GraphUpdaterManager(realTimeUpdateContext, List.of()) + ); } else { transitAlertService.getAllAlerts().clear(); } if (alertsUpdateHandler == null) { - transitAlertService = new TransitAlertServiceImpl(transitModel); + transitAlertService = new TransitAlertServiceImpl(timetableRepository); alertsUpdateHandler = new SiriAlertsUpdateHandler(FEED_ID, transitAlertService, Duration.ZERO); } @@ -458,7 +459,7 @@ public void testSiriSxUpdateForTripByVehicleJourney() { assertTrue(transitAlertService.getAllAlerts().isEmpty()); - var modelZoneId = transitModel.getTimeZone(); + var modelZoneId = timetableRepository.getTimeZone(); var situationNumber = "TST:SituationNumber:1234"; var startTime = LocalDateTime.parse("2014-01-01T00:00:00").atZone(modelZoneId); var endTime = LocalDateTime.parse("2014-01-01T23:59:59").atZone(modelZoneId); @@ -497,7 +498,7 @@ public void testSiriSxUpdateForTripAndStopByVehicleJourney() { assertTrue(transitAlertService.getAllAlerts().isEmpty()); - ZoneId zoneId = transitModel.getTimeZone(); + ZoneId zoneId = timetableRepository.getTimeZone(); final String situationNumber = "TST:SituationNumber:1234"; final ZonedDateTime startTime = LocalDateTime.parse("2014-01-01T00:00:00").atZone(zoneId); final ZonedDateTime endTime = LocalDateTime.parse("2014-01-01T23:59:59").atZone(zoneId); diff --git a/application/src/test/java/org/opentripplanner/updater/siri/SiriTimetableSnapshotSourceTest.java b/application/src/test/java/org/opentripplanner/updater/siri/SiriTimetableSnapshotSourceTest.java index 83076998f4d..901842adb45 100644 --- a/application/src/test/java/org/opentripplanner/updater/siri/SiriTimetableSnapshotSourceTest.java +++ b/application/src/test/java/org/opentripplanner/updater/siri/SiriTimetableSnapshotSourceTest.java @@ -2,7 +2,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import static org.opentripplanner.updater.spi.UpdateResultAssertions.assertFailure; import org.junit.jupiter.api.Disabled; 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 bad0c1982e9..489dfef8956 100644 --- a/application/src/test/java/org/opentripplanner/updater/trip/RealtimeTestConstants.java +++ b/application/src/test/java/org/opentripplanner/updater/trip/RealtimeTestConstants.java @@ -1,10 +1,10 @@ package org.opentripplanner.updater.trip; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.time.LocalDate; import java.time.ZoneId; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.organization.Operator; @@ -14,7 +14,7 @@ public interface RealtimeTestConstants { LocalDate SERVICE_DATE = LocalDate.of(2024, 5, 8); - FeedScopedId SERVICE_ID = TransitModelForTest.id("CAL_1"); + FeedScopedId SERVICE_ID = TimetableRepositoryForTest.id("CAL_1"); String STOP_A1_ID = "A1"; String STOP_B1_ID = "B1"; String STOP_C1_ID = "C1"; @@ -24,8 +24,8 @@ public interface RealtimeTestConstants { Operator OPERATOR1 = Operator.of(id(OPERATOR_1_ID)).withName(OPERATOR_1_ID).build(); String ROUTE_1_ID = "TestRoute1"; - TransitModelForTest TEST_MODEL = TransitModelForTest.of(); - ZoneId TIME_ZONE = ZoneId.of(TransitModelForTest.TIME_ZONE_ID); + TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); + ZoneId TIME_ZONE = ZoneId.of(TimetableRepositoryForTest.TIME_ZONE_ID); Station STATION_A = TEST_MODEL.station("A").build(); Station STATION_B = TEST_MODEL.station("B").build(); Station STATION_C = TEST_MODEL.station("C").build(); @@ -44,5 +44,5 @@ public interface RealtimeTestConstants { .withRegularStop(STOP_D1) .build(); - Route ROUTE_1 = TransitModelForTest.route(ROUTE_1_ID).build(); + Route ROUTE_1 = TimetableRepositoryForTest.route(ROUTE_1_ID).build(); } diff --git a/application/src/test/java/org/opentripplanner/updater/trip/RealtimeTestEnvironment.java b/application/src/test/java/org/opentripplanner/updater/trip/RealtimeTestEnvironment.java index 543bc6d3a17..8231d8868f1 100644 --- a/application/src/test/java/org/opentripplanner/updater/trip/RealtimeTestEnvironment.java +++ b/application/src/test/java/org/opentripplanner/updater/trip/RealtimeTestEnvironment.java @@ -1,6 +1,6 @@ package org.opentripplanner.updater.trip; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import static org.opentripplanner.updater.trip.UpdateIncrementality.DIFFERENTIAL; import static org.opentripplanner.updater.trip.UpdateIncrementality.FULL_DATASET; @@ -12,13 +12,13 @@ import org.opentripplanner.DateTimeHelper; import org.opentripplanner.model.TimetableSnapshot; import org.opentripplanner.routing.graph.Graph; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.timetable.TripTimes; import org.opentripplanner.transit.model.timetable.TripTimesStringBuilder; import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.transit.service.TransitService; import org.opentripplanner.updater.DefaultRealTimeUpdateContext; import org.opentripplanner.updater.TimetableSnapshotSourceParameters; @@ -42,7 +42,7 @@ public final class RealtimeTestEnvironment implements RealtimeTestConstants { false ); - public final TransitModel transitModel; + public final TimetableRepository timetableRepository; private final SiriTimetableSnapshotSource siriSource; private final TimetableSnapshotSource gtfsSource; private final DateTimeHelper dateTimeHelper; @@ -66,19 +66,19 @@ public static RealtimeTestEnvironmentBuilder gtfs() { return new RealtimeTestEnvironmentBuilder().withSourceType(SourceType.GTFS_RT); } - RealtimeTestEnvironment(SourceType sourceType, TransitModel transitModel) { + RealtimeTestEnvironment(SourceType sourceType, TimetableRepository timetableRepository) { Objects.requireNonNull(sourceType); - this.transitModel = transitModel; + this.timetableRepository = timetableRepository; - this.transitModel.index(); + this.timetableRepository.index(); // SIRI and GTFS-RT cannot be registered with the transit model at the same time // we are actively refactoring to remove this restriction // for the time being you cannot run a SIRI and GTFS-RT test at the same time if (sourceType == SourceType.SIRI) { - siriSource = new SiriTimetableSnapshotSource(PARAMETERS, transitModel); + siriSource = new SiriTimetableSnapshotSource(PARAMETERS, timetableRepository); gtfsSource = null; } else { - gtfsSource = new TimetableSnapshotSource(PARAMETERS, transitModel); + gtfsSource = new TimetableSnapshotSource(PARAMETERS, timetableRepository); siriSource = null; } dateTimeHelper = new DateTimeHelper(TIME_ZONE, SERVICE_DATE); @@ -88,7 +88,7 @@ public static RealtimeTestEnvironmentBuilder gtfs() { * Returns a new fresh TransitService */ public TransitService getTransitService() { - return new DefaultTransitService(transitModel); + return new DefaultTransitService(timetableRepository); } /** @@ -103,7 +103,7 @@ public TripTimes getTripTimesForTrip(FeedScopedId tripId, LocalDate serviceDate) } public String getFeedId() { - return TransitModelForTest.FEED_ID; + return TimetableRepositoryForTest.FEED_ID; } private EstimatedTimetableHandler getEstimatedTimetableHandler(boolean fuzzyMatching) { @@ -219,7 +219,7 @@ private UpdateResult applyEstimatedTimetable( DIFFERENTIAL, new DefaultRealTimeUpdateContext( new Graph(), - transitModel, + timetableRepository, siriSource.getTimetableSnapshotBuffer() ) ); 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 3203d7d49fc..99be7a86a43 100644 --- a/application/src/test/java/org/opentripplanner/updater/trip/RealtimeTestEnvironmentBuilder.java +++ b/application/src/test/java/org/opentripplanner/updater/trip/RealtimeTestEnvironmentBuilder.java @@ -1,6 +1,6 @@ package org.opentripplanner.updater.trip; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.util.List; import java.util.Objects; @@ -9,7 +9,7 @@ import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.model.StopTime; import org.opentripplanner.model.calendar.CalendarServiceData; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.site.StopLocation; @@ -17,12 +17,15 @@ 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.service.TimetableRepository; public class RealtimeTestEnvironmentBuilder implements RealtimeTestConstants { private RealtimeTestEnvironment.SourceType sourceType; - private final TransitModel transitModel = new TransitModel(STOP_MODEL, new Deduplicator()); + private final TimetableRepository timetableRepository = new TimetableRepository( + STOP_MODEL, + new Deduplicator() + ); RealtimeTestEnvironmentBuilder withSourceType(RealtimeTestEnvironment.SourceType sourceType) { this.sourceType = sourceType; @@ -31,24 +34,28 @@ RealtimeTestEnvironmentBuilder withSourceType(RealtimeTestEnvironment.SourceType public RealtimeTestEnvironmentBuilder addTrip(TripInput trip) { createTrip(trip); - transitModel.index(); + timetableRepository.index(); return this; } public RealtimeTestEnvironment build() { Objects.requireNonNull(sourceType, "sourceType cannot be null"); - transitModel.initTimeZone(TIME_ZONE); - transitModel.addAgency(TransitModelForTest.AGENCY); + timetableRepository.initTimeZone(TIME_ZONE); + timetableRepository.addAgency(TimetableRepositoryForTest.AGENCY); CalendarServiceData calendarServiceData = new CalendarServiceData(); calendarServiceData.putServiceDatesForServiceId( SERVICE_ID, List.of(SERVICE_DATE.minusDays(1), SERVICE_DATE, SERVICE_DATE.plusDays(1)) ); - transitModel.getServiceCodes().put(SERVICE_ID, 0); - transitModel.updateCalendarServiceData(true, calendarServiceData, DataImportIssueStore.NOOP); + timetableRepository.getServiceCodes().put(SERVICE_ID, 0); + timetableRepository.updateCalendarServiceData( + true, + calendarServiceData, + DataImportIssueStore.NOOP + ); - return new RealtimeTestEnvironment(sourceType, transitModel); + return new RealtimeTestEnvironment(sourceType, timetableRepository); } private Trip createTrip(TripInput tripInput) { @@ -65,10 +72,10 @@ private Trip createTrip(TripInput tripInput) { .withServiceDate(SERVICE_DATE) .build(); - transitModel.addTripOnServiceDate(tripOnServiceDate); + timetableRepository.addTripOnServiceDate(tripOnServiceDate); if (tripInput.route().getOperator() != null) { - transitModel.addOperators(List.of(tripInput.route().getOperator())); + timetableRepository.addOperators(List.of(tripInput.route().getOperator())); } var stopTimes = IntStream @@ -81,17 +88,17 @@ private Trip createTrip(TripInput tripInput) { TripTimes tripTimes = TripTimesFactory.tripTimes(trip, stopTimes, null); - final TripPattern pattern = TransitModelForTest + final TripPattern pattern = TimetableRepositoryForTest .tripPattern(tripInput.id() + "Pattern", tripInput.route()) .withStopPattern( - TransitModelForTest.stopPattern( + TimetableRepositoryForTest.stopPattern( tripInput.stops().stream().map(TripInput.StopCall::stop).toList() ) ) .withScheduledTimeTableBuilder(builder -> builder.addTripTimes(tripTimes)) .build(); - transitModel.addTripPattern(pattern.getId(), pattern); + timetableRepository.addTripPattern(pattern.getId(), pattern); return trip; } diff --git a/application/src/test/java/org/opentripplanner/updater/trip/TimetableSnapshotManagerTest.java b/application/src/test/java/org/opentripplanner/updater/trip/TimetableSnapshotManagerTest.java index 1f3f71a2588..93c5ddbdc55 100644 --- a/application/src/test/java/org/opentripplanner/updater/trip/TimetableSnapshotManagerTest.java +++ b/application/src/test/java/org/opentripplanner/updater/trip/TimetableSnapshotManagerTest.java @@ -15,7 +15,7 @@ import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.model.RealTimeTripUpdate; import org.opentripplanner.model.TimetableSnapshot; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.timetable.RealTimeTripTimes; import org.opentripplanner.transit.model.timetable.ScheduledTripTimes; @@ -27,18 +27,21 @@ class TimetableSnapshotManagerTest { private static final LocalDate TOMORROW = TODAY.plusDays(1); private static final LocalDate YESTERDAY = TODAY.minusDays(1); - private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); - private static final TripPattern PATTERN = TransitModelForTest - .tripPattern("pattern", TransitModelForTest.route("r1").build()) + private static final TimetableRepositoryForTest TEST_MODEL = TimetableRepositoryForTest.of(); + private static final TripPattern PATTERN = TimetableRepositoryForTest + .tripPattern("pattern", TimetableRepositoryForTest.route("r1").build()) .withStopPattern( - TransitModelForTest.stopPattern(TEST_MODEL.stop("1").build(), TEST_MODEL.stop("2").build()) + TimetableRepositoryForTest.stopPattern( + TEST_MODEL.stop("1").build(), + TEST_MODEL.stop("2").build() + ) ) .build(); private static final RealTimeTripTimes TRIP_TIMES = RealTimeTripTimes.of( ScheduledTripTimes .of() .withArrivalTimes("00:00 00:01") - .withTrip(TransitModelForTest.trip("trip").build()) + .withTrip(TimetableRepositoryForTest.trip("trip").build()) .build() ); 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 c3050cf11fe..e817c6e18bb 100644 --- a/application/src/test/java/org/opentripplanner/updater/trip/TimetableSnapshotSourceTest.java +++ b/application/src/test/java/org/opentripplanner/updater/trip/TimetableSnapshotSourceTest.java @@ -33,7 +33,7 @@ import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.model.timetable.TripTimes; import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.transit.service.TransitService; import org.opentripplanner.updater.GtfsRealtimeFuzzyTripMatcher; import org.opentripplanner.updater.TimetableSnapshotSourceParameters; @@ -48,7 +48,7 @@ public class TimetableSnapshotSourceTest { ZoneIds.NEW_YORK ) .build(); - private TransitModel transitModel; + private TimetableRepository timetableRepository; private TransitService transitService; private final GtfsRealtimeFuzzyTripMatcher TRIP_MATCHER_NOOP = null; @@ -58,8 +58,8 @@ public class TimetableSnapshotSourceTest { @BeforeEach public void setUp() { TestOtpModel model = ConstantsForTests.buildGtfsGraph(ConstantsForTests.SIMPLE_GTFS); - transitModel = model.transitModel(); - transitService = new DefaultTransitService(transitModel); + timetableRepository = model.timetableRepository(); + transitService = new DefaultTransitService(timetableRepository); feedId = transitService.getFeedIds().stream().findFirst().get(); } @@ -284,7 +284,7 @@ public void testHandleModifiedTrip() { private TimetableSnapshotSource defaultUpdater() { return new TimetableSnapshotSource( new TimetableSnapshotSourceParameters(Duration.ZERO, true), - transitModel, + timetableRepository, () -> SERVICE_DATE ); } 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 6b662e8c8f3..77b54c0e962 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 @@ -12,7 +12,7 @@ import java.util.List; import org.junit.jupiter.api.Test; import org.opentripplanner.model.PickDrop; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.timetable.RealTimeState; @@ -63,8 +63,8 @@ void addedTripWithNewRoute() { assertEquals(TransitMode.RAIL, route.getMode()); TransitService transitService = env.getTransitService(); - var fromTransitModel = transitService.getRouteForId(route.getId()); - assertEquals(fromTransitModel, route); + var fromTimetableRepository = transitService.getRouteForId(route.getId()); + assertEquals(fromTimetableRepository, route); var patternsForRoute = transitService.getPatternsForRoute(route); assertEquals(1, patternsForRoute.size()); assertEquals(pattern, patternsForRoute.stream().findFirst().orElseThrow()); @@ -128,11 +128,11 @@ private TripPattern assertAddedTrip(String tripId, RealtimeTestEnvironment env) var snapshot = env.getTimetableSnapshot(); TransitService transitService = env.getTransitService(); - Trip trip = transitService.getTripForId(TransitModelForTest.id(ADDED_TRIP_ID)); + Trip trip = transitService.getTripForId(TimetableRepositoryForTest.id(ADDED_TRIP_ID)); assertNotNull(trip); assertNotNull(transitService.getPatternForTrip(trip)); - var stopA = env.transitModel.getStopModel().getRegularStop(STOP_A1.getId()); + var stopA = env.timetableRepository.getStopModel().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/trip/moduletests/cancellation/CancellationDeletionTest.java b/application/src/test/java/org/opentripplanner/updater/trip/moduletests/cancellation/CancellationDeletionTest.java index b8bd5c4574b..e79ca7f6ce5 100644 --- a/application/src/test/java/org/opentripplanner/updater/trip/moduletests/cancellation/CancellationDeletionTest.java +++ b/application/src/test/java/org/opentripplanner/updater/trip/moduletests/cancellation/CancellationDeletionTest.java @@ -4,7 +4,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNotSame; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import static org.opentripplanner.updater.spi.UpdateResultAssertions.assertSuccess; import static org.opentripplanner.updater.trip.UpdateIncrementality.DIFFERENTIAL; diff --git a/application/src/test/java/org/opentripplanner/updater/trip/moduletests/delay/DelayedTest.java b/application/src/test/java/org/opentripplanner/updater/trip/moduletests/delay/DelayedTest.java index f45a82b9ba0..8231e21bce7 100644 --- a/application/src/test/java/org/opentripplanner/updater/trip/moduletests/delay/DelayedTest.java +++ b/application/src/test/java/org/opentripplanner/updater/trip/moduletests/delay/DelayedTest.java @@ -5,7 +5,7 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotSame; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import static org.opentripplanner.updater.spi.UpdateResultAssertions.assertSuccess; import org.junit.jupiter.api.Test; diff --git a/application/src/test/java/org/opentripplanner/updater/trip/moduletests/delay/SkippedTest.java b/application/src/test/java/org/opentripplanner/updater/trip/moduletests/delay/SkippedTest.java index 45304af5130..c4b4c9e9bbd 100644 --- a/application/src/test/java/org/opentripplanner/updater/trip/moduletests/delay/SkippedTest.java +++ b/application/src/test/java/org/opentripplanner/updater/trip/moduletests/delay/SkippedTest.java @@ -6,7 +6,7 @@ import static org.junit.jupiter.api.Assertions.assertNotSame; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import static org.opentripplanner.updater.spi.UpdateResultAssertions.assertSuccess; import static org.opentripplanner.updater.trip.UpdateIncrementality.DIFFERENTIAL; diff --git a/application/src/test/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingAvailabilityUpdaterTest.java b/application/src/test/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingAvailabilityUpdaterTest.java index 33455cf9b9a..27b6a038418 100644 --- a/application/src/test/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingAvailabilityUpdaterTest.java +++ b/application/src/test/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingAvailabilityUpdaterTest.java @@ -3,7 +3,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; import static org.opentripplanner.standalone.config.framework.json.JsonSupport.newNodeAdapterForTest; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import com.google.common.util.concurrent.Futures; import java.util.List; @@ -17,7 +17,7 @@ import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; import org.opentripplanner.standalone.config.routerconfig.updaters.VehicleParkingUpdaterConfig; import org.opentripplanner.transit.model.framework.FeedScopedId; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.updater.DefaultRealTimeUpdateContext; import org.opentripplanner.updater.GraphUpdaterManager; import org.opentripplanner.updater.GraphWriterRunnable; @@ -118,7 +118,7 @@ private void runUpdaterOnce(VehicleParkingAvailabilityUpdater updater) { class GraphUpdaterMock extends GraphUpdaterManager { private static final Graph GRAPH = new Graph(); - private static final TransitModel TRANSIT_MODEL = new TransitModel(); + private static final TimetableRepository TRANSIT_MODEL = new TimetableRepository(); public static final DefaultRealTimeUpdateContext REAL_TIME_UPDATE_CONTEXT = new DefaultRealTimeUpdateContext( GRAPH, TRANSIT_MODEL 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 e504e42eb6c..f83680f8aff 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 @@ -20,7 +20,7 @@ import org.opentripplanner.street.model.edge.StreetVehicleParkingLink; import org.opentripplanner.street.model.edge.VehicleParkingEdge; import org.opentripplanner.street.model.vertex.VehicleParkingEntranceVertex; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.updater.DefaultRealTimeUpdateContext; import org.opentripplanner.updater.GraphUpdaterManager; import org.opentripplanner.updater.GraphWriterRunnable; @@ -31,7 +31,7 @@ class VehicleParkingUpdaterTest { private DataSource dataSource; private Graph graph; - private TransitModel transitModel; + private TimetableRepository timetableRepository; private DefaultRealTimeUpdateContext realTimeUpdateContext; private VehicleParkingUpdater vehicleParkingUpdater; @@ -42,14 +42,14 @@ public void setup() { VehicleParkingTestGraphData graphData = new VehicleParkingTestGraphData(); graphData.initGraph(); graph = graphData.getGraph(); - transitModel = graphData.getTransitModel(); - realTimeUpdateContext = new DefaultRealTimeUpdateContext(graph, transitModel); + timetableRepository = graphData.getTimetableRepository(); + realTimeUpdateContext = new DefaultRealTimeUpdateContext(graph, timetableRepository); dataSource = (DataSource) Mockito.mock(DataSource.class); when(dataSource.update()).thenReturn(true); - transitModel.index(); - graph.index(transitModel.getStopModel()); + timetableRepository.index(); + graph.index(timetableRepository.getStopModel()); var parameters = new VehicleParkingUpdaterParameters() { @Override @@ -270,7 +270,11 @@ private void assertVehicleParkingsInGraph(int vehicleParkingNumber) { private void runUpdaterOnce() { class GraphUpdaterMock extends GraphUpdaterManager { - public GraphUpdaterMock(Graph graph, TransitModel transitModel, List updaters) { + public GraphUpdaterMock( + Graph graph, + TimetableRepository timetableRepository, + List updaters + ) { super(realTimeUpdateContext, updaters); } @@ -283,7 +287,7 @@ public Future execute(GraphWriterRunnable runnable) { var graphUpdaterManager = new GraphUpdaterMock( graph, - transitModel, + timetableRepository, List.of(vehicleParkingUpdater) ); graphUpdaterManager.startUpdaters(); diff --git a/application/src/test/java/org/opentripplanner/updater/vehicle_position/RealtimeVehicleMatcherTest.java b/application/src/test/java/org/opentripplanner/updater/vehicle_position/RealtimeVehicleMatcherTest.java index 4f10fb2d64b..5fa7c5e8df0 100644 --- a/application/src/test/java/org/opentripplanner/updater/vehicle_position/RealtimeVehicleMatcherTest.java +++ b/application/src/test/java/org/opentripplanner/updater/vehicle_position/RealtimeVehicleMatcherTest.java @@ -29,7 +29,7 @@ import org.opentripplanner.model.StopTime; import org.opentripplanner.service.realtimevehicles.internal.DefaultRealtimeVehicleService; import org.opentripplanner.standalone.config.routerconfig.updaters.VehiclePositionsUpdaterConfig; -import org.opentripplanner.transit.model._data.TransitModelForTest; +import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.Route; @@ -41,9 +41,9 @@ public class RealtimeVehicleMatcherTest { - private final TransitModelForTest testModel = TransitModelForTest.of(); + private final TimetableRepositoryForTest testModel = TimetableRepositoryForTest.of(); - private static final Route ROUTE = TransitModelForTest.route("1").build(); + private static final Route ROUTE = TimetableRepositoryForTest.route("1").build(); private static final Set FEATURES = Set.of( POSITION, STOP_POSITION, @@ -51,7 +51,7 @@ public class RealtimeVehicleMatcherTest { ); ZoneId zoneId = ZoneIds.BERLIN; String tripId = "trip1"; - FeedScopedId scopedTripId = TransitModelForTest.id(tripId); + FeedScopedId scopedTripId = TimetableRepositoryForTest.id(tripId); @Test public void matchRealtimeVehiclesToTrip() { @@ -89,15 +89,15 @@ public void tripNotFoundInPattern() { final String secondTripId = "trip2"; - var trip1 = TransitModelForTest.trip(tripId).build(); - var trip2 = TransitModelForTest.trip(secondTripId).build(); + var trip1 = TimetableRepositoryForTest.trip(tripId).build(); + var trip2 = TimetableRepositoryForTest.trip(secondTripId).build(); var stopTimes = testModel.stopTimesEvery5Minutes(3, trip1, T11_00); var pattern = tripPattern(trip1, stopTimes); // Map positions to trips in feed RealtimeVehiclePatternMatcher matcher = new RealtimeVehiclePatternMatcher( - TransitModelForTest.FEED_ID, + TimetableRepositoryForTest.FEED_ID, ignored -> trip2, ignored -> pattern, (id, time) -> pattern, @@ -119,8 +119,8 @@ public void sequenceId() { var service = new DefaultRealtimeVehicleService(null); var tripId = "trip1"; - var scopedTripId = TransitModelForTest.id(tripId); - var trip1 = TransitModelForTest.trip(tripId).build(); + var scopedTripId = TimetableRepositoryForTest.id(tripId); + var trip1 = TimetableRepositoryForTest.trip(tripId).build(); var stopTimes = List.of( testModel.stopTime(trip1, 10), @@ -134,7 +134,7 @@ public void sequenceId() { // Map positions to trips in feed RealtimeVehiclePatternMatcher matcher = new RealtimeVehiclePatternMatcher( - TransitModelForTest.FEED_ID, + TimetableRepositoryForTest.FEED_ID, tripForId::get, patternForTrip::get, (id, time) -> patternForTrip.get(id), @@ -176,7 +176,7 @@ void invalidStopSequence() { private void testVehiclePositions(VehiclePosition pos) { var service = new DefaultRealtimeVehicleService(null); - var trip = TransitModelForTest.trip(tripId).build(); + var trip = TimetableRepositoryForTest.trip(tripId).build(); var stopTimes = List.of( testModel.stopTime(trip, 0), testModel.stopTime(trip, 1), @@ -193,7 +193,7 @@ private void testVehiclePositions(VehiclePosition pos) { // Map positions to trips in feed var matcher = new RealtimeVehiclePatternMatcher( - TransitModelForTest.FEED_ID, + TimetableRepositoryForTest.FEED_ID, tripForId::get, patternForTrip::get, (id, time) -> patternForTrip.get(id), @@ -224,7 +224,7 @@ private void testVehiclePositions(VehiclePosition pos) { private void testVehiclePositionOccupancy(VehiclePosition pos) { var service = new DefaultRealtimeVehicleService(null); - var trip = TransitModelForTest.trip(tripId).build(); + var trip = TimetableRepositoryForTest.trip(tripId).build(); var stopTimes = List.of( testModel.stopTime(trip, 0), testModel.stopTime(trip, 1), @@ -241,7 +241,7 @@ private void testVehiclePositionOccupancy(VehiclePosition pos) { // Map positions to trips in feed RealtimeVehiclePatternMatcher matcher = new RealtimeVehiclePatternMatcher( - TransitModelForTest.FEED_ID, + TimetableRepositoryForTest.FEED_ID, tripForId::get, patternForTrip::get, (id, time) -> patternForTrip.get(id), @@ -267,11 +267,11 @@ public void clearOldTrips() { var tripId1 = "trip1"; var tripId2 = "trip2"; - var scopedTripId1 = TransitModelForTest.id(tripId1); - var scopedTripId2 = TransitModelForTest.id(tripId2); + var scopedTripId1 = TimetableRepositoryForTest.id(tripId1); + var scopedTripId2 = TimetableRepositoryForTest.id(tripId2); - var trip1 = TransitModelForTest.trip(tripId1).build(); - var trip2 = TransitModelForTest.trip(tripId2).build(); + var trip1 = TimetableRepositoryForTest.trip(tripId1).build(); + var trip2 = TimetableRepositoryForTest.trip(tripId2).build(); var stopTimes1 = List.of( testModel.stopTime(trip1, 0), @@ -297,7 +297,7 @@ public void clearOldTrips() { // Map positions to trips in feed RealtimeVehiclePatternMatcher matcher = new RealtimeVehiclePatternMatcher( - TransitModelForTest.FEED_ID, + TimetableRepositoryForTest.FEED_ID, tripForId::get, patternForTrip::get, (id, time) -> patternForTrip.get(id), @@ -337,7 +337,7 @@ static Stream inferenceTestCases() { @ParameterizedTest(name = "{0} should resolve to {1}") @MethodSource("inferenceTestCases") void inferServiceDayOfTripAt6(String time, String expectedDate) { - var trip = TransitModelForTest.trip(tripId).build(); + var trip = TimetableRepositoryForTest.trip(tripId).build(); var sixOclock = (int) Duration.ofHours(18).toSeconds(); var fivePast6 = sixOclock + 300; @@ -357,7 +357,7 @@ void inferServiceDayOfTripAt6(String time, String expectedDate) { @Test void inferServiceDateCloseToMidnight() { - var trip = TransitModelForTest.trip(tripId).build(); + var trip = TimetableRepositoryForTest.trip(tripId).build(); var fiveToMidnight = LocalTime.parse("23:55").toSecondOfDay(); var fivePastMidnight = fiveToMidnight + (10 * 60); diff --git a/application/src/test/java/org/opentripplanner/updater/vehicle_rental/GeofencingVertexUpdaterTest.java b/application/src/test/java/org/opentripplanner/updater/vehicle_rental/GeofencingVertexUpdaterTest.java index 99910e04f7c..4eea85b4dc9 100644 --- a/application/src/test/java/org/opentripplanner/updater/vehicle_rental/GeofencingVertexUpdaterTest.java +++ b/application/src/test/java/org/opentripplanner/updater/vehicle_rental/GeofencingVertexUpdaterTest.java @@ -4,7 +4,7 @@ import static org.junit.jupiter.api.Assertions.assertInstanceOf; import static org.opentripplanner.street.model._data.StreetModelForTest.intersectionVertex; import static org.opentripplanner.street.model._data.StreetModelForTest.streetEdge; -import static org.opentripplanner.transit.model._data.TransitModelForTest.id; +import static org.opentripplanner.transit.model._data.TimetableRepositoryForTest.id; import java.util.List; import org.junit.jupiter.api.Test; diff --git a/application/src/test/java/org/opentripplanner/updater/vehicle_rental/VehicleRentalUpdaterTest.java b/application/src/test/java/org/opentripplanner/updater/vehicle_rental/VehicleRentalUpdaterTest.java index 17eb3fb3c63..2ca93a10f28 100644 --- a/application/src/test/java/org/opentripplanner/updater/vehicle_rental/VehicleRentalUpdaterTest.java +++ b/application/src/test/java/org/opentripplanner/updater/vehicle_rental/VehicleRentalUpdaterTest.java @@ -14,7 +14,7 @@ import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.service.vehiclerental.internal.DefaultVehicleRentalService; import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; -import org.opentripplanner.transit.service.TransitModel; +import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.updater.DefaultRealTimeUpdateContext; import org.opentripplanner.updater.GraphUpdaterManager; import org.opentripplanner.updater.GraphWriterRunnable; @@ -45,7 +45,10 @@ void failingDatasourceCountsAsPrimed() { static class MockManager extends GraphUpdaterManager { public MockManager(VehicleRentalUpdater updater) { - super(new DefaultRealTimeUpdateContext(new Graph(), new TransitModel()), List.of(updater)); + super( + new DefaultRealTimeUpdateContext(new Graph(), new TimetableRepository()), + List.of(updater) + ); } @Override From c9ed8ee724beaf787bf36c519d27ebf730ea4d81 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sat, 12 Oct 2024 08:48:52 +0200 Subject: [PATCH 040/158] Fix spelling --- client/src/components/MapView/LayerControl.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/components/MapView/LayerControl.tsx b/client/src/components/MapView/LayerControl.tsx index e85ecf64135..26e81834cf7 100644 --- a/client/src/components/MapView/LayerControl.tsx +++ b/client/src/components/MapView/LayerControl.tsx @@ -73,7 +73,7 @@ class LayerControl implements IControl { const g = groups.get(groupName); g?.appendChild(layerDiv); } else { - const groupDiv = this.buildgGroupDiv(groupName, layerDiv); + const groupDiv = this.buildGroupDiv(groupName, layerDiv); groups.set(groupName, groupDiv); this.container.appendChild(groupDiv); } @@ -84,7 +84,7 @@ class LayerControl implements IControl { return this.container; } - private buildgGroupDiv(groupName: string, layerDiv: HTMLDivElement) { + private buildGroupDiv(groupName: string, layerDiv: HTMLDivElement) { const groupDiv = document.createElement('div'); groupDiv.className = 'group'; From a27bbfd1cbdd2312fde650cf15ad7d4ffd3ea058 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sat, 12 Oct 2024 08:54:14 +0200 Subject: [PATCH 041/158] Fix schema path --- 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 a41fad277cff456704e1d3eed51b1a7921bca797 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Sun, 13 Oct 2024 19:35:30 +0200 Subject: [PATCH 042/158] 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 522fdf8f5e05597d901aab5099effdc2b8c59fbe Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 14 Oct 2024 10:42:38 +0200 Subject: [PATCH 043/158] Apply review suggestions --- .../src/components/MapView/LayerControl.tsx | 54 ++++++++++--------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/client/src/components/MapView/LayerControl.tsx b/client/src/components/MapView/LayerControl.tsx index 26e81834cf7..536723fcd8f 100644 --- a/client/src/components/MapView/LayerControl.tsx +++ b/client/src/components/MapView/LayerControl.tsx @@ -1,6 +1,6 @@ import type { ControlPosition } from 'react-map-gl'; import { useControl } from 'react-map-gl'; -import { IControl, Map as WebMap } from 'maplibre-gl'; +import { IControl, Map as WebMap, TypedStyleLayer } from 'maplibre-gl'; type LayerControlProps = { position: ControlPosition; @@ -46,32 +46,10 @@ class LayerControl implements IControl { groupName = meta.group; } - const layerDiv = document.createElement('div'); - layerDiv.className = 'layer'; - const input = document.createElement('input'); - input.type = 'checkbox'; - input.value = layer.id; - input.id = layer.id; - input.onchange = (e) => { - e.preventDefault(); - e.stopPropagation(); - if (input.checked) { - map.setLayoutProperty(layer.id, 'visibility', 'visible'); - } else { - map.setLayoutProperty(layer.id, 'visibility', 'none'); - } - }; - input.checked = this.layerVisible(map, layer); - input.className = 'layer'; - const label = document.createElement('label'); - label.textContent = layer.id; - label.htmlFor = layer.id; - layerDiv.appendChild(input); - layerDiv.appendChild(label); + const layerDiv = this.buildLayerDiv(layer as TypedStyleLayer, map); if (groups.has(groupName)) { - const g = groups.get(groupName); - g?.appendChild(layerDiv); + groups.get(groupName)?.appendChild(layerDiv); } else { const groupDiv = this.buildGroupDiv(groupName, layerDiv); groups.set(groupName, groupDiv); @@ -84,6 +62,32 @@ class LayerControl implements IControl { return this.container; } + private buildLayerDiv(layer: TypedStyleLayer, map: WebMap) { + const layerDiv = document.createElement('div'); + layerDiv.className = 'layer'; + const input = document.createElement('input'); + input.type = 'checkbox'; + input.value = layer.id; + input.id = layer.id; + input.onchange = (e) => { + e.preventDefault(); + e.stopPropagation(); + if (input.checked) { + map.setLayoutProperty(layer.id, 'visibility', 'visible'); + } else { + map.setLayoutProperty(layer.id, 'visibility', 'none'); + } + }; + input.checked = this.layerVisible(map, layer); + input.className = 'layer'; + const label = document.createElement('label'); + label.textContent = layer.id; + label.htmlFor = layer.id; + layerDiv.appendChild(input); + layerDiv.appendChild(label); + return layerDiv; + } + private buildGroupDiv(groupName: string, layerDiv: HTMLDivElement) { const groupDiv = document.createElement('div'); groupDiv.className = 'group'; From 65272ba55b47cc26d807ae992176ff6cffc13736 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 14 Oct 2024 10:59:54 +0200 Subject: [PATCH 044/158] Convert Map to Record --- client/src/components/MapView/LayerControl.tsx | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/client/src/components/MapView/LayerControl.tsx b/client/src/components/MapView/LayerControl.tsx index 536723fcd8f..4c3f81dfe36 100644 --- a/client/src/components/MapView/LayerControl.tsx +++ b/client/src/components/MapView/LayerControl.tsx @@ -1,6 +1,6 @@ import type { ControlPosition } from 'react-map-gl'; import { useControl } from 'react-map-gl'; -import { IControl, Map as WebMap, TypedStyleLayer } from 'maplibre-gl'; +import { IControl, Map, TypedStyleLayer } from 'maplibre-gl'; type LayerControlProps = { position: ControlPosition; @@ -15,7 +15,7 @@ type LayerControlProps = { class LayerControl implements IControl { private readonly container: HTMLDivElement = document.createElement('div'); - onAdd(map: WebMap) { + onAdd(map: Map) { this.container.className = 'maplibregl-ctrl maplibregl-ctrl-group layer-select'; map.on('load', () => { @@ -28,7 +28,7 @@ class LayerControl implements IControl { title.textContent = 'Debug layers'; this.container.appendChild(title); - const groups: Map = new Map(); + const groups: Record = {}; map .getLayersOrder() .map((l) => map.getLayer(l)) @@ -48,11 +48,11 @@ class LayerControl implements IControl { const layerDiv = this.buildLayerDiv(layer as TypedStyleLayer, map); - if (groups.has(groupName)) { - groups.get(groupName)?.appendChild(layerDiv); + if (groups.hasOwnProperty(groupName)) { + groups[groupName]?.appendChild(layerDiv); } else { const groupDiv = this.buildGroupDiv(groupName, layerDiv); - groups.set(groupName, groupDiv); + groups[groupName] = groupDiv; this.container.appendChild(groupDiv); } } @@ -62,7 +62,7 @@ class LayerControl implements IControl { return this.container; } - private buildLayerDiv(layer: TypedStyleLayer, map: WebMap) { + private buildLayerDiv(layer: TypedStyleLayer, map: Map) { const layerDiv = document.createElement('div'); layerDiv.className = 'layer'; const input = document.createElement('input'); @@ -115,7 +115,7 @@ class LayerControl implements IControl { return groupDiv; } - private layerVisible(map: WebMap, layer: { id: string }) { + private layerVisible(map: Map, layer: { id: string }) { return map.getLayoutProperty(layer.id, 'visibility') !== 'none'; } From b05658db28be226bab99b17402733bc3a344961b Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 14 Oct 2024 11:03:48 +0200 Subject: [PATCH 045/158] Fix lint issues --- client/src/components/MapView/LayerControl.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/components/MapView/LayerControl.tsx b/client/src/components/MapView/LayerControl.tsx index 4c3f81dfe36..b5c53ddd6c5 100644 --- a/client/src/components/MapView/LayerControl.tsx +++ b/client/src/components/MapView/LayerControl.tsx @@ -48,7 +48,7 @@ class LayerControl implements IControl { const layerDiv = this.buildLayerDiv(layer as TypedStyleLayer, map); - if (groups.hasOwnProperty(groupName)) { + if (groups[groupName]) { groups[groupName]?.appendChild(layerDiv); } else { const groupDiv = this.buildGroupDiv(groupName, layerDiv); From 79bb50742370af8aedf2c1bdb3e66992f49f8030 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 14 Oct 2024 12:11:50 +0200 Subject: [PATCH 046/158] Call method on correct variable --- client/src/components/MapView/LayerControl.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/components/MapView/LayerControl.tsx b/client/src/components/MapView/LayerControl.tsx index b5c53ddd6c5..3b7c239747a 100644 --- a/client/src/components/MapView/LayerControl.tsx +++ b/client/src/components/MapView/LayerControl.tsx @@ -98,7 +98,7 @@ class LayerControl implements IControl { const input = i as HTMLInputElement; input.checked = groupInput.checked; const event = new Event('change'); - i.dispatchEvent(event); + input.dispatchEvent(event); }); }; groupInput.type = 'checkbox'; From ead941e8d1bbd8144c9fc37bb5c8e92bde20520d Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 14 Oct 2024 12:20:09 +0200 Subject: [PATCH 047/158] Properly apply type cast --- client/src/components/MapView/LayerControl.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/src/components/MapView/LayerControl.tsx b/client/src/components/MapView/LayerControl.tsx index 3b7c239747a..d6be2d641d7 100644 --- a/client/src/components/MapView/LayerControl.tsx +++ b/client/src/components/MapView/LayerControl.tsx @@ -94,8 +94,7 @@ class LayerControl implements IControl { const groupInput = document.createElement('input'); groupInput.onchange = () => { - groupDiv.querySelectorAll('input.layer').forEach((i) => { - const input = i as HTMLInputElement; + groupDiv.querySelectorAll('input.layer').forEach((input) => { input.checked = groupInput.checked; const event = new Event('change'); input.dispatchEvent(event); From d3f7d709f8d068f76b6cd900df1d19288f9d2b65 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Tue, 15 Oct 2024 10:41:09 +0100 Subject: [PATCH 048/158] 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 049/158] 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 050/158] 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 051/158] 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 052/158] 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 866c1f6c3d3f874f714d570b5aeb90efe8f270a8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:05:55 +0000 Subject: [PATCH 053/158] Update dependency eslint-plugin-react-hooks to v5 --- client/package-lock.json | 11 ++++++----- client/package.json | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index 00490ce16d6..4245121a10e 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -36,7 +36,7 @@ "eslint-plugin-import": "2.30.0", "eslint-plugin-jsx-a11y": "6.10.0", "eslint-plugin-react": "7.36.1", - "eslint-plugin-react-hooks": "4.6.2", + "eslint-plugin-react-hooks": "5.0.0", "eslint-plugin-react-refresh": "0.4.12", "jsdom": "25.0.0", "prettier": "3.3.3", @@ -6400,15 +6400,16 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0.tgz", + "integrity": "sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "node_modules/eslint-plugin-react-refresh": { diff --git a/client/package.json b/client/package.json index 0e822b4a641..ff555a85f9b 100644 --- a/client/package.json +++ b/client/package.json @@ -45,7 +45,7 @@ "eslint-plugin-import": "2.30.0", "eslint-plugin-jsx-a11y": "6.10.0", "eslint-plugin-react": "7.36.1", - "eslint-plugin-react-hooks": "4.6.2", + "eslint-plugin-react-hooks": "5.0.0", "eslint-plugin-react-refresh": "0.4.12", "jsdom": "25.0.0", "prettier": "3.3.3", From acc1f07da9fdafda5167cac66c19d3b85086becc Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 15 Oct 2024 15:08:55 +0200 Subject: [PATCH 054/158] Update schema path --- 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 5cc750a9e67580435866d9b70eb6cae9a46f0231 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Tue, 15 Oct 2024 15:14:19 +0100 Subject: [PATCH 055/158] 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 056/158] 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 057/158] 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 058/158] 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 059/158] 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 060/158] 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 75718169870e25dea17ff73284f8afcd614d3cd7 Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Wed, 16 Oct 2024 11:22:06 +0200 Subject: [PATCH 061/158] Fix merge conflict --- .../stopconsolidation/DecorateConsolidatedStopNamesTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNamesTest.java b/application/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNamesTest.java index 4929c3872b3..bcbc84fc4b8 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNamesTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNamesTest.java @@ -102,12 +102,12 @@ void keepRegularTransfer() { } private static DecorateConsolidatedStopNames defaultFilter() { - var transitModel = TestStopConsolidationModel.buildTransitModel(); + var timetableRepository = TestStopConsolidationModel.buildTimetableRepository(); var repo = new DefaultStopConsolidationRepository(); repo.addGroups(GROUPS); - var service = new DefaultStopConsolidationService(repo, transitModel); + var service = new DefaultStopConsolidationService(repo, timetableRepository); return new DecorateConsolidatedStopNames(service); } } From 7b4be494b652975bb7490645c4f5bc5af67ac356 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Mon, 14 Oct 2024 12:10:39 +0200 Subject: [PATCH 062/158] 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 063/158] 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 ffe45b3120a9507dae2bb16953bc4d53804c9ca3 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Wed, 16 Oct 2024 13:02:57 +0000 Subject: [PATCH 064/158] Add changelog entry for #6148 [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 b654916e8fd..aa5a970afe4 100644 --- a/doc/user/Changelog.md +++ b/doc/user/Changelog.md @@ -16,6 +16,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Add via to the Transmodel trip query and make a proper Raptor implementation for it [#6084](https://github.com/opentripplanner/OpenTripPlanner/pull/6084) - 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) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.6.0 (2024-09-18) From fd2124e4bfd3e3ae1b7a9bf2a281ef55928f7491 Mon Sep 17 00:00:00 2001 From: OTP Serialization Version Bot Date: Wed, 16 Oct 2024 13:03:19 +0000 Subject: [PATCH 065/158] Bump serialization version id for #6148 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6737acd89cf..69b811b4a20 100644 --- a/pom.xml +++ b/pom.xml @@ -58,7 +58,7 @@ - 164 + 165 32.0 2.52 From bee2a9787a0ba59de99e80ab1fea34dd386900ff Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Wed, 16 Oct 2024 15:17:03 +0200 Subject: [PATCH 066/158] 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 067/158] 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 068/158] 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 069/158] 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 070/158] 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 071/158] 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 d7551bc2c9e7e0349d3db0ddb040678725fe5608 Mon Sep 17 00:00:00 2001 From: OTP Bot Date: Wed, 16 Oct 2024 19:58:55 +0000 Subject: [PATCH 072/158] Upgrade debug client to version 2024/10/2024-10-16T19:58 --- 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 d662eb5cb42..4d0e989196c 100644 --- a/application/src/client/index.html +++ b/application/src/client/index.html @@ -5,8 +5,8 @@ OTP Debug Client - - + +

    From 9ffb328ec365b00f672b1c4d03748c97ec0c1320 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 16 Oct 2024 22:01:45 +0200 Subject: [PATCH 073/158] Revert --break-system-packages [ci skip] --- .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 79e898522df..e778fe25679 100644 --- a/.github/workflows/cibuild.yml +++ b/.github/workflows/cibuild.yml @@ -108,7 +108,7 @@ jobs: if: github.event_name == 'pull_request' - name: Install Python dependencies - run: pip install --break-system-packages -r doc/user/requirements.txt + run: pip install -r doc/user/requirements.txt - name: Build main documentation From 70b97da678456b2b83a868a00449ad1eaaa76a84 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 17 Oct 2024 07:05:08 +0200 Subject: [PATCH 074/158] 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 1913ef68ca84f60f1101def3074d44fdbb61421d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 17 Oct 2024 00:44:06 +0000 Subject: [PATCH 075/158] Update Test dependencies --- application/pom.xml | 2 +- pom.xml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/application/pom.xml b/application/pom.xml index 4a228829c70..49c738a251e 100644 --- a/application/pom.xml +++ b/application/pom.xml @@ -161,7 +161,7 @@ org.mockito mockito-core - 5.13.0 + 5.14.2 test diff --git a/pom.xml b/pom.xml index 69b811b4a20..0b4dd2ea10c 100644 --- a/pom.xml +++ b/pom.xml @@ -64,7 +64,7 @@ 2.52 2.18.0 3.1.9 - 5.11.0 + 5.11.2 1.13.5 5.6.0 1.5.8 @@ -181,7 +181,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.0 + 3.5.1 me.fabriciorby @@ -490,7 +490,7 @@ org.mockito mockito-core - 5.13.0 + 5.14.2 io.github.origin-energy From b8a317968af675e328901749b12537de2f1f5954 Mon Sep 17 00:00:00 2001 From: OTP Bot Date: Thu, 17 Oct 2024 07:38:05 +0000 Subject: [PATCH 076/158] Upgrade debug client to version 2024/10/2024-10-17T07:37 --- 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 4d0e989196c..eb1eb394683 100644 --- a/application/src/client/index.html +++ b/application/src/client/index.html @@ -5,8 +5,8 @@ OTP Debug Client - - + +
    From b7f99c45a22fb869053b3b827ebef1368c9ef4ff Mon Sep 17 00:00:00 2001 From: OTP Bot Date: Thu, 17 Oct 2024 07:46:30 +0000 Subject: [PATCH 077/158] 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 078/158] 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 079/158] 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 080/158] 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 081/158] 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 082/158] 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 083/158] 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 084/158] 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 085/158] 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 086/158] 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 087/158] 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 d1b26d080e165042c763024700c07fc247dccf89 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 17 Oct 2024 12:29:37 +0200 Subject: [PATCH 088/158] 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 089/158] 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 090/158] 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 091/158] 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 417419b9c1f110d58762fcd0041e81da397f0f97 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 17 Oct 2024 14:11:56 +0200 Subject: [PATCH 092/158] 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 093/158] 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 094/158] 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 095/158] 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 096/158] 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 097/158] 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 098/158] 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 099/158] 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 100/158] 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 101/158] 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 102/158] 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 103/158] 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 104/158] 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 105/158] 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 106/158] 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 107/158] 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 191aec2a91d703a16999875913d1dfc9208ae600 Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Mon, 21 Oct 2024 09:46:23 +0100 Subject: [PATCH 108/158] 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 109/158] 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 1460c114fa19b4b1625b086a9158ce558d3791f1 Mon Sep 17 00:00:00 2001 From: Teemu Kalvas Date: Mon, 21 Oct 2024 14:41:47 +0300 Subject: [PATCH 110/158] 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 111/158] 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 112/158] 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 113/158] 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 114/158] 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 115/158] 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 116/158] 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 117/158] 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 118/158] 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 119/158] 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 120/158] 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 121/158] 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 5a685861c58d880b76e29072e276d9604cc81417 Mon Sep 17 00:00:00 2001 From: Teemu Kalvas Date: Thu, 24 Oct 2024 15:54:59 +0300 Subject: [PATCH 122/158] 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 123/158] 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 124/158] 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 125/158] 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 126/158] 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 c6801aeba2bedad8873b052685d3f29d5d556da5 Mon Sep 17 00:00:00 2001 From: Teemu Kalvas Date: Fri, 25 Oct 2024 16:03:17 +0300 Subject: [PATCH 127/158] 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 128/158] 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 129/158] 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 130/158] 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 131/158] 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 132/158] 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 133/158] 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 134/158] 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 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 135/158] 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 136/158] 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 137/158] 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 138/158] 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 139/158] 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 d49c4a6850b48147ee827a5b46bef5212d575200 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Tue, 29 Oct 2024 21:37:14 +0000 Subject: [PATCH 140/158] 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 141/158] 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 b5ceab872d29f5d90de030dc83f355fcfaf0994d Mon Sep 17 00:00:00 2001 From: Michael Tsang Date: Wed, 30 Oct 2024 17:16:48 +0000 Subject: [PATCH 142/158] 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 143/158] 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 144/158] 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 145/158] 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 c97579db3363841506a62e60adfb27891fd3b818 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Fri, 1 Nov 2024 08:40:24 +0000 Subject: [PATCH 146/158] 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 147/158] 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 148/158] 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 149/158] 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 150/158] 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 151/158] 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 152/158] 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 153/158] 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 154/158] 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 155/158] 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 156/158] 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 157/158] 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 158/158] 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 - - + +