diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index bed6a5ba84b..c232ca6e3d3 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -12,3 +12,6 @@ # Make OTP a multi-module project ead33ffe280dd7caf72cae5ff7a41542e8427636 + +# json file reformatting with prettier +c287575df6798810a69fafc54c8c4e1867b71367 diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index cf3efcd84a3..36ab454789a 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -55,7 +55,7 @@ Used to import NeTEx transit data files. ### Transit Routing -#### [Raptor transit routing](application/src/main/java/org/opentripplanner/raptor/package.md) +#### [Raptor transit routing](raptor/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 @@ -71,9 +71,9 @@ implementation is highly critical code, hence we set the bar higher with respect 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](application/src/main/java/org/opentripplanner/raptor/api/request/RaptorRequest.java) +[RaptorRequest](raptor/src/main/java/org/opentripplanner/raptor/api/request/RaptorRequest.java) and then map the -result, [Raptor Path](application/src/main/java/org/opentripplanner/raptor/api/path/RaptorPath.java), back to +result, [Raptor Path](raptor/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. diff --git a/DEVELOPMENT_DECISION_RECORDS.md b/DEVELOPMENT_DECISION_RECORDS.md index 44aa031954f..2625be325e8 100644 --- a/DEVELOPMENT_DECISION_RECORDS.md +++ b/DEVELOPMENT_DECISION_RECORDS.md @@ -19,6 +19,12 @@ Use established terminology from GTFS, NeTEx or the existing OTP code. Make sure to read and understand. [Follow naming conventions](doc/dev/decisionrecords/NamingConventions.md#naming-conventions) . +## Do Analysis-and-design if needed + +Be prepared to provide [analyses and/or design documentation](doc/dev/decisionrecords/AnalysesAndDesign.md) +if a task is complex, changes the core model and/or the main APIs. + + ## Write-Code-Documentation - Use JavaDoc Document the business intention and decisions in the relevant code. Do not repeat the logic diff --git a/application/pom.xml b/application/pom.xml index 3fc0193d0af..4b11f1f6527 100644 --- a/application/pom.xml +++ b/application/pom.xml @@ -8,7 +8,7 @@ otp-root 2.7.0-SNAPSHOT - otp + application OpenTripPlanner - Application @@ -20,12 +20,12 @@ ${project.groupId} - otp-utils + utils ${project.version} ${project.groupId} - otp-raptor + raptor ${project.version} @@ -456,81 +456,6 @@ - - - - org.apache.maven.plugins - maven-shade-plugin - 3.6.0 - - - package - - shade - - - - - - *:* - - META-INF/*.SF - META-INF/*.DSA - META-INF/*.RSA - - - - - true - shaded - false - - - - - - - org.opentripplanner.standalone.OTPMain - - Java Advanced Imaging Image I/O - Tools - - 1.1 - Sun Microsystems, Inc. - com.sun.media.imageio - 1.1 - Sun Microsystems, Inc. - com.sun.media.imageio - - - - - - - com.github.bohnman package-info-maven-plugin 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..e730a986359 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 @@ -1,238 +1,238 @@ { - "Transit": "Transport públic", - "Bus Only": "Només bus", - "Rail Only": "Només tren", - "Airplane Only": "", - "Transit, No Airplane": "", - "Bicycle Only": "Bicicleta", - "Bicycle & Transit": "Transport públic i bicicleta", - "Walk Only": "Només a peu", - "Car Only": "", - "Taxi": "", - "Park and Ride": "", - "Ride and Kiss (Car Pickup)": "", - "Kiss and Ride (Car Dropoff)": "", - "Bike and Ride": "", - "Rented Bicycle": "", - "Transit & Rented Bicycle": "", - "Rented Scooter": "", - "Transit & Rented Scooter": "", - "Transit with flex access": "", - "Transit with flex egress": "", - "Transit with flex access and egress": "", - "Direct flex search": "", - "Recenter Map Here": "Centrar mapa aquí", - "Zoom In": "Apropar", - "Zoom Out": "Allunyar", - "Minimize all": "", - "Unminimize all": "", - "Stop Viewer": "", - "Plan Trip": "", - "From Stop": "", - "To Stop": "", - "Routes Serving Stop": "", - "Bike Share Planner": "", - "Trip Options": "", - "PICK UP BIKE": "", - "ALTERNATE PICKUP": "", - "DROP OFF BIKE": "", - "ALTERNATE DROP OFF": "", - "BIKE STATION": "", - "Station:": "", - "%d bike available": "", - "%d bike available_plural": "", - "%d dock available": "", - "%d dock available_plural": "", - "Recommended Pick Up:": "", - "Bicycle rental": "", - "Recommended Drop Off:": "", - "Multimodal Trip Planner": "", - "Itineraries": "", - "This itinerary departs on a different day from the previous one": "", - "%d Itinerary Returned": "", - "%d Itinerary Returned_plural": "", - "Link to search": "", - "Previous Page": "", - "Next Page": "", - "CONTINUES AS": "", - "%d min late": "", - "%d min late_plural": "", - "%d min early": "", - "%d min early_plural": "", - "on time": "", - "This itinerary departs on a different day than the one searched for": "", - "Arrived at destination with a rented bicycle!": "", - "End": "", - "Trip Summary": "", - "Travel": "Hora de sortida", - "Time": "Temps", - "GenCost": "", - "Total Walk": "", - "Total Bike": "", - "Total drive": "", - "Elevation Gained": "", - "Elevation Lost": "", - "Transfers": "transbords", - "Fare": "Tarifa", - "Valid": "Hora actual", - "Link to Itinerary": "", - "Print": "Imprimir", - "Your Trip": "", - "Email": "", - "every %d min": "", - "every %d min_plural": "", - "Board at ": "", - "Stop": "", - "Time in transit": "", - "Route ID": "", - "Trip ID": "", - "Service Date": "", - "Trip Viewer": "", - "late as": "", - "Stay on board": "stay on board", - "Alight": "", - "at": "a", - "%(currency)s %(price)s": "", - "Start: %(location)s at %(time_date)s": "", - "Board": "", - "(%(agency_id)s Stop ID #%(stop_id)s),": "", - "End: %(location)s at %(time_date)s": "", - "(%(agencyId)s Stop ID #%(id)s),": "", - "\nView itinerary online:\n%(itinerary_link)s\n": "", - "We're sorry. The trip planner is temporarily unavailable. Please try again later.": "", - "Trip is not possible. You might be trying to plan a trip outside the map data boundary.": "", - "No trip found. There may be no transit service within the maximum specified distance or at the specified time, or your start or end point might not be safely accessible.": "", - "No transit times available. The date may be past or too far in the future or there may not be transit service for your trip at the time you chose.": "", - "The trip planner is taking way too long to process your request. Please try again later.": "", - "The request has errors that the server is not willing or able to process.": "", - "Origin is unknown. Can you be a bit more descriptive?": "", - "Destination is unknown. Can you be a bit more descriptive?": "", - "Both origin and destination are unknown. Can you be a bit more descriptive?": "", - "Both origin and destination are not wheelchair accessible": "", - "Origin is within a trivial distance of the destination.": "", - "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.": "", - "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.": "", - "Both origin and destination are ambiguous. Please select from the following options, or be more specific.": "", - "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are": "", - "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1": "", - "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE": "", - "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set": "", - "Set as Start Location": "", - "Set as End Location": "", - "Destination": "", - "Error %(error_id)d": "", - "No Trip Found": "", - "Your %(bike_share_name)s route": "", - "Your bike route": "", - "Walk to the %(bike_share_name)s dock.": "", - "Walk from the %(bike_share_name)s dock to your destination.": "", - "Your walk route": "", - "Your route using the scooter": "", - "Your driving route": "", - "north": "nord", - "northeast": "nord-est", - "east": "est", - "southeast": "sud-est", - "south": "sud", - "southwest": "sud-oest", - "west": "oest", - "northwest": "nord-oest", - "hard left": "gira completament a la esquerra", - "left": "gira a la esquerra", - "slight left": "gira lleugerament a la esquerra", - "continue": "", - "slight right": "gira lleugerament a la dreta", - "right": "gira a la dreta", - "hard right": "gira completament a la dreta", - "elevator": "", - "U-turn left": "", - "U-turn right": "", - "Walk": "A peu", - "Cycle": "Bicicleta", - "Car": "Cotxe", - "Bus": "AUTOBÚS", - "Subway": "METRO", - "Train": "Tren", - "Ferry": "BOT", - "Light Rail": "", - "Cable Car": "PONT PENJANT", - "Funicular": "FUNICULAR", - "Aerial Tram": "", - "Airplane": "", - "Bicycle rental station": "", - "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "", - "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "", - "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "", - "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "", - "Start on": "", - " heading ": "", - "to continue on": "per a continuar a", - "on to": "", - "first": "", - "second": "", - "third": "", - "fourth": "", - "fifth": "", - "sixth": "", - "seventh": "", - "eight": "", - "ninth": "", - "tenth": "", - "%d hr": "", - "%d hr_plural": "", - "%d min": "", - "%d min_plural": "", - "%d sec": "", - "%d sec_plural": "", - "OK": "OK", - "Minimize": "", - "Bring to front": "", - "Send to back": "", - "Route:": "", - "Variant:": "", - "Stop Finder": "", - "Feed": "Agency", - "By ID": "", - "By Name": "", - "Search": "", - "No Stops Found": "", - "Date": "Data", - "Find Stops": "", - "(No Stop Selected)": "", - "Block": "", - "Recenter": "", - "Viewer": "", - "Quick": "", - "Flat": "", - "Bike Friendly": "", - "B": "", - "F": "", - "Q": "", - "All Routes": "", - "Save": "", - "Close": "", - "Travel Options": "", - "Geocoder": "", - "Arrive": "Arribada a", - "Now": "", - "Wheelchair accessible trip:": "Viatge amb accessibilitat:", - "Show Filtered Itineraries:": "", - "Travel by": "Mode de viatge", - "Preferred Routes": "", - "Edit": "Editar", - "None": "", - "Weight": "", - "Banned routes": "", - "Use": "", - "My Own Bike": "", - "A Shared Bike": "", - "Plan Your Trip": "Planificar el viatge", - "Additional parameters": "", - " to _direction": "", - " to _bus_direction": "", - "Start_template": "", - "Depart_itinerary": "Sortida des de", - "depart_itinerary": "Sortida des de", - "Start_popup": "", - "Depart_tripoptions": "Sortida des de" -} \ No newline at end of file + "Transit": "Transport públic", + "Bus Only": "Només bus", + "Rail Only": "Només tren", + "Airplane Only": "", + "Transit, No Airplane": "", + "Bicycle Only": "Bicicleta", + "Bicycle & Transit": "Transport públic i bicicleta", + "Walk Only": "Només a peu", + "Car Only": "", + "Taxi": "", + "Park and Ride": "", + "Ride and Kiss (Car Pickup)": "", + "Kiss and Ride (Car Dropoff)": "", + "Bike and Ride": "", + "Rented Bicycle": "", + "Transit & Rented Bicycle": "", + "Rented Scooter": "", + "Transit & Rented Scooter": "", + "Transit with flex access": "", + "Transit with flex egress": "", + "Transit with flex access and egress": "", + "Direct flex search": "", + "Recenter Map Here": "Centrar mapa aquí", + "Zoom In": "Apropar", + "Zoom Out": "Allunyar", + "Minimize all": "", + "Unminimize all": "", + "Stop Viewer": "", + "Plan Trip": "", + "From Stop": "", + "To Stop": "", + "Routes Serving Stop": "", + "Bike Share Planner": "", + "Trip Options": "", + "PICK UP BIKE": "", + "ALTERNATE PICKUP": "", + "DROP OFF BIKE": "", + "ALTERNATE DROP OFF": "", + "BIKE STATION": "", + "Station:": "", + "%d bike available": "", + "%d bike available_plural": "", + "%d dock available": "", + "%d dock available_plural": "", + "Recommended Pick Up:": "", + "Bicycle rental": "", + "Recommended Drop Off:": "", + "Multimodal Trip Planner": "", + "Itineraries": "", + "This itinerary departs on a different day from the previous one": "", + "%d Itinerary Returned": "", + "%d Itinerary Returned_plural": "", + "Link to search": "", + "Previous Page": "", + "Next Page": "", + "CONTINUES AS": "", + "%d min late": "", + "%d min late_plural": "", + "%d min early": "", + "%d min early_plural": "", + "on time": "", + "This itinerary departs on a different day than the one searched for": "", + "Arrived at destination with a rented bicycle!": "", + "End": "", + "Trip Summary": "", + "Travel": "Hora de sortida", + "Time": "Temps", + "GenCost": "", + "Total Walk": "", + "Total Bike": "", + "Total drive": "", + "Elevation Gained": "", + "Elevation Lost": "", + "Transfers": "transbords", + "Fare": "Tarifa", + "Valid": "Hora actual", + "Link to Itinerary": "", + "Print": "Imprimir", + "Your Trip": "", + "Email": "", + "every %d min": "", + "every %d min_plural": "", + "Board at ": "", + "Stop": "", + "Time in transit": "", + "Route ID": "", + "Trip ID": "", + "Service Date": "", + "Trip Viewer": "", + "late as": "", + "Stay on board": "stay on board", + "Alight": "", + "at": "a", + "%(currency)s %(price)s": "", + "Start: %(location)s at %(time_date)s": "", + "Board": "", + "(%(agency_id)s Stop ID #%(stop_id)s),": "", + "End: %(location)s at %(time_date)s": "", + "(%(agencyId)s Stop ID #%(id)s),": "", + "\nView itinerary online:\n%(itinerary_link)s\n": "", + "We're sorry. The trip planner is temporarily unavailable. Please try again later.": "", + "Trip is not possible. You might be trying to plan a trip outside the map data boundary.": "", + "No trip found. There may be no transit service within the maximum specified distance or at the specified time, or your start or end point might not be safely accessible.": "", + "No transit times available. The date may be past or too far in the future or there may not be transit service for your trip at the time you chose.": "", + "The trip planner is taking way too long to process your request. Please try again later.": "", + "The request has errors that the server is not willing or able to process.": "", + "Origin is unknown. Can you be a bit more descriptive?": "", + "Destination is unknown. Can you be a bit more descriptive?": "", + "Both origin and destination are unknown. Can you be a bit more descriptive?": "", + "Both origin and destination are not wheelchair accessible": "", + "Origin is within a trivial distance of the destination.": "", + "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.": "", + "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.": "", + "Both origin and destination are ambiguous. Please select from the following options, or be more specific.": "", + "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are": "", + "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1": "", + "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE": "", + "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set": "", + "Set as Start Location": "", + "Set as End Location": "", + "Destination": "", + "Error %(error_id)d": "", + "No Trip Found": "", + "Your %(bike_share_name)s route": "", + "Your bike route": "", + "Walk to the %(bike_share_name)s dock.": "", + "Walk from the %(bike_share_name)s dock to your destination.": "", + "Your walk route": "", + "Your route using the scooter": "", + "Your driving route": "", + "north": "nord", + "northeast": "nord-est", + "east": "est", + "southeast": "sud-est", + "south": "sud", + "southwest": "sud-oest", + "west": "oest", + "northwest": "nord-oest", + "hard left": "gira completament a la esquerra", + "left": "gira a la esquerra", + "slight left": "gira lleugerament a la esquerra", + "continue": "", + "slight right": "gira lleugerament a la dreta", + "right": "gira a la dreta", + "hard right": "gira completament a la dreta", + "elevator": "", + "U-turn left": "", + "U-turn right": "", + "Walk": "A peu", + "Cycle": "Bicicleta", + "Car": "Cotxe", + "Bus": "AUTOBÚS", + "Subway": "METRO", + "Train": "Tren", + "Ferry": "BOT", + "Light Rail": "", + "Cable Car": "PONT PENJANT", + "Funicular": "FUNICULAR", + "Aerial Tram": "", + "Airplane": "", + "Bicycle rental station": "", + "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "", + "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "", + "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "", + "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "", + "Start on": "", + " heading ": "", + "to continue on": "per a continuar a", + "on to": "", + "first": "", + "second": "", + "third": "", + "fourth": "", + "fifth": "", + "sixth": "", + "seventh": "", + "eight": "", + "ninth": "", + "tenth": "", + "%d hr": "", + "%d hr_plural": "", + "%d min": "", + "%d min_plural": "", + "%d sec": "", + "%d sec_plural": "", + "OK": "OK", + "Minimize": "", + "Bring to front": "", + "Send to back": "", + "Route:": "", + "Variant:": "", + "Stop Finder": "", + "Feed": "Agency", + "By ID": "", + "By Name": "", + "Search": "", + "No Stops Found": "", + "Date": "Data", + "Find Stops": "", + "(No Stop Selected)": "", + "Block": "", + "Recenter": "", + "Viewer": "", + "Quick": "", + "Flat": "", + "Bike Friendly": "", + "B": "", + "F": "", + "Q": "", + "All Routes": "", + "Save": "", + "Close": "", + "Travel Options": "", + "Geocoder": "", + "Arrive": "Arribada a", + "Now": "", + "Wheelchair accessible trip:": "Viatge amb accessibilitat:", + "Show Filtered Itineraries:": "", + "Travel by": "Mode de viatge", + "Preferred Routes": "", + "Edit": "Editar", + "None": "", + "Weight": "", + "Banned routes": "", + "Use": "", + "My Own Bike": "", + "A Shared Bike": "", + "Plan Your Trip": "Planificar el viatge", + "Additional parameters": "", + " to _direction": "", + " to _bus_direction": "", + "Start_template": "", + "Depart_itinerary": "Sortida des de", + "depart_itinerary": "Sortida des de", + "Start_popup": "", + "Depart_tripoptions": "Sortida des de" +} 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..56d08ab778a 100644 --- a/application/src/client/classic-debug/js/otp/locale/de.json +++ b/application/src/client/classic-debug/js/otp/locale/de.json @@ -1,238 +1,238 @@ { - "Transit": "ÖPNV", - "Bus Only": "nur Bus", - "Rail Only": "nur Bahn", - "Airplane Only": "", - "Transit, No Airplane": "", - "Bicycle Only": "Fahrrad", - "Bicycle & Transit": "ÖPNV und Fahrrad", - "Walk Only": "zu Fuß", - "Car Only": "", - "Taxi": "", - "Park and Ride": "Parken und Reisen", - "Ride and Kiss (Car Pickup)": "", - "Kiss and Ride (Car Dropoff)": "", - "Bike and Ride": "", - "Rented Bicycle": "Fahrradverleih", - "Transit & Rented Bicycle": "ÖPNV und Fahrradverleih", - "Rented Scooter": "", - "Transit & Rented Scooter": "ÖPNV und Fahrradverleih", - "Transit with flex access": "", - "Transit with flex egress": "", - "Transit with flex access and egress": "", - "Direct flex search": "", - "Recenter Map Here": "Karte hier zentrieren", - "Zoom In": "hineinzoomen", - "Zoom Out": "herauszoomen", - "Minimize all": "Alle Dialoge minimieren", - "Unminimize all": "Dialoge wiederanzeigen", - "Stop Viewer": "", - "Plan Trip": "", - "From Stop": "", - "To Stop": "", - "Routes Serving Stop": "", - "Bike Share Planner": "", - "Trip Options": "Einstellungen für Routensuche", - "PICK UP BIKE": "", - "ALTERNATE PICKUP": "", - "DROP OFF BIKE": "", - "ALTERNATE DROP OFF": "", - "BIKE STATION": "", - "Station:": "", - "%d bike available": "", - "%d bike available_plural": "", - "%d dock available": "", - "%d dock available_plural": "", - "Recommended Pick Up:": "", - "Bicycle rental": "Fahrradverleih", - "Recommended Drop Off:": "", - "Multimodal Trip Planner": "Multimodaler Routenplaner", - "Itineraries": "Routenvorschläge", - "This itinerary departs on a different day from the previous one": "", - "%d Itinerary Returned": "", - "%d Itinerary Returned_plural": "", - "Link to search": "Link für diese Suche erstellen", - "Previous Page": "Vorheriger", - "Next Page": "", - "CONTINUES AS": "Weiterfahren", - "%d min late": "%d min Verspätung", - "%d min late_plural": "%d min Verspätung", - "%d min early": "%d min zu früh", - "%d min early_plural": "%d min zu früh", - "on time": "pünktlich", - "This itinerary departs on a different day than the one searched for": "", - "Arrived at destination with a rented bicycle!": "", - "End": "Ankunft", - "Trip Summary": "", - "Travel": "Reise", - "Time": "Dauer", - "GenCost": "", - "Total Walk": "", - "Total Bike": "", - "Total drive": "", - "Elevation Gained": "", - "Elevation Lost": "", - "Transfers": "Umsteigepunkt", - "Fare": "Tarif", - "Valid": "Gültig bis", - "Link to Itinerary": "", - "Print": "drucken", - "Your Trip": "", - "Email": "", - "every %d min": "", - "every %d min_plural": "", - "Board at ": "", - "Stop": "", - "Time in transit": "", - "Route ID": "", - "Trip ID": "", - "Service Date": "", - "Trip Viewer": "", - "late as": "", - "Stay on board": "an Bord bleiben", - "Alight": "", - "at": "um", - "%(currency)s %(price)s": "", - "Start: %(location)s at %(time_date)s": "", - "Board": "", - "(%(agency_id)s Stop ID #%(stop_id)s),": "", - "End: %(location)s at %(time_date)s": "", - "(%(agencyId)s Stop ID #%(id)s),": "", - "\nView itinerary online:\n%(itinerary_link)s\n": "", - "We're sorry. The trip planner is temporarily unavailable. Please try again later.": "", - "Trip is not possible. You might be trying to plan a trip outside the map data boundary.": "", - "No trip found. There may be no transit service within the maximum specified distance or at the specified time, or your start or end point might not be safely accessible.": "", - "No transit times available. The date may be past or too far in the future or there may not be transit service for your trip at the time you chose.": "", - "The trip planner is taking way too long to process your request. Please try again later.": "", - "The request has errors that the server is not willing or able to process.": "", - "Origin is unknown. Can you be a bit more descriptive?": "", - "Destination is unknown. Can you be a bit more descriptive?": "", - "Both origin and destination are unknown. Can you be a bit more descriptive?": "", - "Both origin and destination are not wheelchair accessible": "", - "Origin is within a trivial distance of the destination.": "", - "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.": "", - "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.": "", - "Both origin and destination are ambiguous. Please select from the following options, or be more specific.": "", - "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are": "", - "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1": "", - "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE": "", - "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set": "", - "Set as Start Location": "", - "Set as End Location": "", - "Destination": "", - "Error %(error_id)d": "", - "No Trip Found": "", - "Your %(bike_share_name)s route": "", - "Your bike route": "", - "Walk to the %(bike_share_name)s dock.": "", - "Walk from the %(bike_share_name)s dock to your destination.": "", - "Your walk route": "", - "Your route using the scooter": "", - "Your driving route": "", - "north": "nord", - "northeast": "nordost", - "east": "ost", - "southeast": "südost", - "south": "süd", - "southwest": "südwest", - "west": "west", - "northwest": "nordwest", - "hard left": "scharf links", - "left": "links", - "slight left": "links halten", - "continue": "", - "slight right": "rechts halten", - "right": "rechts", - "hard right": "scharf rechts", - "elevator": "", - "U-turn left": "", - "U-turn right": "", - "Walk": "zu Fuß gehen", - "Cycle": "Fahrrad", - "Car": "Auto", - "Bus": "Bus", - "Subway": "U-Bahn", - "Train": "Bahn", - "Ferry": "Fähre", - "Light Rail": "", - "Cable Car": "Standseilbahn", - "Funicular": "Seilbahn", - "Aerial Tram": "", - "Airplane": "", - "Bicycle rental station": "Fahrradverleihstation", - "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "", - "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "", - "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "", - "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "", - "Start on": "", - " heading ": "", - "to continue on": "weiter auf", - "on to": "", - "first": "Erster", - "second": "", - "third": "", - "fourth": "", - "fifth": "", - "sixth": "", - "seventh": "", - "eight": "", - "ninth": "", - "tenth": "", - "%d hr": "", - "%d hr_plural": "", - "%d min": "", - "%d min_plural": "", - "%d sec": "", - "%d sec_plural": "", - "OK": "OK", - "Minimize": "Minimieren", - "Bring to front": "in den Vordergrund", - "Send to back": "in den Hintergrund", - "Route:": "", - "Variant:": "", - "Stop Finder": "", - "Feed": "Agency", - "By ID": "", - "By Name": "", - "Search": "", - "No Stops Found": "", - "Date": "Datum", - "Find Stops": "", - "(No Stop Selected)": "", - "Block": "", - "Recenter": "", - "Viewer": "", - "Quick": "Schnellste", - "Flat": "Flach", - "Bike Friendly": "Fahrradgeeignet", - "B": "F", - "F": "Fl", - "Q": "S", - "All Routes": "alle Routen", - "Save": "Speichern", - "Close": "Schließen", - "Travel Options": "Routeneinstellungen", - "Geocoder": "Geocoder", - "Arrive": "Ankunft", - "Now": "Jetzt", - "Wheelchair accessible trip:": "barrierefreie Route:", - "Show Filtered Itineraries:": "", - "Travel by": "Fortbewegungsart/Verkehrsmittel", - "Preferred Routes": "bevorzugte Routen", - "Edit": "anpassen", - "None": "keine", - "Weight": "Gewichtung", - "Banned routes": "ausgeschlossene Routen", - "Use": "", - "My Own Bike": "", - "A Shared Bike": "", - "Plan Your Trip": "Route berechnen", - "Additional parameters": "", - " to _direction": "", - " to _bus_direction": "", - "Start_template": "Abfahrt", - "Depart_itinerary": "Abfahrt", - "depart_itinerary": "Abfahrt", - "Start_popup": "Abfahrt", - "Depart_tripoptions": "Abfahrt" -} \ No newline at end of file + "Transit": "ÖPNV", + "Bus Only": "nur Bus", + "Rail Only": "nur Bahn", + "Airplane Only": "", + "Transit, No Airplane": "", + "Bicycle Only": "Fahrrad", + "Bicycle & Transit": "ÖPNV und Fahrrad", + "Walk Only": "zu Fuß", + "Car Only": "", + "Taxi": "", + "Park and Ride": "Parken und Reisen", + "Ride and Kiss (Car Pickup)": "", + "Kiss and Ride (Car Dropoff)": "", + "Bike and Ride": "", + "Rented Bicycle": "Fahrradverleih", + "Transit & Rented Bicycle": "ÖPNV und Fahrradverleih", + "Rented Scooter": "", + "Transit & Rented Scooter": "ÖPNV und Fahrradverleih", + "Transit with flex access": "", + "Transit with flex egress": "", + "Transit with flex access and egress": "", + "Direct flex search": "", + "Recenter Map Here": "Karte hier zentrieren", + "Zoom In": "hineinzoomen", + "Zoom Out": "herauszoomen", + "Minimize all": "Alle Dialoge minimieren", + "Unminimize all": "Dialoge wiederanzeigen", + "Stop Viewer": "", + "Plan Trip": "", + "From Stop": "", + "To Stop": "", + "Routes Serving Stop": "", + "Bike Share Planner": "", + "Trip Options": "Einstellungen für Routensuche", + "PICK UP BIKE": "", + "ALTERNATE PICKUP": "", + "DROP OFF BIKE": "", + "ALTERNATE DROP OFF": "", + "BIKE STATION": "", + "Station:": "", + "%d bike available": "", + "%d bike available_plural": "", + "%d dock available": "", + "%d dock available_plural": "", + "Recommended Pick Up:": "", + "Bicycle rental": "Fahrradverleih", + "Recommended Drop Off:": "", + "Multimodal Trip Planner": "Multimodaler Routenplaner", + "Itineraries": "Routenvorschläge", + "This itinerary departs on a different day from the previous one": "", + "%d Itinerary Returned": "", + "%d Itinerary Returned_plural": "", + "Link to search": "Link für diese Suche erstellen", + "Previous Page": "Vorheriger", + "Next Page": "", + "CONTINUES AS": "Weiterfahren", + "%d min late": "%d min Verspätung", + "%d min late_plural": "%d min Verspätung", + "%d min early": "%d min zu früh", + "%d min early_plural": "%d min zu früh", + "on time": "pünktlich", + "This itinerary departs on a different day than the one searched for": "", + "Arrived at destination with a rented bicycle!": "", + "End": "Ankunft", + "Trip Summary": "", + "Travel": "Reise", + "Time": "Dauer", + "GenCost": "", + "Total Walk": "", + "Total Bike": "", + "Total drive": "", + "Elevation Gained": "", + "Elevation Lost": "", + "Transfers": "Umsteigepunkt", + "Fare": "Tarif", + "Valid": "Gültig bis", + "Link to Itinerary": "", + "Print": "drucken", + "Your Trip": "", + "Email": "", + "every %d min": "", + "every %d min_plural": "", + "Board at ": "", + "Stop": "", + "Time in transit": "", + "Route ID": "", + "Trip ID": "", + "Service Date": "", + "Trip Viewer": "", + "late as": "", + "Stay on board": "an Bord bleiben", + "Alight": "", + "at": "um", + "%(currency)s %(price)s": "", + "Start: %(location)s at %(time_date)s": "", + "Board": "", + "(%(agency_id)s Stop ID #%(stop_id)s),": "", + "End: %(location)s at %(time_date)s": "", + "(%(agencyId)s Stop ID #%(id)s),": "", + "\nView itinerary online:\n%(itinerary_link)s\n": "", + "We're sorry. The trip planner is temporarily unavailable. Please try again later.": "", + "Trip is not possible. You might be trying to plan a trip outside the map data boundary.": "", + "No trip found. There may be no transit service within the maximum specified distance or at the specified time, or your start or end point might not be safely accessible.": "", + "No transit times available. The date may be past or too far in the future or there may not be transit service for your trip at the time you chose.": "", + "The trip planner is taking way too long to process your request. Please try again later.": "", + "The request has errors that the server is not willing or able to process.": "", + "Origin is unknown. Can you be a bit more descriptive?": "", + "Destination is unknown. Can you be a bit more descriptive?": "", + "Both origin and destination are unknown. Can you be a bit more descriptive?": "", + "Both origin and destination are not wheelchair accessible": "", + "Origin is within a trivial distance of the destination.": "", + "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.": "", + "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.": "", + "Both origin and destination are ambiguous. Please select from the following options, or be more specific.": "", + "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are": "", + "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1": "", + "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE": "", + "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set": "", + "Set as Start Location": "", + "Set as End Location": "", + "Destination": "", + "Error %(error_id)d": "", + "No Trip Found": "", + "Your %(bike_share_name)s route": "", + "Your bike route": "", + "Walk to the %(bike_share_name)s dock.": "", + "Walk from the %(bike_share_name)s dock to your destination.": "", + "Your walk route": "", + "Your route using the scooter": "", + "Your driving route": "", + "north": "nord", + "northeast": "nordost", + "east": "ost", + "southeast": "südost", + "south": "süd", + "southwest": "südwest", + "west": "west", + "northwest": "nordwest", + "hard left": "scharf links", + "left": "links", + "slight left": "links halten", + "continue": "", + "slight right": "rechts halten", + "right": "rechts", + "hard right": "scharf rechts", + "elevator": "", + "U-turn left": "", + "U-turn right": "", + "Walk": "zu Fuß gehen", + "Cycle": "Fahrrad", + "Car": "Auto", + "Bus": "Bus", + "Subway": "U-Bahn", + "Train": "Bahn", + "Ferry": "Fähre", + "Light Rail": "", + "Cable Car": "Standseilbahn", + "Funicular": "Seilbahn", + "Aerial Tram": "", + "Airplane": "", + "Bicycle rental station": "Fahrradverleihstation", + "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "", + "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "", + "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "", + "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "", + "Start on": "", + " heading ": "", + "to continue on": "weiter auf", + "on to": "", + "first": "Erster", + "second": "", + "third": "", + "fourth": "", + "fifth": "", + "sixth": "", + "seventh": "", + "eight": "", + "ninth": "", + "tenth": "", + "%d hr": "", + "%d hr_plural": "", + "%d min": "", + "%d min_plural": "", + "%d sec": "", + "%d sec_plural": "", + "OK": "OK", + "Minimize": "Minimieren", + "Bring to front": "in den Vordergrund", + "Send to back": "in den Hintergrund", + "Route:": "", + "Variant:": "", + "Stop Finder": "", + "Feed": "Agency", + "By ID": "", + "By Name": "", + "Search": "", + "No Stops Found": "", + "Date": "Datum", + "Find Stops": "", + "(No Stop Selected)": "", + "Block": "", + "Recenter": "", + "Viewer": "", + "Quick": "Schnellste", + "Flat": "Flach", + "Bike Friendly": "Fahrradgeeignet", + "B": "F", + "F": "Fl", + "Q": "S", + "All Routes": "alle Routen", + "Save": "Speichern", + "Close": "Schließen", + "Travel Options": "Routeneinstellungen", + "Geocoder": "Geocoder", + "Arrive": "Ankunft", + "Now": "Jetzt", + "Wheelchair accessible trip:": "barrierefreie Route:", + "Show Filtered Itineraries:": "", + "Travel by": "Fortbewegungsart/Verkehrsmittel", + "Preferred Routes": "bevorzugte Routen", + "Edit": "anpassen", + "None": "keine", + "Weight": "Gewichtung", + "Banned routes": "ausgeschlossene Routen", + "Use": "", + "My Own Bike": "", + "A Shared Bike": "", + "Plan Your Trip": "Route berechnen", + "Additional parameters": "", + " to _direction": "", + " to _bus_direction": "", + "Start_template": "Abfahrt", + "Depart_itinerary": "Abfahrt", + "depart_itinerary": "Abfahrt", + "Start_popup": "Abfahrt", + "Depart_tripoptions": "Abfahrt" +} 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..a4d3f1efa9d 100644 --- a/application/src/client/classic-debug/js/otp/locale/en.json +++ b/application/src/client/classic-debug/js/otp/locale/en.json @@ -1,238 +1,238 @@ { - "Transit": "Transit", - "Bus Only": "Bus Only", - "Rail Only": "Rail Only", - "Airplane Only": "Airplane Only", - "Transit, No Airplane": "", - "Bicycle Only": "Bicycle Only", - "Bicycle & Transit": "Bicycle & Transit", - "Walk Only": "Walk Only", - "Car Only": "Car Only", - "Taxi": "", - "Park and Ride": "Park and Ride", - "Ride and Kiss (Car Pickup)": "", - "Kiss and Ride (Car Dropoff)": "", - "Bike and Ride": "Bike and Ride", - "Rented Bicycle": "Rented Bicycle", - "Transit & Rented Bicycle": "Transit & Rented Bicycle", - "Rented Scooter": "", - "Transit & Rented Scooter": "Transit & Rented Bicycle", - "Transit with flex access": "", - "Transit with flex egress": "", - "Transit with flex access and egress": "", - "Direct flex search": "", - "Recenter Map Here": "Recenter Map Here", - "Zoom In": "Zoom In", - "Zoom Out": "Zoom Out", - "Minimize all": "Minimize all", - "Unminimize all": "Unminimize all", - "Stop Viewer": "Stop Viewer", - "Plan Trip": "Plan Trip", - "From Stop": "From Stop", - "To Stop": "To Stop", - "Routes Serving Stop": "Routes Serving Stop", - "Bike Share Planner": "Bike Share Planner", - "Trip Options": "Trip Options", - "PICK UP BIKE": "PICK UP BIKE", - "ALTERNATE PICKUP": "ALTERNATE PICKUP", - "DROP OFF BIKE": "DROP OFF BIKE", - "ALTERNATE DROP OFF": "ALTERNATE DROP OFF", - "BIKE STATION": "BIKE STATION", - "Station:": "Station:", - "%d bike available": "%d bike available", - "%d bike available_plural": "%d bikes available", - "%d dock available": "%d dock available", - "%d dock available_plural": "%d docks available", - "Recommended Pick Up:": "Recommended Pick Up:", - "Bicycle rental": "Bicycle rental", - "Recommended Drop Off:": "Recommended Drop Off:", - "Multimodal Trip Planner": "Multimodal Trip Planner", - "Itineraries": "Itineraries", - "This itinerary departs on a different day from the previous one": "", - "%d Itinerary Returned": "%d Itinerary Returned", - "%d Itinerary Returned_plural": "%d Itineraries Returned", - "Link to search": "Link to search", - "Previous Page": "Previous", - "Next Page": "", - "CONTINUES AS": "CONTINUES AS", - "%d min late": "%d min late", - "%d min late_plural": "%d mins late", - "%d min early": "%d min early", - "%d min early_plural": "%d mins early", - "on time": "on time", - "This itinerary departs on a different day than the one searched for": "", - "Arrived at destination with a rented bicycle!": "", - "End": "End", - "Trip Summary": "Trip Summary", - "Travel": "Travel", - "Time": "Time", - "GenCost": "Weight/Cost", - "Total Walk": "Total Walk", - "Total Bike": "Total Bike", - "Total drive": "Total drive", - "Elevation Gained": "", - "Elevation Lost": "Elevation Lost", - "Transfers": "Transfers", - "Fare": "Fare", - "Valid": "Valid", - "Link to Itinerary": "Link to Itinerary", - "Print": "Print", - "Your Trip": "Your Trip", - "Email": "Email", - "every %d min": "every %d min", - "every %d min_plural": "every %d mins", - "Board at ": "Board at ", - "Stop": "Stop", - "Time in transit": "Time in transit", - "Route ID": "", - "Trip ID": "", - "Service Date": "", - "Trip Viewer": "Trip Viewer", - "late as": "late as", - "Stay on board": "Stay on board", - "Alight": "Alight", - "at": "at", - "%(currency)s %(price)s": "%(currency)s %(price)s", - "Start: %(location)s at %(time_date)s": "Start: %(location)s at %(time_date)s", - "Board": "Board", - "(%(agency_id)s Stop ID #%(stop_id)s),": "(%(agency_id)s Stop ID #%(stop_id)s),", - "End: %(location)s at %(time_date)s": "End: %(location)s at %(time_date)s", - "(%(agencyId)s Stop ID #%(id)s),": "", - "\nView itinerary online:\n%(itinerary_link)s\n": "\nView itinerary online:\n%(itinerary_link)s\n", - "We're sorry. The trip planner is temporarily unavailable. Please try again later.": "We're sorry. The trip planner is temporarily unavailable. Please try again later.", - "Trip is not possible. You might be trying to plan a trip outside the map data boundary.": "Trip is not possible. You might be trying to plan a trip outside the map data boundary.", - "No trip found. There may be no transit service within the maximum specified distance or at the specified time, or your start or end point might not be safely accessible.": "", - "No transit times available. The date may be past or too far in the future or there may not be transit service for your trip at the time you chose.": "No transit times available. The date may be past or too far in the future or there may not be transit service for your trip at the time you chose.", - "The trip planner is taking way too long to process your request. Please try again later.": "The trip planner is taking way too long to process your request. Please try again later.", - "The request has errors that the server is not willing or able to process.": "The request has errors that the server is not willing or able to process.", - "Origin is unknown. Can you be a bit more descriptive?": "Origin is unknown. Can you be a bit more descriptive?", - "Destination is unknown. Can you be a bit more descriptive?": "Destination is unknown. Can you be a bit more descriptive?", - "Both origin and destination are unknown. Can you be a bit more descriptive?": "Both origin and destination are unknown. Can you be a bit more descriptive?", - "Both origin and destination are not wheelchair accessible": "Both origin and destination are not wheelchair accessible", - "Origin is within a trivial distance of the destination.": "Origin is within a trivial distance of the destination.", - "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.": "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.", - "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.": "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.", - "Both origin and destination are ambiguous. Please select from the following options, or be more specific.": "Both origin and destination are ambiguous. Please select from the following options, or be more specific.", - "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are": "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are", - "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1": "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1", - "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE": "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE", - "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set": "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set", - "Set as Start Location": "Set as Start Location", - "Set as End Location": "Set as End Location", - "Destination": "Destination", - "Error %(error_id)d": "Error %(error_id)d", - "No Trip Found": "No Trip Found", - "Your %(bike_share_name)s route": "Your %(bike_share_name)s route", - "Your bike route": "Your bike route", - "Walk to the %(bike_share_name)s dock.": "Walk to the %(bike_share_name)s dock.", - "Walk from the %(bike_share_name)s dock to your destination.": "Walk from the %(bike_share_name)s dock to your destination.", - "Your walk route": "Your walk route", - "Your route using the scooter": "", - "Your driving route": "Your bike route", - "north": "north", - "northeast": "northeast", - "east": "east", - "southeast": "southeast", - "south": "south", - "southwest": "southwest", - "west": "west", - "northwest": "northwest", - "hard left": "hard left", - "left": "left", - "slight left": "slight left", - "continue": "continue", - "slight right": "slight right", - "right": "right", - "hard right": "hard right", - "elevator": "elevator", - "U-turn left": "U-turn left", - "U-turn right": "U-turn right", - "Walk": "Walk", - "Cycle": "Cycle", - "Car": "Car", - "Bus": "Bus", - "Subway": "Subway", - "Train": "Train", - "Ferry": "Ferry", - "Light Rail": "Light Rail", - "Cable Car": "Cable Car", - "Funicular": "Funicular", - "Aerial Tram": "Aerial Tram", - "Airplane": "", - "Bicycle rental station": "Bicycle rental station", - "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s", - "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s", - "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s", - "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s", - "Start on": "Start on", - " heading ": " heading ", - "to continue on": "to continue on", - "on to": "on to", - "first": "first", - "second": "second", - "third": "third", - "fourth": "fourth", - "fifth": "fifth", - "sixth": "sixth", - "seventh": "seventh", - "eight": "eight", - "ninth": "ninth", - "tenth": "tenth", - "%d hr": "%d hr", - "%d hr_plural": "%d hrs", - "%d min": "%d min", - "%d min_plural": "%d mins", - "%d sec": "%d sec", - "%d sec_plural": "%d secs", - "OK": "OK", - "Minimize": "Minimize", - "Bring to front": "Bring to front", - "Send to back": "Send to back", - "Route:": "Route:", - "Variant:": "Variant:", - "Stop Finder": "Stop Finder", - "Feed": "Agency", - "By ID": "By ID", - "By Name": "By Name", - "Search": "Search", - "No Stops Found": "No Stops Found", - "Date": "Date", - "Find Stops": "Find Stops", - "(No Stop Selected)": "(No Stop Selected)", - "Block": "Block", - "Recenter": "Recenter", - "Viewer": "Viewer", - "Quick": "Quick", - "Flat": "Flat", - "Bike Friendly": "Bike Friendly", - "B": "B", - "F": "F", - "Q": "Q", - "All Routes": "All Routes", - "Save": "Save", - "Close": "Close", - "Travel Options": "Travel Options", - "Geocoder": "Geocoder", - "Arrive": "Arrive", - "Now": "Now", - "Wheelchair accessible trip:": "Wheelchair accessible trip:", - "Show Filtered Itineraries:": "", - "Travel by": "Travel by", - "Preferred Routes": "Preferred Routes", - "Edit": "Edit", - "None": "None", - "Weight": "Weight", - "Banned routes": "Banned routes", - "Use": "Use", - "My Own Bike": "My Own Bike", - "A Shared Bike": "A Shared Bike", - "Plan Your Trip": "Plan Your Trip", - "Additional parameters": "", - " to _direction": " to ", - " to _bus_direction": " to ", - "Start_template": "Start", - "Depart_itinerary": "Depart", - "depart_itinerary": "depart", - "Start_popup": "Start", - "Depart_tripoptions": "Depart" -} \ No newline at end of file + "Transit": "Transit", + "Bus Only": "Bus Only", + "Rail Only": "Rail Only", + "Airplane Only": "Airplane Only", + "Transit, No Airplane": "", + "Bicycle Only": "Bicycle Only", + "Bicycle & Transit": "Bicycle & Transit", + "Walk Only": "Walk Only", + "Car Only": "Car Only", + "Taxi": "", + "Park and Ride": "Park and Ride", + "Ride and Kiss (Car Pickup)": "", + "Kiss and Ride (Car Dropoff)": "", + "Bike and Ride": "Bike and Ride", + "Rented Bicycle": "Rented Bicycle", + "Transit & Rented Bicycle": "Transit & Rented Bicycle", + "Rented Scooter": "", + "Transit & Rented Scooter": "Transit & Rented Bicycle", + "Transit with flex access": "", + "Transit with flex egress": "", + "Transit with flex access and egress": "", + "Direct flex search": "", + "Recenter Map Here": "Recenter Map Here", + "Zoom In": "Zoom In", + "Zoom Out": "Zoom Out", + "Minimize all": "Minimize all", + "Unminimize all": "Unminimize all", + "Stop Viewer": "Stop Viewer", + "Plan Trip": "Plan Trip", + "From Stop": "From Stop", + "To Stop": "To Stop", + "Routes Serving Stop": "Routes Serving Stop", + "Bike Share Planner": "Bike Share Planner", + "Trip Options": "Trip Options", + "PICK UP BIKE": "PICK UP BIKE", + "ALTERNATE PICKUP": "ALTERNATE PICKUP", + "DROP OFF BIKE": "DROP OFF BIKE", + "ALTERNATE DROP OFF": "ALTERNATE DROP OFF", + "BIKE STATION": "BIKE STATION", + "Station:": "Station:", + "%d bike available": "%d bike available", + "%d bike available_plural": "%d bikes available", + "%d dock available": "%d dock available", + "%d dock available_plural": "%d docks available", + "Recommended Pick Up:": "Recommended Pick Up:", + "Bicycle rental": "Bicycle rental", + "Recommended Drop Off:": "Recommended Drop Off:", + "Multimodal Trip Planner": "Multimodal Trip Planner", + "Itineraries": "Itineraries", + "This itinerary departs on a different day from the previous one": "", + "%d Itinerary Returned": "%d Itinerary Returned", + "%d Itinerary Returned_plural": "%d Itineraries Returned", + "Link to search": "Link to search", + "Previous Page": "Previous", + "Next Page": "", + "CONTINUES AS": "CONTINUES AS", + "%d min late": "%d min late", + "%d min late_plural": "%d mins late", + "%d min early": "%d min early", + "%d min early_plural": "%d mins early", + "on time": "on time", + "This itinerary departs on a different day than the one searched for": "", + "Arrived at destination with a rented bicycle!": "", + "End": "End", + "Trip Summary": "Trip Summary", + "Travel": "Travel", + "Time": "Time", + "GenCost": "Weight/Cost", + "Total Walk": "Total Walk", + "Total Bike": "Total Bike", + "Total drive": "Total drive", + "Elevation Gained": "", + "Elevation Lost": "Elevation Lost", + "Transfers": "Transfers", + "Fare": "Fare", + "Valid": "Valid", + "Link to Itinerary": "Link to Itinerary", + "Print": "Print", + "Your Trip": "Your Trip", + "Email": "Email", + "every %d min": "every %d min", + "every %d min_plural": "every %d mins", + "Board at ": "Board at ", + "Stop": "Stop", + "Time in transit": "Time in transit", + "Route ID": "", + "Trip ID": "", + "Service Date": "", + "Trip Viewer": "Trip Viewer", + "late as": "late as", + "Stay on board": "Stay on board", + "Alight": "Alight", + "at": "at", + "%(currency)s %(price)s": "%(currency)s %(price)s", + "Start: %(location)s at %(time_date)s": "Start: %(location)s at %(time_date)s", + "Board": "Board", + "(%(agency_id)s Stop ID #%(stop_id)s),": "(%(agency_id)s Stop ID #%(stop_id)s),", + "End: %(location)s at %(time_date)s": "End: %(location)s at %(time_date)s", + "(%(agencyId)s Stop ID #%(id)s),": "", + "\nView itinerary online:\n%(itinerary_link)s\n": "\nView itinerary online:\n%(itinerary_link)s\n", + "We're sorry. The trip planner is temporarily unavailable. Please try again later.": "We're sorry. The trip planner is temporarily unavailable. Please try again later.", + "Trip is not possible. You might be trying to plan a trip outside the map data boundary.": "Trip is not possible. You might be trying to plan a trip outside the map data boundary.", + "No trip found. There may be no transit service within the maximum specified distance or at the specified time, or your start or end point might not be safely accessible.": "", + "No transit times available. The date may be past or too far in the future or there may not be transit service for your trip at the time you chose.": "No transit times available. The date may be past or too far in the future or there may not be transit service for your trip at the time you chose.", + "The trip planner is taking way too long to process your request. Please try again later.": "The trip planner is taking way too long to process your request. Please try again later.", + "The request has errors that the server is not willing or able to process.": "The request has errors that the server is not willing or able to process.", + "Origin is unknown. Can you be a bit more descriptive?": "Origin is unknown. Can you be a bit more descriptive?", + "Destination is unknown. Can you be a bit more descriptive?": "Destination is unknown. Can you be a bit more descriptive?", + "Both origin and destination are unknown. Can you be a bit more descriptive?": "Both origin and destination are unknown. Can you be a bit more descriptive?", + "Both origin and destination are not wheelchair accessible": "Both origin and destination are not wheelchair accessible", + "Origin is within a trivial distance of the destination.": "Origin is within a trivial distance of the destination.", + "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.": "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.", + "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.": "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.", + "Both origin and destination are ambiguous. Please select from the following options, or be more specific.": "Both origin and destination are ambiguous. Please select from the following options, or be more specific.", + "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are": "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are", + "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1": "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1", + "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE": "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE", + "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set": "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set", + "Set as Start Location": "Set as Start Location", + "Set as End Location": "Set as End Location", + "Destination": "Destination", + "Error %(error_id)d": "Error %(error_id)d", + "No Trip Found": "No Trip Found", + "Your %(bike_share_name)s route": "Your %(bike_share_name)s route", + "Your bike route": "Your bike route", + "Walk to the %(bike_share_name)s dock.": "Walk to the %(bike_share_name)s dock.", + "Walk from the %(bike_share_name)s dock to your destination.": "Walk from the %(bike_share_name)s dock to your destination.", + "Your walk route": "Your walk route", + "Your route using the scooter": "", + "Your driving route": "Your bike route", + "north": "north", + "northeast": "northeast", + "east": "east", + "southeast": "southeast", + "south": "south", + "southwest": "southwest", + "west": "west", + "northwest": "northwest", + "hard left": "hard left", + "left": "left", + "slight left": "slight left", + "continue": "continue", + "slight right": "slight right", + "right": "right", + "hard right": "hard right", + "elevator": "elevator", + "U-turn left": "U-turn left", + "U-turn right": "U-turn right", + "Walk": "Walk", + "Cycle": "Cycle", + "Car": "Car", + "Bus": "Bus", + "Subway": "Subway", + "Train": "Train", + "Ferry": "Ferry", + "Light Rail": "Light Rail", + "Cable Car": "Cable Car", + "Funicular": "Funicular", + "Aerial Tram": "Aerial Tram", + "Airplane": "", + "Bicycle rental station": "Bicycle rental station", + "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s", + "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s", + "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s", + "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s", + "Start on": "Start on", + " heading ": " heading ", + "to continue on": "to continue on", + "on to": "on to", + "first": "first", + "second": "second", + "third": "third", + "fourth": "fourth", + "fifth": "fifth", + "sixth": "sixth", + "seventh": "seventh", + "eight": "eight", + "ninth": "ninth", + "tenth": "tenth", + "%d hr": "%d hr", + "%d hr_plural": "%d hrs", + "%d min": "%d min", + "%d min_plural": "%d mins", + "%d sec": "%d sec", + "%d sec_plural": "%d secs", + "OK": "OK", + "Minimize": "Minimize", + "Bring to front": "Bring to front", + "Send to back": "Send to back", + "Route:": "Route:", + "Variant:": "Variant:", + "Stop Finder": "Stop Finder", + "Feed": "Agency", + "By ID": "By ID", + "By Name": "By Name", + "Search": "Search", + "No Stops Found": "No Stops Found", + "Date": "Date", + "Find Stops": "Find Stops", + "(No Stop Selected)": "(No Stop Selected)", + "Block": "Block", + "Recenter": "Recenter", + "Viewer": "Viewer", + "Quick": "Quick", + "Flat": "Flat", + "Bike Friendly": "Bike Friendly", + "B": "B", + "F": "F", + "Q": "Q", + "All Routes": "All Routes", + "Save": "Save", + "Close": "Close", + "Travel Options": "Travel Options", + "Geocoder": "Geocoder", + "Arrive": "Arrive", + "Now": "Now", + "Wheelchair accessible trip:": "Wheelchair accessible trip:", + "Show Filtered Itineraries:": "", + "Travel by": "Travel by", + "Preferred Routes": "Preferred Routes", + "Edit": "Edit", + "None": "None", + "Weight": "Weight", + "Banned routes": "Banned routes", + "Use": "Use", + "My Own Bike": "My Own Bike", + "A Shared Bike": "A Shared Bike", + "Plan Your Trip": "Plan Your Trip", + "Additional parameters": "", + " to _direction": " to ", + " to _bus_direction": " to ", + "Start_template": "Start", + "Depart_itinerary": "Depart", + "depart_itinerary": "depart", + "Start_popup": "Start", + "Depart_tripoptions": "Depart" +} 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..7909780d938 100644 --- a/application/src/client/classic-debug/js/otp/locale/es.json +++ b/application/src/client/classic-debug/js/otp/locale/es.json @@ -1,238 +1,238 @@ { - "Transit": "Transporte Público", - "Bus Only": "Sólo autobús", - "Rail Only": "Sólo tren", - "Airplane Only": "", - "Transit, No Airplane": "", - "Bicycle Only": "Sólo bicicletas", - "Bicycle & Transit": "Bicicleta y Transporte Público", - "Walk Only": "Sólo a pie", - "Car Only": "Comienza en", - "Taxi": "", - "Park and Ride": "Aparcar y Transporte Público", - "Ride and Kiss (Car Pickup)": "", - "Kiss and Ride (Car Dropoff)": "", - "Bike and Ride": "Bicicleta y Transporte Público", - "Rented Bicycle": "Alquiler bicicleta", - "Transit & Rented Bicycle": "Transporte Público y Alquiler de bicicleta", - "Rented Scooter": "", - "Transit & Rented Scooter": "Transporte Público y Alquiler de bicicleta", - "Transit with flex access": "", - "Transit with flex egress": "", - "Transit with flex access and egress": "", - "Direct flex search": "", - "Recenter Map Here": "Centrar Mapa Aquí", - "Zoom In": "Acercar", - "Zoom Out": "Alejar", - "Minimize all": "Minimizar todo", - "Unminimize all": "Ampliar todo", - "Stop Viewer": "Visor de parada", - "Plan Trip": "Calcular viaje", - "From Stop": "Desde parada", - "To Stop": "Hasta parada", - "Routes Serving Stop": "Rutas por la parada", - "Bike Share Planner": "Planificador de Bicicleta Compartida", - "Trip Options": "Opciones de viaje", - "PICK UP BIKE": "Recogida de bicicleta", - "ALTERNATE PICKUP": "Recogida alternativa", - "DROP OFF BIKE": "DEVOLUCIÓN DE BICICLETA", - "ALTERNATE DROP OFF": "DEVOLUCIÓN DE BICICLETA ALTERNATIVA", - "BIKE STATION": "Estación de bicicleta", - "Station:": "Estación:", - "%d bike available": "%d bike available", - "%d bike available_plural": "%d bikes available", - "%d dock available": "%d dock available", - "%d dock available_plural": "%d docks available", - "Recommended Pick Up:": "Recogida recomendada:", - "Bicycle rental": "alquiler de bicicleta", - "Recommended Drop Off:": "Devolución recomendada:", - "Multimodal Trip Planner": "Planificador multimodo", - "Itineraries": "Rutas", - "This itinerary departs on a different day from the previous one": "", - "%d Itinerary Returned": "%d Ruta encontrada", - "%d Itinerary Returned_plural": "%d Rutas encontradas", - "Link to search": "Enlace a búsqueda", - "Previous Page": "Anterior", - "Next Page": "", - "CONTINUES AS": "CONTINÚA COMO", - "%d min late": "%d min tarde", - "%d min late_plural": "%d mins tarde", - "%d min early": "%d min early", - "%d min early_plural": "%d mins early", - "on time": "puntual", - "This itinerary departs on a different day than the one searched for": "", - "Arrived at destination with a rented bicycle!": "", - "End": "Fin", - "Trip Summary": "Resumen de la ruta", - "Travel": "Viaje", - "Time": "Duración", - "GenCost": "", - "Total Walk": "Total a pie", - "Total Bike": "Total en bicicleta", - "Total drive": "", - "Elevation Gained": "", - "Elevation Lost": "", - "Transfers": "Transbordos", - "Fare": "Ticket", - "Valid": "Válido", - "Link to Itinerary": "Enlace a ruta", - "Print": "Imprimir", - "Your Trip": "Tu Viaje", - "Email": "Email", - "every %d min": "cada %d min", - "every %d min_plural": "cada %d mins", - "Board at ": "Desde ", - "Stop": "Parada", - "Time in transit": "Durante", - "Route ID": "", - "Trip ID": "", - "Service Date": "", - "Trip Viewer": "Visor de ruta", - "late as": "no más tarde que", - "Stay on board": "mantente montado", - "Alight": "hasta ", - "at": "en", - "%(currency)s %(price)s": "%(currency)s %(price)s", - "Start: %(location)s at %(time_date)s": "Comienza: %(location)s a las %(time_date)s", - "Board": "Toma", - "(%(agency_id)s Stop ID #%(stop_id)s),": "(%(agency_id)s ID Parada #%(stop_id)s),", - "End: %(location)s at %(time_date)s": "Finaliza: %(location)s a las %(time_date)s", - "(%(agencyId)s Stop ID #%(id)s),": "", - "\nView itinerary online:\n%(itinerary_link)s\n": "\nVer ruta online:\n%(itinerary_link)s\n", - "We're sorry. The trip planner is temporarily unavailable. Please try again later.": "Lo sentimos. El planificador de ruta está fuera de servicio temporalmente. Inténtelo más tarde.", - "Trip is not possible. You might be trying to plan a trip outside the map data boundary.": "", - "No trip found. There may be no transit service within the maximum specified distance or at the specified time, or your start or end point might not be safely accessible.": "", - "No transit times available. The date may be past or too far in the future or there may not be transit service for your trip at the time you chose.": "Tiempos no disponibles. La información disponible podría no ser válida para la fecha actual o no hay rutas disponibles para tu viaje.", - "The trip planner is taking way too long to process your request. Please try again later.": "El planificador de rutas está tardando demasiado. Por favor, inténtalo más tarde.", - "The request has errors that the server is not willing or able to process.": "Error en la petición, el server no puede procesar la información.", - "Origin is unknown. Can you be a bit more descriptive?": "Origen desconocido. ¿Puedes ser un poco más descriptivo?", - "Destination is unknown. Can you be a bit more descriptive?": "Destino desconocido. ¿Puedes ser un poco más descriptivo?", - "Both origin and destination are unknown. Can you be a bit more descriptive?": "Origen y destino desconocidos ¿Puedes ser un poco más descriptivo?", - "Both origin and destination are not wheelchair accessible": "Origen y destino no son accesibles a silla de ruedas.", - "Origin is within a trivial distance of the destination.": "Origen y destino están demasiado cerca.", - "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.": "El planificador de rutas no está seguro de tu origen. Por favor, seleccione una de las siguientes opciones o introduzca un origen más exacto.", - "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.": "El planificador de rutas no está seguro de tu destino. Por favor, seleccione una de las siguientes opciones o introduzca un destino más exacto.", - "Both origin and destination are ambiguous. Please select from the following options, or be more specific.": "Origen y destino son ambiguos. Por favor, seleccione una de las siguientes opciones o introduzca un destino más exacto.", - "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are": "El triángulo de Seguridad, Llano y Tiempo debe ser seleccionado si está disponible.", - "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1": "El valor del triángulo de Seguridad, Llano y Tiempo debe sumar 1.", - "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE": "Si el triángulo de Seguridad, Llano y Tiempo está disponible, debe ser un TRIÁNGULO.", - "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set": "Si el tipo de optimización es triángulo, los factores de Seguridad, Llano y Tiempo tienen que estar seleccionados.", - "Set as Start Location": "Ruta desde aquí", - "Set as End Location": "Ruta hacia aquí", - "Destination": "Fin", - "Error %(error_id)d": "Error %(error_id)d", - "No Trip Found": "Viaje no encontrado", - "Your %(bike_share_name)s route": "Tu ruta %(bike_share_name)s", - "Your bike route": "Tu ruta en bicicleta", - "Walk to the %(bike_share_name)s dock.": "Camina hacia la estación %(bike_share_name)s.", - "Walk from the %(bike_share_name)s dock to your destination.": "Camina desde la estación %(bike_share_name)s hacia tu destino.", - "Your walk route": "Tu ruta a pie", - "Your route using the scooter": "", - "Your driving route": "Tu ruta en bicicleta", - "north": "Norte", - "northeast": "Nordeste", - "east": "Este", - "southeast": "Sureste", - "south": "Sur", - "southwest": "Suroeste", - "west": "Oeste", - "northwest": "Noroeste", - "hard left": "Izquierda fuerte", - "left": "izquierda", - "slight left": "Izquierda suave", - "continue": "continúa", - "slight right": "Derecha suave", - "right": "derecha", - "hard right": "Derecha fuerte", - "elevator": "ascensor", - "U-turn left": "Gira a la izquierda", - "U-turn right": "Gira a la derecha", - "Walk": "Camina", - "Cycle": "Bicicleta", - "Car": "Coche", - "Bus": "Autobús", - "Subway": "Metro", - "Train": "Tren", - "Ferry": "Barco", - "Light Rail": "Tranvía", - "Cable Car": "Bus Tranvía", - "Funicular": "Funicular", - "Aerial Tram": "Funicular", - "Airplane": "", - "Bicycle rental station": "estación de alquiler de bicicleta", - "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Toma la rotonda sentido contrario a las agujas del reloj hasta la %(ordinal_exit_number)s salida dirección %(street_name)s", - "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Toma la rotonda sentido contrario a las agujas del reloj hasta la %(ordinal_exit_number)s salida hacia %(street_name)s", - "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Toma la rotonda sentido a las agujas del reloj hasta la %(ordinal_exit_number)s salida dirección %(street_name)s", - "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Toma la rotonda sentido a las agujas del reloj hasta la %(ordinal_exit_number)s salida hacia %(street_name)s", - "Start on": "Comienza en", - " heading ": " dirección ", - "to continue on": "hacia", - "on to": "dirección", - "first": "primera", - "second": "segunda", - "third": "tercera", - "fourth": "cuarta", - "fifth": "quinta", - "sixth": "sexta", - "seventh": "séptima", - "eight": "octava", - "ninth": "novena", - "tenth": "décima", - "%d hr": "%d hr", - "%d hr_plural": "%d hrs", - "%d min": "%d min", - "%d min_plural": "%d mins", - "%d sec": "%d seg", - "%d sec_plural": "%d segs", - "OK": "Vale", - "Minimize": "Minimizar", - "Bring to front": "Traer al frente", - "Send to back": "Mandar al fondo", - "Route:": "Línea:", - "Variant:": "Variante:", - "Stop Finder": "Buscador de paradas", - "Feed": "Compañía", - "By ID": "Número:", - "By Name": "Nombre:", - "Search": "Buscar", - "No Stops Found": "Paradas no encontradas", - "Date": "Fecha", - "Find Stops": "Buscar paradas", - "(No Stop Selected)": "(Sin parada seleccionada)", - "Block": "Transbordo sin cambio de vehículo", - "Recenter": "Centrar", - "Viewer": "Visor", - "Quick": "Rápido", - "Flat": "Sin cuestas", - "Bike Friendly": "Adaptado a bicicleta", - "B": "B", - "F": "P", - "Q": "R", - "All Routes": "Todas las líneas", - "Save": "Guardar", - "Close": "Cerrar", - "Travel Options": "Opciones de viaje", - "Geocoder": "Geocoder", - "Arrive": "Llegar a las", - "Now": "Ahora", - "Wheelchair accessible trip:": "Ruta accesible a silla de ruedas:", - "Show Filtered Itineraries:": "", - "Travel by": "Viajar en", - "Preferred Routes": "Líneas favoritas", - "Edit": "Editar", - "None": "Niguna", - "Weight": "Prioridad", - "Banned routes": "Líneas prohibidas", - "Use": "Usar", - "My Own Bike": "Mi propia bicileta", - "A Shared Bike": "Una bicicleta compartida", - "Plan Your Trip": "Calcular Viaje", - "Additional parameters": "", - " to _direction": " dirección ", - " to _bus_direction": " dirección ", - "Start_template": "Inicio", - "Depart_itinerary": "Comienza", - "depart_itinerary": "Comienza", - "Start_popup": "Inicio", - "Depart_tripoptions": "Salir a las" -} \ No newline at end of file + "Transit": "Transporte Público", + "Bus Only": "Sólo autobús", + "Rail Only": "Sólo tren", + "Airplane Only": "", + "Transit, No Airplane": "", + "Bicycle Only": "Sólo bicicletas", + "Bicycle & Transit": "Bicicleta y Transporte Público", + "Walk Only": "Sólo a pie", + "Car Only": "Comienza en", + "Taxi": "", + "Park and Ride": "Aparcar y Transporte Público", + "Ride and Kiss (Car Pickup)": "", + "Kiss and Ride (Car Dropoff)": "", + "Bike and Ride": "Bicicleta y Transporte Público", + "Rented Bicycle": "Alquiler bicicleta", + "Transit & Rented Bicycle": "Transporte Público y Alquiler de bicicleta", + "Rented Scooter": "", + "Transit & Rented Scooter": "Transporte Público y Alquiler de bicicleta", + "Transit with flex access": "", + "Transit with flex egress": "", + "Transit with flex access and egress": "", + "Direct flex search": "", + "Recenter Map Here": "Centrar Mapa Aquí", + "Zoom In": "Acercar", + "Zoom Out": "Alejar", + "Minimize all": "Minimizar todo", + "Unminimize all": "Ampliar todo", + "Stop Viewer": "Visor de parada", + "Plan Trip": "Calcular viaje", + "From Stop": "Desde parada", + "To Stop": "Hasta parada", + "Routes Serving Stop": "Rutas por la parada", + "Bike Share Planner": "Planificador de Bicicleta Compartida", + "Trip Options": "Opciones de viaje", + "PICK UP BIKE": "Recogida de bicicleta", + "ALTERNATE PICKUP": "Recogida alternativa", + "DROP OFF BIKE": "DEVOLUCIÓN DE BICICLETA", + "ALTERNATE DROP OFF": "DEVOLUCIÓN DE BICICLETA ALTERNATIVA", + "BIKE STATION": "Estación de bicicleta", + "Station:": "Estación:", + "%d bike available": "%d bike available", + "%d bike available_plural": "%d bikes available", + "%d dock available": "%d dock available", + "%d dock available_plural": "%d docks available", + "Recommended Pick Up:": "Recogida recomendada:", + "Bicycle rental": "alquiler de bicicleta", + "Recommended Drop Off:": "Devolución recomendada:", + "Multimodal Trip Planner": "Planificador multimodo", + "Itineraries": "Rutas", + "This itinerary departs on a different day from the previous one": "", + "%d Itinerary Returned": "%d Ruta encontrada", + "%d Itinerary Returned_plural": "%d Rutas encontradas", + "Link to search": "Enlace a búsqueda", + "Previous Page": "Anterior", + "Next Page": "", + "CONTINUES AS": "CONTINÚA COMO", + "%d min late": "%d min tarde", + "%d min late_plural": "%d mins tarde", + "%d min early": "%d min early", + "%d min early_plural": "%d mins early", + "on time": "puntual", + "This itinerary departs on a different day than the one searched for": "", + "Arrived at destination with a rented bicycle!": "", + "End": "Fin", + "Trip Summary": "Resumen de la ruta", + "Travel": "Viaje", + "Time": "Duración", + "GenCost": "", + "Total Walk": "Total a pie", + "Total Bike": "Total en bicicleta", + "Total drive": "", + "Elevation Gained": "", + "Elevation Lost": "", + "Transfers": "Transbordos", + "Fare": "Ticket", + "Valid": "Válido", + "Link to Itinerary": "Enlace a ruta", + "Print": "Imprimir", + "Your Trip": "Tu Viaje", + "Email": "Email", + "every %d min": "cada %d min", + "every %d min_plural": "cada %d mins", + "Board at ": "Desde ", + "Stop": "Parada", + "Time in transit": "Durante", + "Route ID": "", + "Trip ID": "", + "Service Date": "", + "Trip Viewer": "Visor de ruta", + "late as": "no más tarde que", + "Stay on board": "mantente montado", + "Alight": "hasta ", + "at": "en", + "%(currency)s %(price)s": "%(currency)s %(price)s", + "Start: %(location)s at %(time_date)s": "Comienza: %(location)s a las %(time_date)s", + "Board": "Toma", + "(%(agency_id)s Stop ID #%(stop_id)s),": "(%(agency_id)s ID Parada #%(stop_id)s),", + "End: %(location)s at %(time_date)s": "Finaliza: %(location)s a las %(time_date)s", + "(%(agencyId)s Stop ID #%(id)s),": "", + "\nView itinerary online:\n%(itinerary_link)s\n": "\nVer ruta online:\n%(itinerary_link)s\n", + "We're sorry. The trip planner is temporarily unavailable. Please try again later.": "Lo sentimos. El planificador de ruta está fuera de servicio temporalmente. Inténtelo más tarde.", + "Trip is not possible. You might be trying to plan a trip outside the map data boundary.": "", + "No trip found. There may be no transit service within the maximum specified distance or at the specified time, or your start or end point might not be safely accessible.": "", + "No transit times available. The date may be past or too far in the future or there may not be transit service for your trip at the time you chose.": "Tiempos no disponibles. La información disponible podría no ser válida para la fecha actual o no hay rutas disponibles para tu viaje.", + "The trip planner is taking way too long to process your request. Please try again later.": "El planificador de rutas está tardando demasiado. Por favor, inténtalo más tarde.", + "The request has errors that the server is not willing or able to process.": "Error en la petición, el server no puede procesar la información.", + "Origin is unknown. Can you be a bit more descriptive?": "Origen desconocido. ¿Puedes ser un poco más descriptivo?", + "Destination is unknown. Can you be a bit more descriptive?": "Destino desconocido. ¿Puedes ser un poco más descriptivo?", + "Both origin and destination are unknown. Can you be a bit more descriptive?": "Origen y destino desconocidos ¿Puedes ser un poco más descriptivo?", + "Both origin and destination are not wheelchair accessible": "Origen y destino no son accesibles a silla de ruedas.", + "Origin is within a trivial distance of the destination.": "Origen y destino están demasiado cerca.", + "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.": "El planificador de rutas no está seguro de tu origen. Por favor, seleccione una de las siguientes opciones o introduzca un origen más exacto.", + "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.": "El planificador de rutas no está seguro de tu destino. Por favor, seleccione una de las siguientes opciones o introduzca un destino más exacto.", + "Both origin and destination are ambiguous. Please select from the following options, or be more specific.": "Origen y destino son ambiguos. Por favor, seleccione una de las siguientes opciones o introduzca un destino más exacto.", + "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are": "El triángulo de Seguridad, Llano y Tiempo debe ser seleccionado si está disponible.", + "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1": "El valor del triángulo de Seguridad, Llano y Tiempo debe sumar 1.", + "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE": "Si el triángulo de Seguridad, Llano y Tiempo está disponible, debe ser un TRIÁNGULO.", + "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set": "Si el tipo de optimización es triángulo, los factores de Seguridad, Llano y Tiempo tienen que estar seleccionados.", + "Set as Start Location": "Ruta desde aquí", + "Set as End Location": "Ruta hacia aquí", + "Destination": "Fin", + "Error %(error_id)d": "Error %(error_id)d", + "No Trip Found": "Viaje no encontrado", + "Your %(bike_share_name)s route": "Tu ruta %(bike_share_name)s", + "Your bike route": "Tu ruta en bicicleta", + "Walk to the %(bike_share_name)s dock.": "Camina hacia la estación %(bike_share_name)s.", + "Walk from the %(bike_share_name)s dock to your destination.": "Camina desde la estación %(bike_share_name)s hacia tu destino.", + "Your walk route": "Tu ruta a pie", + "Your route using the scooter": "", + "Your driving route": "Tu ruta en bicicleta", + "north": "Norte", + "northeast": "Nordeste", + "east": "Este", + "southeast": "Sureste", + "south": "Sur", + "southwest": "Suroeste", + "west": "Oeste", + "northwest": "Noroeste", + "hard left": "Izquierda fuerte", + "left": "izquierda", + "slight left": "Izquierda suave", + "continue": "continúa", + "slight right": "Derecha suave", + "right": "derecha", + "hard right": "Derecha fuerte", + "elevator": "ascensor", + "U-turn left": "Gira a la izquierda", + "U-turn right": "Gira a la derecha", + "Walk": "Camina", + "Cycle": "Bicicleta", + "Car": "Coche", + "Bus": "Autobús", + "Subway": "Metro", + "Train": "Tren", + "Ferry": "Barco", + "Light Rail": "Tranvía", + "Cable Car": "Bus Tranvía", + "Funicular": "Funicular", + "Aerial Tram": "Funicular", + "Airplane": "", + "Bicycle rental station": "estación de alquiler de bicicleta", + "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Toma la rotonda sentido contrario a las agujas del reloj hasta la %(ordinal_exit_number)s salida dirección %(street_name)s", + "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Toma la rotonda sentido contrario a las agujas del reloj hasta la %(ordinal_exit_number)s salida hacia %(street_name)s", + "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Toma la rotonda sentido a las agujas del reloj hasta la %(ordinal_exit_number)s salida dirección %(street_name)s", + "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Toma la rotonda sentido a las agujas del reloj hasta la %(ordinal_exit_number)s salida hacia %(street_name)s", + "Start on": "Comienza en", + " heading ": " dirección ", + "to continue on": "hacia", + "on to": "dirección", + "first": "primera", + "second": "segunda", + "third": "tercera", + "fourth": "cuarta", + "fifth": "quinta", + "sixth": "sexta", + "seventh": "séptima", + "eight": "octava", + "ninth": "novena", + "tenth": "décima", + "%d hr": "%d hr", + "%d hr_plural": "%d hrs", + "%d min": "%d min", + "%d min_plural": "%d mins", + "%d sec": "%d seg", + "%d sec_plural": "%d segs", + "OK": "Vale", + "Minimize": "Minimizar", + "Bring to front": "Traer al frente", + "Send to back": "Mandar al fondo", + "Route:": "Línea:", + "Variant:": "Variante:", + "Stop Finder": "Buscador de paradas", + "Feed": "Compañía", + "By ID": "Número:", + "By Name": "Nombre:", + "Search": "Buscar", + "No Stops Found": "Paradas no encontradas", + "Date": "Fecha", + "Find Stops": "Buscar paradas", + "(No Stop Selected)": "(Sin parada seleccionada)", + "Block": "Transbordo sin cambio de vehículo", + "Recenter": "Centrar", + "Viewer": "Visor", + "Quick": "Rápido", + "Flat": "Sin cuestas", + "Bike Friendly": "Adaptado a bicicleta", + "B": "B", + "F": "P", + "Q": "R", + "All Routes": "Todas las líneas", + "Save": "Guardar", + "Close": "Cerrar", + "Travel Options": "Opciones de viaje", + "Geocoder": "Geocoder", + "Arrive": "Llegar a las", + "Now": "Ahora", + "Wheelchair accessible trip:": "Ruta accesible a silla de ruedas:", + "Show Filtered Itineraries:": "", + "Travel by": "Viajar en", + "Preferred Routes": "Líneas favoritas", + "Edit": "Editar", + "None": "Niguna", + "Weight": "Prioridad", + "Banned routes": "Líneas prohibidas", + "Use": "Usar", + "My Own Bike": "Mi propia bicileta", + "A Shared Bike": "Una bicicleta compartida", + "Plan Your Trip": "Calcular Viaje", + "Additional parameters": "", + " to _direction": " dirección ", + " to _bus_direction": " dirección ", + "Start_template": "Inicio", + "Depart_itinerary": "Comienza", + "depart_itinerary": "Comienza", + "Start_popup": "Inicio", + "Depart_tripoptions": "Salir a las" +} 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..ced9f30440d 100644 --- a/application/src/client/classic-debug/js/otp/locale/fr.json +++ b/application/src/client/classic-debug/js/otp/locale/fr.json @@ -1,238 +1,238 @@ { - "Transit": "Transports en commun", - "Bus Only": "Bus uniquement", - "Rail Only": "Ferré uniquement", - "Airplane Only": "", - "Transit, No Airplane": "", - "Bicycle Only": "Vélo uniquement", - "Bicycle & Transit": "Transports en commun + Vélo", - "Walk Only": "Marche seulement", - "Car Only": "Partir de", - "Taxi": "", - "Park and Ride": "Parc Relais", - "Ride and Kiss (Car Pickup)": "", - "Kiss and Ride (Car Dropoff)": "", - "Bike and Ride": "Parc Relais Vélo", - "Rented Bicycle": "Vélo Libre Service", - "Transit & Rented Bicycle": "Transports en commun et Vélo Libre Service", - "Rented Scooter": "", - "Transit & Rented Scooter": "Transports en commun et Vélo Libre Service", - "Transit with flex access": "", - "Transit with flex egress": "", - "Transit with flex access and egress": "", - "Direct flex search": "", - "Recenter Map Here": "Centrer la carte ici", - "Zoom In": "Zoomer", - "Zoom Out": "Dézoomer", - "Minimize all": "Tout minimiser", - "Unminimize all": "Tout restaurer", - "Stop Viewer": "Visualisateur d'arrêt", - "Plan Trip": "Organiser un voyage", - "From Stop": "De l'arrêt", - "To Stop": "À l'arrêt", - "Routes Serving Stop": "Lignes desservant l'arrêt", - "Bike Share Planner": "Organisation en Vélo Libre Service", - "Trip Options": "Paramètres de l'itinéraire", - "PICK UP BIKE": "Récupérer un vélo", - "ALTERNATE PICKUP": "Alternative de récupération de vélo", - "DROP OFF BIKE": "Déposer le vélo", - "ALTERNATE DROP OFF": "Alternative de dépôt de vélo", - "BIKE STATION": "Station de vélos", - "Station:": "Station :", - "%d bike available": "%d vélo disponible", - "%d bike available_plural": "%d vélos disponibles", - "%d dock available": "%d emplacements disponibles", - "%d dock available_plural": "%d emplacements disponibles", - "Recommended Pick Up:": "Station de récupération de vélo recommandée :", - "Bicycle rental": "Station de vélo libre service", - "Recommended Drop Off:": "Station de dépôt de vélo recommandée", - "Multimodal Trip Planner": "Planificateur d'itinéraires multimodal", - "Itineraries": "Itinéraires", - "This itinerary departs on a different day from the previous one": "", - "%d Itinerary Returned": "%d itinéraire trouvé", - "%d Itinerary Returned_plural": "%d itinéraires trouvés", - "Link to search": "Lien vers cette recherche", - "Previous Page": "Précédent", - "Next Page": "", - "CONTINUES AS": "Continue comme", - "%d min late": "en retard de %d min", - "%d min late_plural": "en retard de %d mins", - "%d min early": "en avance de %d min", - "%d min early_plural": "en avance de %d mins", - "on time": "à l'heure", - "This itinerary departs on a different day than the one searched for": "", - "Arrived at destination with a rented bicycle!": "", - "End": "Arrivée", - "Trip Summary": "Résumé du voyage", - "Travel": "Voyage", - "Time": "Durée", - "GenCost": "", - "Total Walk": "Total de marche", - "Total Bike": "Total de vélo", - "Total drive": "", - "Elevation Gained": "", - "Elevation Lost": "", - "Transfers": "correspondances", - "Fare": "Tarif", - "Valid": "Valide le", - "Link to Itinerary": "Lien vers l'itinéraire", - "Print": "Imprimer", - "Your Trip": "Votre voyage", - "Email": "Courriel", - "every %d min": "toutes les %d min", - "every %d min_plural": "toutes les %d mins", - "Board at ": "Montez à ", - "Stop": "Arrêt", - "Time in transit": "Temps de correspondance", - "Route ID": "", - "Trip ID": "", - "Service Date": "", - "Trip Viewer": "Visualisateur de voyage", - "late as": "en retard à", - "Stay on board": "rester à bord", - "Alight": "Descendre", - "at": "à", - "%(currency)s %(price)s": "%(price)s %(currency)s", - "Start: %(location)s at %(time_date)s": "Départ : %(location)s à %(time_date)s", - "Board": "Monter", - "(%(agency_id)s Stop ID #%(stop_id)s),": "arrêt #%(stop_id)s) de (%(agency_id)s,", - "End: %(location)s at %(time_date)s": "Arrivée : %(location)s à %(time_date)s", - "(%(agencyId)s Stop ID #%(id)s),": "", - "\nView itinerary online:\n%(itinerary_link)s\n": "\nVoir l'itinéraire en ligne :\n%(itinerary_link)s\n", - "We're sorry. The trip planner is temporarily unavailable. Please try again later.": "Nous sommes désolé. Le planificateur de voyage est temporairement indisponible. Merci de réessayer plus tard.", - "Trip is not possible. You might be trying to plan a trip outside the map data boundary.": "", - "No trip found. There may be no transit service within the maximum specified distance or at the specified time, or your start or end point might not be safely accessible.": "", - "No transit times available. The date may be past or too far in the future or there may not be transit service for your trip at the time you chose.": "Aucune durée de voyage disponible. La date est peut être passée ou trop loin dans le futur, ou il n'y a peut être pas de transports en service pour votre trajet à l'heure choisie.", - "The trip planner is taking way too long to process your request. Please try again later.": "Le planificateur de voyage prend largement trop de temps à étudier votre demande. Merci de réessayer plus tard.", - "The request has errors that the server is not willing or able to process.": "La requête renvoie des erreurs que le serveur ne souhaite ou ne peut pas traiter.", - "Origin is unknown. Can you be a bit more descriptive?": "L'origine est inconnue. Pouvez-vous être plus précis ?", - "Destination is unknown. Can you be a bit more descriptive?": "La destination est inconnue. Pouvez-vous être plus précis ?", - "Both origin and destination are unknown. Can you be a bit more descriptive?": "L'origine et la destination sont toutes deux inconnues. Pouvez-vous être plus précis ?", - "Both origin and destination are not wheelchair accessible": "Ni l'origine ni la destination ne sont accessibles en fauteuil roulant", - "Origin is within a trivial distance of the destination.": "L'origine est à une distance trop courte de la destination.", - "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.": "Le planificateur de voyage n'est pas sûr du lieu d'où vous voulez partir. Merci de le sélectionner parmi les options suivantes, ou d'être plus précis.", - "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.": "Le planificateur de voyage n'est pas sûr du lieu où vous désirez vous rendre. Merci de le sélectionner parmi les options suivantes, ou d'être plus précis.", - "Both origin and destination are ambiguous. Please select from the following options, or be more specific.": "L'origine et la destination sont toutes deux ambigües. Merci de les sélectionner parmi les options suivantes, ou d'être plus précis.", - "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are": "Toutes les options triangleSafetyFactor, triangleSlopeFactor, et triangleTimeFactor doivent être paramétrées si l'une d'elles l'est", - "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1": "Les valeurs de triangleSafetyFactor, triangleSlopeFactor, et triangleTimeFactor doivent avoir pour addition 1", - "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE": "Si triangleSafetyFactor, triangleSlopeFactor, et triangleTimeFactor sont fournis, OptimizeType doit être TRIANGLE", - "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set": "Si OptimizeType est TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, et triangleTimeFactor doivent être paramétrées", - "Set as Start Location": "Définir comme point de départ", - "Set as End Location": "Définir comme point d'arrivée", - "Destination": "Destination", - "Error %(error_id)d": "Erreur %(error_id)d", - "No Trip Found": "Aucun voyage trouvé", - "Your %(bike_share_name)s route": "Votre itinéraire en %(bike_share_name)s", - "Your bike route": "Votre itinéraire en vélo", - "Walk to the %(bike_share_name)s dock.": "Marcher jusqu'à l'emplacement %(bike_share_name)s.", - "Walk from the %(bike_share_name)s dock to your destination.": "Marcher de l'emplacement %(bike_share_name)s jusqu'à votre destination", - "Your walk route": "Votre itinéraire à pieds", - "Your route using the scooter": "", - "Your driving route": "Votre itinéraire en vélo", - "north": "nord", - "northeast": "nord-est", - "east": "est", - "southeast": "sud-est", - "south": "sud", - "southwest": "sud-ouest", - "west": "ouest", - "northwest": "nord-ouest", - "hard left": "complètement à gauche", - "left": "à gauche", - "slight left": "légèrement à gauche", - "continue": "continuer", - "slight right": "légèrement à droite", - "right": "à droite", - "hard right": "complètement à droite", - "elevator": "ascenseur", - "U-turn left": "virage en U à gauche", - "U-turn right": "virage en U à droite", - "Walk": "Marche à pied", - "Cycle": "Vélo", - "Car": "Voiture", - "Bus": "Bus", - "Subway": "Métro", - "Train": "Train", - "Ferry": "Ferry", - "Light Rail": "Tram ou Trolley", - "Cable Car": "Tramway funiculaire", - "Funicular": "Funiculaire", - "Aerial Tram": "Téléphérique", - "Airplane": "", - "Bicycle rental station": "Station de vélo libre service", - "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Prendre le rond-point dans le sens contraire des aiguilles d'une montre jusqu'à la %(ordinal_exit_number)s sortie sur %(street_name)s", - "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Prendre le rond-point dans le sens contraire des aiguilles d'une montre jusqu'à la %(ordinal_exit_number)s sortie sur %(street_name)s", - "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Prendre le rond-point dans le sens des aiguilles d'une montre jusqu'à la %(ordinal_exit_number)s sortie sur %(street_name)s", - "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Prendre le rond-point dans le sens des aiguilles d'une montre jusqu'à la %(ordinal_exit_number)s sortie sur %(street_name)s", - "Start on": "Partir de", - " heading ": " vers le ", - "to continue on": "pour continuer sur", - "on to": "sur", - "first": "première", - "second": "seconde", - "third": "troisième", - "fourth": "quatrième", - "fifth": "cinquième", - "sixth": "sixième", - "seventh": "septième", - "eight": "huitième", - "ninth": "neuvième", - "tenth": "dixième", - "%d hr": "%d h", - "%d hr_plural": "%d h", - "%d min": "%d min", - "%d min_plural": "%d mins", - "%d sec": "%d s", - "%d sec_plural": "%d s", - "OK": "OK", - "Minimize": "Minimiser", - "Bring to front": "Placer au dessus", - "Send to back": "Placer en dessous", - "Route:": "Ligne :", - "Variant:": "Variante :", - "Stop Finder": "Recherche d'arrêt", - "Feed": "Transporteur", - "By ID": "Par identifiant", - "By Name": "Par nom", - "Search": "Recherche", - "No Stops Found": "Aucun arrêt trouvé", - "Date": "Date", - "Find Stops": "Trouver les arrêts", - "(No Stop Selected)": "(Aucun arrêt sélectionné)", - "Block": "Bloc", - "Recenter": "Recentrer", - "Viewer": "Visualisateur", - "Quick": "Le plus Rapide", - "Flat": "Le plus Plat", - "Bike Friendly": "Adapté au vélo", - "B": "A", - "F": "P", - "Q": "R", - "All Routes": "Tous les itinéraires", - "Save": "Sauvegarder", - "Close": "Fermer", - "Travel Options": "Paramètres de voyage", - "Geocoder": "Géocodeur", - "Arrive": "Arrivée", - "Now": "Maintenant", - "Wheelchair accessible trip:": "Accessible aux fauteuils roulants:", - "Show Filtered Itineraries:": "", - "Travel by": "Voyager par", - "Preferred Routes": "Itinéraires préférés", - "Edit": "Modifier", - "None": "Aucune", - "Weight": "Pondération", - "Banned routes": "Itinéraires à éviter", - "Use": "Utiliser", - "My Own Bike": "mon propre vélo", - "A Shared Bike": "un Vélo Libre Service", - "Plan Your Trip": "Calculer votre itinéraire", - "Additional parameters": "", - " to _direction": " jusqu'à ", - " to _bus_direction": " vers ", - "Start_template": "Départ", - "Depart_itinerary": "Départ", - "depart_itinerary": "Départ", - "Start_popup": "Départ", - "Depart_tripoptions": "Départ" -} \ No newline at end of file + "Transit": "Transports en commun", + "Bus Only": "Bus uniquement", + "Rail Only": "Ferré uniquement", + "Airplane Only": "", + "Transit, No Airplane": "", + "Bicycle Only": "Vélo uniquement", + "Bicycle & Transit": "Transports en commun + Vélo", + "Walk Only": "Marche seulement", + "Car Only": "Partir de", + "Taxi": "", + "Park and Ride": "Parc Relais", + "Ride and Kiss (Car Pickup)": "", + "Kiss and Ride (Car Dropoff)": "", + "Bike and Ride": "Parc Relais Vélo", + "Rented Bicycle": "Vélo Libre Service", + "Transit & Rented Bicycle": "Transports en commun et Vélo Libre Service", + "Rented Scooter": "", + "Transit & Rented Scooter": "Transports en commun et Vélo Libre Service", + "Transit with flex access": "", + "Transit with flex egress": "", + "Transit with flex access and egress": "", + "Direct flex search": "", + "Recenter Map Here": "Centrer la carte ici", + "Zoom In": "Zoomer", + "Zoom Out": "Dézoomer", + "Minimize all": "Tout minimiser", + "Unminimize all": "Tout restaurer", + "Stop Viewer": "Visualisateur d'arrêt", + "Plan Trip": "Organiser un voyage", + "From Stop": "De l'arrêt", + "To Stop": "À l'arrêt", + "Routes Serving Stop": "Lignes desservant l'arrêt", + "Bike Share Planner": "Organisation en Vélo Libre Service", + "Trip Options": "Paramètres de l'itinéraire", + "PICK UP BIKE": "Récupérer un vélo", + "ALTERNATE PICKUP": "Alternative de récupération de vélo", + "DROP OFF BIKE": "Déposer le vélo", + "ALTERNATE DROP OFF": "Alternative de dépôt de vélo", + "BIKE STATION": "Station de vélos", + "Station:": "Station :", + "%d bike available": "%d vélo disponible", + "%d bike available_plural": "%d vélos disponibles", + "%d dock available": "%d emplacements disponibles", + "%d dock available_plural": "%d emplacements disponibles", + "Recommended Pick Up:": "Station de récupération de vélo recommandée :", + "Bicycle rental": "Station de vélo libre service", + "Recommended Drop Off:": "Station de dépôt de vélo recommandée", + "Multimodal Trip Planner": "Planificateur d'itinéraires multimodal", + "Itineraries": "Itinéraires", + "This itinerary departs on a different day from the previous one": "", + "%d Itinerary Returned": "%d itinéraire trouvé", + "%d Itinerary Returned_plural": "%d itinéraires trouvés", + "Link to search": "Lien vers cette recherche", + "Previous Page": "Précédent", + "Next Page": "", + "CONTINUES AS": "Continue comme", + "%d min late": "en retard de %d min", + "%d min late_plural": "en retard de %d mins", + "%d min early": "en avance de %d min", + "%d min early_plural": "en avance de %d mins", + "on time": "à l'heure", + "This itinerary departs on a different day than the one searched for": "", + "Arrived at destination with a rented bicycle!": "", + "End": "Arrivée", + "Trip Summary": "Résumé du voyage", + "Travel": "Voyage", + "Time": "Durée", + "GenCost": "", + "Total Walk": "Total de marche", + "Total Bike": "Total de vélo", + "Total drive": "", + "Elevation Gained": "", + "Elevation Lost": "", + "Transfers": "correspondances", + "Fare": "Tarif", + "Valid": "Valide le", + "Link to Itinerary": "Lien vers l'itinéraire", + "Print": "Imprimer", + "Your Trip": "Votre voyage", + "Email": "Courriel", + "every %d min": "toutes les %d min", + "every %d min_plural": "toutes les %d mins", + "Board at ": "Montez à ", + "Stop": "Arrêt", + "Time in transit": "Temps de correspondance", + "Route ID": "", + "Trip ID": "", + "Service Date": "", + "Trip Viewer": "Visualisateur de voyage", + "late as": "en retard à", + "Stay on board": "rester à bord", + "Alight": "Descendre", + "at": "à", + "%(currency)s %(price)s": "%(price)s %(currency)s", + "Start: %(location)s at %(time_date)s": "Départ : %(location)s à %(time_date)s", + "Board": "Monter", + "(%(agency_id)s Stop ID #%(stop_id)s),": "arrêt #%(stop_id)s) de (%(agency_id)s,", + "End: %(location)s at %(time_date)s": "Arrivée : %(location)s à %(time_date)s", + "(%(agencyId)s Stop ID #%(id)s),": "", + "\nView itinerary online:\n%(itinerary_link)s\n": "\nVoir l'itinéraire en ligne :\n%(itinerary_link)s\n", + "We're sorry. The trip planner is temporarily unavailable. Please try again later.": "Nous sommes désolé. Le planificateur de voyage est temporairement indisponible. Merci de réessayer plus tard.", + "Trip is not possible. You might be trying to plan a trip outside the map data boundary.": "", + "No trip found. There may be no transit service within the maximum specified distance or at the specified time, or your start or end point might not be safely accessible.": "", + "No transit times available. The date may be past or too far in the future or there may not be transit service for your trip at the time you chose.": "Aucune durée de voyage disponible. La date est peut être passée ou trop loin dans le futur, ou il n'y a peut être pas de transports en service pour votre trajet à l'heure choisie.", + "The trip planner is taking way too long to process your request. Please try again later.": "Le planificateur de voyage prend largement trop de temps à étudier votre demande. Merci de réessayer plus tard.", + "The request has errors that the server is not willing or able to process.": "La requête renvoie des erreurs que le serveur ne souhaite ou ne peut pas traiter.", + "Origin is unknown. Can you be a bit more descriptive?": "L'origine est inconnue. Pouvez-vous être plus précis ?", + "Destination is unknown. Can you be a bit more descriptive?": "La destination est inconnue. Pouvez-vous être plus précis ?", + "Both origin and destination are unknown. Can you be a bit more descriptive?": "L'origine et la destination sont toutes deux inconnues. Pouvez-vous être plus précis ?", + "Both origin and destination are not wheelchair accessible": "Ni l'origine ni la destination ne sont accessibles en fauteuil roulant", + "Origin is within a trivial distance of the destination.": "L'origine est à une distance trop courte de la destination.", + "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.": "Le planificateur de voyage n'est pas sûr du lieu d'où vous voulez partir. Merci de le sélectionner parmi les options suivantes, ou d'être plus précis.", + "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.": "Le planificateur de voyage n'est pas sûr du lieu où vous désirez vous rendre. Merci de le sélectionner parmi les options suivantes, ou d'être plus précis.", + "Both origin and destination are ambiguous. Please select from the following options, or be more specific.": "L'origine et la destination sont toutes deux ambigües. Merci de les sélectionner parmi les options suivantes, ou d'être plus précis.", + "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are": "Toutes les options triangleSafetyFactor, triangleSlopeFactor, et triangleTimeFactor doivent être paramétrées si l'une d'elles l'est", + "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1": "Les valeurs de triangleSafetyFactor, triangleSlopeFactor, et triangleTimeFactor doivent avoir pour addition 1", + "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE": "Si triangleSafetyFactor, triangleSlopeFactor, et triangleTimeFactor sont fournis, OptimizeType doit être TRIANGLE", + "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set": "Si OptimizeType est TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, et triangleTimeFactor doivent être paramétrées", + "Set as Start Location": "Définir comme point de départ", + "Set as End Location": "Définir comme point d'arrivée", + "Destination": "Destination", + "Error %(error_id)d": "Erreur %(error_id)d", + "No Trip Found": "Aucun voyage trouvé", + "Your %(bike_share_name)s route": "Votre itinéraire en %(bike_share_name)s", + "Your bike route": "Votre itinéraire en vélo", + "Walk to the %(bike_share_name)s dock.": "Marcher jusqu'à l'emplacement %(bike_share_name)s.", + "Walk from the %(bike_share_name)s dock to your destination.": "Marcher de l'emplacement %(bike_share_name)s jusqu'à votre destination", + "Your walk route": "Votre itinéraire à pieds", + "Your route using the scooter": "", + "Your driving route": "Votre itinéraire en vélo", + "north": "nord", + "northeast": "nord-est", + "east": "est", + "southeast": "sud-est", + "south": "sud", + "southwest": "sud-ouest", + "west": "ouest", + "northwest": "nord-ouest", + "hard left": "complètement à gauche", + "left": "à gauche", + "slight left": "légèrement à gauche", + "continue": "continuer", + "slight right": "légèrement à droite", + "right": "à droite", + "hard right": "complètement à droite", + "elevator": "ascenseur", + "U-turn left": "virage en U à gauche", + "U-turn right": "virage en U à droite", + "Walk": "Marche à pied", + "Cycle": "Vélo", + "Car": "Voiture", + "Bus": "Bus", + "Subway": "Métro", + "Train": "Train", + "Ferry": "Ferry", + "Light Rail": "Tram ou Trolley", + "Cable Car": "Tramway funiculaire", + "Funicular": "Funiculaire", + "Aerial Tram": "Téléphérique", + "Airplane": "", + "Bicycle rental station": "Station de vélo libre service", + "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Prendre le rond-point dans le sens contraire des aiguilles d'une montre jusqu'à la %(ordinal_exit_number)s sortie sur %(street_name)s", + "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Prendre le rond-point dans le sens contraire des aiguilles d'une montre jusqu'à la %(ordinal_exit_number)s sortie sur %(street_name)s", + "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Prendre le rond-point dans le sens des aiguilles d'une montre jusqu'à la %(ordinal_exit_number)s sortie sur %(street_name)s", + "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Prendre le rond-point dans le sens des aiguilles d'une montre jusqu'à la %(ordinal_exit_number)s sortie sur %(street_name)s", + "Start on": "Partir de", + " heading ": " vers le ", + "to continue on": "pour continuer sur", + "on to": "sur", + "first": "première", + "second": "seconde", + "third": "troisième", + "fourth": "quatrième", + "fifth": "cinquième", + "sixth": "sixième", + "seventh": "septième", + "eight": "huitième", + "ninth": "neuvième", + "tenth": "dixième", + "%d hr": "%d h", + "%d hr_plural": "%d h", + "%d min": "%d min", + "%d min_plural": "%d mins", + "%d sec": "%d s", + "%d sec_plural": "%d s", + "OK": "OK", + "Minimize": "Minimiser", + "Bring to front": "Placer au dessus", + "Send to back": "Placer en dessous", + "Route:": "Ligne :", + "Variant:": "Variante :", + "Stop Finder": "Recherche d'arrêt", + "Feed": "Transporteur", + "By ID": "Par identifiant", + "By Name": "Par nom", + "Search": "Recherche", + "No Stops Found": "Aucun arrêt trouvé", + "Date": "Date", + "Find Stops": "Trouver les arrêts", + "(No Stop Selected)": "(Aucun arrêt sélectionné)", + "Block": "Bloc", + "Recenter": "Recentrer", + "Viewer": "Visualisateur", + "Quick": "Le plus Rapide", + "Flat": "Le plus Plat", + "Bike Friendly": "Adapté au vélo", + "B": "A", + "F": "P", + "Q": "R", + "All Routes": "Tous les itinéraires", + "Save": "Sauvegarder", + "Close": "Fermer", + "Travel Options": "Paramètres de voyage", + "Geocoder": "Géocodeur", + "Arrive": "Arrivée", + "Now": "Maintenant", + "Wheelchair accessible trip:": "Accessible aux fauteuils roulants:", + "Show Filtered Itineraries:": "", + "Travel by": "Voyager par", + "Preferred Routes": "Itinéraires préférés", + "Edit": "Modifier", + "None": "Aucune", + "Weight": "Pondération", + "Banned routes": "Itinéraires à éviter", + "Use": "Utiliser", + "My Own Bike": "mon propre vélo", + "A Shared Bike": "un Vélo Libre Service", + "Plan Your Trip": "Calculer votre itinéraire", + "Additional parameters": "", + " to _direction": " jusqu'à ", + " to _bus_direction": " vers ", + "Start_template": "Départ", + "Depart_itinerary": "Départ", + "depart_itinerary": "Départ", + "Start_popup": "Départ", + "Depart_tripoptions": "Départ" +} 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..518dc407bc2 100644 --- a/application/src/client/classic-debug/js/otp/locale/hu.json +++ b/application/src/client/classic-debug/js/otp/locale/hu.json @@ -1,238 +1,238 @@ { - "Transit": "Tömegközlekedés", - "Bus Only": "Csak busz", - "Rail Only": "Csak vasút", - "Airplane Only": "Csak repülőgép", - "Transit, No Airplane": "Tömegközlekedés, repülés nélkül", - "Bicycle Only": "Csak kerékpár", - "Bicycle & Transit": "Kerékpár & tömegközlekedés", - "Walk Only": "Csak séta", - "Car Only": "Csak autó", - "Taxi": "Taxi", - "Park and Ride": "P+R (Park & Ride)", - "Ride and Kiss (Car Pickup)": "", - "Kiss and Ride (Car Dropoff)": "", - "Bike and Ride": "B+R (Bike & Ride)", - "Rented Bicycle": "Bérelt kerékpár", - "Transit & Rented Bicycle": "Tömegközlekedés és bérelt kerékpár", - "Rented Scooter": "", - "Transit & Rented Scooter": "Tömegközlekedés és bérelt kerékpár", - "Transit with flex access": "Tömegközlekedés rugalmas indulással", - "Transit with flex egress": "Tömegközlekedés rugalmas érkezéssel", - "Transit with flex access and egress": "Tömegközlekedés rugalmas indulással és érkezéssel", - "Direct flex search": "Közvetlen rugalmas keresés", - "Recenter Map Here": "Legyen itt a térkép középpontja", - "Zoom In": "Közelítés", - "Zoom Out": "Távolítás", - "Minimize all": "Minden kis méretűvé tétele", - "Unminimize all": "Minden kis méretűvé tételének megszüntetése", - "Stop Viewer": "Megállómegjelenítő", - "Plan Trip": "Utazás tervezése", - "From Stop": "Ettől a megállótól", - "To Stop": "Eddig a megállóig", - "Routes Serving Stop": "A megállót érintő járatok", - "Bike Share Planner": "Kerékpármegosztó-tervező", - "Trip Options": "Utazási beállítások", - "PICK UP BIKE": "KERÉKPÁR FELVÉTELE", - "ALTERNATE PICKUP": "MÁSIK FELVÉTELI HELY", - "DROP OFF BIKE": "KERÉKPÁR LEADÁSA", - "ALTERNATE DROP OFF": "MÁSIK LEADÁSI HELY", - "BIKE STATION": "KERÉKPÁRÁLLOMÁS", - "Station:": "Gyűjtőállomás:", - "%d bike available": "%d kerékpár elérhető", - "%d bike available_plural": "%d kerékpár elérhető", - "%d dock available": "%d dokkolóállás", - "%d dock available_plural": "%d dokkolállás", - "Recommended Pick Up:": "Ajánlott felvétel:", - "Bicycle rental": "Kerékpárbérlési hely", - "Recommended Drop Off:": "Ajánlott leadás:", - "Multimodal Trip Planner": "Multimodális utazástervező", - "Itineraries": "Útvonaltervek", - "This itinerary departs on a different day from the previous one": "Ez a útvonalterv az előző naptól eltérő napon kezdődik", - "%d Itinerary Returned": "%d útvonalatervet találtunk", - "%d Itinerary Returned_plural": "%d útvonaltervet találtunk", - "Link to search": "Link a kereséshez", - "Previous Page": "Előző", - "Next Page": "Következő", - "CONTINUES AS": "FOLYTATÁS MINT", - "%d min late": "%d perc késés", - "%d min late_plural": "%d perc késés", - "%d min early": "%d perccel korábban", - "%d min early_plural": "%d perccel korábban", - "on time": "pontos", - "This itinerary departs on a different day than the one searched for": "Ez az útvonalterv a tervezési naptól eltérő napon kezdődik", - "Arrived at destination with a rented bicycle!": "Bérelt kerékpárral való érkezés a célba!", - "End": "Érkezés", - "Trip Summary": "Utazás összefoglalója", - "Travel": "Utazás", - "Time": "Idő", - "GenCost": "Súly/Költség", - "Total Walk": "Séta összesen", - "Total Bike": "Kerékpárral összesen", - "Total drive": "Autóval összesen", - "Elevation Gained": "", - "Elevation Lost": "", - "Transfers": "Átszállások", - "Fare": "Viteldíj", - "Valid": "Érvényesség", - "Link to Itinerary": "Link az útvonaltervhez", - "Print": "Nyomtatás", - "Your Trip": "Az Ön utazása", - "Email": "E-mail", - "every %d min": "%d percenként", - "every %d min_plural": "%d percenként", - "Board at ": "Felszállás: ", - "Stop": "Megálló", - "Time in transit": "Közlekedési idő", - "Route ID": "", - "Trip ID": "", - "Service Date": "", - "Trip Viewer": "Utazásmegjelenítő", - "late as": "", - "Stay on board": "Maradjon a járművön", - "Alight": "Leszállás", - "at": "itt:", - "%(currency)s %(price)s": "%(currency)s %(price)s", - "Start: %(location)s at %(time_date)s": "Indulás: %(location)s (%(time_date)s)", - "Board": "Felszállás", - "(%(agency_id)s Stop ID #%(stop_id)s),": "(%(agency_id)s megállóazonosító: #%(stop_id)s),", - "End: %(location)s at %(time_date)s": "Érkezés: %(location)s (%(time_date)s)", - "(%(agencyId)s Stop ID #%(id)s),": "(%(agencyId)s megállóazonosító: #%(id)s),", - "\nView itinerary online:\n%(itinerary_link)s\n": "\nOnline útvonalterv megtekintése:\n%(itinerary_link)s\n", - "We're sorry. The trip planner is temporarily unavailable. Please try again later.": "Sajnáljuk, az útvonaltervező átmenetileg nem elérhető. Kérjük, próbálja újra később.", - "Trip is not possible. You might be trying to plan a trip outside the map data boundary.": "Az utazás nem lehetséges. Lehet, hogy a térképadatok határain kívüli utat próbál tervezni.", - "No trip found. There may be no transit service within the maximum specified distance or at the specified time, or your start or end point might not be safely accessible.": "Nem található ilyen utazás. Előfordulhat, hogy nincs tömegközlekedési szolgáltatás a megadott legnagyobb távolságon belül vagy a megadott időpontban, vagy a kezdő- vagy végpont nem érhető el biztonságosan.", - "No transit times available. The date may be past or too far in the future or there may not be transit service for your trip at the time you chose.": "Nem áll rendelkezésre közlekedési idő. Előfordulhat, hogy a dátum elmúlt vagy túl messze van a jövőben, vagy az Ön által választott időpontban nincs tömegközlekedési szolgáltatás.", - "The trip planner is taking way too long to process your request. Please try again later.": "Az utazástervezőnek túl sokáig tart a kérés feldolgozása. Kérjük, próbálja újra később.", - "The request has errors that the server is not willing or able to process.": "A kérés olyan hibát tartalmaz, amelyet a szerver nem hajlandó vagy nem képes feldolgozni.", - "Origin is unknown. Can you be a bit more descriptive?": "A kiindulás pont ismeretlen. Le tudná írni egy kicsit gondosabban?", - "Destination is unknown. Can you be a bit more descriptive?": "Az úti cél ismeretlen. Le tudná írni egy kicsit gondosabban?", - "Both origin and destination are unknown. Can you be a bit more descriptive?": "A kiindulási és a célpont egyaránt ismeretlen. Le tudná-e írni egy kicsit gondosabban?", - "Both origin and destination are not wheelchair accessible": "Sem a kiindulási, sem a célpont nem akadálymentes", - "Origin is within a trivial distance of the destination.": "A kiindulási hely túl közel van a célponthoz.", - "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.": "Az útvonaltervező bizonytalan abban, hogy honnan szeretne indulni. Kérjük, válasszon az alábbi lehetőségek közül, vagy legyen pontosabb.", - "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.": "Az útvonaltervező bizonytalan abban, hogy hová szeretne érkezni. Kérjük, válasszon az alábbi lehetőségek közül, vagy legyen pontosabb.", - "Both origin and destination are ambiguous. Please select from the following options, or be more specific.": "Sem a kiindulási, sem a célpont nem egyértelmű. Kérjük, válasszon az alábbi lehetőségek közül, vagy legyen pontosabb.", - "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are": "A triangleSafetyFactor, a triangleSlopeFactor és a triangleTimeFactor értékeit egyaránt be kell állítani, ha vannak ilyenek", - "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1": "A triangleSafetyFactor, triangleSlopeFactor és triangleTimeFactor értékei összegének 1-nek kell lennie", - "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE": "Ha a triangleSafetyFactor, a triangleSlopeFactor és a triangleTimeFactor meg van adva, akkor az OptimizeType értékének TRIANGLE-nek kell lennie", - "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set": "Ha az OptimizeType értéke TRIANGLE, akkor be kell állítani a triangleSafetyFactor, a triangleSlopeFactor és a triangleTimeFactor értékeit", - "Set as Start Location": "Beállítás kiindulási helyként", - "Set as End Location": "Beállítás érkezési helyként", - "Destination": "Célpont", - "Error %(error_id)d": "Hiba: %(error_id)d", - "No Trip Found": "Nem található utazás", - "Your %(bike_share_name)s route": "Az Ön %(bike_share_name)s-útvonala", - "Your bike route": "Az Ön kerékpáros útvonala", - "Walk to the %(bike_share_name)s dock.": "Séta a dokkolóálláshoz (%(bike_share_name)s)", - "Walk from the %(bike_share_name)s dock to your destination.": "Séta a dokkolóállástól (%(bike_share_name)s) a célponthoz.", - "Your walk route": "Az Ön gyalogos útvonala", - "Your route using the scooter": "", - "Your driving route": "Az Ön kerékpáros útvonala", - "north": "észak", - "northeast": "északkelet", - "east": "kelet", - "southeast": "délkelet", - "south": "dél", - "southwest": "délnyugat", - "west": "nyugat", - "northwest": "északnyugat", - "hard left": "élesen balra", - "left": "balra", - "slight left": "enyhén balra", - "continue": "tovább", - "slight right": "enyhén jobbra", - "right": "jobbra", - "hard right": "élesen jobbra", - "elevator": "lift", - "U-turn left": "megfordulás balra", - "U-turn right": "megfordulás jobbra", - "Walk": "Séta", - "Cycle": "Kerékpározás", - "Car": "Autós útvonal", - "Bus": "Busz", - "Subway": "Metró", - "Train": "Vonat", - "Ferry": "Komp", - "Light Rail": "Villamos, könnyűvasút", - "Cable Car": "", - "Funicular": "Sikló", - "Aerial Tram": "Libegő", - "Airplane": "Repülőgép", - "Bicycle rental station": "Kerékpárkölcsönző állomás", - "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Hajtson be a körforgalomba az óramutató járásával ellentétesen, majd hajtson ki a(z) %(ordinal_exit_number)s kijáraton erre: %(street_name)s", - "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Hajtson be a körforgalomba az óramutató járásával ellentétesen, majd hajtson ki a(z) %(ordinal_exit_number)s kijáraton erre: %(street_name)s", - "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Hajtson be a körforgalomba az óramutató járása szerinti irányba, majd hajtson ki a(z) %(ordinal_exit_number)s kijáraton erre: %(street_name)s", - "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Hajtson be a körforgalomba az óramutató járása szerinti irányba, majd hajtson ki a(z) %(ordinal_exit_number)s kijáraton erre: %(street_name)s", - "Start on": "Induljon ezen:", - " heading ": " erre: ", - "to continue on": "menjen tovább ezen:", - "on to": "ezen:", - "first": "első", - "second": "második", - "third": "harmadik", - "fourth": "negyedik", - "fifth": "ötödik", - "sixth": "hatodik", - "seventh": "hetedik", - "eight": "nyolcadik", - "ninth": "kilencedik", - "tenth": "tizedik", - "%d hr": "%d óra", - "%d hr_plural": "%d óra", - "%d min": "%d perc", - "%d min_plural": "%d perc", - "%d sec": "%d másodperc", - "%d sec_plural": "%d másodperc", - "OK": "OK", - "Minimize": "Kis méretűvé tétel", - "Bring to front": "Előrehozás", - "Send to back": "Hátraküldés", - "Route:": "Útvonal:", - "Variant:": "Változat:", - "Stop Finder": "Megállókereső", - "Feed": "Feed", - "By ID": "Azonosító alapján", - "By Name": "Név alapján", - "Search": "Keresés", - "No Stops Found": "Nem található megálló", - "Date": "Dátum", - "Find Stops": "Megállóhelyek keresése", - "(No Stop Selected)": "(Nincs megálló kijelölve)", - "Block": "Blokk", - "Recenter": "Legyen ez a térkép középpontja", - "Viewer": "Megállómegtekintő", - "Quick": "Gyors", - "Flat": "Lapos", - "Bike Friendly": "Kerékpárosbarát", - "B": "K", - "F": "L", - "Q": "G", - "All Routes": "Minden útvonal", - "Save": "Mentés", - "Close": "Bezárás", - "Travel Options": "Utazás beállításai", - "Geocoder": "Geokóder", - "Arrive": "Érkezés", - "Now": "Most", - "Wheelchair accessible trip:": "Akadálymentes utazás:", - "Show Filtered Itineraries:": "Szűrt útvonaltervek megjelenítése:", - "Travel by": "Közlekedési eszköz:", - "Preferred Routes": "Előnyben részesített útvonalak", - "Edit": "Szerkesztés", - "None": "Nincs", - "Weight": "Súly", - "Banned routes": "Kerülendő útvonalak", - "Use": "Használt kerékpár:", - "My Own Bike": "saját", - "A Shared Bike": "bérelt", - "Plan Your Trip": "Tervezze meg utazását", - "Additional parameters": "További beállítások", - " to _direction": " eddig: ", - " to _bus_direction": " ide: ", - "Start_template": "Indulás", - "Depart_itinerary": "Indulás", - "depart_itinerary": "indulás", - "Start_popup": "Indulás", - "Depart_tripoptions": "Indulás" -} \ No newline at end of file + "Transit": "Tömegközlekedés", + "Bus Only": "Csak busz", + "Rail Only": "Csak vasút", + "Airplane Only": "Csak repülőgép", + "Transit, No Airplane": "Tömegközlekedés, repülés nélkül", + "Bicycle Only": "Csak kerékpár", + "Bicycle & Transit": "Kerékpár & tömegközlekedés", + "Walk Only": "Csak séta", + "Car Only": "Csak autó", + "Taxi": "Taxi", + "Park and Ride": "P+R (Park & Ride)", + "Ride and Kiss (Car Pickup)": "", + "Kiss and Ride (Car Dropoff)": "", + "Bike and Ride": "B+R (Bike & Ride)", + "Rented Bicycle": "Bérelt kerékpár", + "Transit & Rented Bicycle": "Tömegközlekedés és bérelt kerékpár", + "Rented Scooter": "", + "Transit & Rented Scooter": "Tömegközlekedés és bérelt kerékpár", + "Transit with flex access": "Tömegközlekedés rugalmas indulással", + "Transit with flex egress": "Tömegközlekedés rugalmas érkezéssel", + "Transit with flex access and egress": "Tömegközlekedés rugalmas indulással és érkezéssel", + "Direct flex search": "Közvetlen rugalmas keresés", + "Recenter Map Here": "Legyen itt a térkép középpontja", + "Zoom In": "Közelítés", + "Zoom Out": "Távolítás", + "Minimize all": "Minden kis méretűvé tétele", + "Unminimize all": "Minden kis méretűvé tételének megszüntetése", + "Stop Viewer": "Megállómegjelenítő", + "Plan Trip": "Utazás tervezése", + "From Stop": "Ettől a megállótól", + "To Stop": "Eddig a megállóig", + "Routes Serving Stop": "A megállót érintő járatok", + "Bike Share Planner": "Kerékpármegosztó-tervező", + "Trip Options": "Utazási beállítások", + "PICK UP BIKE": "KERÉKPÁR FELVÉTELE", + "ALTERNATE PICKUP": "MÁSIK FELVÉTELI HELY", + "DROP OFF BIKE": "KERÉKPÁR LEADÁSA", + "ALTERNATE DROP OFF": "MÁSIK LEADÁSI HELY", + "BIKE STATION": "KERÉKPÁRÁLLOMÁS", + "Station:": "Gyűjtőállomás:", + "%d bike available": "%d kerékpár elérhető", + "%d bike available_plural": "%d kerékpár elérhető", + "%d dock available": "%d dokkolóállás", + "%d dock available_plural": "%d dokkolállás", + "Recommended Pick Up:": "Ajánlott felvétel:", + "Bicycle rental": "Kerékpárbérlési hely", + "Recommended Drop Off:": "Ajánlott leadás:", + "Multimodal Trip Planner": "Multimodális utazástervező", + "Itineraries": "Útvonaltervek", + "This itinerary departs on a different day from the previous one": "Ez a útvonalterv az előző naptól eltérő napon kezdődik", + "%d Itinerary Returned": "%d útvonalatervet találtunk", + "%d Itinerary Returned_plural": "%d útvonaltervet találtunk", + "Link to search": "Link a kereséshez", + "Previous Page": "Előző", + "Next Page": "Következő", + "CONTINUES AS": "FOLYTATÁS MINT", + "%d min late": "%d perc késés", + "%d min late_plural": "%d perc késés", + "%d min early": "%d perccel korábban", + "%d min early_plural": "%d perccel korábban", + "on time": "pontos", + "This itinerary departs on a different day than the one searched for": "Ez az útvonalterv a tervezési naptól eltérő napon kezdődik", + "Arrived at destination with a rented bicycle!": "Bérelt kerékpárral való érkezés a célba!", + "End": "Érkezés", + "Trip Summary": "Utazás összefoglalója", + "Travel": "Utazás", + "Time": "Idő", + "GenCost": "Súly/Költség", + "Total Walk": "Séta összesen", + "Total Bike": "Kerékpárral összesen", + "Total drive": "Autóval összesen", + "Elevation Gained": "", + "Elevation Lost": "", + "Transfers": "Átszállások", + "Fare": "Viteldíj", + "Valid": "Érvényesség", + "Link to Itinerary": "Link az útvonaltervhez", + "Print": "Nyomtatás", + "Your Trip": "Az Ön utazása", + "Email": "E-mail", + "every %d min": "%d percenként", + "every %d min_plural": "%d percenként", + "Board at ": "Felszállás: ", + "Stop": "Megálló", + "Time in transit": "Közlekedési idő", + "Route ID": "", + "Trip ID": "", + "Service Date": "", + "Trip Viewer": "Utazásmegjelenítő", + "late as": "", + "Stay on board": "Maradjon a járművön", + "Alight": "Leszállás", + "at": "itt:", + "%(currency)s %(price)s": "%(currency)s %(price)s", + "Start: %(location)s at %(time_date)s": "Indulás: %(location)s (%(time_date)s)", + "Board": "Felszállás", + "(%(agency_id)s Stop ID #%(stop_id)s),": "(%(agency_id)s megállóazonosító: #%(stop_id)s),", + "End: %(location)s at %(time_date)s": "Érkezés: %(location)s (%(time_date)s)", + "(%(agencyId)s Stop ID #%(id)s),": "(%(agencyId)s megállóazonosító: #%(id)s),", + "\nView itinerary online:\n%(itinerary_link)s\n": "\nOnline útvonalterv megtekintése:\n%(itinerary_link)s\n", + "We're sorry. The trip planner is temporarily unavailable. Please try again later.": "Sajnáljuk, az útvonaltervező átmenetileg nem elérhető. Kérjük, próbálja újra később.", + "Trip is not possible. You might be trying to plan a trip outside the map data boundary.": "Az utazás nem lehetséges. Lehet, hogy a térképadatok határain kívüli utat próbál tervezni.", + "No trip found. There may be no transit service within the maximum specified distance or at the specified time, or your start or end point might not be safely accessible.": "Nem található ilyen utazás. Előfordulhat, hogy nincs tömegközlekedési szolgáltatás a megadott legnagyobb távolságon belül vagy a megadott időpontban, vagy a kezdő- vagy végpont nem érhető el biztonságosan.", + "No transit times available. The date may be past or too far in the future or there may not be transit service for your trip at the time you chose.": "Nem áll rendelkezésre közlekedési idő. Előfordulhat, hogy a dátum elmúlt vagy túl messze van a jövőben, vagy az Ön által választott időpontban nincs tömegközlekedési szolgáltatás.", + "The trip planner is taking way too long to process your request. Please try again later.": "Az utazástervezőnek túl sokáig tart a kérés feldolgozása. Kérjük, próbálja újra később.", + "The request has errors that the server is not willing or able to process.": "A kérés olyan hibát tartalmaz, amelyet a szerver nem hajlandó vagy nem képes feldolgozni.", + "Origin is unknown. Can you be a bit more descriptive?": "A kiindulás pont ismeretlen. Le tudná írni egy kicsit gondosabban?", + "Destination is unknown. Can you be a bit more descriptive?": "Az úti cél ismeretlen. Le tudná írni egy kicsit gondosabban?", + "Both origin and destination are unknown. Can you be a bit more descriptive?": "A kiindulási és a célpont egyaránt ismeretlen. Le tudná-e írni egy kicsit gondosabban?", + "Both origin and destination are not wheelchair accessible": "Sem a kiindulási, sem a célpont nem akadálymentes", + "Origin is within a trivial distance of the destination.": "A kiindulási hely túl közel van a célponthoz.", + "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.": "Az útvonaltervező bizonytalan abban, hogy honnan szeretne indulni. Kérjük, válasszon az alábbi lehetőségek közül, vagy legyen pontosabb.", + "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.": "Az útvonaltervező bizonytalan abban, hogy hová szeretne érkezni. Kérjük, válasszon az alábbi lehetőségek közül, vagy legyen pontosabb.", + "Both origin and destination are ambiguous. Please select from the following options, or be more specific.": "Sem a kiindulási, sem a célpont nem egyértelmű. Kérjük, válasszon az alábbi lehetőségek közül, vagy legyen pontosabb.", + "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are": "A triangleSafetyFactor, a triangleSlopeFactor és a triangleTimeFactor értékeit egyaránt be kell állítani, ha vannak ilyenek", + "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1": "A triangleSafetyFactor, triangleSlopeFactor és triangleTimeFactor értékei összegének 1-nek kell lennie", + "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE": "Ha a triangleSafetyFactor, a triangleSlopeFactor és a triangleTimeFactor meg van adva, akkor az OptimizeType értékének TRIANGLE-nek kell lennie", + "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set": "Ha az OptimizeType értéke TRIANGLE, akkor be kell állítani a triangleSafetyFactor, a triangleSlopeFactor és a triangleTimeFactor értékeit", + "Set as Start Location": "Beállítás kiindulási helyként", + "Set as End Location": "Beállítás érkezési helyként", + "Destination": "Célpont", + "Error %(error_id)d": "Hiba: %(error_id)d", + "No Trip Found": "Nem található utazás", + "Your %(bike_share_name)s route": "Az Ön %(bike_share_name)s-útvonala", + "Your bike route": "Az Ön kerékpáros útvonala", + "Walk to the %(bike_share_name)s dock.": "Séta a dokkolóálláshoz (%(bike_share_name)s)", + "Walk from the %(bike_share_name)s dock to your destination.": "Séta a dokkolóállástól (%(bike_share_name)s) a célponthoz.", + "Your walk route": "Az Ön gyalogos útvonala", + "Your route using the scooter": "", + "Your driving route": "Az Ön kerékpáros útvonala", + "north": "észak", + "northeast": "északkelet", + "east": "kelet", + "southeast": "délkelet", + "south": "dél", + "southwest": "délnyugat", + "west": "nyugat", + "northwest": "északnyugat", + "hard left": "élesen balra", + "left": "balra", + "slight left": "enyhén balra", + "continue": "tovább", + "slight right": "enyhén jobbra", + "right": "jobbra", + "hard right": "élesen jobbra", + "elevator": "lift", + "U-turn left": "megfordulás balra", + "U-turn right": "megfordulás jobbra", + "Walk": "Séta", + "Cycle": "Kerékpározás", + "Car": "Autós útvonal", + "Bus": "Busz", + "Subway": "Metró", + "Train": "Vonat", + "Ferry": "Komp", + "Light Rail": "Villamos, könnyűvasút", + "Cable Car": "", + "Funicular": "Sikló", + "Aerial Tram": "Libegő", + "Airplane": "Repülőgép", + "Bicycle rental station": "Kerékpárkölcsönző állomás", + "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Hajtson be a körforgalomba az óramutató járásával ellentétesen, majd hajtson ki a(z) %(ordinal_exit_number)s kijáraton erre: %(street_name)s", + "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Hajtson be a körforgalomba az óramutató járásával ellentétesen, majd hajtson ki a(z) %(ordinal_exit_number)s kijáraton erre: %(street_name)s", + "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Hajtson be a körforgalomba az óramutató járása szerinti irányba, majd hajtson ki a(z) %(ordinal_exit_number)s kijáraton erre: %(street_name)s", + "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Hajtson be a körforgalomba az óramutató járása szerinti irányba, majd hajtson ki a(z) %(ordinal_exit_number)s kijáraton erre: %(street_name)s", + "Start on": "Induljon ezen:", + " heading ": " erre: ", + "to continue on": "menjen tovább ezen:", + "on to": "ezen:", + "first": "első", + "second": "második", + "third": "harmadik", + "fourth": "negyedik", + "fifth": "ötödik", + "sixth": "hatodik", + "seventh": "hetedik", + "eight": "nyolcadik", + "ninth": "kilencedik", + "tenth": "tizedik", + "%d hr": "%d óra", + "%d hr_plural": "%d óra", + "%d min": "%d perc", + "%d min_plural": "%d perc", + "%d sec": "%d másodperc", + "%d sec_plural": "%d másodperc", + "OK": "OK", + "Minimize": "Kis méretűvé tétel", + "Bring to front": "Előrehozás", + "Send to back": "Hátraküldés", + "Route:": "Útvonal:", + "Variant:": "Változat:", + "Stop Finder": "Megállókereső", + "Feed": "Feed", + "By ID": "Azonosító alapján", + "By Name": "Név alapján", + "Search": "Keresés", + "No Stops Found": "Nem található megálló", + "Date": "Dátum", + "Find Stops": "Megállóhelyek keresése", + "(No Stop Selected)": "(Nincs megálló kijelölve)", + "Block": "Blokk", + "Recenter": "Legyen ez a térkép középpontja", + "Viewer": "Megállómegtekintő", + "Quick": "Gyors", + "Flat": "Lapos", + "Bike Friendly": "Kerékpárosbarát", + "B": "K", + "F": "L", + "Q": "G", + "All Routes": "Minden útvonal", + "Save": "Mentés", + "Close": "Bezárás", + "Travel Options": "Utazás beállításai", + "Geocoder": "Geokóder", + "Arrive": "Érkezés", + "Now": "Most", + "Wheelchair accessible trip:": "Akadálymentes utazás:", + "Show Filtered Itineraries:": "Szűrt útvonaltervek megjelenítése:", + "Travel by": "Közlekedési eszköz:", + "Preferred Routes": "Előnyben részesített útvonalak", + "Edit": "Szerkesztés", + "None": "Nincs", + "Weight": "Súly", + "Banned routes": "Kerülendő útvonalak", + "Use": "Használt kerékpár:", + "My Own Bike": "saját", + "A Shared Bike": "bérelt", + "Plan Your Trip": "Tervezze meg utazását", + "Additional parameters": "További beállítások", + " to _direction": " eddig: ", + " to _bus_direction": " ide: ", + "Start_template": "Indulás", + "Depart_itinerary": "Indulás", + "depart_itinerary": "indulás", + "Start_popup": "Indulás", + "Depart_tripoptions": "Indulás" +} 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..81489b8d82c 100644 --- a/application/src/client/classic-debug/js/otp/locale/it.json +++ b/application/src/client/classic-debug/js/otp/locale/it.json @@ -1,238 +1,238 @@ { - "Transit": "Mezzi pubblici", - "Bus Only": "Solo Bus", - "Rail Only": "Solo Treno", - "Airplane Only": "", - "Transit, No Airplane": "", - "Bicycle Only": "In bici", - "Bicycle & Transit": "Bici & mezzi pubblici", - "Walk Only": "A piedi", - "Car Only": "Partenza su", - "Taxi": "", - "Park and Ride": "Park & Ride", - "Ride and Kiss (Car Pickup)": "", - "Kiss and Ride (Car Dropoff)": "", - "Bike and Ride": "Bike & Ride", - "Rented Bicycle": "Bike sharing", - "Transit & Rented Bicycle": "Bike sharing & Ride", - "Rented Scooter": "", - "Transit & Rented Scooter": "Bike sharing & Ride", - "Transit with flex access": "", - "Transit with flex egress": "", - "Transit with flex access and egress": "", - "Direct flex search": "", - "Recenter Map Here": "Centra", - "Zoom In": "Zoom in", - "Zoom Out": "Zoom out", - "Minimize all": "Minimizza tutto", - "Unminimize all": "Ripristina tutto", - "Stop Viewer": "Orari", - "Plan Trip": "Calcola percorso", - "From Stop": "Da questa fermata", - "To Stop": "A questa fermata", - "Routes Serving Stop": "Linee", - "Bike Share Planner": "Bike Sharing", - "Trip Options": "Opzioni di viaggio", - "PICK UP BIKE": "Prendi la bici qui", - "ALTERNATE PICKUP": "Puoi prendere la bici anche qui", - "DROP OFF BIKE": "Lascia la bici qui", - "ALTERNATE DROP OFF": "Puoi lasciare la bici anche qui", - "BIKE STATION": "Stazione di Bike Sharing", - "Station:": "Stazione:", - "%d bike available": "%d bici disponibile", - "%d bike available_plural": "%d bici disponibili", - "%d dock available": "%d posto disponibile", - "%d dock available_plural": "%d posti disponibili", - "Recommended Pick Up:": "Prendi la bici:", - "Bicycle rental": "", - "Recommended Drop Off:": "Lascia la bici:", - "Multimodal Trip Planner": "Calcolo percorso multimodale", - "Itineraries": "Percorsi", - "This itinerary departs on a different day from the previous one": "", - "%d Itinerary Returned": "%d percorso trovato", - "%d Itinerary Returned_plural": "%d percorsi trovati", - "Link to search": "Link a questa ricerca", - "Previous Page": "Precedente", - "Next Page": "", - "CONTINUES AS": "Rimani a bordo", - "%d min late": "%d minuto di ritardo", - "%d min late_plural": "%d minuti di ritardo", - "%d min early": "%d minuto in anticipo", - "%d min early_plural": "%d minuti in anticipo", - "on time": "in orario", - "This itinerary departs on a different day than the one searched for": "", - "Arrived at destination with a rented bicycle!": "", - "End": "Arrivo", - "Trip Summary": "Riepilogo", - "Travel": "Partenza", - "Time": "Durata", - "GenCost": "", - "Total Walk": "A piedi", - "Total Bike": "In bici", - "Total drive": "", - "Elevation Gained": "", - "Elevation Lost": "", - "Transfers": "Cambi", - "Fare": "Costo", - "Valid": "Calcolato il ", - "Link to Itinerary": "Link a questo percorso", - "Print": "Stampa", - "Your Trip": "Il tuo percorso", - "Email": "Invia mail", - "every %d min": "ogni minuto", - "every %d min_plural": "ogni %d minuti", - "Board at ": "Parti da ", - "Stop": "Fermata", - "Time in transit": "Tempo a bordo", - "Route ID": "", - "Trip ID": "", - "Service Date": "", - "Trip Viewer": "Percorso", - "late as": "al più", - "Stay on board": "Rimani a bordo", - "Alight": "Scendi", - "at": "a", - "%(currency)s %(price)s": "%(currency)s %(price)s", - "Start: %(location)s at %(time_date)s": "Partenza: %(location)s alle %(time_date)s", - "Board": "Sali a bordo", - "(%(agency_id)s Stop ID #%(stop_id)s),": "(%(agency_id)s fermata n.%(stop_id)s),", - "End: %(location)s at %(time_date)s": "Arrivo: %(location)s alle %(time_date)s", - "(%(agencyId)s Stop ID #%(id)s),": "", - "\nView itinerary online:\n%(itinerary_link)s\n": "\nConsulta il percorso online:\n%(itinerary_link)s\n", - "We're sorry. The trip planner is temporarily unavailable. Please try again later.": "Siamo spiacenti. Il servizio è momentaneamente indisponibile.Riprova più tardi.", - "Trip is not possible. You might be trying to plan a trip outside the map data boundary.": "", - "No trip found. There may be no transit service within the maximum specified distance or at the specified time, or your start or end point might not be safely accessible.": "", - "No transit times available. The date may be past or too far in the future or there may not be transit service for your trip at the time you chose.": "Nessun servizio di Trasporto Pubblico trovato. La data indicata potrebbe essere al di fuori del periodo preso in considerazione dal Calcolo Percorso.", - "The trip planner is taking way too long to process your request. Please try again later.": "Il servizio di Calcolo percorsi sta impiegando troppo tempo per processare la tua richiesta. Riprova più tardi.", - "The request has errors that the server is not willing or able to process.": "La richiesta contiene errori che il server non è in grado di trattare.", - "Origin is unknown. Can you be a bit more descriptive?": "Origine non riconosciuta. Puoi essere più esplicito?", - "Destination is unknown. Can you be a bit more descriptive?": "Destinazione non riconosciuta. Puoi essere più esplicito?", - "Both origin and destination are unknown. Can you be a bit more descriptive?": "Origine e destinazione non riconosciute. Puoi essere più esplicito?", - "Both origin and destination are not wheelchair accessible": "Origine e destinazione non accessibili in carrozzina", - "Origin is within a trivial distance of the destination.": "Origine troppo vicina alla destinazione.", - "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.": "Origine non riconosciuta. Seleziona fra le seguenti opzioni o specifica meglio l'origine.", - "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.": "Destinazione non riconosciuta. Seleziona fra le seguenti opzioni o specifica meglio la destinazione.", - "Both origin and destination are ambiguous. Please select from the following options, or be more specific.": "Origine e destinazione non riconosciute. Seleziona fra le seguenti opzioni o specifica meglio l'origine e la destinazione.", - "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are": "Specificare tutti e 3 i fattori: triangleSafetyFactor, triangleSlopeFactor e triangleTimeFactor", - "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1": "La somma dai fattori triangleSafetyFactor, triangleSlopeFactor e triangleTimeFactor dev'essere pari a 1", - "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE": "Se si forniscono i fattori triangleSafetyFactor, triangleSlopeFactor e triangleTimeFactor il parametro OptimizeType dev'essere settato a TRIANGLE", - "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set": "Se il parametro OptimizeType è settato a TRIANGLE, si devono fornire i fattori triangleSafetyFactor, triangleSlopeFactor e triangleTimeFactor ", - "Set as Start Location": "Imposta Partenza", - "Set as End Location": "Imposta Arrivo", - "Destination": "Destinazione", - "Error %(error_id)d": "Errore %(error_id)d", - "No Trip Found": "nessun percoro trovato", - "Your %(bike_share_name)s route": "Percorso con %(bike_share_name)s ", - "Your bike route": "Percorso in bici", - "Walk to the %(bike_share_name)s dock.": "A piedi verso la stazione %(bike_share_name)s", - "Walk from the %(bike_share_name)s dock to your destination.": "A piedi dalla stazione %(bike_share_name)s a destinazione", - "Your walk route": "Percorso a piedi", - "Your route using the scooter": "", - "Your driving route": "Percorso in bici", - "north": "nord", - "northeast": "nord-est", - "east": "est", - "southeast": "sud-est", - "south": "sud", - "southwest": "sud-ovest", - "west": "ovest", - "northwest": "nod-ovest", - "hard left": "a sinistra", - "left": "a sinistra", - "slight left": "tenere la sinistra", - "continue": "continuare", - "slight right": "tenere la destra", - "right": "a destra", - "hard right": "a destra", - "elevator": "ascensore", - "U-turn left": "inversione di marcia", - "U-turn right": "inversione di marcia", - "Walk": "A piedi", - "Cycle": "bici", - "Car": "auto", - "Bus": "bus", - "Subway": "metro", - "Train": "treno", - "Ferry": "Ferry", - "Light Rail": "tram", - "Cable Car": "tram", - "Funicular": "funivia", - "Aerial Tram": "tram", - "Airplane": "", - "Bicycle rental station": "", - "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Prendere la rotonda in senso antiorario, %(ordinal_exit_number)s uscita, %(street_name)s", - "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Prendere la rotonda in senso antiorario, %(ordinal_exit_number)s uscita, %(street_name)s", - "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Prendere la rotonda in senso orario, %(ordinal_exit_number)s uscita, %(street_name)s", - "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Prendere la rotonda in senso orario, %(ordinal_exit_number)s uscita, %(street_name)s", - "Start on": "Partenza su", - " heading ": " in direzione ", - "to continue on": "continua su", - "on to": "su", - "first": "prima", - "second": "seconda", - "third": "terza", - "fourth": "quarta", - "fifth": "quinta", - "sixth": "sesta", - "seventh": "settima", - "eight": "ottava", - "ninth": "nona", - "tenth": "decima", - "%d hr": "%d h", - "%d hr_plural": "%d h", - "%d min": "%d m", - "%d min_plural": "%d m", - "%d sec": "%d s", - "%d sec_plural": "%d s", - "OK": "OK", - "Minimize": "Riduci a icona", - "Bring to front": "Porta in primo piano", - "Send to back": "Porta in secondo piano", - "Route:": "Linea:", - "Variant:": "Percorso:", - "Stop Finder": "Ricerca Fermata", - "Feed": "Azienda TPL", - "By ID": "Numero", - "By Name": "Nome", - "Search": "Cerca", - "No Stops Found": "Nessuna fermata trovata", - "Date": "Data", - "Find Stops": "Cerca fermata", - "(No Stop Selected)": "(nessuna fermata selezionata)", - "Block": "Turno", - "Recenter": "Centra", - "Viewer": "Passaggi", - "Quick": "Veloce", - "Flat": "Pianeggiante", - "Bike Friendly": "Sicuro", - "B": "S", - "F": "P", - "Q": "V", - "All Routes": "Linee", - "Save": "Salva", - "Close": "Chiudi", - "Travel Options": "Opzioni di viaggio", - "Geocoder": "Geocoder", - "Arrive": "Arrivo", - "Now": "Ora", - "Wheelchair accessible trip:": "Percorso accessibile:", - "Show Filtered Itineraries:": "", - "Travel by": "Modalità", - "Preferred Routes": "Linee preferite", - "Edit": "Modifica", - "None": "Nessuna", - "Weight": "Peso", - "Banned routes": "Linee da evitare", - "Use": "Usa", - "My Own Bike": "bici propria", - "A Shared Bike": "bike sharing", - "Plan Your Trip": "Calcola", - "Additional parameters": "", - " to _direction": " fino a ", - " to _bus_direction": " in direzione ", - "Start_template": "Partenza", - "Depart_itinerary": "Parti da", - "depart_itinerary": "Partenza", - "Start_popup": "Partenza", - "Depart_tripoptions": "Partenza" -} \ No newline at end of file + "Transit": "Mezzi pubblici", + "Bus Only": "Solo Bus", + "Rail Only": "Solo Treno", + "Airplane Only": "", + "Transit, No Airplane": "", + "Bicycle Only": "In bici", + "Bicycle & Transit": "Bici & mezzi pubblici", + "Walk Only": "A piedi", + "Car Only": "Partenza su", + "Taxi": "", + "Park and Ride": "Park & Ride", + "Ride and Kiss (Car Pickup)": "", + "Kiss and Ride (Car Dropoff)": "", + "Bike and Ride": "Bike & Ride", + "Rented Bicycle": "Bike sharing", + "Transit & Rented Bicycle": "Bike sharing & Ride", + "Rented Scooter": "", + "Transit & Rented Scooter": "Bike sharing & Ride", + "Transit with flex access": "", + "Transit with flex egress": "", + "Transit with flex access and egress": "", + "Direct flex search": "", + "Recenter Map Here": "Centra", + "Zoom In": "Zoom in", + "Zoom Out": "Zoom out", + "Minimize all": "Minimizza tutto", + "Unminimize all": "Ripristina tutto", + "Stop Viewer": "Orari", + "Plan Trip": "Calcola percorso", + "From Stop": "Da questa fermata", + "To Stop": "A questa fermata", + "Routes Serving Stop": "Linee", + "Bike Share Planner": "Bike Sharing", + "Trip Options": "Opzioni di viaggio", + "PICK UP BIKE": "Prendi la bici qui", + "ALTERNATE PICKUP": "Puoi prendere la bici anche qui", + "DROP OFF BIKE": "Lascia la bici qui", + "ALTERNATE DROP OFF": "Puoi lasciare la bici anche qui", + "BIKE STATION": "Stazione di Bike Sharing", + "Station:": "Stazione:", + "%d bike available": "%d bici disponibile", + "%d bike available_plural": "%d bici disponibili", + "%d dock available": "%d posto disponibile", + "%d dock available_plural": "%d posti disponibili", + "Recommended Pick Up:": "Prendi la bici:", + "Bicycle rental": "", + "Recommended Drop Off:": "Lascia la bici:", + "Multimodal Trip Planner": "Calcolo percorso multimodale", + "Itineraries": "Percorsi", + "This itinerary departs on a different day from the previous one": "", + "%d Itinerary Returned": "%d percorso trovato", + "%d Itinerary Returned_plural": "%d percorsi trovati", + "Link to search": "Link a questa ricerca", + "Previous Page": "Precedente", + "Next Page": "", + "CONTINUES AS": "Rimani a bordo", + "%d min late": "%d minuto di ritardo", + "%d min late_plural": "%d minuti di ritardo", + "%d min early": "%d minuto in anticipo", + "%d min early_plural": "%d minuti in anticipo", + "on time": "in orario", + "This itinerary departs on a different day than the one searched for": "", + "Arrived at destination with a rented bicycle!": "", + "End": "Arrivo", + "Trip Summary": "Riepilogo", + "Travel": "Partenza", + "Time": "Durata", + "GenCost": "", + "Total Walk": "A piedi", + "Total Bike": "In bici", + "Total drive": "", + "Elevation Gained": "", + "Elevation Lost": "", + "Transfers": "Cambi", + "Fare": "Costo", + "Valid": "Calcolato il ", + "Link to Itinerary": "Link a questo percorso", + "Print": "Stampa", + "Your Trip": "Il tuo percorso", + "Email": "Invia mail", + "every %d min": "ogni minuto", + "every %d min_plural": "ogni %d minuti", + "Board at ": "Parti da ", + "Stop": "Fermata", + "Time in transit": "Tempo a bordo", + "Route ID": "", + "Trip ID": "", + "Service Date": "", + "Trip Viewer": "Percorso", + "late as": "al più", + "Stay on board": "Rimani a bordo", + "Alight": "Scendi", + "at": "a", + "%(currency)s %(price)s": "%(currency)s %(price)s", + "Start: %(location)s at %(time_date)s": "Partenza: %(location)s alle %(time_date)s", + "Board": "Sali a bordo", + "(%(agency_id)s Stop ID #%(stop_id)s),": "(%(agency_id)s fermata n.%(stop_id)s),", + "End: %(location)s at %(time_date)s": "Arrivo: %(location)s alle %(time_date)s", + "(%(agencyId)s Stop ID #%(id)s),": "", + "\nView itinerary online:\n%(itinerary_link)s\n": "\nConsulta il percorso online:\n%(itinerary_link)s\n", + "We're sorry. The trip planner is temporarily unavailable. Please try again later.": "Siamo spiacenti. Il servizio è momentaneamente indisponibile.Riprova più tardi.", + "Trip is not possible. You might be trying to plan a trip outside the map data boundary.": "", + "No trip found. There may be no transit service within the maximum specified distance or at the specified time, or your start or end point might not be safely accessible.": "", + "No transit times available. The date may be past or too far in the future or there may not be transit service for your trip at the time you chose.": "Nessun servizio di Trasporto Pubblico trovato. La data indicata potrebbe essere al di fuori del periodo preso in considerazione dal Calcolo Percorso.", + "The trip planner is taking way too long to process your request. Please try again later.": "Il servizio di Calcolo percorsi sta impiegando troppo tempo per processare la tua richiesta. Riprova più tardi.", + "The request has errors that the server is not willing or able to process.": "La richiesta contiene errori che il server non è in grado di trattare.", + "Origin is unknown. Can you be a bit more descriptive?": "Origine non riconosciuta. Puoi essere più esplicito?", + "Destination is unknown. Can you be a bit more descriptive?": "Destinazione non riconosciuta. Puoi essere più esplicito?", + "Both origin and destination are unknown. Can you be a bit more descriptive?": "Origine e destinazione non riconosciute. Puoi essere più esplicito?", + "Both origin and destination are not wheelchair accessible": "Origine e destinazione non accessibili in carrozzina", + "Origin is within a trivial distance of the destination.": "Origine troppo vicina alla destinazione.", + "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.": "Origine non riconosciuta. Seleziona fra le seguenti opzioni o specifica meglio l'origine.", + "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.": "Destinazione non riconosciuta. Seleziona fra le seguenti opzioni o specifica meglio la destinazione.", + "Both origin and destination are ambiguous. Please select from the following options, or be more specific.": "Origine e destinazione non riconosciute. Seleziona fra le seguenti opzioni o specifica meglio l'origine e la destinazione.", + "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are": "Specificare tutti e 3 i fattori: triangleSafetyFactor, triangleSlopeFactor e triangleTimeFactor", + "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1": "La somma dai fattori triangleSafetyFactor, triangleSlopeFactor e triangleTimeFactor dev'essere pari a 1", + "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE": "Se si forniscono i fattori triangleSafetyFactor, triangleSlopeFactor e triangleTimeFactor il parametro OptimizeType dev'essere settato a TRIANGLE", + "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set": "Se il parametro OptimizeType è settato a TRIANGLE, si devono fornire i fattori triangleSafetyFactor, triangleSlopeFactor e triangleTimeFactor ", + "Set as Start Location": "Imposta Partenza", + "Set as End Location": "Imposta Arrivo", + "Destination": "Destinazione", + "Error %(error_id)d": "Errore %(error_id)d", + "No Trip Found": "nessun percoro trovato", + "Your %(bike_share_name)s route": "Percorso con %(bike_share_name)s ", + "Your bike route": "Percorso in bici", + "Walk to the %(bike_share_name)s dock.": "A piedi verso la stazione %(bike_share_name)s", + "Walk from the %(bike_share_name)s dock to your destination.": "A piedi dalla stazione %(bike_share_name)s a destinazione", + "Your walk route": "Percorso a piedi", + "Your route using the scooter": "", + "Your driving route": "Percorso in bici", + "north": "nord", + "northeast": "nord-est", + "east": "est", + "southeast": "sud-est", + "south": "sud", + "southwest": "sud-ovest", + "west": "ovest", + "northwest": "nod-ovest", + "hard left": "a sinistra", + "left": "a sinistra", + "slight left": "tenere la sinistra", + "continue": "continuare", + "slight right": "tenere la destra", + "right": "a destra", + "hard right": "a destra", + "elevator": "ascensore", + "U-turn left": "inversione di marcia", + "U-turn right": "inversione di marcia", + "Walk": "A piedi", + "Cycle": "bici", + "Car": "auto", + "Bus": "bus", + "Subway": "metro", + "Train": "treno", + "Ferry": "Ferry", + "Light Rail": "tram", + "Cable Car": "tram", + "Funicular": "funivia", + "Aerial Tram": "tram", + "Airplane": "", + "Bicycle rental station": "", + "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Prendere la rotonda in senso antiorario, %(ordinal_exit_number)s uscita, %(street_name)s", + "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Prendere la rotonda in senso antiorario, %(ordinal_exit_number)s uscita, %(street_name)s", + "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Prendere la rotonda in senso orario, %(ordinal_exit_number)s uscita, %(street_name)s", + "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Prendere la rotonda in senso orario, %(ordinal_exit_number)s uscita, %(street_name)s", + "Start on": "Partenza su", + " heading ": " in direzione ", + "to continue on": "continua su", + "on to": "su", + "first": "prima", + "second": "seconda", + "third": "terza", + "fourth": "quarta", + "fifth": "quinta", + "sixth": "sesta", + "seventh": "settima", + "eight": "ottava", + "ninth": "nona", + "tenth": "decima", + "%d hr": "%d h", + "%d hr_plural": "%d h", + "%d min": "%d m", + "%d min_plural": "%d m", + "%d sec": "%d s", + "%d sec_plural": "%d s", + "OK": "OK", + "Minimize": "Riduci a icona", + "Bring to front": "Porta in primo piano", + "Send to back": "Porta in secondo piano", + "Route:": "Linea:", + "Variant:": "Percorso:", + "Stop Finder": "Ricerca Fermata", + "Feed": "Azienda TPL", + "By ID": "Numero", + "By Name": "Nome", + "Search": "Cerca", + "No Stops Found": "Nessuna fermata trovata", + "Date": "Data", + "Find Stops": "Cerca fermata", + "(No Stop Selected)": "(nessuna fermata selezionata)", + "Block": "Turno", + "Recenter": "Centra", + "Viewer": "Passaggi", + "Quick": "Veloce", + "Flat": "Pianeggiante", + "Bike Friendly": "Sicuro", + "B": "S", + "F": "P", + "Q": "V", + "All Routes": "Linee", + "Save": "Salva", + "Close": "Chiudi", + "Travel Options": "Opzioni di viaggio", + "Geocoder": "Geocoder", + "Arrive": "Arrivo", + "Now": "Ora", + "Wheelchair accessible trip:": "Percorso accessibile:", + "Show Filtered Itineraries:": "", + "Travel by": "Modalità", + "Preferred Routes": "Linee preferite", + "Edit": "Modifica", + "None": "Nessuna", + "Weight": "Peso", + "Banned routes": "Linee da evitare", + "Use": "Usa", + "My Own Bike": "bici propria", + "A Shared Bike": "bike sharing", + "Plan Your Trip": "Calcola", + "Additional parameters": "", + " to _direction": " fino a ", + " to _bus_direction": " in direzione ", + "Start_template": "Partenza", + "Depart_itinerary": "Parti da", + "depart_itinerary": "Partenza", + "Start_popup": "Partenza", + "Depart_tripoptions": "Partenza" +} 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..e26b87d5e22 100644 --- a/application/src/client/classic-debug/js/otp/locale/no.json +++ b/application/src/client/classic-debug/js/otp/locale/no.json @@ -1,238 +1,238 @@ { - "Transit": "Kollektivtransport", - "Bus Only": "Buss", - "Rail Only": "Tog", - "Airplane Only": "Fly", - "Transit, No Airplane": "", - "Bicycle Only": "Sykkel", - "Bicycle & Transit": "Sykkel & Kollektivtransport", - "Walk Only": "Gå", - "Car Only": "Start fra", - "Taxi": "", - "Park and Ride": "Park and Ride", - "Ride and Kiss (Car Pickup)": "", - "Kiss and Ride (Car Dropoff)": "", - "Bike and Ride": "Bike and Ride", - "Rented Bicycle": "Bysykkel", - "Transit & Rented Bicycle": "Kollektivtransport & Bysykkel", - "Rented Scooter": "", - "Transit & Rented Scooter": "Kollektivtransport & Bysykkel", - "Transit with flex access": "", - "Transit with flex egress": "", - "Transit with flex access and egress": "", - "Direct flex search": "", - "Recenter Map Here": "Sentrer kart her", - "Zoom In": "Zoom inn", - "Zoom Out": "Zoom ut", - "Minimize all": "Minimer vinduer", - "Unminimize all": "Vis vinduer", - "Stop Viewer": "Vis Stoppested", - "Plan Trip": "Reiseplanlegger", - "From Stop": "Fra stoppested", - "To Stop": "Til stoppested", - "Routes Serving Stop": "Ruter fra stoppested", - "Bike Share Planner": "Bike Share Planner", - "Trip Options": "Reise søk", - "PICK UP BIKE": "PICK UP BIKE", - "ALTERNATE PICKUP": "ALTERNATE PICKUP", - "DROP OFF BIKE": "DROP OFF BIKE", - "ALTERNATE DROP OFF": "ALTERNATE DROP OFF", - "BIKE STATION": "BIKE STATION", - "Station:": "Stasjon:", - "%d bike available": "%d sykkel tilgjengelig", - "%d bike available_plural": "%d sykler tilgjengelig", - "%d dock available": "%d plass ledig", - "%d dock available_plural": "%d plasser ledig", - "Recommended Pick Up:": "Anbefalt Pick Up:", - "Bicycle rental": "Bysykkel", - "Recommended Drop Off:": "Anbefalt Drop Off:", - "Multimodal Trip Planner": "Reiseplanlegger", - "Itineraries": "Vis Reiseplaner", - "This itinerary departs on a different day from the previous one": "", - "%d Itinerary Returned": "%d Reise alternativ", - "%d Itinerary Returned_plural": "%d Reise alternativer", - "Link to search": "Link til søk", - "Previous Page": "Forrige", - "Next Page": "", - "CONTINUES AS": "FORTSETTER SOM", - "%d min late": "%d minutt forsinket", - "%d min late_plural": "%d minutter forsinket", - "%d min early": "%d minutt fortidlig", - "%d min early_plural": "%d minutter fortidlig", - "on time": "i rute", - "This itinerary departs on a different day than the one searched for": "", - "Arrived at destination with a rented bicycle!": "", - "End": "Til", - "Trip Summary": "Reise oversikt", - "Travel": "Start", - "Time": "Reisetid", - "GenCost": "Kost", - "Total Walk": "Gangeavstand", - "Total Bike": "Sykkel distanse", - "Total drive": "Bil distanse", - "Elevation Gained": "", - "Elevation Lost": "", - "Transfers": "Bytter", - "Fare": "Pris", - "Valid": "Gyldig", - "Link to Itinerary": "Link til reise", - "Print": "Skriv ut", - "Your Trip": "Din reise", - "Email": "e-post", - "every %d min": "hvert minutt", - "every %d min_plural": "hvert %d minutt", - "Board at ": "Påstigning ", - "Stop": "Stoppested", - "Time in transit": "Tid kollektivtransport", - "Route ID": "", - "Trip ID": "", - "Service Date": "", - "Trip Viewer": "Vis Rute", - "late as": "sent som", - "Stay on board": "Bli om bord", - "Alight": "Avstigning", - "at": "på", - "%(currency)s %(price)s": "%(currency)s %(price)s", - "Start: %(location)s at %(time_date)s": "Fra: %(location)s klokka %(time_date)s", - "Board": "Påstigning", - "(%(agency_id)s Stop ID #%(stop_id)s),": "(%(agency_id)s Stoppested ID #%(stop_id)s),", - "End: %(location)s at %(time_date)s": "Ankomst: %(location)s klokka %(time_date)s", - "(%(agencyId)s Stop ID #%(id)s),": "", - "\nView itinerary online:\n%(itinerary_link)s\n": "\nVis reiseplan:\n%(itinerary_link)s\n", - "We're sorry. The trip planner is temporarily unavailable. Please try again later.": "Beklager. Reiseplanleggeren er midlertidig utilgjengelig. Venligst forsøk igjen senere.", - "Trip is not possible. You might be trying to plan a trip outside the map data boundary.": "", - "No trip found. There may be no transit service within the maximum specified distance or at the specified time, or your start or end point might not be safely accessible.": "Ingen reise funnet. Sjekk at fra/til sted er innenfor angitt gangavstand til destinasjon, stopested, bysykkel-stativ og/eller påstigningspunkt for bil.", - "No transit times available. The date may be past or too far in the future or there may not be transit service for your trip at the time you chose.": "Ingen kolektivreiser funnet for denne dagen.", - "The trip planner is taking way too long to process your request. Please try again later.": "Reiseplanleggeren svarer ikke på forspørsel. Prøv igjen senere.", - "The request has errors that the server is not willing or able to process.": "Ugyldig input data. Server er ikke i stand til å behandle 'RouteRequest'.", - "Origin is unknown. Can you be a bit more descriptive?": "Avreisested er ukjent. Kan du spesifisere nærmere?", - "Destination is unknown. Can you be a bit more descriptive?": "Reisemålet er ukjent. Kan du spesifisere nærmere?", - "Both origin and destination are unknown. Can you be a bit more descriptive?": "Både fra/til sted er ukjent. Kan du spesifisere nærmere?", - "Both origin and destination are not wheelchair accessible": "Både fra/til sted er utilgjengelig for rullestolukjent.", - "Origin is within a trivial distance of the destination.": "Du kan klare å gå? Det er bare noen få meter.", - "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.": "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.", - "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.": "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.", - "Both origin and destination are ambiguous. Please select from the following options, or be more specific.": "Both origin and destination are ambiguous. Please select from the following options, or be more specific.", - "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are": "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are", - "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1": "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1", - "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE": "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE", - "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set": "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set", - "Set as Start Location": "Reis herfra", - "Set as End Location": "Reis hit", - "Destination": "Destinasjon", - "Error %(error_id)d": "Feil %(error_id)d", - "No Trip Found": "Ingen tur tilgjenglig", - "Your %(bike_share_name)s route": "Din %(bike_share_name)s rute", - "Your bike route": "Din sykkel rute", - "Walk to the %(bike_share_name)s dock.": "Gå til %(bike_share_name)s sykkelstativ.", - "Walk from the %(bike_share_name)s dock to your destination.": "Walk from the %(bike_share_name)s dock to your destination.", - "Your walk route": "Your walk route", - "Your route using the scooter": "", - "Your driving route": "Din sykkel rute", - "north": "nord", - "northeast": "nordøst", - "east": "øst", - "southeast": "sørøst", - "south": "sør", - "southwest": "sørvest", - "west": "vest", - "northwest": "nordvest", - "hard left": "skart venstre", - "left": "venstre", - "slight left": "svakt venstre", - "continue": "fortsett", - "slight right": "svakt høyre", - "right": "høyre", - "hard right": "skart høyre", - "elevator": "heis", - "U-turn left": "U-sving venstre", - "U-turn right": "U-sving høyre", - "Walk": "Gå", - "Cycle": "Sykkel", - "Car": "Bil", - "Bus": "Buss", - "Subway": "T-bane", - "Train": "Tog", - "Ferry": "Ferje", - "Light Rail": "Trikk", - "Cable Car": "Cable Car", - "Funicular": "Kabelbane", - "Aerial Tram": "Tau bane", - "Airplane": "Fly", - "Bicycle rental station": "Bysykkelstativ", - "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Følg rundkjøringen mot klokka ta %(ordinal_exit_number)s avkjøring til %(street_name)s", - "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Følg rundkjøring mot klokka, ta %(ordinal_exit_number)s avkjøring til %(street_name)s", - "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Følg rundkjøring med klokka, ta %(ordinal_exit_number)s avkjøring til %(street_name)s", - "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Følg rundkjøring med klokka, ta %(ordinal_exit_number)s avkjøring til %(street_name)s", - "Start on": "Start fra", - " heading ": " mot ", - "to continue on": "fortsett på", - "on to": "på", - "first": "første", - "second": "andre", - "third": "tredje", - "fourth": "fjerde", - "fifth": "femte", - "sixth": "sjette", - "seventh": "syvende", - "eight": "åttende", - "ninth": "niende", - "tenth": "tidende", - "%d hr": "%d time", - "%d hr_plural": "%d timer", - "%d min": "%d minutt", - "%d min_plural": "%d minutter", - "%d sec": "%d sekund", - "%d sec_plural": "%d sekunder", - "OK": "OK", - "Minimize": "Minimer vinduer", - "Bring to front": "Flytt fremst", - "Send to back": "Flytt bakerst", - "Route:": "Rute:", - "Variant:": "Alternativ:", - "Stop Finder": "Søk Stoppested", - "Feed": "Agency", - "By ID": "Med ID", - "By Name": "Med Navn", - "Search": "Søk", - "No Stops Found": "Stoppested ikke funnet", - "Date": "Date", - "Find Stops": "Søk Stoppested", - "(No Stop Selected)": "(Ingen Stoppested valgt)", - "Block": "Block", - "Recenter": "Sentrer", - "Viewer": "Vis", - "Quick": "Rask", - "Flat": "Flat", - "Bike Friendly": "Sykkel vennlig", - "B": "B", - "F": "F", - "Q": "R", - "All Routes": "Alle Ruter", - "Save": "Lagre", - "Close": "Lukk", - "Travel Options": "Reise Resultater", - "Geocoder": "Geocoder", - "Arrive": "Ankomst", - "Now": "Nå", - "Wheelchair accessible trip:": "Tilgjenelig for rullestol:", - "Show Filtered Itineraries:": "", - "Travel by": "Reis med", - "Preferred Routes": "Foretrukket rute", - "Edit": "Endre", - "None": "Ingen", - "Weight": "Weight", - "Banned routes": "Untatt rute", - "Use": "Bruk", - "My Own Bike": "Egen Sykkel", - "A Shared Bike": "Bysykkel", - "Plan Your Trip": "Planlegg Reise", - "Additional parameters": "", - " to _direction": " til ", - " to _bus_direction": " til ", - "Start_template": "Fra", - "Depart_itinerary": "Avgang", - "depart_itinerary": "Avreise", - "Start_popup": "Start", - "Depart_tripoptions": "Avgang" -} \ No newline at end of file + "Transit": "Kollektivtransport", + "Bus Only": "Buss", + "Rail Only": "Tog", + "Airplane Only": "Fly", + "Transit, No Airplane": "", + "Bicycle Only": "Sykkel", + "Bicycle & Transit": "Sykkel & Kollektivtransport", + "Walk Only": "Gå", + "Car Only": "Start fra", + "Taxi": "", + "Park and Ride": "Park and Ride", + "Ride and Kiss (Car Pickup)": "", + "Kiss and Ride (Car Dropoff)": "", + "Bike and Ride": "Bike and Ride", + "Rented Bicycle": "Bysykkel", + "Transit & Rented Bicycle": "Kollektivtransport & Bysykkel", + "Rented Scooter": "", + "Transit & Rented Scooter": "Kollektivtransport & Bysykkel", + "Transit with flex access": "", + "Transit with flex egress": "", + "Transit with flex access and egress": "", + "Direct flex search": "", + "Recenter Map Here": "Sentrer kart her", + "Zoom In": "Zoom inn", + "Zoom Out": "Zoom ut", + "Minimize all": "Minimer vinduer", + "Unminimize all": "Vis vinduer", + "Stop Viewer": "Vis Stoppested", + "Plan Trip": "Reiseplanlegger", + "From Stop": "Fra stoppested", + "To Stop": "Til stoppested", + "Routes Serving Stop": "Ruter fra stoppested", + "Bike Share Planner": "Bike Share Planner", + "Trip Options": "Reise søk", + "PICK UP BIKE": "PICK UP BIKE", + "ALTERNATE PICKUP": "ALTERNATE PICKUP", + "DROP OFF BIKE": "DROP OFF BIKE", + "ALTERNATE DROP OFF": "ALTERNATE DROP OFF", + "BIKE STATION": "BIKE STATION", + "Station:": "Stasjon:", + "%d bike available": "%d sykkel tilgjengelig", + "%d bike available_plural": "%d sykler tilgjengelig", + "%d dock available": "%d plass ledig", + "%d dock available_plural": "%d plasser ledig", + "Recommended Pick Up:": "Anbefalt Pick Up:", + "Bicycle rental": "Bysykkel", + "Recommended Drop Off:": "Anbefalt Drop Off:", + "Multimodal Trip Planner": "Reiseplanlegger", + "Itineraries": "Vis Reiseplaner", + "This itinerary departs on a different day from the previous one": "", + "%d Itinerary Returned": "%d Reise alternativ", + "%d Itinerary Returned_plural": "%d Reise alternativer", + "Link to search": "Link til søk", + "Previous Page": "Forrige", + "Next Page": "", + "CONTINUES AS": "FORTSETTER SOM", + "%d min late": "%d minutt forsinket", + "%d min late_plural": "%d minutter forsinket", + "%d min early": "%d minutt fortidlig", + "%d min early_plural": "%d minutter fortidlig", + "on time": "i rute", + "This itinerary departs on a different day than the one searched for": "", + "Arrived at destination with a rented bicycle!": "", + "End": "Til", + "Trip Summary": "Reise oversikt", + "Travel": "Start", + "Time": "Reisetid", + "GenCost": "Kost", + "Total Walk": "Gangeavstand", + "Total Bike": "Sykkel distanse", + "Total drive": "Bil distanse", + "Elevation Gained": "", + "Elevation Lost": "", + "Transfers": "Bytter", + "Fare": "Pris", + "Valid": "Gyldig", + "Link to Itinerary": "Link til reise", + "Print": "Skriv ut", + "Your Trip": "Din reise", + "Email": "e-post", + "every %d min": "hvert minutt", + "every %d min_plural": "hvert %d minutt", + "Board at ": "Påstigning ", + "Stop": "Stoppested", + "Time in transit": "Tid kollektivtransport", + "Route ID": "", + "Trip ID": "", + "Service Date": "", + "Trip Viewer": "Vis Rute", + "late as": "sent som", + "Stay on board": "Bli om bord", + "Alight": "Avstigning", + "at": "på", + "%(currency)s %(price)s": "%(currency)s %(price)s", + "Start: %(location)s at %(time_date)s": "Fra: %(location)s klokka %(time_date)s", + "Board": "Påstigning", + "(%(agency_id)s Stop ID #%(stop_id)s),": "(%(agency_id)s Stoppested ID #%(stop_id)s),", + "End: %(location)s at %(time_date)s": "Ankomst: %(location)s klokka %(time_date)s", + "(%(agencyId)s Stop ID #%(id)s),": "", + "\nView itinerary online:\n%(itinerary_link)s\n": "\nVis reiseplan:\n%(itinerary_link)s\n", + "We're sorry. The trip planner is temporarily unavailable. Please try again later.": "Beklager. Reiseplanleggeren er midlertidig utilgjengelig. Venligst forsøk igjen senere.", + "Trip is not possible. You might be trying to plan a trip outside the map data boundary.": "", + "No trip found. There may be no transit service within the maximum specified distance or at the specified time, or your start or end point might not be safely accessible.": "Ingen reise funnet. Sjekk at fra/til sted er innenfor angitt gangavstand til destinasjon, stopested, bysykkel-stativ og/eller påstigningspunkt for bil.", + "No transit times available. The date may be past or too far in the future or there may not be transit service for your trip at the time you chose.": "Ingen kolektivreiser funnet for denne dagen.", + "The trip planner is taking way too long to process your request. Please try again later.": "Reiseplanleggeren svarer ikke på forspørsel. Prøv igjen senere.", + "The request has errors that the server is not willing or able to process.": "Ugyldig input data. Server er ikke i stand til å behandle 'RouteRequest'.", + "Origin is unknown. Can you be a bit more descriptive?": "Avreisested er ukjent. Kan du spesifisere nærmere?", + "Destination is unknown. Can you be a bit more descriptive?": "Reisemålet er ukjent. Kan du spesifisere nærmere?", + "Both origin and destination are unknown. Can you be a bit more descriptive?": "Både fra/til sted er ukjent. Kan du spesifisere nærmere?", + "Both origin and destination are not wheelchair accessible": "Både fra/til sted er utilgjengelig for rullestolukjent.", + "Origin is within a trivial distance of the destination.": "Du kan klare å gå? Det er bare noen få meter.", + "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.": "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.", + "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.": "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.", + "Both origin and destination are ambiguous. Please select from the following options, or be more specific.": "Both origin and destination are ambiguous. Please select from the following options, or be more specific.", + "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are": "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are", + "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1": "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1", + "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE": "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE", + "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set": "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set", + "Set as Start Location": "Reis herfra", + "Set as End Location": "Reis hit", + "Destination": "Destinasjon", + "Error %(error_id)d": "Feil %(error_id)d", + "No Trip Found": "Ingen tur tilgjenglig", + "Your %(bike_share_name)s route": "Din %(bike_share_name)s rute", + "Your bike route": "Din sykkel rute", + "Walk to the %(bike_share_name)s dock.": "Gå til %(bike_share_name)s sykkelstativ.", + "Walk from the %(bike_share_name)s dock to your destination.": "Walk from the %(bike_share_name)s dock to your destination.", + "Your walk route": "Your walk route", + "Your route using the scooter": "", + "Your driving route": "Din sykkel rute", + "north": "nord", + "northeast": "nordøst", + "east": "øst", + "southeast": "sørøst", + "south": "sør", + "southwest": "sørvest", + "west": "vest", + "northwest": "nordvest", + "hard left": "skart venstre", + "left": "venstre", + "slight left": "svakt venstre", + "continue": "fortsett", + "slight right": "svakt høyre", + "right": "høyre", + "hard right": "skart høyre", + "elevator": "heis", + "U-turn left": "U-sving venstre", + "U-turn right": "U-sving høyre", + "Walk": "Gå", + "Cycle": "Sykkel", + "Car": "Bil", + "Bus": "Buss", + "Subway": "T-bane", + "Train": "Tog", + "Ferry": "Ferje", + "Light Rail": "Trikk", + "Cable Car": "Cable Car", + "Funicular": "Kabelbane", + "Aerial Tram": "Tau bane", + "Airplane": "Fly", + "Bicycle rental station": "Bysykkelstativ", + "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Følg rundkjøringen mot klokka ta %(ordinal_exit_number)s avkjøring til %(street_name)s", + "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Følg rundkjøring mot klokka, ta %(ordinal_exit_number)s avkjøring til %(street_name)s", + "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Følg rundkjøring med klokka, ta %(ordinal_exit_number)s avkjøring til %(street_name)s", + "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Følg rundkjøring med klokka, ta %(ordinal_exit_number)s avkjøring til %(street_name)s", + "Start on": "Start fra", + " heading ": " mot ", + "to continue on": "fortsett på", + "on to": "på", + "first": "første", + "second": "andre", + "third": "tredje", + "fourth": "fjerde", + "fifth": "femte", + "sixth": "sjette", + "seventh": "syvende", + "eight": "åttende", + "ninth": "niende", + "tenth": "tidende", + "%d hr": "%d time", + "%d hr_plural": "%d timer", + "%d min": "%d minutt", + "%d min_plural": "%d minutter", + "%d sec": "%d sekund", + "%d sec_plural": "%d sekunder", + "OK": "OK", + "Minimize": "Minimer vinduer", + "Bring to front": "Flytt fremst", + "Send to back": "Flytt bakerst", + "Route:": "Rute:", + "Variant:": "Alternativ:", + "Stop Finder": "Søk Stoppested", + "Feed": "Agency", + "By ID": "Med ID", + "By Name": "Med Navn", + "Search": "Søk", + "No Stops Found": "Stoppested ikke funnet", + "Date": "Date", + "Find Stops": "Søk Stoppested", + "(No Stop Selected)": "(Ingen Stoppested valgt)", + "Block": "Block", + "Recenter": "Sentrer", + "Viewer": "Vis", + "Quick": "Rask", + "Flat": "Flat", + "Bike Friendly": "Sykkel vennlig", + "B": "B", + "F": "F", + "Q": "R", + "All Routes": "Alle Ruter", + "Save": "Lagre", + "Close": "Lukk", + "Travel Options": "Reise Resultater", + "Geocoder": "Geocoder", + "Arrive": "Ankomst", + "Now": "Nå", + "Wheelchair accessible trip:": "Tilgjenelig for rullestol:", + "Show Filtered Itineraries:": "", + "Travel by": "Reis med", + "Preferred Routes": "Foretrukket rute", + "Edit": "Endre", + "None": "Ingen", + "Weight": "Weight", + "Banned routes": "Untatt rute", + "Use": "Bruk", + "My Own Bike": "Egen Sykkel", + "A Shared Bike": "Bysykkel", + "Plan Your Trip": "Planlegg Reise", + "Additional parameters": "", + " to _direction": " til ", + " to _bus_direction": " til ", + "Start_template": "Fra", + "Depart_itinerary": "Avgang", + "depart_itinerary": "Avreise", + "Start_popup": "Start", + "Depart_tripoptions": "Avgang" +} 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..33cf622f930 100644 --- a/application/src/client/classic-debug/js/otp/locale/pl.json +++ b/application/src/client/classic-debug/js/otp/locale/pl.json @@ -1,247 +1,247 @@ { - "Transit": "komunikacją publiczną", - "Bus Only": "wyłącznie autobusami", - "Rail Only": "wyłącznie koleją", - "Airplane Only": "", - "Transit, No Airplane": "", - "Bicycle Only": "wyłącznie rowerem", - "Bicycle & Transit": "rowerem & komunikacją publiczną", - "Walk Only": "wyłącznie pieszo", - "Car Only": "Rozpocznij na ulicy", - "Taxi": "", - "Park and Ride": "schemat P+R (Park and Ride)", - "Ride and Kiss (Car Pickup)": "", - "Kiss and Ride (Car Dropoff)": "", - "Bike and Ride": "schemat B+R (Bike and Ride)", - "Rented Bicycle": "wypożyczonym rowerem", - "Transit & Rented Bicycle": "kom. publiczną & wypoż. rowerem", - "Rented Scooter": "", - "Transit & Rented Scooter": "kom. publiczną & wypoż. rowerem", - "Transit with flex access": "", - "Transit with flex egress": "", - "Transit with flex access and egress": "", - "Direct flex search": "", - "Recenter Map Here": "Wyśrodkuj mapę w tym miejscu", - "Zoom In": "Przybliż", - "Zoom Out": "Oddal", - "Minimize all": "Minimalizuj wszystko", - "Unminimize all": "Maskymalizuj wszystko", - "Stop Viewer": "Zatrzymaj podgląd", - "Plan Trip": "Zaplanuj podróż", - "From Stop": "Z przystanku", - "To Stop": "Do przystanku", - "Routes Serving Stop": "Trasy obsługujące dany przystanek", - "Bike Share Planner": "Planner wypożyczenia roweru", - "Trip Options": "Trasa", - "PICK UP BIKE": "WYPOŻYCZ ROWER", - "ALTERNATE PICKUP": "ALTERNATYWNY PUNKT WYPOŻYCZENIA", - "DROP OFF BIKE": "ODDAJ ROWER", - "ALTERNATE DROP OFF": "ALTERNATYWNY PUNKT ODDANIA ROWERU", - "BIKE STATION": "STACJA ROWEROWA", - "Station:": "Stacja:", - "%d bike available_0": "%d dostępny rower", - "%d bike available_1": "%d dostępne rowery", - "%d bike available_2": "%d dostępnych rowerów", - "%d dock available_0": "%d dostępna stacja", - "%d dock available_1": "%d dostępne stacje", - "%d dock available_2": "%d dostępnych stacji", - "Recommended Pick Up:": "Rekomendowane miejsce wypożyczenia roweru:", - "Bicycle rental": "Wypożyczalnia rowerów", - "Recommended Drop Off:": "Rekomendowane miejsce oddania roweru:", - "Multimodal Trip Planner": "Planner Podróży", - "Itineraries": "Trasy", - "This itinerary departs on a different day from the previous one": "", - "%d Itinerary Returned_0": "%d zwrócona trasa", - "%d Itinerary Returned_1": "%d zwrócone trasy", - "%d Itinerary Returned_2": "%d zwróconych tras", - "Link to search": "Link do wyszukiwania", - "Previous Page": "Poprzednia", - "Next Page": "", - "CONTINUES AS": "POZOSTAŃ", - "%d min late_0": "%d minuta opóźnienia", - "%d min late_1": "%d minuty opóźnienia", - "%d min late_2": "%d minut opóźnienia", - "%d min early_0": "%d minuta przed czasem", - "%d min early_1": "%d minuty przed czasem", - "%d min early_2": "%d minut przed czasem", - "on time": "na czas", - "This itinerary departs on a different day than the one searched for": "", - "Arrived at destination with a rented bicycle!": "", - "End": "Koniec", - "Trip Summary": "Podsumowanie podróży", - "Travel": "Podróż", - "Time": "Czas trwania podróży", - "GenCost": "", - "Total Walk": "Długość trasy do pokonania pieszo", - "Total Bike": "Długośc trasy do pokonania rowerem", - "Total drive": "", - "Elevation Gained": "", - "Elevation Lost": "", - "Transfers": "Przesiadki", - "Fare": "Koszt", - "Valid": "Aktualna", - "Link to Itinerary": "Link do trasy", - "Print": "Drukuj", - "Your Trip": "Zaplanowana podróż", - "Email": "Adres e-mail", - "every %d min_0": "co %d minutę", - "every %d min_1": "co %d minuty", - "every %d min_2": "co %d minut", - "Board at ": "Wyjazd o", - "Stop": "Przystanek", - "Time in transit": "Czas spędzony w komunikacji publicznej", - "Route ID": "", - "Trip ID": "", - "Service Date": "", - "Trip Viewer": "Podgląd podróży", - "late as": "dopiero jak", - "Stay on board": "Kontynuuj podróż", - "Alight": "Wysiądź", - "at": "na przystanku", - "%(currency)s %(price)s": "%(currency)s %(price)s", - "Start: %(location)s at %(time_date)s": "Początek: %(location)s o %(time_date)s", - "Board": "Wyjazd", - "(%(agency_id)s Stop ID #%(stop_id)s),": "(%(agency_id)s ID przystanku #%(stop_id)s),", - "End: %(location)s at %(time_date)s": "Koniec: %(location)s o %(time_date)s", - "(%(agencyId)s Stop ID #%(id)s),": "", - "\nView itinerary online:\n%(itinerary_link)s\n": "\nWyświetl trasę w trybie online:\n%(itinerary_link)s\n", - "We're sorry. The trip planner is temporarily unavailable. Please try again later.": "Przepraszamy. Planer podróży jest obecnie niedostępny. Prosimy o ponowienie próby w późniejszym czasie.", - "Trip is not possible. You might be trying to plan a trip outside the map data boundary.": "", - "No trip found. There may be no transit service within the maximum specified distance or at the specified time, or your start or end point might not be safely accessible.": "", - "No transit times available. The date may be past or too far in the future or there may not be transit service for your trip at the time you chose.": "Brak informacji o rozkładzie komunikacji publicznej. Obowiązujące dane mogą być nieaktualne, bądź niekompatybilne w wybranym czasie z zaplanowaną trasą.", - "The trip planner is taking way too long to process your request. Please try again later.": "Planer podróży nie jest w stanie przetwożyć powierzonego mu zadania. Prosimy o ponowienie próby w późniejszym czasie.", - "The request has errors that the server is not willing or able to process.": "Wybrane zapytanie posiada błędy, których serwer nie jest w stanie obsłużyć.", - "Origin is unknown. Can you be a bit more descriptive?": "Wystąpił problem z określeniem lokalizacji startowej. Czy mógłbyś sprecyzować zapytanie?", - "Destination is unknown. Can you be a bit more descriptive?": "Wystąpił problem z określeniem lokalizacji końcowej. Czy mógłbyś sprecyzować zapytanie?", - "Both origin and destination are unknown. Can you be a bit more descriptive?": "Wystąpił problem z określeniem lokalizacji startowej oraz końcowej. Czy mógłbyś sprecyzować zapytanie?", - "Both origin and destination are not wheelchair accessible": "Zarówno lokalizacja startowa, jak i końcowa, nie oferuje udogodnień dla osób niepełnosprawnych.", - "Origin is within a trivial distance of the destination.": "Lokalizacja początkowa jest zlokalizowana w nieznacznej odległości od miejsca docelowego.", - "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.": "Planer podróży nie może zinterpretować lokalizacji początkowej. Prosimy o wybranie jednej z poniższych opcji, bądź sprecyzować zapytanie.", - "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.": "Planer podróży nie może zinterpretować lokalizacji końcowej. Prosimy o wybranie jednej z poniższych opcji, bądź sprecyzować zapytanie.", - "Both origin and destination are ambiguous. Please select from the following options, or be more specific.": "Zarówno lokalizacja początkowa, jak i końcowa nie została poprawnie ziterpretowana przez planer podróży. Prosimy o wybranie pozycji dostępnych na liście poniżej, bądź sprecyzować zapytanie.", - "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are": "Każdy z parametrów triangleSafetyFactor (bezpieczeństwo), triangleSlopeFactor (nachylenie) i triangleTimeFactor (czas) musi zostać ustawiony, jeśli na trasie znajdują się dane punkty.", - "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1": "Suma wartości w parametrach triangleSafetyFactor, triangleSlopeFactor i triangleTimeFactor musi wynieśc równo 1.", - "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE": "Jeśli zostały wprowadzone parametry triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor, wartość OptimizeType musi wskazywać na TRIANGLE (TRÓJKĄT)", - "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set": "Jeśli wartość pola OptimizeType wskazuje na TRIANGLE (TRÓJKĄT), należy podać parametry zmiennych triangleSafetyFactor, triangleSlopeFactor oraz triangleTimeFactor.", - "Set as Start Location": "Wybierz jako punkt początkowy", - "Set as End Location": "Wybierz jako punkt końcowy", - "Destination": "Cel", - "Error %(error_id)d": "Błąd %(error_id)d", - "No Trip Found": "Trasa nie została wyznaczona", - "Your %(bike_share_name)s route": "Twoja trasa : %(bike_share_name)s", - "Your bike route": "Trasa pokonana rowerem", - "Walk to the %(bike_share_name)s dock.": "Przejdź do doku %(bike_share_name)s", - "Walk from the %(bike_share_name)s dock to your destination.": "Przejdź z doku %(bike_share_name)s do punktu docelowego", - "Your walk route": "Trasa pokonana pieszo", - "Your route using the scooter": "", - "Your driving route": "Trasa pokonana rowerem", - "north": "północ", - "northeast": "północny wschód", - "east": "wschód", - "southeast": "południowy wschód", - "south": "południe", - "southwest": "południowy zachód", - "west": "zachód", - "northwest": "północny zachód", - "hard left": "ostro w lewo", - "left": "lewo", - "slight left": "łagodnie w lewo", - "continue": "utrzymuj kierunek", - "slight right": "łagodnie w prawo", - "right": "prawo", - "hard right": "ostro w prawo", - "elevator": "wzniesienie", - "U-turn left": "nawrót w lewo", - "U-turn right": "nawrót w prawo", - "Walk": "Spacer", - "Cycle": "Rower", - "Car": "Samochód", - "Bus": "Autobus", - "Subway": "Metro", - "Train": "Pociąg", - "Ferry": "Prom", - "Light Rail": "Light Rail", - "Cable Car": "Kolejka linowa", - "Funicular": "Kolej linowo-terenowa", - "Aerial Tram": "Kolej linowa", - "Airplane": "", - "Bicycle rental station": "Stacja wypożyczalni rowerów", - "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Przejedź przez rondo przeciwnie do ruchów wskazówki zegara do %(ordinal_exit_number)s wyjazdu na ulicę %(street_name)s", - "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Przejedź przez rondo przeciwnie do ruchów wskazówki zegara do %(ordinal_exit_number)s wyjazdu na ulicę %(street_name)s", - "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Przejedź przez rondo zgodnie z ruchem wskazówki zegara do %(ordinal_exit_number)s wyjazdu na ulicę %(street_name)s", - "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Przejedź przez rondo zgodnie z ruchem wskazówki zegara do %(ordinal_exit_number)s wyjazdu na ulicę %(street_name)s", - "Start on": "Rozpocznij na ulicy", - " heading ": "kierując się na", - "to continue on": "kieruj się w stronę", - "on to": "ulicy", - "first": "pierwszego", - "second": "drugiego", - "third": "trzeciego", - "fourth": "czwartego", - "fifth": "piątego", - "sixth": "szóstego", - "seventh": "siódmego", - "eight": "ósmego", - "ninth": "dziewiątego", - "tenth": "dziesiątego", - "%d hr_0": "%d h", - "%d hr_1": "%d h", - "%d hr_2": "%d h", - "%d min_0": "%d min", - "%d min_1": "%d min", - "%d min_2": "%d min", - "%d sec_0": "%d sek", - "%d sec_1": "%d sek", - "%d sec_2": "%d sek", - "OK": "OK", - "Minimize": "Minimalizuj", - "Bring to front": "Przenieś na wierzch", - "Send to back": "Przesuń na spód", - "Route:": "Trasa przejazdu:", - "Variant:": "Wariant:", - "Stop Finder": "Wyszukiwarka przystanków", - "Feed": "Agencja", - "By ID": "ID", - "By Name": "Nazwa", - "Search": "Szukaj", - "No Stops Found": "Nie znaleziono przystanków", - "Date": "Data", - "Find Stops": "Wyszukaj przystanki", - "(No Stop Selected)": "Nie wybrano przystanków", - "Block": "Zablokuj", - "Recenter": "Wyśrodkuj", - "Viewer": "Podgląd", - "Quick": "Szybki", - "Flat": "Równy teren", - "Bike Friendly": "Przyjazny dla rowerzystów", - "B": "B", - "F": "F", - "Q": "Q", - "All Routes": "Wszystkie trasy", - "Save": "Zapisz", - "Close": "Zamknij", - "Travel Options": "Opcje podróży", - "Geocoder": "Geocoder", - "Arrive": "Czas przyjazdu", - "Now": "Teraz", - "Wheelchair accessible trip:": "Wycieczka zawierająca udogodnienia dla osób niepełnosprawnych", - "Show Filtered Itineraries:": "", - "Travel by": "Podróżuj", - "Preferred Routes": "Preferowane trasy", - "Edit": "Edytuj", - "None": "Brak", - "Weight": "Waga", - "Banned routes": "Wyłączone trasy", - "Use": "Użyj", - "My Own Bike": "własnego roweru", - "A Shared Bike": "wypożyczonego roweru", - "Plan Your Trip": "Zaplanuj swoją podróż", - "Additional parameters": "", - " to _direction": "w kierunku", - " to _bus_direction": "w kierunku", - "Start_template": "Start", - "Depart_itinerary": "Wyjazd ze stacji", - "depart_itinerary": "odjazd", - "Start_popup": "Początek", - "Depart_tripoptions": "Czas wyjazdu" -} \ No newline at end of file + "Transit": "komunikacją publiczną", + "Bus Only": "wyłącznie autobusami", + "Rail Only": "wyłącznie koleją", + "Airplane Only": "", + "Transit, No Airplane": "", + "Bicycle Only": "wyłącznie rowerem", + "Bicycle & Transit": "rowerem & komunikacją publiczną", + "Walk Only": "wyłącznie pieszo", + "Car Only": "Rozpocznij na ulicy", + "Taxi": "", + "Park and Ride": "schemat P+R (Park and Ride)", + "Ride and Kiss (Car Pickup)": "", + "Kiss and Ride (Car Dropoff)": "", + "Bike and Ride": "schemat B+R (Bike and Ride)", + "Rented Bicycle": "wypożyczonym rowerem", + "Transit & Rented Bicycle": "kom. publiczną & wypoż. rowerem", + "Rented Scooter": "", + "Transit & Rented Scooter": "kom. publiczną & wypoż. rowerem", + "Transit with flex access": "", + "Transit with flex egress": "", + "Transit with flex access and egress": "", + "Direct flex search": "", + "Recenter Map Here": "Wyśrodkuj mapę w tym miejscu", + "Zoom In": "Przybliż", + "Zoom Out": "Oddal", + "Minimize all": "Minimalizuj wszystko", + "Unminimize all": "Maskymalizuj wszystko", + "Stop Viewer": "Zatrzymaj podgląd", + "Plan Trip": "Zaplanuj podróż", + "From Stop": "Z przystanku", + "To Stop": "Do przystanku", + "Routes Serving Stop": "Trasy obsługujące dany przystanek", + "Bike Share Planner": "Planner wypożyczenia roweru", + "Trip Options": "Trasa", + "PICK UP BIKE": "WYPOŻYCZ ROWER", + "ALTERNATE PICKUP": "ALTERNATYWNY PUNKT WYPOŻYCZENIA", + "DROP OFF BIKE": "ODDAJ ROWER", + "ALTERNATE DROP OFF": "ALTERNATYWNY PUNKT ODDANIA ROWERU", + "BIKE STATION": "STACJA ROWEROWA", + "Station:": "Stacja:", + "%d bike available_0": "%d dostępny rower", + "%d bike available_1": "%d dostępne rowery", + "%d bike available_2": "%d dostępnych rowerów", + "%d dock available_0": "%d dostępna stacja", + "%d dock available_1": "%d dostępne stacje", + "%d dock available_2": "%d dostępnych stacji", + "Recommended Pick Up:": "Rekomendowane miejsce wypożyczenia roweru:", + "Bicycle rental": "Wypożyczalnia rowerów", + "Recommended Drop Off:": "Rekomendowane miejsce oddania roweru:", + "Multimodal Trip Planner": "Planner Podróży", + "Itineraries": "Trasy", + "This itinerary departs on a different day from the previous one": "", + "%d Itinerary Returned_0": "%d zwrócona trasa", + "%d Itinerary Returned_1": "%d zwrócone trasy", + "%d Itinerary Returned_2": "%d zwróconych tras", + "Link to search": "Link do wyszukiwania", + "Previous Page": "Poprzednia", + "Next Page": "", + "CONTINUES AS": "POZOSTAŃ", + "%d min late_0": "%d minuta opóźnienia", + "%d min late_1": "%d minuty opóźnienia", + "%d min late_2": "%d minut opóźnienia", + "%d min early_0": "%d minuta przed czasem", + "%d min early_1": "%d minuty przed czasem", + "%d min early_2": "%d minut przed czasem", + "on time": "na czas", + "This itinerary departs on a different day than the one searched for": "", + "Arrived at destination with a rented bicycle!": "", + "End": "Koniec", + "Trip Summary": "Podsumowanie podróży", + "Travel": "Podróż", + "Time": "Czas trwania podróży", + "GenCost": "", + "Total Walk": "Długość trasy do pokonania pieszo", + "Total Bike": "Długośc trasy do pokonania rowerem", + "Total drive": "", + "Elevation Gained": "", + "Elevation Lost": "", + "Transfers": "Przesiadki", + "Fare": "Koszt", + "Valid": "Aktualna", + "Link to Itinerary": "Link do trasy", + "Print": "Drukuj", + "Your Trip": "Zaplanowana podróż", + "Email": "Adres e-mail", + "every %d min_0": "co %d minutę", + "every %d min_1": "co %d minuty", + "every %d min_2": "co %d minut", + "Board at ": "Wyjazd o", + "Stop": "Przystanek", + "Time in transit": "Czas spędzony w komunikacji publicznej", + "Route ID": "", + "Trip ID": "", + "Service Date": "", + "Trip Viewer": "Podgląd podróży", + "late as": "dopiero jak", + "Stay on board": "Kontynuuj podróż", + "Alight": "Wysiądź", + "at": "na przystanku", + "%(currency)s %(price)s": "%(currency)s %(price)s", + "Start: %(location)s at %(time_date)s": "Początek: %(location)s o %(time_date)s", + "Board": "Wyjazd", + "(%(agency_id)s Stop ID #%(stop_id)s),": "(%(agency_id)s ID przystanku #%(stop_id)s),", + "End: %(location)s at %(time_date)s": "Koniec: %(location)s o %(time_date)s", + "(%(agencyId)s Stop ID #%(id)s),": "", + "\nView itinerary online:\n%(itinerary_link)s\n": "\nWyświetl trasę w trybie online:\n%(itinerary_link)s\n", + "We're sorry. The trip planner is temporarily unavailable. Please try again later.": "Przepraszamy. Planer podróży jest obecnie niedostępny. Prosimy o ponowienie próby w późniejszym czasie.", + "Trip is not possible. You might be trying to plan a trip outside the map data boundary.": "", + "No trip found. There may be no transit service within the maximum specified distance or at the specified time, or your start or end point might not be safely accessible.": "", + "No transit times available. The date may be past or too far in the future or there may not be transit service for your trip at the time you chose.": "Brak informacji o rozkładzie komunikacji publicznej. Obowiązujące dane mogą być nieaktualne, bądź niekompatybilne w wybranym czasie z zaplanowaną trasą.", + "The trip planner is taking way too long to process your request. Please try again later.": "Planer podróży nie jest w stanie przetwożyć powierzonego mu zadania. Prosimy o ponowienie próby w późniejszym czasie.", + "The request has errors that the server is not willing or able to process.": "Wybrane zapytanie posiada błędy, których serwer nie jest w stanie obsłużyć.", + "Origin is unknown. Can you be a bit more descriptive?": "Wystąpił problem z określeniem lokalizacji startowej. Czy mógłbyś sprecyzować zapytanie?", + "Destination is unknown. Can you be a bit more descriptive?": "Wystąpił problem z określeniem lokalizacji końcowej. Czy mógłbyś sprecyzować zapytanie?", + "Both origin and destination are unknown. Can you be a bit more descriptive?": "Wystąpił problem z określeniem lokalizacji startowej oraz końcowej. Czy mógłbyś sprecyzować zapytanie?", + "Both origin and destination are not wheelchair accessible": "Zarówno lokalizacja startowa, jak i końcowa, nie oferuje udogodnień dla osób niepełnosprawnych.", + "Origin is within a trivial distance of the destination.": "Lokalizacja początkowa jest zlokalizowana w nieznacznej odległości od miejsca docelowego.", + "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.": "Planer podróży nie może zinterpretować lokalizacji początkowej. Prosimy o wybranie jednej z poniższych opcji, bądź sprecyzować zapytanie.", + "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.": "Planer podróży nie może zinterpretować lokalizacji końcowej. Prosimy o wybranie jednej z poniższych opcji, bądź sprecyzować zapytanie.", + "Both origin and destination are ambiguous. Please select from the following options, or be more specific.": "Zarówno lokalizacja początkowa, jak i końcowa nie została poprawnie ziterpretowana przez planer podróży. Prosimy o wybranie pozycji dostępnych na liście poniżej, bądź sprecyzować zapytanie.", + "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are": "Każdy z parametrów triangleSafetyFactor (bezpieczeństwo), triangleSlopeFactor (nachylenie) i triangleTimeFactor (czas) musi zostać ustawiony, jeśli na trasie znajdują się dane punkty.", + "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1": "Suma wartości w parametrach triangleSafetyFactor, triangleSlopeFactor i triangleTimeFactor musi wynieśc równo 1.", + "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE": "Jeśli zostały wprowadzone parametry triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor, wartość OptimizeType musi wskazywać na TRIANGLE (TRÓJKĄT)", + "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set": "Jeśli wartość pola OptimizeType wskazuje na TRIANGLE (TRÓJKĄT), należy podać parametry zmiennych triangleSafetyFactor, triangleSlopeFactor oraz triangleTimeFactor.", + "Set as Start Location": "Wybierz jako punkt początkowy", + "Set as End Location": "Wybierz jako punkt końcowy", + "Destination": "Cel", + "Error %(error_id)d": "Błąd %(error_id)d", + "No Trip Found": "Trasa nie została wyznaczona", + "Your %(bike_share_name)s route": "Twoja trasa : %(bike_share_name)s", + "Your bike route": "Trasa pokonana rowerem", + "Walk to the %(bike_share_name)s dock.": "Przejdź do doku %(bike_share_name)s", + "Walk from the %(bike_share_name)s dock to your destination.": "Przejdź z doku %(bike_share_name)s do punktu docelowego", + "Your walk route": "Trasa pokonana pieszo", + "Your route using the scooter": "", + "Your driving route": "Trasa pokonana rowerem", + "north": "północ", + "northeast": "północny wschód", + "east": "wschód", + "southeast": "południowy wschód", + "south": "południe", + "southwest": "południowy zachód", + "west": "zachód", + "northwest": "północny zachód", + "hard left": "ostro w lewo", + "left": "lewo", + "slight left": "łagodnie w lewo", + "continue": "utrzymuj kierunek", + "slight right": "łagodnie w prawo", + "right": "prawo", + "hard right": "ostro w prawo", + "elevator": "wzniesienie", + "U-turn left": "nawrót w lewo", + "U-turn right": "nawrót w prawo", + "Walk": "Spacer", + "Cycle": "Rower", + "Car": "Samochód", + "Bus": "Autobus", + "Subway": "Metro", + "Train": "Pociąg", + "Ferry": "Prom", + "Light Rail": "Light Rail", + "Cable Car": "Kolejka linowa", + "Funicular": "Kolej linowo-terenowa", + "Aerial Tram": "Kolej linowa", + "Airplane": "", + "Bicycle rental station": "Stacja wypożyczalni rowerów", + "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Przejedź przez rondo przeciwnie do ruchów wskazówki zegara do %(ordinal_exit_number)s wyjazdu na ulicę %(street_name)s", + "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Przejedź przez rondo przeciwnie do ruchów wskazówki zegara do %(ordinal_exit_number)s wyjazdu na ulicę %(street_name)s", + "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Przejedź przez rondo zgodnie z ruchem wskazówki zegara do %(ordinal_exit_number)s wyjazdu na ulicę %(street_name)s", + "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Przejedź przez rondo zgodnie z ruchem wskazówki zegara do %(ordinal_exit_number)s wyjazdu na ulicę %(street_name)s", + "Start on": "Rozpocznij na ulicy", + " heading ": "kierując się na", + "to continue on": "kieruj się w stronę", + "on to": "ulicy", + "first": "pierwszego", + "second": "drugiego", + "third": "trzeciego", + "fourth": "czwartego", + "fifth": "piątego", + "sixth": "szóstego", + "seventh": "siódmego", + "eight": "ósmego", + "ninth": "dziewiątego", + "tenth": "dziesiątego", + "%d hr_0": "%d h", + "%d hr_1": "%d h", + "%d hr_2": "%d h", + "%d min_0": "%d min", + "%d min_1": "%d min", + "%d min_2": "%d min", + "%d sec_0": "%d sek", + "%d sec_1": "%d sek", + "%d sec_2": "%d sek", + "OK": "OK", + "Minimize": "Minimalizuj", + "Bring to front": "Przenieś na wierzch", + "Send to back": "Przesuń na spód", + "Route:": "Trasa przejazdu:", + "Variant:": "Wariant:", + "Stop Finder": "Wyszukiwarka przystanków", + "Feed": "Agencja", + "By ID": "ID", + "By Name": "Nazwa", + "Search": "Szukaj", + "No Stops Found": "Nie znaleziono przystanków", + "Date": "Data", + "Find Stops": "Wyszukaj przystanki", + "(No Stop Selected)": "Nie wybrano przystanków", + "Block": "Zablokuj", + "Recenter": "Wyśrodkuj", + "Viewer": "Podgląd", + "Quick": "Szybki", + "Flat": "Równy teren", + "Bike Friendly": "Przyjazny dla rowerzystów", + "B": "B", + "F": "F", + "Q": "Q", + "All Routes": "Wszystkie trasy", + "Save": "Zapisz", + "Close": "Zamknij", + "Travel Options": "Opcje podróży", + "Geocoder": "Geocoder", + "Arrive": "Czas przyjazdu", + "Now": "Teraz", + "Wheelchair accessible trip:": "Wycieczka zawierająca udogodnienia dla osób niepełnosprawnych", + "Show Filtered Itineraries:": "", + "Travel by": "Podróżuj", + "Preferred Routes": "Preferowane trasy", + "Edit": "Edytuj", + "None": "Brak", + "Weight": "Waga", + "Banned routes": "Wyłączone trasy", + "Use": "Użyj", + "My Own Bike": "własnego roweru", + "A Shared Bike": "wypożyczonego roweru", + "Plan Your Trip": "Zaplanuj swoją podróż", + "Additional parameters": "", + " to _direction": "w kierunku", + " to _bus_direction": "w kierunku", + "Start_template": "Start", + "Depart_itinerary": "Wyjazd ze stacji", + "depart_itinerary": "odjazd", + "Start_popup": "Początek", + "Depart_tripoptions": "Czas wyjazdu" +} 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..bf2e4a78732 100644 --- a/application/src/client/classic-debug/js/otp/locale/pt.json +++ b/application/src/client/classic-debug/js/otp/locale/pt.json @@ -1,238 +1,238 @@ { - "Transit": "Vários", - "Bus Only": "Autocarro apenas", - "Rail Only": "Só ferroviário", - "Airplane Only": "", - "Transit, No Airplane": "", - "Bicycle Only": "Bicicleta apenas", - "Bicycle & Transit": "Bicicleta & vários", - "Walk Only": "Só a pé", - "Car Only": "Origem em", - "Taxi": "", - "Park and Ride": "Estacionar e conduzir", - "Ride and Kiss (Car Pickup)": "", - "Kiss and Ride (Car Dropoff)": "", - "Bike and Ride": "Bicicleta e conduzir", - "Rented Bicycle": "Bicicleta alugada", - "Transit & Rented Bicycle": "Vários & bicicletas alugadas", - "Rented Scooter": "", - "Transit & Rented Scooter": "Vários & bicicletas alugadas", - "Transit with flex access": "", - "Transit with flex egress": "", - "Transit with flex access and egress": "", - "Direct flex search": "", - "Recenter Map Here": "Mapa mais recente aqui", - "Zoom In": "Zoom In", - "Zoom Out": "Zoom Out", - "Minimize all": "Minimizar tudo", - "Unminimize all": "Maximizar tudo", - "Stop Viewer": "Visualizardor de paragens", - "Plan Trip": "Planear rota", - "From Stop": "Da paragem", - "To Stop": "Para a paragem", - "Routes Serving Stop": "Paragens servindo as linhas", - "Bike Share Planner": "Planeador de partilha de bicicletas", - "Trip Options": "Opções de viagem", - "PICK UP BIKE": "APANHAR UMA BICICLETA", - "ALTERNATE PICKUP": "APANHAR DE BICICLETA ALTERNATIVO", - "DROP OFF BIKE": "LARGAR A BICICLETA", - "ALTERNATE DROP OFF": "LARGAR DE BICICLETA ALTERNATIVO", - "BIKE STATION": "ESTAÇÃO DE BICICLETAS", - "Station:": "Estação:", - "%d bike available": "%d bicicleta disponível", - "%d bike available_plural": "%d bicicletas disponíveis", - "%d dock available": "%d dock disponível", - "%d dock available_plural": "%d docks disponíveis", - "Recommended Pick Up:": "Apanhar de bicicleta recomendado:", - "Bicycle rental": "Aluguer de bicicletas", - "Recommended Drop Off:": "Largar de bicicleta recomendado:", - "Multimodal Trip Planner": "Planeador de rotas multi-modal", - "Itineraries": "Itinerários", - "This itinerary departs on a different day from the previous one": "", - "%d Itinerary Returned": "%d Itinerário devolvido", - "%d Itinerary Returned_plural": "%d Itinerários devolvidos", - "Link to search": "Link para pesquisa", - "Previous Page": "Anterior", - "Next Page": "", - "CONTINUES AS": "CONTINUAR COMO", - "%d min late": "%d min mais tarde", - "%d min late_plural": "%d mins mais tarde", - "%d min early": "%d min mais cedo", - "%d min early_plural": "%d mins mais cedo", - "on time": "a tempo", - "This itinerary departs on a different day than the one searched for": "", - "Arrived at destination with a rented bicycle!": "", - "End": "Destino", - "Trip Summary": "Sumário da rota", - "Travel": "Viagem", - "Time": "Tempo", - "GenCost": "", - "Total Walk": "Total a pé", - "Total Bike": "Total de bicicleta", - "Total drive": "", - "Elevation Gained": "", - "Elevation Lost": "", - "Transfers": "Transferências", - "Fare": "Tarifa", - "Valid": "Válido", - "Link to Itinerary": "Link para o itenerário", - "Print": "Imprimir", - "Your Trip": "A tua rota", - "Email": "Email", - "every %d min": "A cada %d min", - "every %d min_plural": " A cada %d mins", - "Board at ": "Entrar às", - "Stop": "Paragem", - "Time in transit": "Tempo em viagem", - "Route ID": "", - "Trip ID": "", - "Service Date": "", - "Trip Viewer": "Visualizador de rotas", - "late as": "tão tarde como", - "Stay on board": "Mantenha-se em viagem", - "Alight": "Iluminado", - "at": "às", - "%(currency)s %(price)s": "%(currency)s %(price)s", - "Start: %(location)s at %(time_date)s": "Partida: %(location)s às %(time_date)s", - "Board": "Entrar", - "(%(agency_id)s Stop ID #%(stop_id)s),": "(%(agency_id)s ID Paragem #%(stop_id)s),", - "End: %(location)s at %(time_date)s": "Destino: %(location)s at %(time_date)s", - "(%(agencyId)s Stop ID #%(id)s),": "", - "\nView itinerary online:\n%(itinerary_link)s\n": "\nVer itinerário online:\n%(itinerary_link)s\n", - "We're sorry. The trip planner is temporarily unavailable. Please try again later.": "Pedimos desculpa. O planeador de rotas está temporariamente indisponível. Tente mais tarde.", - "Trip is not possible. You might be trying to plan a trip outside the map data boundary.": "", - "No trip found. There may be no transit service within the maximum specified distance or at the specified time, or your start or end point might not be safely accessible.": "", - "No transit times available. The date may be past or too far in the future or there may not be transit service for your trip at the time you chose.": "Não há tempos de trânsito disponíveis. Não há informação acerca dos transportes para esta data.", - "The trip planner is taking way too long to process your request. Please try again later.": "O planeador de rotas está a demorar demasiado tempo para processar o seu pedido. Tente mais tarde.", - "The request has errors that the server is not willing or able to process.": "O seu pedido tem erros e o servidor não está a conseguir processá-lo.", - "Origin is unknown. Can you be a bit more descriptive?": "Origem desconhecida. Pode ser mais descritivo?", - "Destination is unknown. Can you be a bit more descriptive?": "Destino indisponível. Pode ser mais descritivo?", - "Both origin and destination are unknown. Can you be a bit more descriptive?": "Origem e destino desconhecidos. Pode ser mais descritivo?", - "Both origin and destination are not wheelchair accessible": "Origem e destino não acessível a cadeiras de rodas.", - "Origin is within a trivial distance of the destination.": "Origem a uma distância demasiado pequena do destino.", - "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.": "O planeador de rotas está inseguro em relação à localização da sua origem. Selecione uma das seguintes opções ou seja mais específico.", - "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.": "O planeador de rotas está inseguro em relação à localização do seu destino. Selecione uma das seguintes opções ou seja mais específico.", - "Both origin and destination are ambiguous. Please select from the following options, or be more specific.": "Origem e destino ambíguos. Selecione uma das seguintes opções ou seja mais específico.", - "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are": "Todo o triangleSafetyFactor, triangleSlopeFactor, e triangleTimeFactor deve ser definido se algum for", - "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1": "Os valores de triangleSafetyFactor, triangleSlopeFactor, e triangleTimeFactor devem somar com valor 1", - "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE": "Se o triangleSafetyFactor, triangleSlopeFactor, e triangleTimeFactor forem fornecidos, OptimizeType deve ser um TRIANGLE", - "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set": "Se OptimizeType é TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, e triangleTimeFactor devem ser definidos", - "Set as Start Location": "Definir como local de origem", - "Set as End Location": "Definir como local de destino", - "Destination": "Destino", - "Error %(error_id)d": "Erro %(error_id)d", - "No Trip Found": "Nenhuma rota encontrada", - "Your %(bike_share_name)s route": "A sua rota %(bike_share_name)s ", - "Your bike route": "A sua rota de bicicleta", - "Walk to the %(bike_share_name)s dock.": "Andar para a dock %(bike_share_name)s .", - "Walk from the %(bike_share_name)s dock to your destination.": "Andar da dock %(bike_share_name)s para o seu destino.", - "Your walk route": "A sua rota a pé", - "Your route using the scooter": "", - "Your driving route": "A sua rota de bicicleta", - "north": "norte", - "northeast": "nordeste", - "east": "este", - "southeast": "sudeste", - "south": "sul", - "southwest": "sudoeste", - "west": "oeste", - "northwest": "nordeste", - "hard left": "esquerda apertada", - "left": "esquerda", - "slight left": "esquerda ligeira", - "continue": "continuar", - "slight right": "direita ligeira", - "right": "direita", - "hard right": "direita apertada", - "elevator": "elevador", - "U-turn left": "cotovelo à esquerda", - "U-turn right": "cotovelo à direita", - "Walk": "A pé", - "Cycle": "Bicicleta", - "Car": "Carro", - "Bus": "Autocarro", - "Subway": "Metro", - "Train": "Comboio", - "Ferry": "Ferry", - "Light Rail": "Ferroviário leve", - "Cable Car": "Eléctrico", - "Funicular": "Teleférico", - "Aerial Tram": "Teleférico", - "Airplane": "", - "Bicycle rental station": "Estação de aluguer de bicicletas", - "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Entrar na rotuda no sentido contrário aos ponteiros do relógio na %(ordinal_exit_number)s saída em direção a %(street_name)s", - "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Entrar na rotunda no sentido contrário aos ponteiros do relógio, na %(ordinal_exit_number)s saída em direcção a %(street_name)s", - "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Entrar na rotuda no sentido dos ponteiros do relógio na %(ordinal_exit_number)s saída em direção a %(street_name)s", - "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Entrar na rotunda no sentido dos ponteiros do relógio, na %(ordinal_exit_number)s saída em direcção a %(street_name)s", - "Start on": "Origem em", - " heading ": "em direcção a", - "to continue on": "a continuar em", - "on to": "para", - "first": "primeiro", - "second": "segundo", - "third": "terceiro", - "fourth": "quarto", - "fifth": "quinto", - "sixth": "sexto", - "seventh": "sétimo", - "eight": "oitavo", - "ninth": "nono", - "tenth": "décimo", - "%d hr": "%d hr", - "%d hr_plural": "%d hrs", - "%d min": "%d min", - "%d min_plural": "%d mins", - "%d sec": "%d sec", - "%d sec_plural": "%d secs", - "OK": "OK", - "Minimize": "Minimzar", - "Bring to front": "Trazer prá frente", - "Send to back": "Mandar para trás", - "Route:": "Rota:", - "Variant:": "Variante:", - "Stop Finder": "Pesquisar paragem", - "Feed": "Companhia", - "By ID": "Por ID", - "By Name": "Por Nome", - "Search": "Pesquisar", - "No Stops Found": "Nenhuma paragem encontrada", - "Date": "Data", - "Find Stops": "Procurar paragens", - "(No Stop Selected)": "(Nenhuma paragem selecionada)", - "Block": "Bloquear", - "Recenter": "Mais recente", - "Viewer": "Visualizador", - "Quick": "Rápido", - "Flat": "Plano", - "Bike Friendly": "Amigo às bicicletas", - "B": "B", - "F": "F", - "Q": "Q", - "All Routes": "Todas as rotas", - "Save": "Guardar", - "Close": "Fechar", - "Travel Options": "Opções de viagem", - "Geocoder": "Geocoder", - "Arrive": "Chegada", - "Now": "Agora", - "Wheelchair accessible trip:": "Rota acessível a cadeira de rodas", - "Show Filtered Itineraries:": "", - "Travel by": "Viagem por", - "Preferred Routes": "Rotas favoritas", - "Edit": "Editar", - "None": "Nenhum", - "Weight": "Peso", - "Banned routes": "Rotas banidas", - "Use": "Utilizar", - "My Own Bike": "A minha bicicleta", - "A Shared Bike": "Uma bicicleta partilhada", - "Plan Your Trip": "Planear a sua viagem", - "Additional parameters": "", - " to _direction": "Para", - " to _bus_direction": "Para", - "Start_template": "Começar", - "Depart_itinerary": "Partida", - "depart_itinerary": "partida", - "Start_popup": "Origem", - "Depart_tripoptions": "Partir" -} \ No newline at end of file + "Transit": "Vários", + "Bus Only": "Autocarro apenas", + "Rail Only": "Só ferroviário", + "Airplane Only": "", + "Transit, No Airplane": "", + "Bicycle Only": "Bicicleta apenas", + "Bicycle & Transit": "Bicicleta & vários", + "Walk Only": "Só a pé", + "Car Only": "Origem em", + "Taxi": "", + "Park and Ride": "Estacionar e conduzir", + "Ride and Kiss (Car Pickup)": "", + "Kiss and Ride (Car Dropoff)": "", + "Bike and Ride": "Bicicleta e conduzir", + "Rented Bicycle": "Bicicleta alugada", + "Transit & Rented Bicycle": "Vários & bicicletas alugadas", + "Rented Scooter": "", + "Transit & Rented Scooter": "Vários & bicicletas alugadas", + "Transit with flex access": "", + "Transit with flex egress": "", + "Transit with flex access and egress": "", + "Direct flex search": "", + "Recenter Map Here": "Mapa mais recente aqui", + "Zoom In": "Zoom In", + "Zoom Out": "Zoom Out", + "Minimize all": "Minimizar tudo", + "Unminimize all": "Maximizar tudo", + "Stop Viewer": "Visualizardor de paragens", + "Plan Trip": "Planear rota", + "From Stop": "Da paragem", + "To Stop": "Para a paragem", + "Routes Serving Stop": "Paragens servindo as linhas", + "Bike Share Planner": "Planeador de partilha de bicicletas", + "Trip Options": "Opções de viagem", + "PICK UP BIKE": "APANHAR UMA BICICLETA", + "ALTERNATE PICKUP": "APANHAR DE BICICLETA ALTERNATIVO", + "DROP OFF BIKE": "LARGAR A BICICLETA", + "ALTERNATE DROP OFF": "LARGAR DE BICICLETA ALTERNATIVO", + "BIKE STATION": "ESTAÇÃO DE BICICLETAS", + "Station:": "Estação:", + "%d bike available": "%d bicicleta disponível", + "%d bike available_plural": "%d bicicletas disponíveis", + "%d dock available": "%d dock disponível", + "%d dock available_plural": "%d docks disponíveis", + "Recommended Pick Up:": "Apanhar de bicicleta recomendado:", + "Bicycle rental": "Aluguer de bicicletas", + "Recommended Drop Off:": "Largar de bicicleta recomendado:", + "Multimodal Trip Planner": "Planeador de rotas multi-modal", + "Itineraries": "Itinerários", + "This itinerary departs on a different day from the previous one": "", + "%d Itinerary Returned": "%d Itinerário devolvido", + "%d Itinerary Returned_plural": "%d Itinerários devolvidos", + "Link to search": "Link para pesquisa", + "Previous Page": "Anterior", + "Next Page": "", + "CONTINUES AS": "CONTINUAR COMO", + "%d min late": "%d min mais tarde", + "%d min late_plural": "%d mins mais tarde", + "%d min early": "%d min mais cedo", + "%d min early_plural": "%d mins mais cedo", + "on time": "a tempo", + "This itinerary departs on a different day than the one searched for": "", + "Arrived at destination with a rented bicycle!": "", + "End": "Destino", + "Trip Summary": "Sumário da rota", + "Travel": "Viagem", + "Time": "Tempo", + "GenCost": "", + "Total Walk": "Total a pé", + "Total Bike": "Total de bicicleta", + "Total drive": "", + "Elevation Gained": "", + "Elevation Lost": "", + "Transfers": "Transferências", + "Fare": "Tarifa", + "Valid": "Válido", + "Link to Itinerary": "Link para o itenerário", + "Print": "Imprimir", + "Your Trip": "A tua rota", + "Email": "Email", + "every %d min": "A cada %d min", + "every %d min_plural": " A cada %d mins", + "Board at ": "Entrar às", + "Stop": "Paragem", + "Time in transit": "Tempo em viagem", + "Route ID": "", + "Trip ID": "", + "Service Date": "", + "Trip Viewer": "Visualizador de rotas", + "late as": "tão tarde como", + "Stay on board": "Mantenha-se em viagem", + "Alight": "Iluminado", + "at": "às", + "%(currency)s %(price)s": "%(currency)s %(price)s", + "Start: %(location)s at %(time_date)s": "Partida: %(location)s às %(time_date)s", + "Board": "Entrar", + "(%(agency_id)s Stop ID #%(stop_id)s),": "(%(agency_id)s ID Paragem #%(stop_id)s),", + "End: %(location)s at %(time_date)s": "Destino: %(location)s at %(time_date)s", + "(%(agencyId)s Stop ID #%(id)s),": "", + "\nView itinerary online:\n%(itinerary_link)s\n": "\nVer itinerário online:\n%(itinerary_link)s\n", + "We're sorry. The trip planner is temporarily unavailable. Please try again later.": "Pedimos desculpa. O planeador de rotas está temporariamente indisponível. Tente mais tarde.", + "Trip is not possible. You might be trying to plan a trip outside the map data boundary.": "", + "No trip found. There may be no transit service within the maximum specified distance or at the specified time, or your start or end point might not be safely accessible.": "", + "No transit times available. The date may be past or too far in the future or there may not be transit service for your trip at the time you chose.": "Não há tempos de trânsito disponíveis. Não há informação acerca dos transportes para esta data.", + "The trip planner is taking way too long to process your request. Please try again later.": "O planeador de rotas está a demorar demasiado tempo para processar o seu pedido. Tente mais tarde.", + "The request has errors that the server is not willing or able to process.": "O seu pedido tem erros e o servidor não está a conseguir processá-lo.", + "Origin is unknown. Can you be a bit more descriptive?": "Origem desconhecida. Pode ser mais descritivo?", + "Destination is unknown. Can you be a bit more descriptive?": "Destino indisponível. Pode ser mais descritivo?", + "Both origin and destination are unknown. Can you be a bit more descriptive?": "Origem e destino desconhecidos. Pode ser mais descritivo?", + "Both origin and destination are not wheelchair accessible": "Origem e destino não acessível a cadeiras de rodas.", + "Origin is within a trivial distance of the destination.": "Origem a uma distância demasiado pequena do destino.", + "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.": "O planeador de rotas está inseguro em relação à localização da sua origem. Selecione uma das seguintes opções ou seja mais específico.", + "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.": "O planeador de rotas está inseguro em relação à localização do seu destino. Selecione uma das seguintes opções ou seja mais específico.", + "Both origin and destination are ambiguous. Please select from the following options, or be more specific.": "Origem e destino ambíguos. Selecione uma das seguintes opções ou seja mais específico.", + "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are": "Todo o triangleSafetyFactor, triangleSlopeFactor, e triangleTimeFactor deve ser definido se algum for", + "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1": "Os valores de triangleSafetyFactor, triangleSlopeFactor, e triangleTimeFactor devem somar com valor 1", + "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE": "Se o triangleSafetyFactor, triangleSlopeFactor, e triangleTimeFactor forem fornecidos, OptimizeType deve ser um TRIANGLE", + "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set": "Se OptimizeType é TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, e triangleTimeFactor devem ser definidos", + "Set as Start Location": "Definir como local de origem", + "Set as End Location": "Definir como local de destino", + "Destination": "Destino", + "Error %(error_id)d": "Erro %(error_id)d", + "No Trip Found": "Nenhuma rota encontrada", + "Your %(bike_share_name)s route": "A sua rota %(bike_share_name)s ", + "Your bike route": "A sua rota de bicicleta", + "Walk to the %(bike_share_name)s dock.": "Andar para a dock %(bike_share_name)s .", + "Walk from the %(bike_share_name)s dock to your destination.": "Andar da dock %(bike_share_name)s para o seu destino.", + "Your walk route": "A sua rota a pé", + "Your route using the scooter": "", + "Your driving route": "A sua rota de bicicleta", + "north": "norte", + "northeast": "nordeste", + "east": "este", + "southeast": "sudeste", + "south": "sul", + "southwest": "sudoeste", + "west": "oeste", + "northwest": "nordeste", + "hard left": "esquerda apertada", + "left": "esquerda", + "slight left": "esquerda ligeira", + "continue": "continuar", + "slight right": "direita ligeira", + "right": "direita", + "hard right": "direita apertada", + "elevator": "elevador", + "U-turn left": "cotovelo à esquerda", + "U-turn right": "cotovelo à direita", + "Walk": "A pé", + "Cycle": "Bicicleta", + "Car": "Carro", + "Bus": "Autocarro", + "Subway": "Metro", + "Train": "Comboio", + "Ferry": "Ferry", + "Light Rail": "Ferroviário leve", + "Cable Car": "Eléctrico", + "Funicular": "Teleférico", + "Aerial Tram": "Teleférico", + "Airplane": "", + "Bicycle rental station": "Estação de aluguer de bicicletas", + "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Entrar na rotuda no sentido contrário aos ponteiros do relógio na %(ordinal_exit_number)s saída em direção a %(street_name)s", + "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Entrar na rotunda no sentido contrário aos ponteiros do relógio, na %(ordinal_exit_number)s saída em direcção a %(street_name)s", + "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Entrar na rotuda no sentido dos ponteiros do relógio na %(ordinal_exit_number)s saída em direção a %(street_name)s", + "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "Entrar na rotunda no sentido dos ponteiros do relógio, na %(ordinal_exit_number)s saída em direcção a %(street_name)s", + "Start on": "Origem em", + " heading ": "em direcção a", + "to continue on": "a continuar em", + "on to": "para", + "first": "primeiro", + "second": "segundo", + "third": "terceiro", + "fourth": "quarto", + "fifth": "quinto", + "sixth": "sexto", + "seventh": "sétimo", + "eight": "oitavo", + "ninth": "nono", + "tenth": "décimo", + "%d hr": "%d hr", + "%d hr_plural": "%d hrs", + "%d min": "%d min", + "%d min_plural": "%d mins", + "%d sec": "%d sec", + "%d sec_plural": "%d secs", + "OK": "OK", + "Minimize": "Minimzar", + "Bring to front": "Trazer prá frente", + "Send to back": "Mandar para trás", + "Route:": "Rota:", + "Variant:": "Variante:", + "Stop Finder": "Pesquisar paragem", + "Feed": "Companhia", + "By ID": "Por ID", + "By Name": "Por Nome", + "Search": "Pesquisar", + "No Stops Found": "Nenhuma paragem encontrada", + "Date": "Data", + "Find Stops": "Procurar paragens", + "(No Stop Selected)": "(Nenhuma paragem selecionada)", + "Block": "Bloquear", + "Recenter": "Mais recente", + "Viewer": "Visualizador", + "Quick": "Rápido", + "Flat": "Plano", + "Bike Friendly": "Amigo às bicicletas", + "B": "B", + "F": "F", + "Q": "Q", + "All Routes": "Todas as rotas", + "Save": "Guardar", + "Close": "Fechar", + "Travel Options": "Opções de viagem", + "Geocoder": "Geocoder", + "Arrive": "Chegada", + "Now": "Agora", + "Wheelchair accessible trip:": "Rota acessível a cadeira de rodas", + "Show Filtered Itineraries:": "", + "Travel by": "Viagem por", + "Preferred Routes": "Rotas favoritas", + "Edit": "Editar", + "None": "Nenhum", + "Weight": "Peso", + "Banned routes": "Rotas banidas", + "Use": "Utilizar", + "My Own Bike": "A minha bicicleta", + "A Shared Bike": "Uma bicicleta partilhada", + "Plan Your Trip": "Planear a sua viagem", + "Additional parameters": "", + " to _direction": "Para", + " to _bus_direction": "Para", + "Start_template": "Começar", + "Depart_itinerary": "Partida", + "depart_itinerary": "partida", + "Start_popup": "Origem", + "Depart_tripoptions": "Partir" +} 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..8991e9451d8 100644 --- a/application/src/client/classic-debug/js/otp/locale/sl.json +++ b/application/src/client/classic-debug/js/otp/locale/sl.json @@ -1,256 +1,256 @@ { - "Transit": "Javni prevoz", - "Bus Only": "Avtobus", - "Rail Only": "Vlak", - "Airplane Only": "", - "Transit, No Airplane": "", - "Bicycle Only": "Kolo", - "Bicycle & Transit": "Kolo & Javni prevoz", - "Walk Only": "Pešačenje", - "Car Only": "Začnite na", - "Taxi": "", - "Park and Ride": "Parkiraj in se pelji", - "Ride and Kiss (Car Pickup)": "", - "Kiss and Ride (Car Dropoff)": "", - "Bike and Ride": "", - "Rented Bicycle": "Izposojeno kolo", - "Transit & Rented Bicycle": "Izposojeno kolo & Javni prevoz", - "Rented Scooter": "", - "Transit & Rented Scooter": "Izposojeno kolo & Javni prevoz", - "Transit with flex access": "", - "Transit with flex egress": "", - "Transit with flex access and egress": "", - "Direct flex search": "", - "Recenter Map Here": "Prikaži karto tukaj", - "Zoom In": "Približaj", - "Zoom Out": "Oddalji", - "Minimize all": "Skrči vse", - "Unminimize all": "Razširi vse", - "Stop Viewer": "Pregledovalnik postaj", - "Plan Trip": "Načrtuj pot", - "From Stop": "Začetna postaja", - "To Stop": "Končna postaja", - "Routes Serving Stop": "Avtobusi, ki ustavljajo na postaji", - "Bike Share Planner": "Planer za izposojena kolesa", - "Trip Options": "Nastavitve poti", - "PICK UP BIKE": "IZPOSOJA KOLESA", - "ALTERNATE PICKUP": "ALTERNATIVNO MESTO IZPOSOJE", - "DROP OFF BIKE": "VRNITEV KOLESA", - "ALTERNATE DROP OFF": "ALTERNATIVNO MESTO VRNITVE KOLESA", - "BIKE STATION": "IZPOSOJEVALNA POSTAJA", - "Station:": "Postaja:", - "%d bike available_0": "%d koles na voljo", - "%d bike available_1": "%d kolo na voljo", - "%d bike available_2": "%d kolesi na voljo", - "%d bike available_3": "%d kolesa na voljo", - "%d dock available_0": "%d prostorov na voljo", - "%d dock available_1": "%d prostor na voljo", - "%d dock available_2": "%d prostora na voljo", - "%d dock available_3": "%d prostori na voljo", - "Recommended Pick Up:": "Predlagana postaja za izposojo kolesa:", - "Bicycle rental": "postaje za izposojo koles", - "Recommended Drop Off:": "Predlagana postaja za vrnitev kolesa:", - "Multimodal Trip Planner": "Načrtovalnik poti", - "Itineraries": "Načrti poti", - "This itinerary departs on a different day from the previous one": "", - "%d Itinerary Returned_0": "%d vrnjenih načrtov poti", - "%d Itinerary Returned_1": "%d vrnjen načrt poti", - "%d Itinerary Returned_2": "%d vrnjena načrta poti", - "%d Itinerary Returned_3": "%d vrnjeni načrti poti", - "Link to search": "Iskanje", - "Previous Page": "Prejšnja", - "Next Page": "", - "CONTINUES AS": "SE NADALJUJE KOT", - "%d min late_0": "%d min. zamude", - "%d min late_1": "%d min. zamude", - "%d min late_2": "%d min. zamude", - "%d min late_3": "%d min. zamude", - "%d min early_0": "%d min. prehitro", - "%d min early_1": "%d min. prehitro", - "%d min early_2": "%d min. prehitro", - "%d min early_3": "%d min. prehitro", - "on time": "pravočasno", - "This itinerary departs on a different day than the one searched for": "", - "Arrived at destination with a rented bicycle!": "", - "End": "Konec", - "Trip Summary": "Povzetek poti", - "Travel": "Potuj ob", - "Time": "Trajanje", - "GenCost": "", - "Total Walk": "Skupno hoje", - "Total Bike": "Skupno kolesarjenja", - "Total drive": "", - "Elevation Gained": "", - "Elevation Lost": "", - "Transfers": "Št. prestopov", - "Fare": "Cena", - "Valid": "Veljavno", - "Link to Itinerary": "Načrt poti", - "Print": "Natisni", - "Your Trip": "Vaša pot", - "Email": "E-pošta", - "every %d min_0": "vsakih %d min", - "every %d min_1": "vsako %d min", - "every %d min_2": "vsaki %d min", - "every %d min_3": "vsake %d min", - "Board at ": "Vstop na ", - "Stop": "Postaja", - "Time in transit": "Časa na vožnji", - "Route ID": "", - "Trip ID": "", - "Service Date": "", - "Trip Viewer": "Pregledovalnik poti", - "late as": "", - "Stay on board": "Ostanite v vozilu", - "Alight": "Izstop", - "at": "na", - "%(currency)s %(price)s": "%(price)s %(currency)s", - "Start: %(location)s at %(time_date)s": "Začetek: %(location)s ob %(time_date)s", - "Board": "Vstop", - "(%(agency_id)s Stop ID #%(stop_id)s),": "(%(agency_id)s),", - "End: %(location)s at %(time_date)s": "Konec: %(location)s ob %(time_date)s", - "(%(agencyId)s Stop ID #%(id)s),": "", - "\nView itinerary online:\n%(itinerary_link)s\n": "\nOglejte si načrt poti na spletu:\n%(itinerary_link)s\n", - "We're sorry. The trip planner is temporarily unavailable. Please try again later.": "Opravičujemo se. Daljinar trenutno ni na voljo. Prosimo poskusite kasneje.", - "Trip is not possible. You might be trying to plan a trip outside the map data boundary.": "", - "No trip found. There may be no transit service within the maximum specified distance or at the specified time, or your start or end point might not be safely accessible.": "", - "No transit times available. The date may be past or too far in the future or there may not be transit service for your trip at the time you chose.": "Podatki o voznih redih niso na voljo. Mogoče je datum preveč v preteklosti ali prihodnosti ali pa javni prevoz ne obstaja za pot, ki jo načrtujete.", - "The trip planner is taking way too long to process your request. Please try again later.": "Daljinar potrebuje preveč časa za obdelavo vašega zahtevka. Prosimo poskusite znova kasneje.", - "The request has errors that the server is not willing or able to process.": "Zahtevek ima napake, ki jih strežnik ne more obdelati.", - "Origin is unknown. Can you be a bit more descriptive?": "Začetek poti ni znan. Prosimo bodite bolj natančni.", - "Destination is unknown. Can you be a bit more descriptive?": "Konec poti ni znan. Prosimo bodite bolj natančni.", - "Both origin and destination are unknown. Can you be a bit more descriptive?": "Začetek in konec sta neznana. Prosimo bodite bolj natančni.", - "Both origin and destination are not wheelchair accessible": "Do začetka in konca ni mogoče priti z vozičkom.", - "Origin is within a trivial distance of the destination.": "Začetek je trivialno oddaljen od konec.", - "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.": "", - "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.": "", - "Both origin and destination are ambiguous. Please select from the following options, or be more specific.": "", - "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are": "", - "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1": "", - "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE": "", - "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set": "", - "Set as Start Location": "Začetek poti", - "Set as End Location": "Konec poti", - "Destination": "Konec", - "Error %(error_id)d": "Napaka %(error_id)d", - "No Trip Found": "Ne najdemo poti", - "Your %(bike_share_name)s route": "Kolesarjenje s kolesom izposojenim pri %(bike_share_name)s", - "Your bike route": "Kolesarska pot", - "Walk to the %(bike_share_name)s dock.": "Hodite do postaje podjetja %(bike_share_name)s.", - "Walk from the %(bike_share_name)s dock to your destination.": "Hodite od postaje podjetja %(bike_share_name)s do vašega cilja.", - "Your walk route": "Pot peš", - "Your route using the scooter": "", - "Your driving route": "Kolesarska pot", - "north": "sever", - "northeast": "severovzhod", - "east": "vzhod", - "southeast": "jugovzhod", - "south": "jug", - "southwest": "jugozahod", - "west": "zahod", - "northwest": "severozahod", - "hard left": "ostro levo", - "left": "levo", - "slight left": "rahlo levo", - "continue": "nadaljujte", - "slight right": "rahlo desno", - "right": "desno", - "hard right": "ostro desno", - "elevator": "pojdite z dvigalom", - "U-turn left": "Polkrožno obrnite v levo", - "U-turn right": "Polkrožno obrnite v desno", - "Walk": "Pešačite", - "Cycle": "Kolesarite", - "Car": "Avto", - "Bus": "Avtobus", - "Subway": "Podzemna železnica", - "Train": "Vlak", - "Ferry": "", - "Light Rail": "Tramvaj", - "Cable Car": "", - "Funicular": "", - "Aerial Tram": "Gondola", - "Airplane": "", - "Bicycle rental station": "postaje za izposojo koles", - "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "V krožišču vozite v nasprotni smeri urinega kazalca in pri %(ordinal_exit_number)s izvozu zavijte na %(street_name)s", - "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "V krožišču vozite v nasprotni smeri urinega kazalca in pri %(ordinal_exit_number)s izvozu zavijte na %(street_name)s", - "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "V krožišču vozite v smeri urinega kazalca in pri %(ordinal_exit_number)s izvozu zavijte na %(street_name)s", - "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "V krožišču vozite v smeri urinega kazalca in pri %(ordinal_exit_number)s izvozu zavijte na %(street_name)s", - "Start on": "Začnite na", - " heading ": " v smeri ", - "to continue on": "nadaljujte na", - "on to": "na", - "first": "prvem", - "second": "drugem", - "third": "tretjem", - "fourth": "četrtem", - "fifth": "petem", - "sixth": "šestem", - "seventh": "sedmem", - "eight": "osmem", - "ninth": "devetem", - "tenth": "desetem", - "%d hr_0": "%d ur", - "%d hr_1": "%d ura", - "%d hr_2": "%d uri", - "%d hr_3": "%d ure", - "%d min_0": "%d min.", - "%d min_1": "%d min.", - "%d min_2": "%d min.", - "%d min_3": "%d min.", - "%d sec_0": "%d sek.", - "%d sec_1": "%d sek.", - "%d sec_2": "%d sek.", - "%d sec_3": "%d sek.", - "OK": "V redu", - "Minimize": "Skrči", - "Bring to front": "Postavi v ospredje", - "Send to back": "Pošlji v ozadje", - "Route:": "Linija:", - "Variant:": "Različica:", - "Stop Finder": "Iskalnik postaj", - "Feed": "", - "By ID": "Po ID-ju", - "By Name": "Po imenu", - "Search": "Poišči", - "No Stops Found": "Ni najdenih postaj", - "Date": "Datum", - "Find Stops": "Poišči postaje", - "(No Stop Selected)": "(Nobena postaja ni bila izbrana)", - "Block": "Blok", - "Recenter": "Prikaži na karti", - "Viewer": "Pregledovalnik", - "Quick": "Hitro", - "Flat": "Položno", - "Bike Friendly": "Kolesarju prijazno", - "B": "K", - "F": "P", - "Q": "H", - "All Routes": "Vse linije", - "Save": "Shrani", - "Close": "Zapri", - "Travel Options": "Možnosti potovanja", - "Geocoder": "", - "Arrive": "Prihod do", - "Now": "Zdaj", - "Wheelchair accessible trip:": "Primerno za invalidske vozičke:", - "Show Filtered Itineraries:": "", - "Travel by": "Način potovanja ", - "Preferred Routes": "Priljubljene linije", - "Edit": "Uredi", - "None": "Brez", - "Weight": "Utež", - "Banned routes": "Neželene linije", - "Use": "Uporabi", - "My Own Bike": "Lastno kolo", - "A Shared Bike": "Izposojeno kolo", - "Plan Your Trip": "Načrtuj pot", - "Additional parameters": "", - " to _direction": " do ", - " to _bus_direction": " smer ", - "Start_template": "Začetek", - "Depart_itinerary": "Odhod", - "depart_itinerary": "začni pot", - "Start_popup": "Začetek", - "Depart_tripoptions": "Odhod ob" -} \ No newline at end of file + "Transit": "Javni prevoz", + "Bus Only": "Avtobus", + "Rail Only": "Vlak", + "Airplane Only": "", + "Transit, No Airplane": "", + "Bicycle Only": "Kolo", + "Bicycle & Transit": "Kolo & Javni prevoz", + "Walk Only": "Pešačenje", + "Car Only": "Začnite na", + "Taxi": "", + "Park and Ride": "Parkiraj in se pelji", + "Ride and Kiss (Car Pickup)": "", + "Kiss and Ride (Car Dropoff)": "", + "Bike and Ride": "", + "Rented Bicycle": "Izposojeno kolo", + "Transit & Rented Bicycle": "Izposojeno kolo & Javni prevoz", + "Rented Scooter": "", + "Transit & Rented Scooter": "Izposojeno kolo & Javni prevoz", + "Transit with flex access": "", + "Transit with flex egress": "", + "Transit with flex access and egress": "", + "Direct flex search": "", + "Recenter Map Here": "Prikaži karto tukaj", + "Zoom In": "Približaj", + "Zoom Out": "Oddalji", + "Minimize all": "Skrči vse", + "Unminimize all": "Razširi vse", + "Stop Viewer": "Pregledovalnik postaj", + "Plan Trip": "Načrtuj pot", + "From Stop": "Začetna postaja", + "To Stop": "Končna postaja", + "Routes Serving Stop": "Avtobusi, ki ustavljajo na postaji", + "Bike Share Planner": "Planer za izposojena kolesa", + "Trip Options": "Nastavitve poti", + "PICK UP BIKE": "IZPOSOJA KOLESA", + "ALTERNATE PICKUP": "ALTERNATIVNO MESTO IZPOSOJE", + "DROP OFF BIKE": "VRNITEV KOLESA", + "ALTERNATE DROP OFF": "ALTERNATIVNO MESTO VRNITVE KOLESA", + "BIKE STATION": "IZPOSOJEVALNA POSTAJA", + "Station:": "Postaja:", + "%d bike available_0": "%d koles na voljo", + "%d bike available_1": "%d kolo na voljo", + "%d bike available_2": "%d kolesi na voljo", + "%d bike available_3": "%d kolesa na voljo", + "%d dock available_0": "%d prostorov na voljo", + "%d dock available_1": "%d prostor na voljo", + "%d dock available_2": "%d prostora na voljo", + "%d dock available_3": "%d prostori na voljo", + "Recommended Pick Up:": "Predlagana postaja za izposojo kolesa:", + "Bicycle rental": "postaje za izposojo koles", + "Recommended Drop Off:": "Predlagana postaja za vrnitev kolesa:", + "Multimodal Trip Planner": "Načrtovalnik poti", + "Itineraries": "Načrti poti", + "This itinerary departs on a different day from the previous one": "", + "%d Itinerary Returned_0": "%d vrnjenih načrtov poti", + "%d Itinerary Returned_1": "%d vrnjen načrt poti", + "%d Itinerary Returned_2": "%d vrnjena načrta poti", + "%d Itinerary Returned_3": "%d vrnjeni načrti poti", + "Link to search": "Iskanje", + "Previous Page": "Prejšnja", + "Next Page": "", + "CONTINUES AS": "SE NADALJUJE KOT", + "%d min late_0": "%d min. zamude", + "%d min late_1": "%d min. zamude", + "%d min late_2": "%d min. zamude", + "%d min late_3": "%d min. zamude", + "%d min early_0": "%d min. prehitro", + "%d min early_1": "%d min. prehitro", + "%d min early_2": "%d min. prehitro", + "%d min early_3": "%d min. prehitro", + "on time": "pravočasno", + "This itinerary departs on a different day than the one searched for": "", + "Arrived at destination with a rented bicycle!": "", + "End": "Konec", + "Trip Summary": "Povzetek poti", + "Travel": "Potuj ob", + "Time": "Trajanje", + "GenCost": "", + "Total Walk": "Skupno hoje", + "Total Bike": "Skupno kolesarjenja", + "Total drive": "", + "Elevation Gained": "", + "Elevation Lost": "", + "Transfers": "Št. prestopov", + "Fare": "Cena", + "Valid": "Veljavno", + "Link to Itinerary": "Načrt poti", + "Print": "Natisni", + "Your Trip": "Vaša pot", + "Email": "E-pošta", + "every %d min_0": "vsakih %d min", + "every %d min_1": "vsako %d min", + "every %d min_2": "vsaki %d min", + "every %d min_3": "vsake %d min", + "Board at ": "Vstop na ", + "Stop": "Postaja", + "Time in transit": "Časa na vožnji", + "Route ID": "", + "Trip ID": "", + "Service Date": "", + "Trip Viewer": "Pregledovalnik poti", + "late as": "", + "Stay on board": "Ostanite v vozilu", + "Alight": "Izstop", + "at": "na", + "%(currency)s %(price)s": "%(price)s %(currency)s", + "Start: %(location)s at %(time_date)s": "Začetek: %(location)s ob %(time_date)s", + "Board": "Vstop", + "(%(agency_id)s Stop ID #%(stop_id)s),": "(%(agency_id)s),", + "End: %(location)s at %(time_date)s": "Konec: %(location)s ob %(time_date)s", + "(%(agencyId)s Stop ID #%(id)s),": "", + "\nView itinerary online:\n%(itinerary_link)s\n": "\nOglejte si načrt poti na spletu:\n%(itinerary_link)s\n", + "We're sorry. The trip planner is temporarily unavailable. Please try again later.": "Opravičujemo se. Daljinar trenutno ni na voljo. Prosimo poskusite kasneje.", + "Trip is not possible. You might be trying to plan a trip outside the map data boundary.": "", + "No trip found. There may be no transit service within the maximum specified distance or at the specified time, or your start or end point might not be safely accessible.": "", + "No transit times available. The date may be past or too far in the future or there may not be transit service for your trip at the time you chose.": "Podatki o voznih redih niso na voljo. Mogoče je datum preveč v preteklosti ali prihodnosti ali pa javni prevoz ne obstaja za pot, ki jo načrtujete.", + "The trip planner is taking way too long to process your request. Please try again later.": "Daljinar potrebuje preveč časa za obdelavo vašega zahtevka. Prosimo poskusite znova kasneje.", + "The request has errors that the server is not willing or able to process.": "Zahtevek ima napake, ki jih strežnik ne more obdelati.", + "Origin is unknown. Can you be a bit more descriptive?": "Začetek poti ni znan. Prosimo bodite bolj natančni.", + "Destination is unknown. Can you be a bit more descriptive?": "Konec poti ni znan. Prosimo bodite bolj natančni.", + "Both origin and destination are unknown. Can you be a bit more descriptive?": "Začetek in konec sta neznana. Prosimo bodite bolj natančni.", + "Both origin and destination are not wheelchair accessible": "Do začetka in konca ni mogoče priti z vozičkom.", + "Origin is within a trivial distance of the destination.": "Začetek je trivialno oddaljen od konec.", + "The trip planner is unsure of the location you want to start from. Please select from the following options, or be more specific.": "", + "The trip planner is unsure of the destination you want to go to. Please select from the following options, or be more specific.": "", + "Both origin and destination are ambiguous. Please select from the following options, or be more specific.": "", + "All of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set if any are": "", + "The values of triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must sum to 1": "", + "If triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor are provided, OptimizeType must be TRIANGLE": "", + "If OptimizeType is TRIANGLE, triangleSafetyFactor, triangleSlopeFactor, and triangleTimeFactor must be set": "", + "Set as Start Location": "Začetek poti", + "Set as End Location": "Konec poti", + "Destination": "Konec", + "Error %(error_id)d": "Napaka %(error_id)d", + "No Trip Found": "Ne najdemo poti", + "Your %(bike_share_name)s route": "Kolesarjenje s kolesom izposojenim pri %(bike_share_name)s", + "Your bike route": "Kolesarska pot", + "Walk to the %(bike_share_name)s dock.": "Hodite do postaje podjetja %(bike_share_name)s.", + "Walk from the %(bike_share_name)s dock to your destination.": "Hodite od postaje podjetja %(bike_share_name)s do vašega cilja.", + "Your walk route": "Pot peš", + "Your route using the scooter": "", + "Your driving route": "Kolesarska pot", + "north": "sever", + "northeast": "severovzhod", + "east": "vzhod", + "southeast": "jugovzhod", + "south": "jug", + "southwest": "jugozahod", + "west": "zahod", + "northwest": "severozahod", + "hard left": "ostro levo", + "left": "levo", + "slight left": "rahlo levo", + "continue": "nadaljujte", + "slight right": "rahlo desno", + "right": "desno", + "hard right": "ostro desno", + "elevator": "pojdite z dvigalom", + "U-turn left": "Polkrožno obrnite v levo", + "U-turn right": "Polkrožno obrnite v desno", + "Walk": "Pešačite", + "Cycle": "Kolesarite", + "Car": "Avto", + "Bus": "Avtobus", + "Subway": "Podzemna železnica", + "Train": "Vlak", + "Ferry": "", + "Light Rail": "Tramvaj", + "Cable Car": "", + "Funicular": "", + "Aerial Tram": "Gondola", + "Airplane": "", + "Bicycle rental station": "postaje za izposojo koles", + "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "V krožišču vozite v nasprotni smeri urinega kazalca in pri %(ordinal_exit_number)s izvozu zavijte na %(street_name)s", + "Take roundabout counterclockwise to %(ordinal_exit_number)s exit on %(street_name)s": "V krožišču vozite v nasprotni smeri urinega kazalca in pri %(ordinal_exit_number)s izvozu zavijte na %(street_name)s", + "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "V krožišču vozite v smeri urinega kazalca in pri %(ordinal_exit_number)s izvozu zavijte na %(street_name)s", + "Take roundabout clockwise to %(ordinal_exit_number)s exit on %(street_name)s": "V krožišču vozite v smeri urinega kazalca in pri %(ordinal_exit_number)s izvozu zavijte na %(street_name)s", + "Start on": "Začnite na", + " heading ": " v smeri ", + "to continue on": "nadaljujte na", + "on to": "na", + "first": "prvem", + "second": "drugem", + "third": "tretjem", + "fourth": "četrtem", + "fifth": "petem", + "sixth": "šestem", + "seventh": "sedmem", + "eight": "osmem", + "ninth": "devetem", + "tenth": "desetem", + "%d hr_0": "%d ur", + "%d hr_1": "%d ura", + "%d hr_2": "%d uri", + "%d hr_3": "%d ure", + "%d min_0": "%d min.", + "%d min_1": "%d min.", + "%d min_2": "%d min.", + "%d min_3": "%d min.", + "%d sec_0": "%d sek.", + "%d sec_1": "%d sek.", + "%d sec_2": "%d sek.", + "%d sec_3": "%d sek.", + "OK": "V redu", + "Minimize": "Skrči", + "Bring to front": "Postavi v ospredje", + "Send to back": "Pošlji v ozadje", + "Route:": "Linija:", + "Variant:": "Različica:", + "Stop Finder": "Iskalnik postaj", + "Feed": "", + "By ID": "Po ID-ju", + "By Name": "Po imenu", + "Search": "Poišči", + "No Stops Found": "Ni najdenih postaj", + "Date": "Datum", + "Find Stops": "Poišči postaje", + "(No Stop Selected)": "(Nobena postaja ni bila izbrana)", + "Block": "Blok", + "Recenter": "Prikaži na karti", + "Viewer": "Pregledovalnik", + "Quick": "Hitro", + "Flat": "Položno", + "Bike Friendly": "Kolesarju prijazno", + "B": "K", + "F": "P", + "Q": "H", + "All Routes": "Vse linije", + "Save": "Shrani", + "Close": "Zapri", + "Travel Options": "Možnosti potovanja", + "Geocoder": "", + "Arrive": "Prihod do", + "Now": "Zdaj", + "Wheelchair accessible trip:": "Primerno za invalidske vozičke:", + "Show Filtered Itineraries:": "", + "Travel by": "Način potovanja ", + "Preferred Routes": "Priljubljene linije", + "Edit": "Uredi", + "None": "Brez", + "Weight": "Utež", + "Banned routes": "Neželene linije", + "Use": "Uporabi", + "My Own Bike": "Lastno kolo", + "A Shared Bike": "Izposojeno kolo", + "Plan Your Trip": "Načrtuj pot", + "Additional parameters": "", + " to _direction": " do ", + " to _bus_direction": " smer ", + "Start_template": "Začetek", + "Depart_itinerary": "Odhod", + "depart_itinerary": "začni pot", + "Start_popup": "Začetek", + "Depart_tripoptions": "Odhod ob" +} diff --git a/application/src/client/index.html b/application/src/client/index.html index e8872ab33cd..391458fba41 100644 --- a/application/src/client/index.html +++ b/application/src/client/index.html @@ -5,8 +5,8 @@ OTP Debug Client - - + +
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 030b7fbfb1c..b1468444076 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 @@ -135,7 +135,7 @@ static void setup() { .build(); @Override - public List getModesOfStopLocation(StopLocation stop) { + public List findTransitModes(StopLocation stop) { if (stop.getVehicleType() != null) { return List.of(stop.getVehicleType()); } else { @@ -144,7 +144,7 @@ public List getModesOfStopLocation(StopLocation stop) { } @Override - public Agency getAgencyForId(FeedScopedId id) { + public Agency getAgency(FeedScopedId id) { if (id.equals(BVG.getId())) { return BVG; } @@ -152,7 +152,7 @@ public Agency getAgencyForId(FeedScopedId id) { } @Override - public Set getRoutesForStop(StopLocation stop) { + public Set findRoutes(StopLocation stop) { return Set.of(TimetableRepositoryForTest.route("route1").withAgency(BVG).build()); } 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 b97cbcdc6fe..37ea737626f 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 @@ -15,7 +15,7 @@ public TestTransitService(TimetableRepository timetableRepository) { } @Override - public Set getRoutesForStop(StopLocation stop) { + public Set findRoutes(StopLocation stop) { return Set.of( TimetableRepositoryForTest.route("1").withMode(TransitMode.RAIL).withGtfsType(100).build() ); 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 95ad7ea713e..b8a88c11703 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 @@ -19,12 +19,13 @@ import org.opentripplanner.framework.i18n.TranslatedString; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.inspector.vector.LayerParameters; -import org.opentripplanner.routing.graph.Graph; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingGroup; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingService; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingState; +import org.opentripplanner.service.vehicleparking.VehicleParkingService; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingService; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingGroup; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingState; import org.opentripplanner.standalone.config.routerconfig.VectorTileConfig; import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.FeedScopedId; @@ -90,9 +91,8 @@ public void setUp() { @Test public void vehicleParkingGroupGeometryTest() { - Graph graph = new Graph(); - VehicleParkingService service = graph.getVehicleParkingService(); - service.updateVehicleParking(List.of(vehicleParking), List.of()); + var repository = new DefaultVehicleParkingRepository(); + repository.updateVehicleParking(List.of(vehicleParking), List.of()); var config = """ @@ -116,7 +116,7 @@ public void vehicleParkingGroupGeometryTest() { var tiles = VectorTileConfig.mapVectorTilesParameters(nodeAdapter, "vectorTiles"); assertEquals(1, tiles.layers().size()); var builder = new VehicleParkingGroupsLayerBuilderWithPublicGeometry( - graph, + new DefaultVehicleParkingService(repository), tiles.layers().get(0), Locale.US ); @@ -171,11 +171,11 @@ private static class VehicleParkingGroupsLayerBuilderWithPublicGeometry extends VehicleParkingGroupsLayerBuilder { public VehicleParkingGroupsLayerBuilderWithPublicGeometry( - Graph graph, + VehicleParkingService service, LayerParameters layerParameters, Locale locale ) { - super(graph, layerParameters, locale); + super(service, layerParameters, locale); } @Override 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 b63c9c51bc6..ae4386e9dd6 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 @@ -23,11 +23,11 @@ import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.TranslatedString; import org.opentripplanner.model.calendar.openinghours.OpeningHoursCalendarService; -import org.opentripplanner.routing.graph.Graph; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingService; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingState; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingService; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingState; import org.opentripplanner.standalone.config.routerconfig.VectorTileConfig; import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; import org.opentripplanner.transit.model.framework.Deduplicator; @@ -86,9 +86,8 @@ public void setUp() { @Test public void vehicleParkingGeometryTest() { - Graph graph = new Graph(); - VehicleParkingService service = graph.getVehicleParkingService(); - service.updateVehicleParking(List.of(vehicleParking), List.of()); + var repo = new DefaultVehicleParkingRepository(); + repo.updateVehicleParking(List.of(vehicleParking), List.of()); var config = """ @@ -111,7 +110,7 @@ public void vehicleParkingGeometryTest() { var nodeAdapter = newNodeAdapterForTest(config); var tiles = VectorTileConfig.mapVectorTilesParameters(nodeAdapter, "vectorTiles"); assertEquals(1, tiles.layers().size()); - var builder = new VehicleParkingsLayerBuilder(graph, tiles.layers().getFirst(), Locale.US); + var builder = new VehicleParkingsLayerBuilder(new DefaultVehicleParkingService(repo), tiles.layers().getFirst(), Locale.US); List geometries = builder.getGeometries(new Envelope(0.99, 1.01, 1.99, 2.01)); diff --git a/application/src/ext-test/java/org/opentripplanner/ext/vehicleparking/bikely/BikelyUpdaterTest.java b/application/src/ext-test/java/org/opentripplanner/ext/vehicleparking/bikely/BikelyUpdaterTest.java index 569db85f33b..66e0a0fda9a 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/vehicleparking/bikely/BikelyUpdaterTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/vehicleparking/bikely/BikelyUpdaterTest.java @@ -8,7 +8,7 @@ import java.time.Duration; import java.util.Locale; import org.junit.jupiter.api.Test; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingState; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingState; import org.opentripplanner.test.support.ResourceLoader; import org.opentripplanner.transit.model.basic.Locales; import org.opentripplanner.transit.model.framework.FeedScopedId; diff --git a/application/src/ext-test/java/org/opentripplanner/ext/vehicleparking/hslpark/HslParkUpdaterTest.java b/application/src/ext-test/java/org/opentripplanner/ext/vehicleparking/hslpark/HslParkUpdaterTest.java index 2226a988d20..fd584951586 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/vehicleparking/hslpark/HslParkUpdaterTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/vehicleparking/hslpark/HslParkUpdaterTest.java @@ -14,7 +14,7 @@ import org.opentripplanner._support.time.ZoneIds; import org.opentripplanner.model.calendar.openinghours.OpeningHoursCalendarService; import org.opentripplanner.model.calendar.openinghours.OsmOpeningHoursSupport; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingState; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingState; import org.opentripplanner.test.support.ResourceLoader; import org.opentripplanner.transit.model.framework.Deduplicator; diff --git a/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/bikeep/bikeep.json b/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/bikeep/bikeep.json index 6f164077ee1..0ffa202bd11 100644 --- a/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/bikeep/bikeep.json +++ b/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/bikeep/bikeep.json @@ -5,22 +5,14 @@ "type": "Feature", "geometry": { "type": "Point", - "coordinates": [ - 4.996344, - 60.405932 - ] + "coordinates": [4.996344, 60.405932] }, "properties": { "code": "224121", "label": "Ågotnes Terminal", "name": "#224121 Ågotnes Terminal", "address": "Ågotnes", - "tags": [ - "FREE", - "BIKE", - "PRIVATE", - "BOOKABLE" - ], + "tags": ["FREE", "BIKE", "PRIVATE", "BOOKABLE"], "icon": { "png": "", "png2x": "", @@ -38,22 +30,14 @@ "type": "Feature", "geometry": { "type": "Point", - "coordinates": [ - 10.666802, - 59.436443 - ] + "coordinates": [10.666802, 59.436443] }, "properties": { "code": "226261", "label": "Gågata Østre", "name": "#226261 Gågata Østre", "address": "Dronningens gate, Moss", - "tags": [ - "FREE", - "PRIVATE", - "BOOKABLE", - "BIKE" - ], + "tags": ["FREE", "PRIVATE", "BOOKABLE", "BIKE"], "icon": { "png": "", "png2x": "", @@ -71,22 +55,14 @@ "type": "Feature", "geometry": { "type": "Point", - "coordinates": [ - 10.661444, - 59.435401 - ] + "coordinates": [10.661444, 59.435401] }, "properties": { "code": "226259", "label": "Gågata Vestre", "name": "#226259 Gågata Vestre", "address": "Dronningens gate, Moss", - "tags": [ - "BIKE", - "FREE", - "PRIVATE", - "BOOKABLE" - ], + "tags": ["BIKE", "FREE", "PRIVATE", "BOOKABLE"], "icon": { "png": "", "png2x": "", @@ -104,22 +80,14 @@ "type": "Feature", "geometry": { "type": "Point", - "coordinates": [ - 10.774958, - 59.946535 - ] + "coordinates": [10.774958, 59.946535] }, "properties": { "code": "223443", "label": "Storo Storsenter", "name": "#223443 Storo Storsenter", "address": "Norway", - "tags": [ - "BIKE", - "PRIVATE", - "BOOKABLE", - "FREE" - ], + "tags": ["BIKE", "PRIVATE", "BOOKABLE", "FREE"], "icon": { "png": "https://assets.bikeep.com/locations/icons/bikeep.png", "png2x": "https://assets.bikeep.com/locations/icons/bikeep@2x.png", @@ -137,23 +105,14 @@ "type": "Feature", "geometry": { "type": "Point", - "coordinates": [ - 10.501222, - 59.914578 - ] + "coordinates": [10.501222, 59.914578] }, "properties": { "code": "224519", "label": "Kolsås Sykkelhotell", "name": "#224519 Kolsås Sykkelhotell", "address": "Norway", - "tags": [ - "PRIVATE", - "FREE", - "BOOKABLE", - "BIKE_HOUSE", - "BIKE" - ], + "tags": ["PRIVATE", "FREE", "BOOKABLE", "BIKE_HOUSE", "BIKE"], "icon": { "png": "https://assets.bikeep.com/locations/icons/bikeep.png", "png2x": "https://assets.bikeep.com/locations/icons/bikeep@2x.png", @@ -171,22 +130,14 @@ "type": "Feature", "geometry": { "type": "Point", - "coordinates": [ - 10.663716, - 59.435539 - ] + "coordinates": [10.663716, 59.435539] }, "properties": { "code": "226260", "label": "Gågata Midtre", "name": "#226260 Gågata Midtre", "address": "Dronningens gate, Moss", - "tags": [ - "FREE", - "BOOKABLE", - "PRIVATE", - "BIKE" - ], + "tags": ["FREE", "BOOKABLE", "PRIVATE", "BIKE"], "icon": { "png": "", "png2x": "", @@ -204,22 +155,14 @@ "type": "Feature", "geometry": { "type": "Point", - "coordinates": [ - 5.320344, - 60.463246 - ] + "coordinates": [5.320344, 60.463246] }, "properties": { "code": "226266", "label": "Åsane Sykkelhus", "name": "#226266 Åsane Sykkelhus", "address": "Åsane terminal", - "tags": [ - "BOOKABLE", - "BIKE", - "FREE", - "PRIVATE" - ], + "tags": ["BOOKABLE", "BIKE", "FREE", "PRIVATE"], "icon": { "png": "", "png2x": "", @@ -237,22 +180,14 @@ "type": "Feature", "geometry": { "type": "Point", - "coordinates": [ - 10.521137, - 59.889181 - ] + "coordinates": [10.521137, 59.889181] }, "properties": { "code": "224112", "label": "Sandvika Storsenter Kjørbokollen", "name": "#224112 Sandvika Storsenter Kjørbokollen", "address": "Brodtkorbsgate 7, Sandvika", - "tags": [ - "PRIVATE", - "FREE", - "BIKE", - "BOOKABLE" - ], + "tags": ["PRIVATE", "FREE", "BIKE", "BOOKABLE"], "icon": { "png": "", "png2x": "", @@ -270,22 +205,14 @@ "type": "Feature", "geometry": { "type": "Point", - "coordinates": [ - 10.520496, - 59.887412 - ] + "coordinates": [10.520496, 59.887412] }, "properties": { "code": "224111", "label": "Sandvika Storsenter Nytorget", "name": "#224111 Sandvika Storsenter Nytorget", "address": "Sandviksveien 176, Sandvika", - "tags": [ - "BIKE", - "BOOKABLE", - "PRIVATE", - "FREE" - ], + "tags": ["BIKE", "BOOKABLE", "PRIVATE", "FREE"], "icon": { "png": "", "png2x": "", @@ -300,4 +227,4 @@ } } ] -} \ No newline at end of file +} diff --git a/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/bikely/bikely.json b/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/bikely/bikely.json index a3e1e9e2e57..172220650aa 100644 --- a/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/bikely/bikely.json +++ b/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/bikely/bikely.json @@ -321,4 +321,4 @@ "id": 26 } ] -} \ No newline at end of file +} diff --git a/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/hslpark/facilities.json b/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/hslpark/facilities.json index 0bca41f3bf6..c9305c556c3 100644 --- a/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/hslpark/facilities.json +++ b/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/hslpark/facilities.json @@ -15,66 +15,25 @@ } }, "bbox": [ - 24.80034603935215, - 60.17480881241633, - 24.80808017426278, + 24.80034603935215, 60.17480881241633, 24.80808017426278, 60.17714686717807 ], "type": "Polygon", "coordinates": [ [ - [ - 24.805922082319398, - 60.17671175792864 - ], - [ - 24.80745024472255, - 60.176920611087695 - ], - [ - 24.80808017426278, - 60.17588213365369 - ], - [ - 24.800591011951123, - 60.17480881241633 - ], - [ - 24.80034603935215, - 60.17519753280732 - ], - [ - 24.80281909606564, - 60.17555724011572 - ], - [ - 24.802492465933668, - 60.17611419849894 - ], - [ - 24.803798986461572, - 60.176299849194635 - ], - [ - 24.803460690967746, - 60.176874199389374 - ], - [ - 24.805478798568853, - 60.17714686717807 - ], - [ - 24.805805428700822, - 60.17661313236411 - ], - [ - 24.805945413043094, - 60.17663633840593 - ], - [ - 24.805922082319398, - 60.17671175792864 - ] + [24.805922082319398, 60.17671175792864], + [24.80745024472255, 60.176920611087695], + [24.80808017426278, 60.17588213365369], + [24.800591011951123, 60.17480881241633], + [24.80034603935215, 60.17519753280732], + [24.80281909606564, 60.17555724011572], + [24.802492465933668, 60.17611419849894], + [24.803798986461572, 60.176299849194635], + [24.803460690967746, 60.176874199389374], + [24.805478798568853, 60.17714686717807], + [24.805805428700822, 60.17661313236411], + [24.805945413043094, 60.17663633840593], + [24.805922082319398, 60.17671175792864] ] ] }, @@ -87,9 +46,7 @@ "builtCapacity": { "CAR": 1365 }, - "usages": [ - "PARK_AND_RIDE" - ], + "usages": ["PARK_AND_RIDE"], "services": [ "LIGHTING", "COVERED", @@ -97,9 +54,7 @@ "PAYMENT_AT_GATE", "ENGINE_IGNITION_AID" ], - "authenticationMethods": [ - "HSL_TICKET" - ], + "authenticationMethods": ["HSL_TICKET"], "pricing": [ { "usage": "PARK_AND_RIDE", @@ -211,9 +166,7 @@ "en": "1. tunti 2 € / 60 min, seuraavat tunnit 1 € / 30 min" }, "url": null, - "paymentMethods": [ - "DEBIT_CARD" - ] + "paymentMethods": ["DEBIT_CARD"] }, "openingHours": { "openNow": true, @@ -264,38 +217,18 @@ } }, "bbox": [ - 24.977034456273202, - 60.186015498799264, - 24.981894619008195, + 24.977034456273202, 60.186015498799264, 24.981894619008195, 60.18802910674705 ], "type": "Polygon", "coordinates": [ [ - [ - 24.977731830617074, - 60.18802910674705 - ], - [ - 24.977034456273202, - 60.186674268899424 - ], - [ - 24.979169494649057, - 60.186015498799264 - ], - [ - 24.981894619008195, - 60.187397033842615 - ], - [ - 24.98158348276247, - 60.187589057277705 - ], - [ - 24.977731830617074, - 60.18802910674705 - ] + [24.977731830617074, 60.18802910674705], + [24.977034456273202, 60.186674268899424], + [24.979169494649057, 60.186015498799264], + [24.981894619008195, 60.187397033842615], + [24.98158348276247, 60.187589057277705], + [24.977731830617074, 60.18802910674705] ] ] }, @@ -310,9 +243,7 @@ "CAR": 300, "ELECTRIC_CAR": 200 }, - "usages": [ - "PARK_AND_RIDE" - ], + "usages": ["PARK_AND_RIDE"], "services": [ "LIGHTING", "COVERED", @@ -320,9 +251,7 @@ "PAYMENT_AT_GATE", "ENGINE_IGNITION_AID" ], - "authenticationMethods": [ - "HSL_TICKET" - ], + "authenticationMethods": ["HSL_TICKET"], "pricing": [ { "usage": "PARK_AND_RIDE", @@ -383,12 +312,7 @@ "en": "Electric car parking 2 € + 0,15€ / kWh" }, "url": null, - "paymentMethods": [ - "COINS", - "NOTES", - "DEBIT_CARD", - "OTHER" - ] + "paymentMethods": ["COINS", "NOTES", "DEBIT_CARD", "OTHER"] }, "openingHours": { "openNow": false, @@ -423,34 +347,17 @@ } }, "bbox": [ - 24.81405168771744, - 60.21851030940037, - 24.81410264968872, + 24.81405168771744, 60.21851030940037, 24.81410264968872, 60.21875543991248 ], "type": "Polygon", "coordinates": [ [ - [ - 24.81406778097153, - 60.21875543991248 - ], - [ - 24.81405168771744, - 60.21851030940037 - ], - [ - 24.81408387422562, - 60.21851030940037 - ], - [ - 24.81410264968872, - 60.21875543991248 - ], - [ - 24.81406778097153, - 60.21875543991248 - ] + [24.81406778097153, 60.21875543991248], + [24.81405168771744, 60.21851030940037], + [24.81408387422562, 60.21851030940037], + [24.81410264968872, 60.21875543991248], + [24.81406778097153, 60.21875543991248] ] ] }, @@ -463,13 +370,8 @@ "builtCapacity": { "BICYCLE": 80 }, - "usages": [ - "PARK_AND_RIDE" - ], - "services": [ - "LIGHTING", - "BICYCLE_FRAME_LOCK" - ], + "usages": ["PARK_AND_RIDE"], + "services": ["LIGHTING", "BICYCLE_FRAME_LOCK"], "authenticationMethods": [], "pricing": [ { @@ -565,39 +467,16 @@ "name": "EPSG:4326" } }, - "bbox": [ - 25.11001, - 60.237897, - 25.110917, - 60.238254 - ], + "bbox": [25.11001, 60.237897, 25.110917, 60.238254], "type": "Polygon", "coordinates": [ [ - [ - 25.110053, - 60.238253 - ], - [ - 25.11001, - 60.237953 - ], - [ - 25.110106, - 60.237905 - ], - [ - 25.110917, - 60.237897 - ], - [ - 25.110912, - 60.238254 - ], - [ - 25.110053, - 60.238253 - ] + [25.110053, 60.238253], + [25.11001, 60.237953], + [25.110106, 60.237905], + [25.110917, 60.237897], + [25.110912, 60.238254], + [25.110053, 60.238253] ] ] }, @@ -610,9 +489,7 @@ "DISABLED": 2, "CAR": 80 }, - "usages": [ - "PARK_AND_RIDE" - ], + "usages": ["PARK_AND_RIDE"], "pricing": [ { "usage": "PARK_AND_RIDE", diff --git a/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/hslpark/hubs.json b/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/hslpark/hubs.json index da4c64a63fa..a05886513df 100644 --- a/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/hslpark/hubs.json +++ b/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/hslpark/hubs.json @@ -1,76 +1,65 @@ { - "results": [ - { - "id": 321, - "name": { - "fi": "HubYksi", - "sv": "HubEn", - "en": "HubOne" - }, - "location": { - "crs": { - "type": "name", - "properties": { - "name": "EPSG:4326" - } - }, - "type": "Point", - "coordinates": [ - 24.804913, - 60.176064 - ] - }, - "facilityIds": [ - 990, - 1037 - ], - "address": { - "streetAddress": null, - "postalCode": null, - "city": { - "fi": "Espoo", - "sv": "Esbo", - "en": "Espoo" - } - }, - "modifiedAt": null, - "modifiedBy": null + "results": [ + { + "id": 321, + "name": { + "fi": "HubYksi", + "sv": "HubEn", + "en": "HubOne" + }, + "location": { + "crs": { + "type": "name", + "properties": { + "name": "EPSG:4326" + } }, - { - "id": 129, - "name": { - "fi": "HubKaksi", - "sv": "HubTvå", - "en": "HubTwo" - }, - "location": { - "crs": { - "type": "name", - "properties": { - "name": "EPSG:4326" - } - }, - "type": "Point", - "coordinates": [ - 25.101168, - 60.45744 - ] - }, - "facilityIds": [ - 894 - ], - "address": { - "streetAddress": null, - "postalCode": null, - "city": { - "fi": "Järvenpää", - "sv": "Träskända", - "en": "Järvenpää" - } - }, - "modifiedAt": null, - "modifiedBy": null + "type": "Point", + "coordinates": [24.804913, 60.176064] + }, + "facilityIds": [990, 1037], + "address": { + "streetAddress": null, + "postalCode": null, + "city": { + "fi": "Espoo", + "sv": "Esbo", + "en": "Espoo" } - ], - "hasMore": false -} \ No newline at end of file + }, + "modifiedAt": null, + "modifiedBy": null + }, + { + "id": 129, + "name": { + "fi": "HubKaksi", + "sv": "HubTvå", + "en": "HubTwo" + }, + "location": { + "crs": { + "type": "name", + "properties": { + "name": "EPSG:4326" + } + }, + "type": "Point", + "coordinates": [25.101168, 60.45744] + }, + "facilityIds": [894], + "address": { + "streetAddress": null, + "postalCode": null, + "city": { + "fi": "Järvenpää", + "sv": "Träskända", + "en": "Järvenpää" + } + }, + "modifiedAt": null, + "modifiedBy": null + } + ], + "hasMore": false +} diff --git a/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/hslpark/utilizations.json b/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/hslpark/utilizations.json index c8c87fbe823..dc9772682c4 100644 --- a/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/hslpark/utilizations.json +++ b/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/hslpark/utilizations.json @@ -1,20 +1,20 @@ [ - { - "facilityId": 990, - "capacityType": "CAR", - "usage": "PARK_AND_RIDE", - "timestamp": "2021-12-21T08:42:39.000+02:00", - "spacesAvailable": 600, - "capacity": 1365, - "openNow": true - }, - { - "facilityId": 894, - "capacityType": "BICYCLE", - "usage": "PARK_AND_RIDE", - "timestamp": "2019-12-31T11:58:13.000+02:00", - "spacesAvailable": 43, - "capacity": 80, - "openNow": true - } + { + "facilityId": 990, + "capacityType": "CAR", + "usage": "PARK_AND_RIDE", + "timestamp": "2021-12-21T08:42:39.000+02:00", + "spacesAvailable": 600, + "capacity": 1365, + "openNow": true + }, + { + "facilityId": 894, + "capacityType": "BICYCLE", + "usage": "PARK_AND_RIDE", + "timestamp": "2019-12-31T11:58:13.000+02:00", + "spacesAvailable": 43, + "capacity": 80, + "openNow": true + } ] diff --git a/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/parkapi/herrenberg.json b/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/parkapi/herrenberg.json index e351bdc7fd0..b21ca985af1 100644 --- a/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/parkapi/herrenberg.json +++ b/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/parkapi/herrenberg.json @@ -394,4 +394,4 @@ } } ] -} \ No newline at end of file +} diff --git a/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/parkapi/parkapi-reutlingen.json b/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/parkapi/parkapi-reutlingen.json index 946ec007ba9..23a39f17920 100644 --- a/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/parkapi/parkapi-reutlingen.json +++ b/application/src/ext-test/resources/org/opentripplanner/ext/vehicleparking/parkapi/parkapi-reutlingen.json @@ -424,4 +424,4 @@ "notes": {} } ] -} \ No newline at end of file +} diff --git a/application/src/ext-test/resources/org/opentripplanner/ext/vehiclerentalservicedirectory/generatedoc/router-config.json b/application/src/ext-test/resources/org/opentripplanner/ext/vehiclerentalservicedirectory/generatedoc/router-config.json index 0c772551549..e2dc7e202d2 100644 --- a/application/src/ext-test/resources/org/opentripplanner/ext/vehiclerentalservicedirectory/generatedoc/router-config.json +++ b/application/src/ext-test/resources/org/opentripplanner/ext/vehiclerentalservicedirectory/generatedoc/router-config.json @@ -9,8 +9,8 @@ }, "networks": [ { - "network" : "oslo-by-sykkel", - "geofencingZones" : true + "network": "oslo-by-sykkel", + "geofencingZones": true } ] } diff --git a/application/src/ext-test/resources/ridehailing/uber-arrival-estimates.json b/application/src/ext-test/resources/ridehailing/uber-arrival-estimates.json index 624d49d41e0..0126158daf7 100644 --- a/application/src/ext-test/resources/ridehailing/uber-arrival-estimates.json +++ b/application/src/ext-test/resources/ridehailing/uber-arrival-estimates.json @@ -49,4 +49,4 @@ "product_id": "3ab64887-4842-4c8e-9780-ccecd3a0391d" } ] -} \ No newline at end of file +} diff --git a/application/src/ext-test/resources/ridehailing/uber-price-estimates.json b/application/src/ext-test/resources/ridehailing/uber-price-estimates.json index d9f8540229e..a6c39c7f10a 100644 --- a/application/src/ext-test/resources/ridehailing/uber-price-estimates.json +++ b/application/src/ext-test/resources/ridehailing/uber-price-estimates.json @@ -89,4 +89,4 @@ "currency_code": "USD" } ] -} \ No newline at end of file +} diff --git a/application/src/ext-test/resources/smoovebikerental/smoove.json b/application/src/ext-test/resources/smoovebikerental/smoove.json index 364d947b504..9091a493a7c 100644 --- a/application/src/ext-test/resources/smoovebikerental/smoove.json +++ b/application/src/ext-test/resources/smoovebikerental/smoove.json @@ -1,49 +1,49 @@ { - "result" : [ - { - "name" : "A04 Hamn", - "operative" : true, - "coordinates" : "60.167913, 24.952269", - "style" : "Station on", - "avl_bikes" : 1, - "free_slots" : 11, - "total_slots" : 12 - }, - { - "name" : "B05 Fake", - "operative" : false, - "coordinates" : "60, 24", - "style" : "Station off", - "avl_bikes" : 5, - "free_slots" : 5, - "total_slots" : 5 - }, - { - "name" : "B06 Foo", - "operative" : true, - "coordinates" : "61,25", - "style" : "Station on", - "avl_bikes" : 5, - "free_slots" : 5, - "total_slots" : 5 - }, - { - "name" : "B08 Invalid", - "operative" : true, - "coordinates" : "", - "style" : "Station on", - "avl_bikes" : 5, - "free_slots" : 5, - "total_slots" : 5 - }, - { - "name" : "B09 Full", - "operative" : true, - "coordinates" : "60.168913, 24.953269", - "style" : "Station on", - "avl_bikes" : 12, - "free_slots" : 0, - "total_slots" : 12 - } - ] + "result": [ + { + "name": "A04 Hamn", + "operative": true, + "coordinates": "60.167913, 24.952269", + "style": "Station on", + "avl_bikes": 1, + "free_slots": 11, + "total_slots": 12 + }, + { + "name": "B05 Fake", + "operative": false, + "coordinates": "60, 24", + "style": "Station off", + "avl_bikes": 5, + "free_slots": 5, + "total_slots": 5 + }, + { + "name": "B06 Foo", + "operative": true, + "coordinates": "61,25", + "style": "Station on", + "avl_bikes": 5, + "free_slots": 5, + "total_slots": 5 + }, + { + "name": "B08 Invalid", + "operative": true, + "coordinates": "", + "style": "Station on", + "avl_bikes": 5, + "free_slots": 5, + "total_slots": 5 + }, + { + "name": "B09 Full", + "operative": true, + "coordinates": "60.168913, 24.953269", + "style": "Station on", + "avl_bikes": 12, + "free_slots": 0, + "total_slots": 12 + } + ] } diff --git a/application/src/ext/java/org/opentripplanner/ext/flex/FlexRouter.java b/application/src/ext/java/org/opentripplanner/ext/flex/FlexRouter.java index 103a27e7554..46d9e527980 100644 --- a/application/src/ext/java/org/opentripplanner/ext/flex/FlexRouter.java +++ b/application/src/ext/java/org/opentripplanner/ext/flex/FlexRouter.java @@ -192,7 +192,7 @@ public TransitStopVertex getStopVertexForStopId(FeedScopedId stopId) { @Override public Collection getTransfersFromStop(StopLocation stop) { - return transitService.getTransfersByStop(stop); + return transitService.findPathTransfers(stop); } @Override @@ -207,7 +207,7 @@ public Collection getTransfersToStop(StopLocation stop) { @Override public boolean isDateActive(FlexServiceDate date, FlexTrip trip) { - int serviceCode = transitService.getServiceCodeForId(trip.getTrip().getServiceId()); + int serviceCode = transitService.getServiceCode(trip.getTrip().getServiceId()); return date.isTripServiceRunning(serviceCode); } } diff --git a/application/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java b/application/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java index 3a6546cfe1e..daecb7f6a4e 100644 --- a/application/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java @@ -174,7 +174,7 @@ private static Optional map(List stopLocations) } private List agenciesForStopLocation(StopLocation stop) { - return transitService.getRoutesForStop(stop).stream().map(Route::getAgency).distinct().toList(); + return transitService.findRoutes(stop).stream().map(Route::getAgency).distinct().toList(); } private List agenciesForStopLocationsGroup(StopLocationsGroup group) { @@ -190,7 +190,7 @@ StopCluster.Location toLocation(FeedScopedId id) { var loc = transitService.getStopLocation(id); if (loc != null) { var feedPublisher = toFeedPublisher(transitService.getFeedInfo(id.getFeedId())); - var modes = transitService.getModesOfStopLocation(loc).stream().map(Enum::name).toList(); + var modes = transitService.findTransitModes(loc).stream().map(Enum::name).toList(); var agencies = agenciesForStopLocation(loc) .stream() .map(StopClusterMapper::toAgency) @@ -209,7 +209,7 @@ StopCluster.Location toLocation(FeedScopedId id) { var group = transitService.getStopLocationsGroup(id); var feedPublisher = toFeedPublisher(transitService.getFeedInfo(id.getFeedId())); var modes = transitService - .getModesOfStopLocationsGroup(group) + .findTransitModes(group) .stream() .map(Enum::name) .toList(); 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 6529fc4234d..747ba0617ec 100644 --- a/application/src/ext/java/org/opentripplanner/ext/parkAndRideApi/ParkAndRideResource.java +++ b/application/src/ext/java/org/opentripplanner/ext/parkAndRideApi/ParkAndRideResource.java @@ -14,8 +14,8 @@ import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.routing.graphfinder.DirectGraphFinder; import org.opentripplanner.routing.graphfinder.GraphFinder; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingService; +import org.opentripplanner.service.vehicleparking.VehicleParkingService; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; import org.opentripplanner.standalone.api.OtpServerRequestContext; /** @@ -36,7 +36,7 @@ public ParkAndRideResource( */ @Deprecated @PathParam("ignoreRouterId") String ignoreRouterId ) { - this.vehicleParkingService = serverContext.graph().getVehicleParkingService(); + this.vehicleParkingService = serverContext.vehicleParkingService(); // TODO OTP2 - Why are we using the DirectGraphFinder here, not just // - serverContext.graphFinder(). This needs at least a comment! @@ -73,7 +73,8 @@ public Response getParkAndRide( } var prs = vehicleParkingService - .getCarParks() + .listCarParks() + .stream() .filter(lot -> envelope.contains(lot.getCoordinate().asJtsCoordinate())) .filter(lot -> hasTransitStopsNearby(maxTransitDistance, lot)) .map(ParkAndRideInfo::ofVehicleParking) diff --git a/application/src/ext/java/org/opentripplanner/ext/reportapi/model/GraphReportBuilder.java b/application/src/ext/java/org/opentripplanner/ext/reportapi/model/GraphReportBuilder.java index 7f819c70792..338d425db9a 100644 --- a/application/src/ext/java/org/opentripplanner/ext/reportapi/model/GraphReportBuilder.java +++ b/application/src/ext/java/org/opentripplanner/ext/reportapi/model/GraphReportBuilder.java @@ -41,9 +41,9 @@ public static GraphStats build(OtpServerRequestContext context) { new StreetStats(edgeTypes, vertexTypes), new TransitStats( stopCounts, - transitService.getAllTrips().size(), - transitService.getAllTripPatterns().size(), - transitService.getAllRoutes().size(), + transitService.listTrips().size(), + transitService.listTripPatterns().size(), + transitService.listRoutes().size(), constrainedTransferCounts ) ); diff --git a/application/src/ext/java/org/opentripplanner/ext/reportapi/model/TransfersReport.java b/application/src/ext/java/org/opentripplanner/ext/reportapi/model/TransfersReport.java index cff5d2f791e..e9b5ac8a236 100644 --- a/application/src/ext/java/org/opentripplanner/ext/reportapi/model/TransfersReport.java +++ b/application/src/ext/java/org/opentripplanner/ext/reportapi/model/TransfersReport.java @@ -152,7 +152,7 @@ private TxPoint pointInfo(TransferPoint p, boolean boarding) { if (p instanceof TripTransferPoint tp) { var trip = tp.getTrip(); var route = trip.getRoute(); - var ptn = transitService.getPatternForTrip(trip); + var ptn = transitService.findPattern(trip); r.operator = getName(trip.getOperator()); r.type = "Trip"; r.entityId = trip.getId().getId(); @@ -162,7 +162,7 @@ private TxPoint pointInfo(TransferPoint p, boolean boarding) { addLocation(r, ptn, stop, trip, boarding); } else if (p instanceof RouteStopTransferPoint rp) { var route = rp.getRoute(); - var ptn = transitService.getPatternsForRoute(route).stream().findFirst().orElse(null); + var ptn = transitService.findPatterns(route).stream().findFirst().orElse(null); r.operator = getName(route.getOperator()); r.type = "Route"; r.entityId = route.getId().getId(); diff --git a/application/src/ext/java/org/opentripplanner/ext/reportapi/resource/ReportResource.java b/application/src/ext/java/org/opentripplanner/ext/reportapi/resource/ReportResource.java index e06aec71b53..56a224d3d68 100644 --- a/application/src/ext/java/org/opentripplanner/ext/reportapi/resource/ReportResource.java +++ b/application/src/ext/java/org/opentripplanner/ext/reportapi/resource/ReportResource.java @@ -49,7 +49,7 @@ public String getTransfersAsCsv() { @Produces(MediaType.TEXT_PLAIN) public String getTransitGroupPriorities() { return TransitGroupPriorityReport.build( - transitService.getAllTripPatterns(), + transitService.listTripPatterns(), defaultRequest.journey().transit() ); } diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingInfoMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingInfoMapper.java index b4e3292b435..eafa81195b5 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingInfoMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingInfoMapper.java @@ -27,8 +27,8 @@ private static ApiBookingInfo mapBookingInfo(BookingInfo info, boolean isPickup) BookingMethodMapper.mapBookingMethods(info.bookingMethods()), BookingTimeMapper.mapBookingTime(info.getEarliestBookingTime()), BookingTimeMapper.mapBookingTime(info.getLatestBookingTime()), - info.getMinimumBookingNotice(), - info.getMaximumBookingNotice(), + info.getMinimumBookingNotice().orElse(null), + info.getMaximumBookingNotice().orElse(null), info.getMessage(), isPickup ? info.getPickupMessage() : null, !isPickup ? info.getDropOffMessage() : null diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/PlaceMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/PlaceMapper.java index 28ceb0b84e3..059b0f93812 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/PlaceMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/PlaceMapper.java @@ -15,7 +15,7 @@ import org.opentripplanner.model.plan.Place; import org.opentripplanner.model.plan.StopArrival; import org.opentripplanner.model.plan.VehicleParkingWithEntrance; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces; import org.opentripplanner.transit.model.site.RegularStop; public class PlaceMapper { diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouterInfo.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouterInfo.java index a0bbb1116b3..95317d40057 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouterInfo.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouterInfo.java @@ -5,7 +5,7 @@ import org.locationtech.jts.geom.Geometry; import org.opentripplanner.ext.restapi.mapping.ModeMapper; import org.opentripplanner.routing.graph.Graph; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingService; +import org.opentripplanner.service.vehicleparking.VehicleParkingService; import org.opentripplanner.service.vehiclerental.VehicleRentalService; import org.opentripplanner.service.worldenvelope.model.WorldEnvelope; import org.opentripplanner.transit.service.TransitService; @@ -34,16 +34,15 @@ public ApiRouterInfo( Graph graph, TransitService transitService, VehicleRentalService vehicleRentalService, + VehicleParkingService vehicleParkingService, WorldEnvelope envelope ) { - VehicleParkingService vehicleParkingService = graph.getVehicleParkingService(); - this.routerId = routerId; this.polygon = graph.getConvexHull(); this.buildTime = Date.from(graph.buildTime); this.transitServiceStarts = transitService.getTransitServiceStarts().toEpochSecond(); this.transitServiceEnds = transitService.getTransitServiceEnds().toEpochSecond(); - this.transitModes = ModeMapper.mapToApi(transitService.getTransitModes()); + this.transitModes = ModeMapper.mapToApi(transitService.listTransitModes()); this.envelope = envelope; this.hasBikeSharing = mapHasBikeSharing(vehicleRentalService); this.hasBikePark = mapHasBikePark(vehicleParkingService); @@ -51,7 +50,7 @@ public ApiRouterInfo( this.hasParkRide = this.hasCarPark; this.hasVehicleParking = mapHasVehicleParking(vehicleParkingService); this.travelOptions = - ApiTravelOptionsMaker.makeOptions(graph, vehicleRentalService, transitService); + ApiTravelOptionsMaker.makeOptions(graph, vehicleRentalService, vehicleParkingService, transitService); } public boolean mapHasBikeSharing(VehicleRentalService service) { @@ -67,21 +66,21 @@ public boolean mapHasBikePark(VehicleParkingService service) { if (service == null) { return false; } - return service.getBikeParks().findAny().isPresent(); + return service.listBikeParks().stream().findAny().isPresent(); } public boolean mapHasCarPark(VehicleParkingService service) { if (service == null) { return false; } - return service.getCarParks().findAny().isPresent(); + return service.listCarParks().stream().findAny().isPresent(); } public boolean mapHasVehicleParking(VehicleParkingService service) { if (service == null) { return false; } - return service.getVehicleParkings().findAny().isPresent(); + return service.listVehicleParkings().stream().findAny().isPresent(); } public double getLowerLeftLatitude() { diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTravelOptionsMaker.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTravelOptionsMaker.java index cf424392d70..65fec7867cb 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTravelOptionsMaker.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTravelOptionsMaker.java @@ -5,6 +5,7 @@ import java.util.Set; import org.opentripplanner.api.parameter.ApiRequestMode; import org.opentripplanner.routing.graph.Graph; +import org.opentripplanner.service.vehicleparking.VehicleParkingService; import org.opentripplanner.service.vehiclerental.VehicleRentalService; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.service.TransitService; @@ -29,14 +30,14 @@ public final class ApiTravelOptionsMaker { public static List makeOptions( Graph graph, VehicleRentalService vehicleRentalService, + VehicleParkingService vehicleParkingService, TransitService transitService ) { - var service = graph.getVehicleParkingService(); return makeOptions( - transitService.getTransitModes(), + transitService.listTransitModes(), vehicleRentalService.hasRentalBikes(), - service.hasBikeParking(), - service.hasCarParking() + vehicleParkingService.hasBikeParking(), + vehicleParkingService.hasCarParking() ); } diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/IndexAPI.java b/application/src/ext/java/org/opentripplanner/ext/restapi/resources/IndexAPI.java index ccf18217148..7dbfabed156 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/IndexAPI.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/resources/IndexAPI.java @@ -93,7 +93,7 @@ public IndexAPI( @GET @Path("/feeds") public Collection getFeeds() { - return transitService().getFeedIds(); + return transitService().listFeedIds(); } @GET @@ -108,7 +108,7 @@ public ApiFeedInfo getFeedInfo(@PathParam("feedId") String feedId) { @Path("/agencies/{feedId}") public Collection getAgencies(@PathParam("feedId") String feedId) { Collection agencies = transitService() - .getAgencies() + .listAgencies() .stream() .filter(agency -> agency.getId().getFeedId().equals(feedId)) .collect(Collectors.toList()); @@ -138,7 +138,7 @@ public Response getAgencyRoutes( var agency = agency(feedId, agencyId); Collection routes = transitService() - .getAllRoutes() + .listRoutes() .stream() .filter(r -> r.getAgency() == agency) .collect(Collectors.toList()); @@ -235,7 +235,7 @@ public List getStopsInRadius( public List getRoutesForStop(@PathParam("stopId") String stopId) { var stop = stop(stopId); return transitService() - .getPatternsForStop(stop) + .findPatterns(stop) .stream() .map(TripPattern::getRoute) .map(RouteMapper::mapToApiShort) @@ -247,7 +247,7 @@ public List getRoutesForStop(@PathParam("stopId") String stopId) public List getPatternsForStop(@PathParam("stopId") String stopId) { var stop = stop(stopId); return transitService() - .getPatternsForStop(stop) + .findPatterns(stop) .stream() .map(TripPatternMapper::mapToApiShort) .collect(Collectors.toList()); @@ -275,7 +275,7 @@ public Collection getStopTimesForStop( : Instant.ofEpochSecond(startTimeSeconds); return transitService() - .stopTimesForStop( + .findStopTimesInPattern( stop(stopIdString), startTime, Duration.ofSeconds(timeRange), @@ -303,7 +303,7 @@ public List getStoptimesForStopAndDate( var stop = stop(stopId); var serviceDate = parseServiceDate("date", date); List stopTimes = transitService() - .getStopTimesForStop( + .findStopTimesInPattern( stop, serviceDate, omitNonPickups ? ArrivalDeparture.DEPARTURES : ArrivalDeparture.BOTH, @@ -322,7 +322,7 @@ public Collection getTransfers(@PathParam("stopId") String stopId) // get the transfers for the stop return transitService() - .getTransfersByStop(stop) + .findPathTransfers(stop) .stream() .map(TransferMapper::mapToApi) .collect(Collectors.toList()); @@ -344,7 +344,7 @@ public Collection getAlertsForStop(@PathParam("stopId") String stopId) @GET @Path("/routes") public List getRoutes(@QueryParam("hasStop") List stopIds) { - Collection routes = transitService().getAllRoutes(); + Collection routes = transitService().listRoutes(); // Filter routes to include only those that pass through all given stops if (stopIds != null) { // Protective copy, we are going to calculate the intersection destructively @@ -352,7 +352,7 @@ public List getRoutes(@QueryParam("hasStop") List stopIds for (String stopId : stopIds) { var stop = stop(stopId); Set routesHere = new HashSet<>(); - for (TripPattern pattern : transitService().getPatternsForStop(stop)) { + for (TripPattern pattern : transitService().findPatterns(stop)) { routesHere.add(pattern.getRoute()); } routes.retainAll(routesHere); @@ -372,7 +372,7 @@ public ApiRoute getRoute(@PathParam("routeId") String routeId) { @GET @Path("/routes/{routeId}/patterns") public List getPatternsForRoute(@PathParam("routeId") String routeId) { - Collection patterns = transitService().getPatternsForRoute(route(routeId)); + Collection patterns = transitService().findPatterns(route(routeId)); return TripPatternMapper.mapToApiShort(patterns); } @@ -383,7 +383,7 @@ public List getStopsForRoute(@PathParam("routeId") String routeId) var route = route(routeId); Set stops = new HashSet<>(); - Collection patterns = transitService().getPatternsForRoute(route); + Collection patterns = transitService().findPatterns(route); for (TripPattern pattern : patterns) { stops.addAll(pattern.getStops()); } @@ -396,7 +396,7 @@ public List getStopsForRoute(@PathParam("routeId") String routeId) public List getTripsForRoute(@PathParam("routeId") String routeId) { var route = route(routeId); - var patterns = transitService().getPatternsForRoute(route); + var patterns = transitService().findPatterns(route); return patterns .stream() .flatMap(TripPattern::scheduledTripsAsStream) @@ -445,7 +445,7 @@ public List getStoptimesForTrip(@PathParam("tripId") String tr var pattern = tripPattern(trip); // Note, we need the updated timetable not the scheduled one (which contains no real-time updates). var table = transitService() - .getTimetableForTripPattern(pattern, LocalDate.now(transitService().getTimeZone())); + .findTimetable(pattern, LocalDate.now(transitService().getTimeZone())); var tripTimesOnDate = TripTimeOnDate.fromTripTimes(table, trip); return TripTimeMapper.mapToApi(tripTimesOnDate); } @@ -472,7 +472,7 @@ public Collection getAlertsForTrip(@PathParam("tripId") String tripId) @GET @Path("/patterns") public List getPatterns() { - Collection patterns = transitService().getAllTripPatterns(); + Collection patterns = transitService().listTripPatterns(); return TripPatternMapper.mapToApiShort(patterns); } @@ -589,7 +589,7 @@ private static NotFoundException notFoundException(String entity, String details } private Agency agency(String feedId, String agencyId) { - var agency = transitService().getAgencyForId(new FeedScopedId(feedId, agencyId)); + var agency = transitService().getAgency(new FeedScopedId(feedId, agencyId)); if (agency == null) { throw notFoundException("Agency", "feedId: " + feedId + ", agencyId: " + agencyId); } @@ -602,18 +602,18 @@ private StopLocation stop(String stopId) { } private Route route(String routeId) { - var route = transitService().getRouteForId(createId("routeId", routeId)); + var route = transitService().getRoute(createId("routeId", routeId)); return validateExist("Route", route, "routeId", routeId); } private Trip trip(String tripId) { - var trip = transitService().getTripForId(createId("tripId", tripId)); + var trip = transitService().getTrip(createId("tripId", tripId)); return validateExist("Trip", trip, "tripId", tripId); } private TripPattern tripPattern(String tripPatternId) { var id = createId("patternId", tripPatternId); - var pattern = transitService().getTripPatternForId(id); + var pattern = transitService().getTripPattern(id); return validateExist("TripPattern", pattern, "patternId", tripPatternId); } @@ -622,7 +622,7 @@ private TripPattern tripPatternForTripId(String tripId) { } private TripPattern tripPattern(Trip trip) { - var pattern = transitService().getPatternForTrip(trip); + var pattern = transitService().findPattern(trip); return validateExist("TripPattern", pattern, "trip", trip.getId()); } diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/Routers.java b/application/src/ext/java/org/opentripplanner/ext/restapi/resources/Routers.java index 9cfab49017c..6c805560b8b 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/Routers.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/resources/Routers.java @@ -66,6 +66,7 @@ private ApiRouterInfo getRouterInfo() { serverContext.graph(), serverContext.transitService(), serverContext.vehicleRentalService(), + serverContext.vehicleParkingService(), serverContext.worldEnvelopeService().envelope().orElseThrow() ); } catch (GraphNotFoundException e) { diff --git a/application/src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java b/application/src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java index 29701ee2307..f1fde4917cd 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java +++ b/application/src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java @@ -109,7 +109,7 @@ public TileJson getTileJson( private List getFeedInfos() { return serverContext .transitService() - .getFeedIds() + .listFeedIds() .stream() .map(serverContext.transitService()::getFeedInfo) .filter(Predicate.not(Objects::isNull)) @@ -140,12 +140,12 @@ private static LayerBuilder createLayerBuilder( layerParameters ); case VehicleParking -> new VehicleParkingsLayerBuilder( - context.graph(), + context.vehicleParkingService(), layerParameters, locale ); case VehicleParkingGroup -> new VehicleParkingGroupsLayerBuilder( - context.graph(), + context.vehicleParkingService(), layerParameters, locale ); diff --git a/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/LayerFilters.java b/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/LayerFilters.java index 7d63bbe5398..38a27d4b4c4 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/LayerFilters.java +++ b/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/LayerFilters.java @@ -58,7 +58,7 @@ public static Predicate forType(FilterType type, TransitService tra return switch (type) { case NONE -> NO_FILTER; case SUNDAY_TO_SUNDAY_SERVICE_WEEK -> buildCurrentServiceWeekPredicate( - transitService::getPatternsForStop, + transitService::findPatterns, trip -> transitService.getCalendarService().getServiceDatesForServiceId(trip.getServiceId()), () -> LocalDate.now(transitService.getTimeZone()) diff --git a/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/areastops/AreaStopPropertyMapper.java b/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/areastops/AreaStopPropertyMapper.java index ea6f9225e11..3a5a33103df 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/areastops/AreaStopPropertyMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/areastops/AreaStopPropertyMapper.java @@ -28,7 +28,7 @@ protected AreaStopPropertyMapper( } protected static AreaStopPropertyMapper create(TransitService transitService, Locale locale) { - return new AreaStopPropertyMapper(transitService::getRoutesForStop, locale); + return new AreaStopPropertyMapper(transitService::findRoutes, locale); } @Override diff --git a/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/DigitransitStationPropertyMapper.java b/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/DigitransitStationPropertyMapper.java index 18b4a5f388d..6268db83b04 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/DigitransitStationPropertyMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/DigitransitStationPropertyMapper.java @@ -44,7 +44,7 @@ public Collection map(Station station) { "type", childStops .stream() - .flatMap(stop -> transitService.getPatternsForStop(stop).stream()) + .flatMap(stop -> transitService.findPatterns(stop).stream()) .map(tripPattern -> tripPattern.getMode().name()) .distinct() .collect(Collectors.joining(",")) @@ -60,7 +60,7 @@ public Collection map(Station station) { OBJECT_MAPPER.writeValueAsString( childStops .stream() - .flatMap(stop -> transitService.getRoutesForStop(stop).stream()) + .flatMap(stop -> transitService.findRoutes(stop).stream()) .distinct() .map(route -> { var obj = OBJECT_MAPPER.createObjectNode(); 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 25959d5ec7a..c157621a740 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 @@ -40,7 +40,7 @@ public StationsLayerBuilder( protected List getGeometries(Envelope query) { return transitService - .getStations() + .listStations() .stream() .map(station -> { Coordinate coordinate = station.getCoordinate().asJtsCoordinate(); diff --git a/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/DigitransitRealtimeStopPropertyMapper.java b/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/DigitransitRealtimeStopPropertyMapper.java index af2ec7212ec..6fb2783f7cb 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/DigitransitRealtimeStopPropertyMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/DigitransitRealtimeStopPropertyMapper.java @@ -36,7 +36,7 @@ protected Collection map(RegularStop stop) { var serviceDate = LocalDate.now(transitService.getTimeZone()); boolean stopTimesExist = transitService - .getStopTimesForStop(stop, serviceDate, ArrivalDeparture.BOTH, true) + .findStopTimesInPattern(stop, serviceDate, ArrivalDeparture.BOTH, true) .stream() .anyMatch(stopTime -> stopTime.times.size() > 0); diff --git a/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/DigitransitStopPropertyMapper.java b/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/DigitransitStopPropertyMapper.java index edf9c7d8188..0322a2749b4 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/DigitransitStopPropertyMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/DigitransitStopPropertyMapper.java @@ -61,7 +61,7 @@ protected static Collection getBaseKeyValues( protected static String getRoutes(TransitService transitService, RegularStop stop) { try { var objects = transitService - .getRoutesForStop(stop) + .findRoutes(stop) .stream() .map(route -> { var routeObject = OBJECT_MAPPER.createObjectNode(); @@ -76,7 +76,7 @@ protected static String getRoutes(TransitService transitService, RegularStop sto } protected static String getType(TransitService transitService, RegularStop stop) { - Collection patternsForStop = transitService.getPatternsForStop(stop); + Collection patternsForStop = transitService.findPatterns(stop); return patternsForStop .stream() diff --git a/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingPropertyMapper.java b/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingPropertyMapper.java index 951552e1fdc..702fbac9e07 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingPropertyMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingPropertyMapper.java @@ -7,7 +7,7 @@ import org.opentripplanner.apis.support.mapping.PropertyMapper; import org.opentripplanner.framework.i18n.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; public class DigitransitVehicleParkingPropertyMapper extends PropertyMapper { diff --git a/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/StadtnaviVehicleParkingPropertyMapper.java b/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/StadtnaviVehicleParkingPropertyMapper.java index bccc2b4de4d..8f745a4e633 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/StadtnaviVehicleParkingPropertyMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/StadtnaviVehicleParkingPropertyMapper.java @@ -9,8 +9,8 @@ import org.opentripplanner.framework.json.ObjectMappers; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.model.calendar.openinghours.OsmOpeningHoursSupport; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces; public class StadtnaviVehicleParkingPropertyMapper extends PropertyMapper { diff --git a/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingAndGroup.java b/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingAndGroup.java index 7093dbb3407..5968f000d2d 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingAndGroup.java +++ b/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingAndGroup.java @@ -1,8 +1,8 @@ package org.opentripplanner.ext.vectortiles.layers.vehicleparkings; import java.util.Collection; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingGroup; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingGroup; /** * Record that holds {@link VehicleParkingGroup} and a set of {@link VehicleParking} that belong to diff --git a/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingGroupsLayerBuilder.java b/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingGroupsLayerBuilder.java index 0cd1d84868b..36217e05972 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingGroupsLayerBuilder.java +++ b/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingGroupsLayerBuilder.java @@ -13,7 +13,7 @@ import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.inspector.vector.LayerBuilder; import org.opentripplanner.inspector.vector.LayerParameters; -import org.opentripplanner.routing.graph.Graph; +import org.opentripplanner.service.vehicleparking.VehicleParkingService; public class VehicleParkingGroupsLayerBuilder extends LayerBuilder { @@ -21,10 +21,10 @@ public class VehicleParkingGroupsLayerBuilder extends LayerBuilder layerParameters, Locale locale ) { @@ -33,14 +33,13 @@ public VehicleParkingGroupsLayerBuilder( layerParameters.name(), layerParameters.expansionFactor() ); - this.graph = graph; + this.service = service; } @Override protected List getGeometries(Envelope query) { - return graph - .getVehicleParkingService() - .getVehicleParkingGroups() + return service + .listVehicleParkingGroups() .asMap() .entrySet() .stream() diff --git a/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingsLayerBuilder.java b/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingsLayerBuilder.java index 95326172415..22fb75f7b49 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingsLayerBuilder.java +++ b/application/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingsLayerBuilder.java @@ -16,8 +16,8 @@ import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.inspector.vector.LayerBuilder; import org.opentripplanner.inspector.vector.LayerParameters; -import org.opentripplanner.routing.graph.Graph; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; +import org.opentripplanner.service.vehicleparking.VehicleParkingService; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; public class VehicleParkingsLayerBuilder extends LayerBuilder { @@ -28,10 +28,10 @@ public class VehicleParkingsLayerBuilder extends LayerBuilder { ), entry(MapperType.Digitransit, DigitransitVehicleParkingPropertyMapper::create) ); - private final Graph graph; + private final VehicleParkingService service; public VehicleParkingsLayerBuilder( - Graph graph, + VehicleParkingService service, LayerParameters layerParameters, Locale locale ) { @@ -40,14 +40,13 @@ public VehicleParkingsLayerBuilder( layerParameters.name(), layerParameters.expansionFactor() ); - this.graph = graph; + this.service = service; } @Override protected List getGeometries(Envelope query) { - return graph - .getVehicleParkingService() - .getVehicleParkings() + return service + .listVehicleParkings().stream() .map(vehicleParking -> { Coordinate coordinate = vehicleParking.getCoordinate().asJtsCoordinate(); Point point = GeometryUtils.getGeometryFactory().createPoint(coordinate); diff --git a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/bikeep/BikeepUpdater.java b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/bikeep/BikeepUpdater.java index cd6a39fecd3..decbda7abf6 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/bikeep/BikeepUpdater.java +++ b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/bikeep/BikeepUpdater.java @@ -7,9 +7,9 @@ import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.framework.json.ObjectMappers; -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.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingState; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.updater.spi.GenericJsonDataSource; import org.opentripplanner.utils.tostring.ToStringBuilder; diff --git a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/bikely/BikelyUpdater.java b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/bikely/BikelyUpdater.java index 2bed1121913..eba0547dbf5 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/bikely/BikelyUpdater.java +++ b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/bikely/BikelyUpdater.java @@ -1,6 +1,6 @@ package org.opentripplanner.ext.vehicleparking.bikely; -import static org.opentripplanner.routing.vehicle_parking.VehicleParkingState.OPERATIONAL; +import static org.opentripplanner.service.vehicleparking.model.VehicleParkingState.OPERATIONAL; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; @@ -17,9 +17,9 @@ import org.opentripplanner.framework.io.OtpHttpClient; import org.opentripplanner.framework.io.OtpHttpClientFactory; import org.opentripplanner.framework.json.ObjectMappers; -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.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingState; import org.opentripplanner.transit.model.basic.LocalizedMoney; import org.opentripplanner.transit.model.basic.Money; import org.opentripplanner.transit.model.framework.FeedScopedId; diff --git a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/hslpark/HslFacilitiesDownloader.java b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/hslpark/HslFacilitiesDownloader.java index dcf4ffe29d9..3d6c1943061 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/hslpark/HslFacilitiesDownloader.java +++ b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/hslpark/HslFacilitiesDownloader.java @@ -13,8 +13,8 @@ import org.opentripplanner.framework.io.OtpHttpClient; import org.opentripplanner.framework.io.OtpHttpClientException; import org.opentripplanner.framework.io.OtpHttpClientFactory; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingGroup; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingGroup; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/hslpark/HslHubToVehicleParkingGroupMapper.java b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/hslpark/HslHubToVehicleParkingGroupMapper.java index 1ef0ef3597b..2c4dcad73d6 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/hslpark/HslHubToVehicleParkingGroupMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/hslpark/HslHubToVehicleParkingGroupMapper.java @@ -13,7 +13,7 @@ import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.framework.i18n.TranslatedString; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingGroup; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingGroup; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/hslpark/HslHubsDownloader.java b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/hslpark/HslHubsDownloader.java index f1f98b6139c..62e76b65035 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/hslpark/HslHubsDownloader.java +++ b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/hslpark/HslHubsDownloader.java @@ -12,7 +12,7 @@ import org.opentripplanner.framework.io.OtpHttpClient; import org.opentripplanner.framework.io.OtpHttpClientException; import org.opentripplanner.framework.io.OtpHttpClientFactory; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingGroup; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingGroup; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/hslpark/HslParkToVehicleParkingMapper.java b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/hslpark/HslParkToVehicleParkingMapper.java index 1f69458dd1f..c3e74f7285e 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/hslpark/HslParkToVehicleParkingMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/hslpark/HslParkToVehicleParkingMapper.java @@ -19,10 +19,10 @@ import org.opentripplanner.framework.i18n.TranslatedString; import org.opentripplanner.model.calendar.openinghours.OHCalendar; import org.opentripplanner.model.calendar.openinghours.OpeningHoursCalendarService; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingGroup; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingState; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingGroup; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingState; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/hslpark/HslParkUpdater.java b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/hslpark/HslParkUpdater.java index f5c5b33ef29..7933e968537 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/hslpark/HslParkUpdater.java +++ b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/hslpark/HslParkUpdater.java @@ -6,10 +6,10 @@ import org.opentripplanner.framework.io.JsonDataListDownloader; import org.opentripplanner.framework.io.OtpHttpClientFactory; import org.opentripplanner.model.calendar.openinghours.OpeningHoursCalendarService; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingGroup; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces.VehicleParkingSpacesBuilder; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingGroup; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces.VehicleParkingSpacesBuilder; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.updater.spi.DataSource; import org.slf4j.Logger; diff --git a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/parkapi/BicycleParkAPIUpdater.java b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/parkapi/BicycleParkAPIUpdater.java index 21898bc3956..76fd73d3c18 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/parkapi/BicycleParkAPIUpdater.java +++ b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/parkapi/BicycleParkAPIUpdater.java @@ -2,7 +2,7 @@ import com.fasterxml.jackson.databind.JsonNode; import org.opentripplanner.model.calendar.openinghours.OpeningHoursCalendarService; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces; /** * Vehicle parking updater class that extends the {@link ParkAPIUpdater}. Meant for reading bicycle diff --git a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/parkapi/CarParkAPIUpdater.java b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/parkapi/CarParkAPIUpdater.java index 445f6bfbda3..06064f4896a 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/parkapi/CarParkAPIUpdater.java +++ b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/parkapi/CarParkAPIUpdater.java @@ -2,7 +2,7 @@ import com.fasterxml.jackson.databind.JsonNode; import org.opentripplanner.model.calendar.openinghours.OpeningHoursCalendarService; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces; /** * Vehicle parking updater class that extends the {@link ParkAPIUpdater}. Meant for reading car diff --git a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/parkapi/ParkAPIUpdater.java b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/parkapi/ParkAPIUpdater.java index c7bd6631a48..3e206fc660d 100644 --- a/application/src/ext/java/org/opentripplanner/ext/vehicleparking/parkapi/ParkAPIUpdater.java +++ b/application/src/ext/java/org/opentripplanner/ext/vehicleparking/parkapi/ParkAPIUpdater.java @@ -15,9 +15,9 @@ import org.opentripplanner.model.calendar.openinghours.OHCalendar; import org.opentripplanner.model.calendar.openinghours.OpeningHoursCalendarService; import org.opentripplanner.osm.OsmOpeningHoursParser; -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.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingState; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.updater.spi.GenericJsonDataSource; import org.opentripplanner.utils.tostring.ToStringBuilder; diff --git a/application/src/ext/resources/org/opentripplanner/ext/vectortiles/router-config.json b/application/src/ext/resources/org/opentripplanner/ext/vectortiles/router-config.json index df325d076a3..5eb5c3976da 100644 --- a/application/src/ext/resources/org/opentripplanner/ext/vectortiles/router-config.json +++ b/application/src/ext/resources/org/opentripplanner/ext/vectortiles/router-config.json @@ -13,4 +13,3 @@ ] } } - diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/GraphQLRequestContext.java b/application/src/main/java/org/opentripplanner/apis/gtfs/GraphQLRequestContext.java index 192cbb26aa9..c3ca214b62f 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/GraphQLRequestContext.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/GraphQLRequestContext.java @@ -4,8 +4,8 @@ import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.fares.FareService; import org.opentripplanner.routing.graphfinder.GraphFinder; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingService; import org.opentripplanner.service.realtimevehicles.RealtimeVehicleService; +import org.opentripplanner.service.vehicleparking.VehicleParkingService; import org.opentripplanner.service.vehiclerental.VehicleRentalService; import org.opentripplanner.standalone.api.OtpServerRequestContext; import org.opentripplanner.transit.service.TransitService; @@ -14,8 +14,8 @@ public record GraphQLRequestContext( RoutingService routingService, TransitService transitService, FareService fareService, - VehicleParkingService vehicleParkingService, VehicleRentalService vehicleRentalService, + VehicleParkingService vehicleParkingService, RealtimeVehicleService realTimeVehicleService, GraphFinder graphFinder, RouteRequest defaultRouteRequest @@ -25,8 +25,8 @@ public static GraphQLRequestContext ofServerContext(OtpServerRequestContext cont context.routingService(), context.transitService(), context.graph().getFareService(), - context.graph().getVehicleParkingService(), context.vehicleRentalService(), + context.vehicleParkingService(), context.realtimeVehicleService(), context.graphFinder(), context.defaultRouteRequest() diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/AgencyImpl.java b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/AgencyImpl.java index 8a6d55bb078..d8ed772c9e5 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/AgencyImpl.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/AgencyImpl.java @@ -107,7 +107,7 @@ public DataFetcher url() { private List getRoutes(DataFetchingEnvironment environment) { return getTransitService(environment) - .getAllRoutes() + .listRoutes() .stream() .filter(route -> route.getAgency().equals(getSource(environment))) .collect(Collectors.toList()); diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/AlertImpl.java b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/AlertImpl.java index 4f7a3f61a57..d7d937d52de 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/AlertImpl.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/AlertImpl.java @@ -51,9 +51,7 @@ public DataFetcher agency() { .filter(EntitySelector.Agency.class::isInstance) .findAny() .map(EntitySelector.Agency.class::cast) - .map(entitySelector -> - getTransitService(environment).getAgencyForId(entitySelector.agencyId()) - ) + .map(entitySelector -> getTransitService(environment).getAgency(entitySelector.agencyId())) .orElse(null); } @@ -170,24 +168,24 @@ public DataFetcher> entities() { } if (entitySelector instanceof EntitySelector.Agency) { FeedScopedId id = ((EntitySelector.Agency) entitySelector).agencyId(); - Agency agency = getTransitService(environment).getAgencyForId(id); + Agency agency = getTransitService(environment).getAgency(id); return List.of(getAlertEntityOrUnknown(agency, id.toString(), "agency")); } if (entitySelector instanceof EntitySelector.Route) { FeedScopedId id = ((EntitySelector.Route) entitySelector).routeId(); - Route route = getTransitService(environment).getRouteForId(id); + Route route = getTransitService(environment).getRoute(id); return List.of(getAlertEntityOrUnknown(route, id.toString(), "route")); } if (entitySelector instanceof EntitySelector.Trip) { FeedScopedId id = ((EntitySelector.Trip) entitySelector).tripId(); - Trip trip = getTransitService(environment).getTripForId(id); + Trip trip = getTransitService(environment).getTrip(id); return List.of(getAlertEntityOrUnknown(trip, id.toString(), "trip")); } if (entitySelector instanceof EntitySelector.StopAndRoute stopAndRoute) { FeedScopedId stopId = stopAndRoute.stopId(); FeedScopedId routeId = stopAndRoute.routeId(); StopLocation stop = getTransitService(environment).getRegularStop(stopId); - Route route = getTransitService(environment).getRouteForId(routeId); + Route route = getTransitService(environment).getRoute(routeId); return List.of( stop != null && route != null ? new StopOnRouteModel(stop, route) @@ -205,7 +203,7 @@ public DataFetcher> entities() { FeedScopedId stopId = stopAndTrip.stopId(); FeedScopedId tripId = stopAndTrip.tripId(); StopLocation stop = getTransitService(environment).getRegularStop(stopId); - Trip trip = getTransitService(environment).getTripForId(tripId); + Trip trip = getTransitService(environment).getTrip(tripId); return List.of( stop != null && trip != null ? new StopOnTripModel(stop, trip) @@ -222,7 +220,7 @@ public DataFetcher> entities() { if (entitySelector instanceof EntitySelector.RouteTypeAndAgency) { FeedScopedId agencyId = ((EntitySelector.RouteTypeAndAgency) entitySelector).agencyId(); int routeType = ((EntitySelector.RouteTypeAndAgency) entitySelector).routeType(); - Agency agency = getTransitService(environment).getAgencyForId(agencyId); + Agency agency = getTransitService(environment).getAgency(agencyId); return List.of( agency != null ? new RouteTypeModel(agency, routeType, agency.getId().getFeedId()) @@ -244,10 +242,10 @@ public DataFetcher> entities() { if (entitySelector instanceof EntitySelector.DirectionAndRoute) { Direction direction = ((DirectionAndRoute) entitySelector).direction(); FeedScopedId routeId = ((EntitySelector.DirectionAndRoute) entitySelector).routeId(); - Route route = getTransitService(environment).getRouteForId(routeId); + Route route = getTransitService(environment).getRoute(routeId); return route != null ? getTransitService(environment) - .getPatternsForRoute(route) + .findPatterns(route) .stream() .filter(pattern -> pattern.getDirection() == direction) .collect(Collectors.toList()) @@ -301,9 +299,7 @@ public DataFetcher route() { .filter(entitySelector -> entitySelector instanceof EntitySelector.Route) .findAny() .map(EntitySelector.Route.class::cast) - .map(entitySelector -> - getTransitService(environment).getRouteForId(entitySelector.routeId()) - ) + .map(entitySelector -> getTransitService(environment).getRoute(entitySelector.routeId())) .orElse(null); } @@ -331,7 +327,7 @@ public DataFetcher trip() { .filter(entitySelector -> entitySelector instanceof EntitySelector.Trip) .findAny() .map(EntitySelector.Trip.class::cast) - .map(entitySelector -> getTransitService(environment).getTripForId(entitySelector.tripId())) + .map(entitySelector -> getTransitService(environment).getTrip(entitySelector.tripId())) .orElse(null); } diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/BikeParkImpl.java b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/BikeParkImpl.java index 81166034ee5..725d6e49377 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/BikeParkImpl.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/BikeParkImpl.java @@ -6,7 +6,7 @@ import org.opentripplanner.apis.gtfs.generated.GraphQLDataFetchers; import org.opentripplanner.framework.graphql.GraphQLUtils; import org.opentripplanner.model.calendar.openinghours.OHCalendar; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; public class BikeParkImpl implements GraphQLDataFetchers.GraphQLBikePark { diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/BookingInfoImpl.java b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/BookingInfoImpl.java index 44ee0985542..0060e6ad7e1 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/BookingInfoImpl.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/BookingInfoImpl.java @@ -2,6 +2,7 @@ import graphql.schema.DataFetcher; import graphql.schema.DataFetchingEnvironment; +import java.time.Duration; import org.opentripplanner.apis.gtfs.generated.GraphQLDataFetchers; import org.opentripplanner.transit.model.organization.ContactInfo; import org.opentripplanner.transit.model.timetable.booking.BookingInfo; @@ -31,7 +32,8 @@ public DataFetcher latestBookingTime() { @Override public DataFetcher maximumBookingNoticeSeconds() { - return environment -> getSource(environment).getMaximumBookingNotice().toSeconds(); + return environment -> + getSource(environment).getMaximumBookingNotice().map(Duration::toSeconds).orElse(null); } @Override @@ -41,7 +43,8 @@ public DataFetcher message() { @Override public DataFetcher minimumBookingNoticeSeconds() { - return environment -> getSource(environment).getMinimumBookingNotice().toSeconds(); + return environment -> + getSource(environment).getMinimumBookingNotice().map(Duration::toSeconds).orElse(null); } @Override diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/CarParkImpl.java b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/CarParkImpl.java index ff990b4f65c..8947f589ca5 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/CarParkImpl.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/CarParkImpl.java @@ -6,7 +6,7 @@ import org.opentripplanner.apis.gtfs.generated.GraphQLDataFetchers; import org.opentripplanner.framework.graphql.GraphQLUtils; import org.opentripplanner.model.calendar.openinghours.OHCalendar; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; public class CarParkImpl implements GraphQLDataFetchers.GraphQLCarPark { diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/FeedImpl.java b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/FeedImpl.java index d6488d3f375..3d9458152b5 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/FeedImpl.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/FeedImpl.java @@ -79,7 +79,7 @@ public DataFetcher publisher() { private List getAgencies(DataFetchingEnvironment environment) { String id = getSource(environment); return getTransitService(environment) - .getAgencies() + .listAgencies() .stream() .filter(agency -> agency.getId().getFeedId().equals(id)) .collect(Collectors.toList()); diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/NodeTypeResolver.java b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/NodeTypeResolver.java index 437d75e03e9..bb105be08fb 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/NodeTypeResolver.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/NodeTypeResolver.java @@ -12,7 +12,7 @@ import org.opentripplanner.routing.graphfinder.NearbyStop; import org.opentripplanner.routing.graphfinder.PatternAtStop; import org.opentripplanner.routing.graphfinder.PlaceAtDistance; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; import org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle; import org.opentripplanner.transit.model.network.Route; diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PlaceImpl.java b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PlaceImpl.java index 145321f809c..abb3a607ab9 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PlaceImpl.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PlaceImpl.java @@ -11,7 +11,7 @@ import org.opentripplanner.model.plan.Place; import org.opentripplanner.model.plan.StopArrival; import org.opentripplanner.model.plan.VertexType; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; import org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle; diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PlaceInterfaceTypeResolver.java b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PlaceInterfaceTypeResolver.java index cb2bfc77c32..a1f08fe3dc9 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PlaceInterfaceTypeResolver.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PlaceInterfaceTypeResolver.java @@ -5,7 +5,7 @@ import graphql.schema.GraphQLSchema; import graphql.schema.TypeResolver; import org.opentripplanner.routing.graphfinder.PatternAtStop; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; import org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle; import org.opentripplanner.transit.model.site.RegularStop; diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java index fa9623f7c55..d02d7b59ffa 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java @@ -56,9 +56,8 @@ import org.opentripplanner.routing.graphfinder.PatternAtStop; import org.opentripplanner.routing.graphfinder.PlaceAtDistance; import org.opentripplanner.routing.graphfinder.PlaceType; -import org.opentripplanner.routing.services.TransitAlertService; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingService; +import org.opentripplanner.service.vehicleparking.VehicleParkingService; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; import org.opentripplanner.service.vehiclerental.VehicleRentalService; import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; @@ -89,7 +88,7 @@ public class QueryTypeImpl implements GraphQLDataFetchers.GraphQLQueryType { @Override public DataFetcher> agencies() { - return environment -> getTransitService(environment).getAgencies(); + return environment -> getTransitService(environment).listAgencies(); } @Override @@ -99,7 +98,7 @@ public DataFetcher agency() { new GraphQLTypes.GraphQLQueryTypeAgencyArgs(environment.getArguments()).getGraphQLId() ); - return getTransitService(environment).getAgencyForId(id); + return getTransitService(environment).getAgency(id); }; } @@ -124,7 +123,8 @@ public DataFetcher bikePark() { .vehicleParkingService(); return vehicleParkingService - .getBikeParks() + .listBikeParks() + .stream() .filter(bikePark -> bikePark.getId().getId().equals(args.getGraphQLId())) .findAny() .orElse(null); @@ -138,7 +138,7 @@ public DataFetcher> bikeParks() { .getContext() .vehicleParkingService(); - return vehicleParkingService.getBikeParks().toList(); + return vehicleParkingService.listBikeParks().stream().toList(); }; } @@ -211,7 +211,8 @@ public DataFetcher carPark() { .vehicleParkingService(); return vehicleParkingService - .getCarParks() + .listCarParks() + .stream() .filter(carPark -> carPark.getId().getId().equals(args.getGraphQLId())) .findAny() .orElse(null); @@ -232,14 +233,15 @@ public DataFetcher> carParks() { if (!idList.isEmpty()) { Map carParkMap = vehicleParkingService - .getCarParks() + .listCarParks() + .stream() .collect(Collectors.toMap(station -> station.getId().getId(), station -> station)); return idList.stream().map(carParkMap::get).toList(); } } - return vehicleParkingService.getCarParks().toList(); + return vehicleParkingService.listCarParks(); }; } @@ -264,7 +266,7 @@ public DataFetcher departureRow() { @Override public DataFetcher> feeds() { - return environment -> getTransitService(environment).getFeedIds(); + return environment -> getTransitService(environment).listFeedIds(); } @Override @@ -276,7 +278,7 @@ public DataFetcher fuzzyTrip() { return new GtfsRealtimeFuzzyTripMatcher(transitService) .getTrip( - transitService.getRouteForId(FeedScopedId.parse(args.getGraphQLRoute())), + transitService.getRoute(FeedScopedId.parse(args.getGraphQLRoute())), DIRECTION_MAPPER.map(args.getGraphQLDirection()), args.getGraphQLTime(), ServiceDateUtils.parseString(args.getGraphQLDate()) @@ -393,7 +395,7 @@ public DataFetcher node() { switch (type) { case "Agency": - return transitService.getAgencyForId(FeedScopedId.parse(id)); + return transitService.getAgency(FeedScopedId.parse(id)); case "Alert": return transitService.getTransitAlertService().getAlertById(FeedScopedId.parse(id)); case "BikePark": @@ -401,7 +403,8 @@ public DataFetcher node() { return vehicleParkingService == null ? null : vehicleParkingService - .getBikeParks() + .listBikeParks() + .stream() .filter(bikePark -> bikePark.getId().equals(bikeParkId)) .findAny() .orElse(null); @@ -422,7 +425,8 @@ public DataFetcher node() { return vehicleParkingService == null ? null : vehicleParkingService - .getCarParks() + .listCarParks() + .stream() .filter(carPark -> carPark.getId().equals(carParkId)) .findAny() .orElse(null); @@ -431,7 +435,7 @@ public DataFetcher node() { case "DepartureRow": return PatternAtStop.fromId(transitService, id); case "Pattern": - return transitService.getTripPatternForId(FeedScopedId.parse(id)); + return transitService.getTripPattern(FeedScopedId.parse(id)); case "placeAtDistance": { String[] parts = id.split(";"); @@ -450,7 +454,7 @@ public DataFetcher node() { return new PlaceAtDistance(place, Double.parseDouble(parts[0])); } case "Route": - return transitService.getRouteForId(FeedScopedId.parse(id)); + return transitService.getRoute(FeedScopedId.parse(id)); case "Stop": return transitService.getRegularStop(FeedScopedId.parse(id)); case "Stoptime": @@ -467,13 +471,14 @@ public DataFetcher node() { return null; //TODO case "Trip": var scopedId = FeedScopedId.parse(id); - return transitService.getTripForId(scopedId); + return transitService.getTrip(scopedId); case "VehicleParking": var vehicleParkingId = FeedScopedId.parse(id); return vehicleParkingService == null ? null : vehicleParkingService - .getVehicleParkings() + .listVehicleParkings() + .stream() .filter(bikePark -> bikePark.getId().equals(vehicleParkingId)) .findAny() .orElse(null); @@ -487,7 +492,7 @@ public DataFetcher node() { public DataFetcher pattern() { return environment -> getTransitService(environment) - .getTripPatternForId( + .getTripPattern( FeedScopedId.parse( new GraphQLTypes.GraphQLQueryTypePatternArgs(environment.getArguments()).getGraphQLId() ) @@ -496,7 +501,7 @@ public DataFetcher pattern() { @Override public DataFetcher> patterns() { - return environment -> getTransitService(environment).getAllTripPatterns(); + return environment -> getTransitService(environment).listTripPatterns(); } @Override @@ -584,7 +589,7 @@ public DataFetcher> rentalVehicles() { public DataFetcher route() { return environment -> getTransitService(environment) - .getRouteForId( + .getRoute( FeedScopedId.parse( new GraphQLTypes.GraphQLQueryTypeRouteArgs(environment.getArguments()).getGraphQLId() ) @@ -603,11 +608,11 @@ public DataFetcher> routes() { .getGraphQLIds() .stream() .map(FeedScopedId::parse) - .map(transitService::getRouteForId) + .map(transitService::getRoute) .toList(); } - Stream routeStream = transitService.getAllRoutes().stream(); + Stream routeStream = transitService.listRoutes().stream(); if (args.getGraphQLFeeds() != null) { List feeds = args.getGraphQLFeeds(); @@ -652,7 +657,7 @@ public DataFetcher serviceTimeRange() { public DataFetcher station() { return environment -> getTransitService(environment) - .getStationById( + .getStation( FeedScopedId.parse( new GraphQLTypes.GraphQLQueryTypeStationArgs(environment.getArguments()).getGraphQLId() ) @@ -671,11 +676,11 @@ public DataFetcher> stations() { .getGraphQLIds() .stream() .map(FeedScopedId::parse) - .map(transitService::getStationById) + .map(transitService::getStation) .collect(Collectors.toList()); } - Stream stationStream = transitService.getStations().stream(); + Stream stationStream = transitService.listStations().stream(); if (args.getGraphQLName() != null) { String name = args.getGraphQLName().toLowerCase(environment.getLocale()); @@ -803,7 +808,7 @@ public DataFetcher> ticketTypes() { public DataFetcher trip() { return environment -> getTransitService(environment) - .getTripForId( + .getTrip( FeedScopedId.parse( new GraphQLTypes.GraphQLQueryTypeTripArgs(environment.getArguments()).getGraphQLId() ) @@ -815,7 +820,7 @@ public DataFetcher> trips() { return environment -> { var args = new GraphQLTypes.GraphQLQueryTypeTripsArgs(environment.getArguments()); - Stream tripStream = getTransitService(environment).getAllTrips().stream(); + Stream tripStream = getTransitService(environment).listTrips().stream(); if (args.getGraphQLFeeds() != null) { List feeds = args.getGraphQLFeeds(); @@ -837,7 +842,8 @@ public DataFetcher vehicleParking() { var vehicleParkingId = FeedScopedId.parse(args.getGraphQLId()); return vehicleParkingService - .getVehicleParkings() + .listVehicleParkings() + .stream() .filter(vehicleParking -> vehicleParking.getId().equals(vehicleParkingId)) .findAny() .orElse(null); @@ -858,14 +864,15 @@ public DataFetcher> vehicleParkings() { if (!idList.isEmpty()) { Map vehicleParkingMap = vehicleParkingService - .getVehicleParkings() + .listVehicleParkings() + .stream() .collect(Collectors.toMap(station -> station.getId().toString(), station -> station)); return idList.stream().map(vehicleParkingMap::get).toList(); } } - return vehicleParkingService.getVehicleParkings().toList(); + return vehicleParkingService.listVehicleParkings(); }; } diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RouteImpl.java b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RouteImpl.java index ae6acb0a297..9b98b71bd79 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RouteImpl.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RouteImpl.java @@ -178,7 +178,7 @@ public DataFetcher mode() { public DataFetcher> patterns() { return environment -> { final TransitService transitService = getTransitService(environment); - var patterns = transitService.getPatternsForRoute(getSource(environment)); + var patterns = transitService.findPatterns(getSource(environment)); var args = new GraphQLTypes.GraphQLRoutePatternsArgs(environment.getArguments()); @@ -231,7 +231,7 @@ public DataFetcher url() { private Iterable getStops(DataFetchingEnvironment environment) { return getTransitService(environment) - .getPatternsForRoute(getSource(environment)) + .findPatterns(getSource(environment)) .stream() .map(TripPattern::getStops) .flatMap(Collection::stream) @@ -240,7 +240,7 @@ private Iterable getStops(DataFetchingEnvironment environment) { private Iterable getTrips(DataFetchingEnvironment environment) { return getTransitService(environment) - .getPatternsForRoute(getSource(environment)) + .findPatterns(getSource(environment)) .stream() .flatMap(TripPattern::scheduledTripsAsStream) .collect(Collectors.toSet()); diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RouteTypeImpl.java b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RouteTypeImpl.java index bd8b9a7e019..108b4bd2bc0 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RouteTypeImpl.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RouteTypeImpl.java @@ -27,7 +27,7 @@ public DataFetcher> routes() { return environment -> { Agency agency = getSource(environment).getAgency(); return getTransitService(environment) - .getAllRoutes() + .listRoutes() .stream() .filter(route -> route.getId().getFeedId().equals(getSource(environment).getFeedId()) && diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/StopImpl.java b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/StopImpl.java index 2d17326a0ef..5a2e6f29204 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/StopImpl.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/StopImpl.java @@ -270,7 +270,7 @@ public DataFetcher> stopTimesForPattern() { GraphQLTypes.GraphQLStopStopTimesForPatternArgs args = new GraphQLTypes.GraphQLStopStopTimesForPatternArgs( environment.getArguments() ); - TripPattern pattern = transitService.getTripPatternForId( + TripPattern pattern = transitService.getTripPattern( FeedScopedId.parse(args.getGraphQLId()) ); @@ -287,7 +287,7 @@ public DataFetcher> stopTimesForPattern() { ); } - return transitService.stopTimesForPatternAtStop( + return transitService.findTripTimeOnDate( stop, pattern, GraphQLUtils.getTimeOrNow(args.getGraphQLStartTime()), @@ -318,7 +318,7 @@ public DataFetcher> stoptimesForPatterns() { var args = new GraphQLTypes.GraphQLStopStoptimesForPatternsArgs(environment.getArguments()); Function> stopTFunction = stop -> - transitService.stopTimesForStop( + transitService.findStopTimesInPattern( stop, GraphQLUtils.getTimeOrNow(args.getGraphQLStartTime()), Duration.ofSeconds(args.getGraphQLTimeRange()), @@ -356,7 +356,7 @@ public DataFetcher> stoptimesForServiceDate() { } Function> stopTFunction = stop -> - transitService.getStopTimesForStop( + transitService.findStopTimesInPattern( stop, date, args.getGraphQLOmitNonPickups() ? ArrivalDeparture.DEPARTURES : ArrivalDeparture.BOTH, @@ -385,7 +385,7 @@ public DataFetcher> stoptimesWithoutPatterns() { Function> stopTFunction = stop -> transitService - .stopTimesForStop( + .findStopTimesInPattern( stop, GraphQLUtils.getTimeOrNow(args.getGraphQLStartTime()), Duration.ofSeconds(args.getGraphQLTimeRange()), @@ -431,7 +431,7 @@ public DataFetcher> transfers() { .getGraphQLMaxDistance(); return getTransitService(environment) - .getTransfersByStop(stop) + .findPathTransfers(stop) .stream() .filter(transfer -> maxDistance == null || transfer.getDistanceMeters() < maxDistance) .filter(transfer -> transfer.to instanceof RegularStop) @@ -452,14 +452,14 @@ public DataFetcher vehicleMode() { environment, stop -> transitService - .getModesOfStopLocation(stop) + .findTransitModes(stop) .stream() .findFirst() .map(Enum::toString) .orElse(null), station -> transitService - .getModesOfStopLocationsGroup(station) + .findTransitModes(station) .stream() .findFirst() .map(Enum::toString) @@ -495,7 +495,7 @@ public DataFetcher zoneId() { private Collection getPatterns(DataFetchingEnvironment environment) { return getValue( environment, - stop -> getTransitService(environment).getPatternsForStop(stop, true), + stop -> getTransitService(environment).findPatterns(stop, true), station -> null ); } @@ -503,7 +503,7 @@ private Collection getPatterns(DataFetchingEnvironment environment) private Collection getRoutes(DataFetchingEnvironment environment) { return getValue( environment, - stop -> getTransitService(environment).getRoutesForStop(stop), + stop -> getTransitService(environment).findRoutes(stop), station -> null ); } @@ -531,7 +531,7 @@ private List getTripTimeOnDatesForPatternAtStopIncludingTripsWit ) .flatMap(tripPattern -> transitService - .stopTimesForPatternAtStop( + .findTripTimeOnDate( stop, tripPattern, startTime, @@ -562,7 +562,7 @@ private Stream getRealtimeAddedPatternsAsStream( ) { return originalPattern .scheduledTripsAsStream() - .map(trip -> transitService.getNewTripPatternForModifiedTrip(trip.getId(), date)) + .map(trip -> transitService.findNewTripPatternForModifiedTrip(trip.getId(), date)) .filter(tripPattern -> tripPattern != null && tripPattern.isModifiedFromTripPatternWithEqualStops(originalPattern) ); diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/TripImpl.java b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/TripImpl.java index 956b35309e2..8eca58b69e0 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/TripImpl.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/TripImpl.java @@ -325,14 +325,14 @@ public DataFetcher> stoptimesForDate() { ? ServiceDateUtils.parseString(args.getGraphQLServiceDate()) : LocalDate.now(timeZone); - TripPattern tripPattern = transitService.getPatternForTrip(trip, serviceDate); + TripPattern tripPattern = transitService.findPattern(trip, serviceDate); // no matching pattern found if (tripPattern == null) { return List.of(); } Instant midnight = ServiceDateUtils.asStartOfService(serviceDate, timeZone).toInstant(); - Timetable timetable = transitService.getTimetableForTripPattern(tripPattern, serviceDate); + Timetable timetable = transitService.findTimetable(tripPattern, serviceDate); return TripTimeOnDate.fromTripTimes(timetable, trip, serviceDate, midnight); } catch (ParseException e) { return null; // Invalid date format @@ -397,7 +397,7 @@ private Route getRoute(DataFetchingEnvironment environment) { } private TripPattern getTripPattern(DataFetchingEnvironment environment) { - return getTransitService(environment).getPatternForTrip(environment.getSource()); + return getTransitService(environment).findPattern(environment.getSource()); } private TransitService getTransitService(DataFetchingEnvironment environment) { diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleParkingImpl.java b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleParkingImpl.java index 0b55beac689..56bc62e2004 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleParkingImpl.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleParkingImpl.java @@ -6,9 +6,9 @@ import org.opentripplanner.apis.gtfs.generated.GraphQLDataFetchers; import org.opentripplanner.framework.graphql.GraphQLUtils; import org.opentripplanner.model.calendar.openinghours.OHCalendar; -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.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingState; public class VehicleParkingImpl implements GraphQLDataFetchers.GraphQLVehicleParking { 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 718c5cf2d54..613cc2a32b8 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 @@ -48,11 +48,11 @@ import org.opentripplanner.routing.graphfinder.NearbyStop; 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.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingState; import org.opentripplanner.service.vehiclerental.model.RentalVehicleEntityCounts; import org.opentripplanner.service.vehiclerental.model.RentalVehicleType; import org.opentripplanner.service.vehiclerental.model.RentalVehicleTypeCount; diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml b/application/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml index bf6b010bf2c..59a2329a461 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml @@ -43,7 +43,7 @@ config: AlertCauseType: org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLAlertCauseType#GraphQLAlertCauseType AlertEffectType: org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLAlertEffectType#GraphQLAlertEffectType AlertSeverityLevelType: org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLAlertSeverityLevelType#GraphQLAlertSeverityLevelType - BikePark: org.opentripplanner.routing.vehicle_parking.VehicleParking#VehicleParking + BikePark: org.opentripplanner.service.vehicleparking.model.VehicleParking#VehicleParking BikeRentalStation: org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace#VehicleRentalPlace BikeRentalStationUris: org.opentripplanner.service.vehiclerental.model.VehicleRentalStationUris#VehicleRentalStationUris VehicleRentalStation: org.opentripplanner.service.vehiclerental.model.VehicleRentalStation#VehicleRentalStation @@ -55,7 +55,7 @@ config: BikesAllowed: org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLBikesAllowed#GraphQLBikesAllowed 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 + CarPark: org.opentripplanner.service.vehicleparking.model.VehicleParking#VehicleParking ContactInfo: org.opentripplanner.transit.model.organization.ContactInfo Cluster: Object Coordinates: org.locationtech.jts.geom.Coordinate#Coordinate @@ -104,9 +104,9 @@ config: Trip: org.opentripplanner.transit.model.timetable.Trip#Trip TripOccupancy: org.opentripplanner.apis.gtfs.model.TripOccupancy#TripOccupancy Unknown: org.opentripplanner.apis.gtfs.model.UnknownModel#UnknownModel - VehicleParking: org.opentripplanner.routing.vehicle_parking.VehicleParking#VehicleParking - VehicleParkingSpaces: org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces#VehicleParkingSpaces - VehicleParkingState: org.opentripplanner.routing.vehicle_parking.VehicleParkingState#VehicleParkingState + VehicleParking: org.opentripplanner.service.vehicleparking.model.VehicleParking#VehicleParking + VehicleParkingSpaces: org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces#VehicleParkingSpaces + VehicleParkingState: org.opentripplanner.service.vehicleparking.model.VehicleParkingState#VehicleParkingState VertexType: String SystemNotice: org.opentripplanner.model.SystemNotice#SystemNotice VehiclePosition: org.opentripplanner.service.realtimevehicles.model.RealtimeVehicle#RealtimeVehicle diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/support/filter/PatternByDateFilterUtil.java b/application/src/main/java/org/opentripplanner/apis/gtfs/support/filter/PatternByDateFilterUtil.java index f3c0d6d0352..c0640aec2b9 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/support/filter/PatternByDateFilterUtil.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/support/filter/PatternByDateFilterUtil.java @@ -16,7 +16,7 @@ public static PatternByServiceDatesFilter ofGraphQL( ) { return new PatternByServiceDatesFilter( new LocalDateRange(range.getGraphQLStart(), range.getGraphQLEnd()), - transitService::getPatternsForRoute, + transitService::findPatterns, trip -> transitService.getCalendarService().getServiceDatesForServiceId(trip.getServiceId()) ); } 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 2ffb9941bc6..922f9f5244b 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java @@ -114,6 +114,8 @@ import org.opentripplanner.routing.graphfinder.PlaceAtDistance; import org.opentripplanner.routing.graphfinder.PlaceType; import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; +import org.opentripplanner.transit.api.model.FilterValues; +import org.opentripplanner.transit.api.request.TripRequest; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.Route; @@ -467,13 +469,10 @@ private GraphQLSchema create() { } TransitService transitService = GqlUtil.getTransitService(env); return transitService - .getStations() + .listStations() .stream() .map(station -> - new MonoOrMultiModalStation( - station, - transitService.getMultiModalStationForStation(station) - ) + new MonoOrMultiModalStation(station, transitService.findMultiModalStation(station)) ) .collect(Collectors.toList()); }) @@ -697,7 +696,7 @@ private GraphQLSchema create() { boolean filterByInUse = TRUE.equals(environment.getArgument("filterByInUse")); boolean inUse = !GqlUtil .getTransitService(environment) - .getPatternsForStop(stop, true) + .findPatterns(stop, true) .isEmpty(); return !filterByInUse || inUse; }) @@ -965,7 +964,7 @@ private GraphQLSchema create() { if (placeAtDistance.place() instanceof StopLocation stop) { return !GqlUtil .getTransitService(environment) - .getPatternsForStop(stop, true) + .findPatterns(stop, true) .isEmpty(); } else { return true; @@ -1012,7 +1011,7 @@ private GraphQLSchema create() { .dataFetcher(environment -> { return GqlUtil .getTransitService(environment) - .getAgencyForId(TransitIdMapper.mapIDToDomain(environment.getArgument("id"))); + .getAgency(TransitIdMapper.mapIDToDomain(environment.getArgument("id"))); }) .build() ) @@ -1024,7 +1023,7 @@ private GraphQLSchema create() { .withDirective(TransmodelDirectives.TIMING_DATA) .type(new GraphQLNonNull(new GraphQLList(authorityType))) .dataFetcher(environment -> { - return new ArrayList<>(GqlUtil.getTransitService(environment).getAgencies()); + return new ArrayList<>(GqlUtil.getTransitService(environment).listAgencies()); }) .build() ) @@ -1045,7 +1044,7 @@ private GraphQLSchema create() { .dataFetcher(environment -> GqlUtil .getTransitService(environment) - .getOperatorForId(TransitIdMapper.mapIDToDomain(environment.getArgument("id"))) + .getOperator(TransitIdMapper.mapIDToDomain(environment.getArgument("id"))) ) .build() ) @@ -1057,7 +1056,7 @@ private GraphQLSchema create() { .withDirective(TransmodelDirectives.TIMING_DATA) .type(new GraphQLNonNull(new GraphQLList(operatorType))) .dataFetcher(environment -> { - return new ArrayList<>(GqlUtil.getTransitService(environment).getAllOperators()); + return new ArrayList<>(GqlUtil.getTransitService(environment).listOperators()); }) .build() ) @@ -1082,7 +1081,7 @@ private GraphQLSchema create() { } return GqlUtil .getTransitService(environment) - .getRouteForId(TransitIdMapper.mapIDToDomain(id)); + .getRoute(TransitIdMapper.mapIDToDomain(id)); }) .build() ) @@ -1154,11 +1153,11 @@ private GraphQLSchema create() { return ((List) environment.getArgument("ids")).stream() .map(TransitIdMapper::mapIDToDomain) .map(id -> { - return GqlUtil.getTransitService(environment).getRouteForId(id); + return GqlUtil.getTransitService(environment).getRoute(id); }) .collect(Collectors.toList()); } - Stream stream = GqlUtil.getTransitService(environment).getAllRoutes().stream(); + Stream stream = GqlUtil.getTransitService(environment).listRoutes().stream(); if ((boolean) environment.getArgument("flexibleOnly")) { Collection flexRoutes = GqlUtil @@ -1226,7 +1225,7 @@ private GraphQLSchema create() { .dataFetcher(environment -> GqlUtil .getTransitService(environment) - .getGroupOfRoutesForId(TransitIdMapper.mapIDToDomain(environment.getArgument("id"))) + .getGroupOfRoutes(TransitIdMapper.mapIDToDomain(environment.getArgument("id"))) ) .build() ) @@ -1236,7 +1235,7 @@ private GraphQLSchema create() { .name("groupsOfLines") .description("Get all groups of lines") .type(new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(groupOfLinesType)))) - .dataFetcher(environment -> GqlUtil.getTransitService(environment).getGroupsOfRoutes()) + .dataFetcher(environment -> GqlUtil.getTransitService(environment).listGroupsOfRoutes()) .build() ) .field( @@ -1256,7 +1255,7 @@ private GraphQLSchema create() { .dataFetcher(environment -> { return GqlUtil .getTransitService(environment) - .getTripForId(TransitIdMapper.mapIDToDomain(environment.getArgument("id"))); + .getTrip(TransitIdMapper.mapIDToDomain(environment.getArgument("id"))); }) .build() ) @@ -1264,14 +1263,14 @@ private GraphQLSchema create() { GraphQLFieldDefinition .newFieldDefinition() .name("serviceJourneys") - .description("Get all service journeys") + .description("Get all _service journeys_") .withDirective(TransmodelDirectives.TIMING_DATA) .type(new GraphQLNonNull(new GraphQLList(serviceJourneyType))) .argument( GraphQLArgument .newArgument() .name("lines") - .description("Set of ids of lines to fetch serviceJourneys for.") + .description("Set of ids of _lines_ to fetch _service journeys_ for.") .type(new GraphQLList(Scalars.GraphQLID)) .build() ) @@ -1279,7 +1278,7 @@ private GraphQLSchema create() { GraphQLArgument .newArgument() .name("privateCodes") - .description("Set of ids of private codes to fetch serviceJourneys for.") + .description("Set of ids of _private codes_ to fetch _service journeys_ for.") .type(new GraphQLList(Scalars.GraphQLString)) .build() ) @@ -1287,7 +1286,7 @@ private GraphQLSchema create() { GraphQLArgument .newArgument() .name("activeDates") - .description("Set of ids of active dates to fetch serviceJourneys for.") + .description("Set of _operating days_ to fetch _service journeys_ for.") .type(new GraphQLList(TransmodelScalars.DATE_SCALAR)) .build() ) @@ -1295,45 +1294,37 @@ private GraphQLSchema create() { GraphQLArgument .newArgument() .name("authorities") - .description("Set of ids of authorities to fetch serviceJourneys for.") + .description("Set of ids of _authorities_ to fetch _service journeys_ for.") .type(new GraphQLList(Scalars.GraphQLString)) .build() ) .dataFetcher(environment -> { - List lineIds = mapIDsToDomainNullSafe( - environment.getArgumentOrDefault("lines", List.of()) + var authorities = FilterValues.ofEmptyIsEverything( + "authorities", + mapIDsToDomainNullSafe(environment.getArgument("authorities")) + ); + var lineIds = FilterValues.ofEmptyIsEverything( + "lines", + mapIDsToDomainNullSafe(environment.getArgument("lines")) ); - List privateCodes = environment.getArgumentOrDefault("privateCodes", List.of()); - List activeServiceDates = environment.getArgumentOrDefault( + var privateCodes = FilterValues.ofEmptyIsEverything( + "privateCodes", + environment.>getArgument("privateCodes") + ); + var activeServiceDates = FilterValues.ofEmptyIsEverything( "activeDates", - List.of() + environment.>getArgument("activeDates") ); - // TODO OTP2 - Use FeedScoped ID - List authorities = environment.getArgumentOrDefault("authorities", List.of()); - TransitService transitService = GqlUtil.getTransitService(environment); - return transitService - .getAllTrips() - .stream() - .filter(t -> lineIds.isEmpty() || lineIds.contains(t.getRoute().getId())) - .filter(t -> - privateCodes.isEmpty() || privateCodes.contains(t.getNetexInternalPlanningCode()) - ) - .filter(t -> - authorities.isEmpty() || - authorities.contains(t.getRoute().getAgency().getId().getId()) - ) - .filter(t -> - ( - activeServiceDates.isEmpty() || - transitService - .getCalendarService() - .getServiceDatesForServiceId(t.getServiceId()) - .stream() - .anyMatch(activeServiceDates::contains) - ) - ) - .collect(Collectors.toList()); + TripRequest tripRequest = TripRequest + .of() + .withAgencies(authorities) + .withRoutes(lineIds) + .withNetexInternalPlanningCodes(privateCodes) + .withServiceDates(activeServiceDates) + .build(); + + return GqlUtil.getTransitService(environment).getTrips(tripRequest); }) .build() ) @@ -1450,7 +1441,8 @@ private GraphQLSchema create() { var bikeParkId = TransitIdMapper.mapIDToDomain(environment.getArgument("id")); return GqlUtil .getVehicleParkingService(environment) - .getBikeParks() + .listBikeParks() + .stream() .filter(bikePark -> bikePark.getId().equals(bikeParkId)) .findFirst() .orElse(null); @@ -1467,7 +1459,8 @@ private GraphQLSchema create() { .dataFetcher(environment -> GqlUtil .getVehicleParkingService(environment) - .getBikeParks() + .listBikeParks() + .stream() .collect(Collectors.toCollection(ArrayList::new)) ) .build() diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/framework/AuthorityType.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/framework/AuthorityType.java index baae947e345..d18b4da554f 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/framework/AuthorityType.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/framework/AuthorityType.java @@ -68,7 +68,7 @@ public static GraphQLObjectType create( .type(new GraphQLNonNull(new GraphQLList(lineType))) .dataFetcher(environment -> getTransitService(environment) - .getAllRoutes() + .listRoutes() .stream() .filter(route -> Objects.equals(route.getAgency(), environment.getSource())) .collect(Collectors.toList()) diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/framework/OperatorType.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/framework/OperatorType.java index 8f55bea52ab..de58643f5dc 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/framework/OperatorType.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/framework/OperatorType.java @@ -52,7 +52,7 @@ public static GraphQLObjectType create( .dataFetcher(environment -> GqlUtil .getTransitService(environment) - .getAllRoutes() + .listRoutes() .stream() .filter(route -> Objects.equals(route.getOperator(), environment.getSource())) .collect(Collectors.toList()) @@ -68,7 +68,7 @@ public static GraphQLObjectType create( .dataFetcher(environment -> GqlUtil .getTransitService(environment) - .getAllTrips() + .listTrips() .stream() .filter(trip -> Objects.equals(trip.getOperator(), environment.getSource())) .collect(Collectors.toList()) diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/network/GroupOfLinesType.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/network/GroupOfLinesType.java index 0339269dbd8..6e52c6662a4 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/network/GroupOfLinesType.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/network/GroupOfLinesType.java @@ -71,7 +71,7 @@ public static GraphQLObjectType create() { .description("All lines part of this group of lines") .type(new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(LineType.REF)))) .dataFetcher(env -> - GqlUtil.getTransitService(env).getRoutesForGroupOfRoutes(env.getSource()) + GqlUtil.getTransitService(env).findRoutes((GroupOfRoutes) env.getSource()) ) .build() ) diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/network/JourneyPatternType.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/network/JourneyPatternType.java index 4ed3871ff8c..dfde7427e5f 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/network/JourneyPatternType.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/network/JourneyPatternType.java @@ -166,7 +166,7 @@ public static GraphQLObjectType create( .type(new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(noticeType)))) .dataFetcher(environment -> { TripPattern tripPattern = environment.getSource(); - return GqlUtil.getTransitService(environment).getNoticesByEntity(tripPattern); + return GqlUtil.getTransitService(environment).findNotices(tripPattern); }) .build() ) diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/network/LineType.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/network/LineType.java index 32ea357a0aa..9aa129b2abd 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/network/LineType.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/network/LineType.java @@ -46,7 +46,7 @@ public static GraphQLObjectType create( .newFieldDefinition() .name("id") .type(new GraphQLNonNull(Scalars.GraphQLID)) - .dataFetcher(environment -> TransitIdMapper.mapEntityIDToApi(environment.getSource())) + .dataFetcher(environment -> TransitIdMapper.mapEntityIDToApi(getSource(environment))) .build() ) .field( @@ -54,7 +54,7 @@ public static GraphQLObjectType create( .newFieldDefinition() .name("authority") .type(authorityType) - .dataFetcher(environment -> (((Route) environment.getSource()).getAgency())) + .dataFetcher(environment -> (getSource(environment).getAgency())) .build() ) .field( @@ -62,7 +62,7 @@ public static GraphQLObjectType create( .newFieldDefinition() .name("operator") .type(operatorType) - .dataFetcher(environment -> (((Route) environment.getSource()).getOperator())) + .dataFetcher(environment -> ((getSource(environment)).getOperator())) .build() ) .field( @@ -70,7 +70,7 @@ public static GraphQLObjectType create( .newFieldDefinition() .name("branding") .type(brandingType) - .dataFetcher(environment -> ((Route) environment.getSource()).getBranding()) + .dataFetcher(environment -> (getSource(environment)).getBranding()) ) .field( GraphQLFieldDefinition @@ -80,7 +80,7 @@ public static GraphQLObjectType create( .description( "Publicly announced code for line, differentiating it from other lines for the same operator." ) - .dataFetcher(environment -> (((Route) environment.getSource()).getShortName())) + .dataFetcher(environment -> ((getSource(environment)).getShortName())) .build() ) .field( @@ -88,7 +88,7 @@ public static GraphQLObjectType create( .newFieldDefinition() .name("name") .type(Scalars.GraphQLString) - .dataFetcher(environment -> ((Route) environment.getSource()).getLongName()) + .dataFetcher(environment -> (getSource(environment)).getLongName()) .build() ) .field( @@ -96,7 +96,7 @@ public static GraphQLObjectType create( .newFieldDefinition() .name("transportMode") .type(EnumTypes.TRANSPORT_MODE) - .dataFetcher(environment -> ((Route) environment.getSource()).getMode()) + .dataFetcher(environment -> (getSource(environment)).getMode()) .build() ) .field( @@ -105,9 +105,7 @@ public static GraphQLObjectType create( .name("transportSubmode") .type(EnumTypes.TRANSPORT_SUBMODE) .dataFetcher(environment -> - TransmodelTransportSubmode.fromValue( - ((Route) environment.getSource()).getNetexSubmode() - ) + TransmodelTransportSubmode.fromValue((getSource(environment)).getNetexSubmode()) ) .build() ) @@ -116,7 +114,7 @@ public static GraphQLObjectType create( .newFieldDefinition() .name("description") .type(Scalars.GraphQLString) - .dataFetcher(environment -> ((Route) environment.getSource()).getDescription()) + .dataFetcher(environment -> (getSource(environment)).getDescription()) .build() ) .field( @@ -143,7 +141,7 @@ public static GraphQLObjectType create( .name("journeyPatterns") .type(new GraphQLList(journeyPatternType)) .dataFetcher(environment -> - GqlUtil.getTransitService(environment).getPatternsForRoute(environment.getSource()) + GqlUtil.getTransitService(environment).findPatterns(getSource(environment)) ) .build() ) @@ -155,7 +153,7 @@ public static GraphQLObjectType create( .dataFetcher(environment -> GqlUtil .getTransitService(environment) - .getPatternsForRoute(environment.getSource()) + .findPatterns(getSource(environment)) .stream() .map(TripPattern::getStops) .flatMap(Collection::stream) @@ -172,7 +170,7 @@ public static GraphQLObjectType create( .dataFetcher(environment -> GqlUtil .getTransitService(environment) - .getPatternsForRoute(environment.getSource()) + .findPatterns(getSource(environment)) .stream() .flatMap(TripPattern::scheduledTripsAsStream) .distinct() @@ -186,8 +184,8 @@ public static GraphQLObjectType create( .name("notices") .type(new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(noticeType)))) .dataFetcher(environment -> { - Route route = environment.getSource(); - return GqlUtil.getTransitService(environment).getNoticesByEntity(route); + Route route = getSource(environment); + return GqlUtil.getTransitService(environment).findNotices(route); }) .build() ) @@ -201,7 +199,7 @@ public static GraphQLObjectType create( GqlUtil .getTransitService(environment) .getTransitAlertService() - .getRouteAlerts(((Route) environment.getSource()).getId()) + .getRouteAlerts((getSource(environment)).getId()) ) .build() ) @@ -211,7 +209,7 @@ public static GraphQLObjectType create( .name("flexibleLineType") .description("Type of flexible line, or null if line is not flexible.") .type(Scalars.GraphQLString) - .dataFetcher(environment -> ((Route) environment.getSource()).getFlexibleLineType()) + .dataFetcher(environment -> (getSource(environment)).getFlexibleLineType()) .build() ) .field( @@ -232,9 +230,13 @@ public static GraphQLObjectType create( .name("groupOfLines") .description("Groups of lines that line is a part of.") .type(new GraphQLNonNull(new GraphQLList(groupOfLinesType))) - .dataFetcher(environment -> ((Route) environment.getSource()).getGroupsOfRoutes()) + .dataFetcher(environment -> (getSource(environment)).getGroupsOfRoutes()) .build() ) .build(); } + + private static Route getSource(DataFetchingEnvironment environment) { + return environment.getSource(); + } } diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/siri/et/EstimatedCallType.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/siri/et/EstimatedCallType.java index a0a904a0ae0..593782af9d8 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/siri/et/EstimatedCallType.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/siri/et/EstimatedCallType.java @@ -295,7 +295,7 @@ public static GraphQLObjectType create( .dataFetcher(environment -> GqlUtil .getTransitService(environment) - .getTripOnServiceDateForTripAndDay( + .getTripOnServiceDate( new TripIdAndServiceDate( environment.getSource().getTrip().getId(), environment.getSource().getServiceDay() @@ -321,7 +321,7 @@ public static GraphQLObjectType create( TripTimeOnDate tripTimeOnDate = environment.getSource(); return GqlUtil .getTransitService(environment) - .getNoticesByEntity(tripTimeOnDate.getStopTimeKey()); + .findNotices(tripTimeOnDate.getStopTimeKey()); }) .build() ) diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/siri/sx/AffectsType.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/siri/sx/AffectsType.java index 58bf9d3f958..e8cbec6ade0 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/siri/sx/AffectsType.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/siri/sx/AffectsType.java @@ -72,7 +72,7 @@ public static GraphQLOutputType create( .type(lineType) .dataFetcher(environment -> { var routeId = environment.getSource().routeId(); - return GqlUtil.getTransitService(environment).getRouteForId(routeId); + return GqlUtil.getTransitService(environment).getRoute(routeId); }) .build() ) @@ -88,7 +88,7 @@ public static GraphQLOutputType create( .type(serviceJourneyType) .dataFetcher(environment -> { var tripId = environment.getSource().tripId(); - return GqlUtil.getTransitService(environment).getTripForId(tripId); + return GqlUtil.getTransitService(environment).getTrip(tripId); }) .build() ) @@ -109,7 +109,7 @@ public static GraphQLOutputType create( EntitySelector.Trip entitySelector = environment.getSource(); return GqlUtil .getTransitService(environment) - .getTripOnServiceDateForTripAndDay( + .getTripOnServiceDate( new TripIdAndServiceDate(entitySelector.tripId(), entitySelector.serviceDate()) ); }) @@ -149,7 +149,7 @@ public static GraphQLOutputType create( .type(lineType) .dataFetcher(environment -> { var routeId = environment.getSource().routeId(); - return GqlUtil.getTransitService(environment).getRouteForId(routeId); + return GqlUtil.getTransitService(environment).getRoute(routeId); }) .build() ) @@ -196,7 +196,7 @@ public static GraphQLOutputType create( .type(serviceJourneyType) .dataFetcher(environment -> { var tripId = environment.getSource().tripId(); - return GqlUtil.getTransitService(environment).getTripForId(tripId); + return GqlUtil.getTransitService(environment).getTrip(tripId); }) .build() ) @@ -219,7 +219,7 @@ public static GraphQLOutputType create( EntitySelector.StopAndTrip entitySelector = environment.getSource(); return GqlUtil .getTransitService(environment) - .getTripOnServiceDateForTripAndDay( + .getTripOnServiceDate( new TripIdAndServiceDate(entitySelector.tripId(), entitySelector.serviceDate()) ); }) diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/siri/sx/PtSituationElementType.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/siri/sx/PtSituationElementType.java index 4fd9505b73e..4d8e4ed6390 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/siri/sx/PtSituationElementType.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/siri/sx/PtSituationElementType.java @@ -69,7 +69,7 @@ public static GraphQLObjectType create( .dataFetcher(environment -> GqlUtil .getTransitService(environment) - .getAgencyForId( + .getAgency( ((TransitAlert) environment.getSource()).entities() .stream() .filter(EntitySelector.Agency.class::isInstance) @@ -94,7 +94,7 @@ public static GraphQLObjectType create( .filter(EntitySelector.Route.class::isInstance) .map(EntitySelector.Route.class::cast) .map(EntitySelector.Route::routeId) - .map(transitService::getRouteForId) + .map(transitService::getRoute) .collect(Collectors.toList()); }) .build() @@ -112,7 +112,7 @@ public static GraphQLObjectType create( .filter(EntitySelector.Trip.class::isInstance) .map(EntitySelector.Trip.class::cast) .map(EntitySelector.Trip::tripId) - .map(transitService::getTripForId) + .map(transitService::getTrip) .collect(Collectors.toList()); }) .build() @@ -149,13 +149,10 @@ public static GraphQLObjectType create( .filter(EntitySelector.Stop.class::isInstance) .map(EntitySelector.Stop.class::cast) .map(EntitySelector.Stop::stopId) - .map(transitService::getStationById) + .map(transitService::getStation) .filter(Objects::nonNull) .map(station -> - new MonoOrMultiModalStation( - station, - transitService.getMultiModalStationForStation(station) - ) + new MonoOrMultiModalStation(station, transitService.findMultiModalStation(station)) ) .toList(); }) @@ -361,7 +358,7 @@ public static GraphQLObjectType create( } return GqlUtil .getTransitService(environment) - .getAgencies() + .listAgencies() .stream() .filter(agency -> agency.getId().getFeedId().equals(feedId)) .filter(agency -> agency.getId().getId().startsWith(codespace)) diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/stop/BikeParkType.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/stop/BikeParkType.java index 470111513bf..8a9c965f4a2 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/stop/BikeParkType.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/stop/BikeParkType.java @@ -6,7 +6,7 @@ import graphql.schema.GraphQLNonNull; import graphql.schema.GraphQLObjectType; import org.opentripplanner.apis.transmodel.mapping.TransitIdMapper; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; public class BikeParkType { diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/stop/PlaceAtDistanceType.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/stop/PlaceAtDistanceType.java index 809164e9cd2..882c1491bb7 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/stop/PlaceAtDistanceType.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/stop/PlaceAtDistanceType.java @@ -119,7 +119,7 @@ private static Stream getStopPlaces( List res = new ArrayList<>(); - MultiModalStation multiModalStation = transitService.getMultiModalStationForStation(stopPlace); + MultiModalStation multiModalStation = transitService.findMultiModalStation(stopPlace); if ( "child".equals(multiModalMode) || "all".equals(multiModalMode) || multiModalStation == null diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/stop/PlaceInterfaceType.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/stop/PlaceInterfaceType.java index 0b6238c119d..f05113f9f74 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/stop/PlaceInterfaceType.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/stop/PlaceInterfaceType.java @@ -5,7 +5,7 @@ import graphql.schema.GraphQLInterfaceType; import graphql.schema.GraphQLNonNull; import graphql.schema.GraphQLSchema; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; import org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle; import org.opentripplanner.transit.model.site.RegularStop; diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/stop/QuayType.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/stop/QuayType.java index e12775936bd..bea8f5de6bf 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/stop/QuayType.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/stop/QuayType.java @@ -124,7 +124,7 @@ public static GraphQLObjectType create( if (station != null) { return new MonoOrMultiModalStation( station, - GqlUtil.getTransitService(env).getMultiModalStationForStation(station) + GqlUtil.getTransitService(env).findMultiModalStation(station) ); } else { return null; @@ -177,7 +177,7 @@ public static GraphQLObjectType create( .dataFetcher(env -> GqlUtil .getTransitService(env) - .getPatternsForStop(env.getSource(), true) + .findPatterns(env.getSource(), true) .stream() .map(TripPattern::getRoute) .distinct() @@ -192,9 +192,7 @@ public static GraphQLObjectType create( .withDirective(TransmodelDirectives.TIMING_DATA) .description("List of journey patterns servicing this quay") .type(new GraphQLNonNull(new GraphQLList(journeyPatternType))) - .dataFetcher(env -> - GqlUtil.getTransitService(env).getPatternsForStop(env.getSource(), true) - ) + .dataFetcher(env -> GqlUtil.getTransitService(env).findPatterns(env.getSource(), true)) .build() ) .field( diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/stop/StopPlaceType.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/stop/StopPlaceType.java index 8dbc6291136..fa755e8c6f7 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/stop/StopPlaceType.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/stop/StopPlaceType.java @@ -250,7 +250,7 @@ public static GraphQLObjectType create( .filter(stop -> { return !GqlUtil .getTransitService(environment) - .getPatternsForStop(stop, true) + .findPatterns(stop, true) .isEmpty(); }) .collect(Collectors.toList()); @@ -449,7 +449,7 @@ public static Stream getTripTimesForStop( ) { TransitService transitService = GqlUtil.getTransitService(environment); - List stopTimesInPatterns = transitService.stopTimesForStop( + List stopTimesInPatterns = transitService.findStopTimesInPattern( stop, startTimeSeconds, timeRange, @@ -514,13 +514,10 @@ public static MonoOrMultiModalStation fetchStopPlaceById( TransitService transitService = GqlUtil.getTransitService(environment); - Station station = transitService.getStationById(id); + Station station = transitService.getStation(id); if (station != null) { - return new MonoOrMultiModalStation( - station, - transitService.getMultiModalStationForStation(station) - ); + return new MonoOrMultiModalStation(station, transitService.findMultiModalStation(station)); } MultiModalStation multiModalStation = transitService.getMultiModalStation(id); @@ -568,7 +565,7 @@ public static Collection fetchStopPlaces( if ("child".equals(multiModalMode)) { return stations .map(s -> { - MultiModalStation parent = transitService.getMultiModalStationForStation(s); + MultiModalStation parent = transitService.findMultiModalStation(s); return new MonoOrMultiModalStation(s, parent); }) .collect(Collectors.toList()); @@ -577,7 +574,7 @@ public static Collection fetchStopPlaces( else if ("all".equals(multiModalMode)) { Set result = new HashSet<>(); stations.forEach(it -> { - MultiModalStation p = transitService.getMultiModalStationForStation(it); + MultiModalStation p = transitService.findMultiModalStation(it); result.add(new MonoOrMultiModalStation(it, p)); if (p != null) { result.add(new MonoOrMultiModalStation(p)); @@ -590,7 +587,7 @@ else if ("all".equals(multiModalMode)) { else if ("parent".equals(multiModalMode)) { Set result = new HashSet<>(); stations.forEach(it -> { - MultiModalStation p = transitService.getMultiModalStationForStation(it); + MultiModalStation p = transitService.findMultiModalStation(it); if (p != null) { result.add(new MonoOrMultiModalStation(p)); } else { @@ -608,7 +605,7 @@ public static boolean isStopPlaceInUse( TransitService transitService ) { for (var quay : station.getChildStops()) { - if (!transitService.getPatternsForStop(quay, true).isEmpty()) { + if (!transitService.findPatterns(quay, true).isEmpty()) { return true; } } diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/timetable/DatedServiceJourneyQuery.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/timetable/DatedServiceJourneyQuery.java index aef659901e4..2d381140b73 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/timetable/DatedServiceJourneyQuery.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/timetable/DatedServiceJourneyQuery.java @@ -14,6 +14,7 @@ import org.opentripplanner.apis.transmodel.model.EnumTypes; import org.opentripplanner.apis.transmodel.model.framework.TransmodelScalars; import org.opentripplanner.apis.transmodel.support.GqlUtil; +import org.opentripplanner.transit.api.model.FilterValues; import org.opentripplanner.transit.api.request.TripOnServiceDateRequest; import org.opentripplanner.transit.api.request.TripOnServiceDateRequestBuilder; import org.opentripplanner.transit.model.framework.FeedScopedId; @@ -34,7 +35,7 @@ public static GraphQLFieldDefinition createGetById(GraphQLOutputType datedServic .dataFetcher(environment -> { FeedScopedId id = TransitIdMapper.mapIDToDomain(environment.getArgument("id")); - return GqlUtil.getTransitService(environment).getTripOnServiceDateById(id); + return GqlUtil.getTransitService(environment).getTripOnServiceDate(id); }) .build(); } @@ -94,33 +95,53 @@ public static GraphQLFieldDefinition createQuery(GraphQLOutputType datedServiceJ ) .dataFetcher(environment -> { // The null safety checks are not needed here - they are taken care of by the request - // object, but reuse let's use the mapping method and leave this improvement until all APIs + // object, but let's use the mapping method and leave this improvement until all APIs // are pushing this check into the domain request. - var authorities = mapIDsToDomainNullSafe(environment.getArgument("authorities")); - var lines = mapIDsToDomainNullSafe(environment.getArgument("lines")); - var serviceJourneys = mapIDsToDomainNullSafe(environment.getArgument("serviceJourneys")); - var replacementFor = mapIDsToDomainNullSafe(environment.getArgument("replacementFor")); - var privateCodes = environment.>getArgument("privateCodes"); - var operatingDays = environment.>getArgument("operatingDays"); - var alterations = environment.>getArgument("alterations"); + var authorities = FilterValues.ofEmptyIsEverything( + "authorities", + mapIDsToDomainNullSafe(environment.getArgument("authorities")) + ); + var lines = FilterValues.ofEmptyIsEverything( + "lines", + mapIDsToDomainNullSafe(environment.getArgument("lines")) + ); + var serviceJourneys = FilterValues.ofEmptyIsEverything( + "serviceJourneys", + mapIDsToDomainNullSafe(environment.getArgument("serviceJourneys")) + ); + var replacementFor = FilterValues.ofEmptyIsEverything( + "replacementFor", + mapIDsToDomainNullSafe(environment.getArgument("replacementFor")) + ); + var privateCodes = FilterValues.ofEmptyIsEverything( + "privateCodes", + environment.>getArgument("privateCodes") + ); + var operatingDays = FilterValues.ofRequired( + "operatingDays", + environment.>getArgument("operatingDays") + ); + var alterations = FilterValues.ofEmptyIsEverything( + "alterations", + environment.>getArgument("alterations") + ); TripOnServiceDateRequestBuilder tripOnServiceDateRequestBuilder = TripOnServiceDateRequest - .of() - .withOperatingDays(operatingDays) - .withAuthorities(authorities) - .withLines(lines) + .of(operatingDays) + .withAgencies(authorities) + .withRoutes(lines) .withServiceJourneys(serviceJourneys) .withReplacementFor(replacementFor); tripOnServiceDateRequestBuilder = - tripOnServiceDateRequestBuilder.withPrivateCodes(privateCodes); + tripOnServiceDateRequestBuilder.withNetexInternalPlanningCodes(privateCodes); tripOnServiceDateRequestBuilder = tripOnServiceDateRequestBuilder.withAlterations(alterations); return GqlUtil .getTransitService(environment) - .getTripOnServiceDates(tripOnServiceDateRequestBuilder.build()); + .findTripsOnServiceDate(tripOnServiceDateRequestBuilder.build()); }) .build(); } diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/timetable/DatedServiceJourneyType.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/timetable/DatedServiceJourneyType.java index 1ad05118e11..7c550dc9b85 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/timetable/DatedServiceJourneyType.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/timetable/DatedServiceJourneyType.java @@ -166,7 +166,7 @@ public static GraphQLObjectType create( private static TripPattern tripPattern(DataFetchingEnvironment env) { TransitService transitService = GqlUtil.getTransitService(env); TripOnServiceDate tripOnServiceDate = tripOnServiceDate(env); - return transitService.getPatternForTrip( + return transitService.findPattern( tripOnServiceDate.getTrip(), tripOnServiceDate.getServiceDate() ); diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/timetable/ServiceJourneyType.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/timetable/ServiceJourneyType.java index 20a290863df..5d4241c7767 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/timetable/ServiceJourneyType.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/timetable/ServiceJourneyType.java @@ -168,7 +168,7 @@ public static GraphQLObjectType create( "ServiceJourney is not included in the scheduled data, null is returned." ) .type(journeyPatternType) - .dataFetcher(env -> GqlUtil.getTransitService(env).getPatternForTrip(trip(env))) + .dataFetcher(env -> GqlUtil.getTransitService(env).findPattern(trip(env))) .build() ) .field( @@ -201,7 +201,7 @@ public static GraphQLObjectType create( Integer last = environment.getArgument("last"); TransitService transitService = GqlUtil.getTransitService(environment); - TripPattern tripPattern = transitService.getPatternForTrip(trip(environment)); + TripPattern tripPattern = transitService.findPattern(trip(environment)); if (tripPattern == null) { return List.of(); @@ -237,7 +237,7 @@ public static GraphQLObjectType create( ) .dataFetcher(env -> { Trip trip = trip(env); - TripPattern tripPattern = GqlUtil.getTransitService(env).getPatternForTrip(trip); + TripPattern tripPattern = GqlUtil.getTransitService(env).findPattern(trip); if (tripPattern == null) { return List.of(); } @@ -288,7 +288,7 @@ public static GraphQLObjectType create( .dataFetcher(environment -> { TripPattern tripPattern = GqlUtil .getTransitService(environment) - .getPatternForTrip(trip(environment)); + .findPattern(trip(environment)); if (tripPattern == null) { return null; } @@ -307,7 +307,7 @@ public static GraphQLObjectType create( .newFieldDefinition() .name("notices") .type(new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(noticeType)))) - .dataFetcher(env -> GqlUtil.getTransitService(env).getNoticesByEntity(trip(env))) + .dataFetcher(env -> GqlUtil.getTransitService(env).findNotices(trip(env))) .build() ) .field( diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/model/timetable/TimetabledPassingTimeType.java b/application/src/main/java/org/opentripplanner/apis/transmodel/model/timetable/TimetabledPassingTimeType.java index 0f4a40f0750..d7b59790f8e 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/model/timetable/TimetabledPassingTimeType.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/model/timetable/TimetabledPassingTimeType.java @@ -170,7 +170,7 @@ public static GraphQLObjectType create( TripTimeOnDate tripTimeOnDate = environment.getSource(); return GqlUtil .getTransitService(environment) - .getNoticesByEntity(tripTimeOnDate.getStopTimeKey()); + .findNotices(tripTimeOnDate.getStopTimeKey()); }) .build() ) diff --git a/application/src/main/java/org/opentripplanner/apis/transmodel/support/GqlUtil.java b/application/src/main/java/org/opentripplanner/apis/transmodel/support/GqlUtil.java index 6b9abc75b05..8e34470ed6a 100644 --- a/application/src/main/java/org/opentripplanner/apis/transmodel/support/GqlUtil.java +++ b/application/src/main/java/org/opentripplanner/apis/transmodel/support/GqlUtil.java @@ -12,7 +12,7 @@ import org.opentripplanner.apis.transmodel.mapping.TransitIdMapper; import org.opentripplanner.framework.graphql.GraphQLUtils; import org.opentripplanner.routing.graphfinder.GraphFinder; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingService; +import org.opentripplanner.service.vehicleparking.VehicleParkingService; import org.opentripplanner.service.vehiclerental.VehicleRentalService; import org.opentripplanner.transit.service.TransitService; @@ -38,8 +38,7 @@ public static VehicleParkingService getVehicleParkingService( DataFetchingEnvironment environment ) { return ((TransmodelRequestContext) environment.getContext()).getServerContext() - .graph() - .getVehicleParkingService(); + .vehicleParkingService(); } public static GraphFinder getGraphFinder(DataFetchingEnvironment environment) { diff --git a/application/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java b/application/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java index 26863157353..d19c25a1f47 100644 --- a/application/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java +++ b/application/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java @@ -166,7 +166,7 @@ private String tileJsonUrl(String base, List> layers) private List feedInfos() { return serverContext .transitService() - .getFeedIds() + .listFeedIds() .stream() .map(serverContext.transitService()::getFeedInfo) .filter(Predicate.not(Objects::isNull)) 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 bf3447391bd..0b071b64728 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/GraphBuilder.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/GraphBuilder.java @@ -18,6 +18,7 @@ import org.opentripplanner.graph_builder.model.GraphBuilderModule; import org.opentripplanner.graph_builder.module.configure.DaggerGraphBuilderFactory; import org.opentripplanner.routing.graph.Graph; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; import org.opentripplanner.service.worldenvelope.WorldEnvelopeRepository; import org.opentripplanner.standalone.config.BuildConfig; import org.opentripplanner.street.model.StreetLimitationParameters; @@ -63,6 +64,7 @@ public static GraphBuilder create( Graph graph, TimetableRepository timetableRepository, WorldEnvelopeRepository worldEnvelopeRepository, + VehicleParkingRepository vehicleParkingService, @Nullable EmissionsDataModel emissionsDataModel, @Nullable StopConsolidationRepository stopConsolidationRepository, StreetLimitationParameters streetLimitationParameters, @@ -82,6 +84,7 @@ public static GraphBuilder create( .graph(graph) .timetableRepository(timetableRepository) .worldEnvelopeRepository(worldEnvelopeRepository) + .vehicleParkingRepository(vehicleParkingService) .stopConsolidationRepository(stopConsolidationRepository) .streetLimitationParameters(streetLimitationParameters) .dataSources(dataSources) diff --git a/application/src/main/java/org/opentripplanner/graph_builder/issues/ParkAndRideEntranceRemoved.java b/application/src/main/java/org/opentripplanner/graph_builder/issues/ParkAndRideEntranceRemoved.java index 122f99ba488..0170d554358 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/issues/ParkAndRideEntranceRemoved.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/issues/ParkAndRideEntranceRemoved.java @@ -3,7 +3,7 @@ import org.locationtech.jts.geom.Geometry; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.graph_builder.issue.api.DataImportIssue; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingEntrance; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingEntrance; public record ParkAndRideEntranceRemoved(VehicleParkingEntrance vehicleParkingEntrance) implements DataImportIssue { 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 98b2287542e..83a6f282204 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 @@ -11,8 +11,9 @@ import org.opentripplanner.graph_builder.model.GraphBuilderModule; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.routing.linking.LinkingDirection; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingHelper; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingHelper; import org.opentripplanner.street.model.edge.Edge; import org.opentripplanner.street.model.edge.StreetStationCentroidLink; import org.opentripplanner.street.model.edge.StreetTransitEntranceLink; @@ -27,7 +28,6 @@ import org.opentripplanner.street.model.vertex.Vertex; 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; @@ -49,17 +49,20 @@ 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 VehicleParkingRepository parkingRepository; private final TimetableRepository timetableRepository; private final DataImportIssueStore issueStore; private final Boolean addExtraEdgesToAreas; public StreetLinkerModule( Graph graph, + VehicleParkingRepository parkingRepository, TimetableRepository timetableRepository, DataImportIssueStore issueStore, boolean addExtraEdgesToAreas ) { this.graph = graph; + this.parkingRepository = parkingRepository; this.timetableRepository = timetableRepository; this.issueStore = issueStore; this.addExtraEdgesToAreas = addExtraEdgesToAreas; @@ -311,8 +314,7 @@ private void linkVehicleParks(Graph graph, DataImportIssueStore issueStore) { } } if (!vehicleParkingToRemove.isEmpty()) { - var vehicleParkingService = graph.getVehicleParkingService(); - vehicleParkingService.updateVehicleParking(List.of(), vehicleParkingToRemove); + parkingRepository.updateVehicleParking(List.of(), vehicleParkingToRemove); } } 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 d0d359cea3e..d4d00fdc2a0 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 @@ -30,6 +30,7 @@ import org.opentripplanner.gtfs.graphbuilder.GtfsModule; import org.opentripplanner.netex.NetexModule; import org.opentripplanner.routing.graph.Graph; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; import org.opentripplanner.service.worldenvelope.WorldEnvelopeRepository; import org.opentripplanner.standalone.config.BuildConfig; import org.opentripplanner.street.model.StreetLimitationParameters; @@ -87,6 +88,9 @@ Builder stopConsolidationRepository( @Nullable StopConsolidationRepository stopConsolidationRepository ); + @BindsInstance + Builder vehicleParkingRepository(VehicleParkingRepository parkingRepository); + @BindsInstance Builder streetLimitationParameters(StreetLimitationParameters streetLimitationParameters); 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 080d69c571e..5371142d612 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 @@ -43,6 +43,7 @@ import org.opentripplanner.osm.OsmProvider; import org.opentripplanner.routing.api.request.preference.WalkPreferences; import org.opentripplanner.routing.graph.Graph; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; import org.opentripplanner.standalone.config.BuildConfig; import org.opentripplanner.street.model.StreetLimitationParameters; import org.opentripplanner.transit.service.TimetableRepository; @@ -59,6 +60,7 @@ static OsmModule provideOsmModule( GraphBuilderDataSources dataSources, BuildConfig config, Graph graph, + VehicleParkingRepository parkingService, DataImportIssueStore issueStore, StreetLimitationParameters streetLimitationParameters ) { @@ -76,7 +78,7 @@ static OsmModule provideOsmModule( } return OsmModule - .of(providers, graph) + .of(providers, graph, parkingService) .withEdgeNamer(config.edgeNamer) .withAreaVisibility(config.areaVisibility) .withPlatformEntriesLinking(config.platformEntriesLinking) @@ -139,12 +141,14 @@ static NetexModule provideNetexModule( BuildConfig config, Graph graph, TimetableRepository timetableRepository, + VehicleParkingRepository parkingService, DataImportIssueStore issueStore ) { return new NetexConfigure(config) .createNetexModule( dataSources.getNetexConfiguredDatasource(), timetableRepository, + parkingService, graph, issueStore ); @@ -155,10 +159,17 @@ static NetexModule provideNetexModule( static StreetLinkerModule provideStreetLinkerModule( BuildConfig config, Graph graph, + VehicleParkingRepository parkingRepository, TimetableRepository timetableRepository, DataImportIssueStore issueStore ) { - return new StreetLinkerModule(graph, timetableRepository, issueStore, config.areaVisibility); + return new StreetLinkerModule( + graph, + parkingRepository, + timetableRepository, + issueStore, + config.areaVisibility + ); } @Provides @@ -166,6 +177,7 @@ static StreetLinkerModule provideStreetLinkerModule( static PruneIslands providePruneIslands( BuildConfig config, Graph graph, + VehicleParkingRepository parkingRepository, TimetableRepository timetableRepository, DataImportIssueStore issueStore ) { @@ -173,7 +185,13 @@ static PruneIslands providePruneIslands( graph, timetableRepository, issueStore, - new StreetLinkerModule(graph, timetableRepository, issueStore, config.areaVisibility) + new StreetLinkerModule( + graph, + parkingRepository, + timetableRepository, + issueStore, + config.areaVisibility + ) ); pruneIslands.setPruningThresholdIslandWithoutStops( config.islandPruning.pruningThresholdIslandWithoutStops diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/nearbystops/PatternConsideringNearbyStopFinder.java b/application/src/main/java/org/opentripplanner/graph_builder/module/nearbystops/PatternConsideringNearbyStopFinder.java index 70d1aac3483..8df2a25b64e 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/nearbystops/PatternConsideringNearbyStopFinder.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/nearbystops/PatternConsideringNearbyStopFinder.java @@ -62,7 +62,7 @@ public List findNearbyStops( if (ts1 instanceof RegularStop regularStop) { /* Consider this destination stop as a candidate for every trip pattern passing through it. */ - Collection patternsForStop = transitService.getPatternsForStop(ts1); + Collection patternsForStop = transitService.findPatterns(ts1); if (OTPFeature.IncludeEmptyRailStopsInTransfers.isOn()) { if (patternsForStop.isEmpty() && regularStop.isRailStop()) { diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmModule.java b/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmModule.java index 08d23087a45..e3618d6f93d 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmModule.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmModule.java @@ -25,7 +25,8 @@ import org.opentripplanner.osm.wayproperty.WayProperties; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.routing.util.ElevationUtils; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; import org.opentripplanner.street.model.StreetLimitationParameters; import org.opentripplanner.street.model.StreetTraversalPermission; import org.opentripplanner.street.model.edge.StreetEdge; @@ -51,6 +52,7 @@ public class OsmModule implements GraphBuilderModule { */ private final List providers; private final Graph graph; + private final VehicleParkingRepository parkingRepository; private final DataImportIssueStore issueStore; private final OsmProcessingParameters params; private final SafetyValueNormalizer normalizer; @@ -61,6 +63,7 @@ public class OsmModule implements GraphBuilderModule { OsmModule( Collection providers, Graph graph, + VehicleParkingRepository parkingService, DataImportIssueStore issueStore, StreetLimitationParameters streetLimitationParameters, OsmProcessingParameters params @@ -73,14 +76,23 @@ public class OsmModule implements GraphBuilderModule { this.vertexGenerator = new VertexGenerator(osmdb, graph, params.boardingAreaRefTags()); this.normalizer = new SafetyValueNormalizer(graph, issueStore); this.streetLimitationParameters = Objects.requireNonNull(streetLimitationParameters); + this.parkingRepository = parkingService; } - public static OsmModuleBuilder of(Collection providers, Graph graph) { - return new OsmModuleBuilder(providers, graph); + public static OsmModuleBuilder of( + Collection providers, + Graph graph, + VehicleParkingRepository service + ) { + return new OsmModuleBuilder(providers, graph, service); } - public static OsmModuleBuilder of(OsmProvider provider, Graph graph) { - return of(List.of(provider), graph); + public static OsmModuleBuilder of( + OsmProvider provider, + Graph graph, + VehicleParkingRepository service + ) { + return of(List.of(provider), graph, service); } @Override @@ -163,7 +175,7 @@ private void build() { } if (!parkingLots.isEmpty()) { - graph.getVehicleParkingService().updateVehicleParking(parkingLots, List.of()); + parkingRepository.updateVehicleParking(parkingLots, List.of()); } var elevatorProcessor = new ElevatorProcessor(issueStore, osmdb, vertexGenerator); diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmModuleBuilder.java b/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmModuleBuilder.java index 6e90fb20b1c..2f7f4c506c9 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmModuleBuilder.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/osm/OsmModuleBuilder.java @@ -8,6 +8,7 @@ import org.opentripplanner.graph_builder.services.osm.EdgeNamer; import org.opentripplanner.osm.OsmProvider; import org.opentripplanner.routing.graph.Graph; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; import org.opentripplanner.street.model.StreetLimitationParameters; /** @@ -17,6 +18,7 @@ public class OsmModuleBuilder { private final Collection providers; private final Graph graph; + private final VehicleParkingRepository parkingRepository; private Set boardingAreaRefTags = Set.of(); private DataImportIssueStore issueStore = DataImportIssueStore.NOOP; private EdgeNamer edgeNamer = new DefaultNamer(); @@ -27,9 +29,14 @@ public class OsmModuleBuilder { private int maxAreaNodes; private StreetLimitationParameters streetLimitationParameters = new StreetLimitationParameters(); - OsmModuleBuilder(Collection providers, Graph graph) { + OsmModuleBuilder( + Collection providers, + Graph graph, + VehicleParkingRepository parkingRepository + ) { this.providers = providers; this.graph = graph; + this.parkingRepository = parkingRepository; } public OsmModuleBuilder withBoardingAreaRefTags(Set boardingAreaRefTags) { @@ -81,6 +88,7 @@ public OsmModule build() { return new OsmModule( providers, graph, + parkingRepository, issueStore, streetLimitationParameters, new OsmProcessingParameters( diff --git a/application/src/main/java/org/opentripplanner/graph_builder/module/osm/ParkingProcessor.java b/application/src/main/java/org/opentripplanner/graph_builder/module/osm/ParkingProcessor.java index d2bbbe7e27f..af8eb8e6e61 100644 --- a/application/src/main/java/org/opentripplanner/graph_builder/module/osm/ParkingProcessor.java +++ b/application/src/main/java/org/opentripplanner/graph_builder/module/osm/ParkingProcessor.java @@ -24,9 +24,9 @@ import org.opentripplanner.osm.model.OsmNode; import org.opentripplanner.osm.model.OsmWithTags; import org.opentripplanner.routing.graph.Graph; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingHelper; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingHelper; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces; import org.opentripplanner.street.model.edge.Edge; import org.opentripplanner.street.model.edge.StreetEdge; import org.opentripplanner.street.model.edge.VehicleParkingEdge; diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/TripMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/TripMapper.java index daf20445767..7b1614aa4d5 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/TripMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/TripMapper.java @@ -84,7 +84,7 @@ private Optional mapSafeTimePenalty(org.onebusaway.gtfs.model.Trip } else { var offset = rhs.getSafeDurationOffset() == null ? Duration.ZERO - : Duration.ofMinutes(rhs.getSafeDurationOffset().longValue()); + : Duration.ofSeconds(rhs.getSafeDurationOffset().longValue()); var factor = rhs.getSafeDurationFactor() == null ? 1d : rhs.getSafeDurationFactor().doubleValue(); diff --git a/application/src/main/java/org/opentripplanner/inspector/vector/vertex/VertexPropertyMapper.java b/application/src/main/java/org/opentripplanner/inspector/vector/vertex/VertexPropertyMapper.java index de700486c77..c1f0070eb86 100644 --- a/application/src/main/java/org/opentripplanner/inspector/vector/vertex/VertexPropertyMapper.java +++ b/application/src/main/java/org/opentripplanner/inspector/vector/vertex/VertexPropertyMapper.java @@ -9,8 +9,8 @@ import java.util.Set; import org.opentripplanner.apis.support.mapping.PropertyMapper; import org.opentripplanner.inspector.vector.KeyValue; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingEntrance; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingEntrance; import org.opentripplanner.service.vehiclerental.street.VehicleRentalPlaceVertex; import org.opentripplanner.street.model.vertex.BarrierVertex; import org.opentripplanner.street.model.vertex.VehicleParkingEntranceVertex; 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 3dd4a3db992..2b270e8afa4 100644 --- a/application/src/main/java/org/opentripplanner/model/impl/OtpTransitServiceBuilder.java +++ b/application/src/main/java/org/opentripplanner/model/impl/OtpTransitServiceBuilder.java @@ -26,7 +26,7 @@ import org.opentripplanner.model.transfer.ConstrainedTransfer; import org.opentripplanner.model.transfer.TransferPoint; import org.opentripplanner.routing.api.request.framework.TimePenalty; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; import org.opentripplanner.transit.model.basic.Notice; import org.opentripplanner.transit.model.framework.AbstractTransitEntity; import org.opentripplanner.transit.model.framework.DefaultEntityById; diff --git a/application/src/main/java/org/opentripplanner/model/plan/VehicleParkingWithEntrance.java b/application/src/main/java/org/opentripplanner/model/plan/VehicleParkingWithEntrance.java index 5d28bcd02f2..131ef4cad7c 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/VehicleParkingWithEntrance.java +++ b/application/src/main/java/org/opentripplanner/model/plan/VehicleParkingWithEntrance.java @@ -1,7 +1,7 @@ package org.opentripplanner.model.plan; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingEntrance; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingEntrance; public class VehicleParkingWithEntrance { diff --git a/application/src/main/java/org/opentripplanner/model/plan/legreference/ScheduledTransitLegReference.java b/application/src/main/java/org/opentripplanner/model/plan/legreference/ScheduledTransitLegReference.java index 422a62ce763..5defff73cec 100644 --- a/application/src/main/java/org/opentripplanner/model/plan/legreference/ScheduledTransitLegReference.java +++ b/application/src/main/java/org/opentripplanner/model/plan/legreference/ScheduledTransitLegReference.java @@ -69,7 +69,7 @@ public ScheduledTransitLeg getLeg(TransitService transitService) { Trip trip; TripOnServiceDate tripOnServiceDate = null; if (tripOnServiceDateId != null) { - tripOnServiceDate = transitService.getTripOnServiceDateById(tripOnServiceDateId); + tripOnServiceDate = transitService.getTripOnServiceDate(tripOnServiceDateId); if (tripOnServiceDate == null) { LOG.info( "Invalid transit leg reference: trip on service date '{}' not found", @@ -87,14 +87,14 @@ public ScheduledTransitLeg getLeg(TransitService transitService) { } trip = tripOnServiceDate.getTrip(); } else { - trip = transitService.getTripForId(tripId); + trip = transitService.getTrip(tripId); if (trip == null) { LOG.info("Invalid transit leg reference: trip '{}' not found", tripId); return null; } } - TripPattern tripPattern = transitService.getPatternForTrip(trip, serviceDate); + TripPattern tripPattern = transitService.findPattern(trip, serviceDate); if (tripPattern == null) { LOG.info( "Invalid transit leg reference: trip pattern not found for trip '{}' and service date {} ", @@ -130,7 +130,7 @@ public ScheduledTransitLeg getLeg(TransitService transitService) { return null; } - Timetable timetable = transitService.getTimetableForTripPattern(tripPattern, serviceDate); + Timetable timetable = transitService.findTimetable(tripPattern, serviceDate); TripTimes tripTimes = timetable.getTripTimes(trip); if (tripTimes == null) { @@ -177,7 +177,7 @@ public ScheduledTransitLeg getLeg(TransitService transitService) { new AlertToLegMapper( transitService.getTransitAlertService(), - transitService::getMultiModalStationForStation + transitService::findMultiModalStation ) .addTransitAlertsToLeg(leg, false); diff --git a/application/src/main/java/org/opentripplanner/netex/NetexModule.java b/application/src/main/java/org/opentripplanner/netex/NetexModule.java index 4c45131389f..e5422c5ac77 100644 --- a/application/src/main/java/org/opentripplanner/netex/NetexModule.java +++ b/application/src/main/java/org/opentripplanner/netex/NetexModule.java @@ -13,7 +13,8 @@ import org.opentripplanner.model.calendar.ServiceDateInterval; import org.opentripplanner.model.impl.OtpTransitServiceBuilder; import org.opentripplanner.routing.graph.Graph; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingHelper; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingHelper; import org.opentripplanner.standalone.config.BuildConfig; import org.opentripplanner.transit.service.TimetableRepository; @@ -29,6 +30,7 @@ public class NetexModule implements GraphBuilderModule { private final Graph graph; private final TimetableRepository timetableRepository; + private final VehicleParkingRepository parkingRepository; private final DataImportIssueStore issueStore; /** @@ -42,6 +44,7 @@ public class NetexModule implements GraphBuilderModule { public NetexModule( Graph graph, TimetableRepository timetableRepository, + VehicleParkingRepository parkingRepository, DataImportIssueStore issueStore, int subwayAccessTime, ServiceDateInterval transitPeriodLimit, @@ -49,6 +52,7 @@ public NetexModule( ) { this.graph = graph; this.timetableRepository = timetableRepository; + this.parkingRepository = parkingRepository; this.issueStore = issueStore; this.subwayAccessTime = subwayAccessTime; this.transitPeriodLimit = transitPeriodLimit; @@ -103,7 +107,7 @@ public void buildGraph() { timetableRepository.validateTimeZones(); var lots = transitBuilder.vehicleParkings(); - graph.getVehicleParkingService().updateVehicleParking(lots, List.of()); + parkingRepository.updateVehicleParking(lots, List.of()); var linker = new VehicleParkingHelper(graph); lots.forEach(linker::linkVehicleParkingToGraph); } 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 9ca6dc27b04..5771828395e 100644 --- a/application/src/main/java/org/opentripplanner/netex/configure/NetexConfigure.java +++ b/application/src/main/java/org/opentripplanner/netex/configure/NetexConfigure.java @@ -11,6 +11,7 @@ import org.opentripplanner.netex.config.NetexFeedParameters; import org.opentripplanner.netex.loader.NetexDataSourceHierarchy; import org.opentripplanner.routing.graph.Graph; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; import org.opentripplanner.standalone.config.BuildConfig; import org.opentripplanner.transit.service.TimetableRepository; @@ -36,6 +37,7 @@ public NetexConfigure(BuildConfig builderParams) { public NetexModule createNetexModule( Iterable> netexSources, TimetableRepository timetableRepository, + VehicleParkingRepository parkingRepsitory, Graph graph, DataImportIssueStore issueStore ) { @@ -52,6 +54,7 @@ public NetexModule createNetexModule( return new NetexModule( graph, timetableRepository, + parkingRepsitory, issueStore, buildParams.getSubwayAccessTimeSeconds(), buildParams.getTransitServicePeriod(), diff --git a/application/src/main/java/org/opentripplanner/netex/mapping/VehicleParkingMapper.java b/application/src/main/java/org/opentripplanner/netex/mapping/VehicleParkingMapper.java index 862c5f0c648..f29d9760077 100644 --- a/application/src/main/java/org/opentripplanner/netex/mapping/VehicleParkingMapper.java +++ b/application/src/main/java/org/opentripplanner/netex/mapping/VehicleParkingMapper.java @@ -9,8 +9,8 @@ import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.netex.mapping.support.FeedScopedIdFactory; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces; import org.rutebanken.netex.model.Parking; import org.rutebanken.netex.model.ParkingVehicleEnumeration; diff --git a/application/src/main/java/org/opentripplanner/osm/tagmapping/FinlandMapper.java b/application/src/main/java/org/opentripplanner/osm/tagmapping/FinlandMapper.java index e9ac9478552..d9ddd1ede76 100644 --- a/application/src/main/java/org/opentripplanner/osm/tagmapping/FinlandMapper.java +++ b/application/src/main/java/org/opentripplanner/osm/tagmapping/FinlandMapper.java @@ -84,9 +84,6 @@ else if (speedLimit <= 16.65f) { // Don't recommend walking in trunk road tunnels props.setProperties("highway=trunk;tunnel=yes", withModes(CAR).bicycleSafety(7.47)); - // Do not walk on "moottoriliikennetie" - props.setProperties("motorroad=yes", withModes(CAR).bicycleSafety(7.47)); - // Remove informal and private roads props.setProperties("highway=*;informal=yes", withModes(NONE)); props.setProperties("highway=service;access=private", withModes(NONE)); diff --git a/application/src/main/java/org/opentripplanner/osm/tagmapping/OsmTagMapper.java b/application/src/main/java/org/opentripplanner/osm/tagmapping/OsmTagMapper.java index 2df3c22d6a9..55bc87f5cad 100644 --- a/application/src/main/java/org/opentripplanner/osm/tagmapping/OsmTagMapper.java +++ b/application/src/main/java/org/opentripplanner/osm/tagmapping/OsmTagMapper.java @@ -14,7 +14,6 @@ import org.opentripplanner.osm.wayproperty.WayProperties; import org.opentripplanner.osm.wayproperty.WayPropertySet; import org.opentripplanner.osm.wayproperty.specifier.BestMatchSpecifier; -import org.opentripplanner.osm.wayproperty.specifier.Condition; import org.opentripplanner.osm.wayproperty.specifier.ExactMatchSpecifier; import org.opentripplanner.osm.wayproperty.specifier.LogicalOrSpecifier; import org.opentripplanner.routing.services.notes.StreetNotesService; @@ -104,6 +103,10 @@ public void populateProperties(WayPropertySet props) { props.setProperties("highway=trunk", withModes(CAR).bicycleSafety(7.47)); props.setProperties("highway=motorway", withModes(CAR).bicycleSafety(8)); + // Do not walk on "moottoriliikennetie"/"Kraftfahrstrasse"/"Limited access road" + // https://en.wikipedia.org/wiki/Limited-access_road + props.setProperties(new ExactMatchSpecifier("motorroad=yes"), withModes(CAR)); + /* cycleway=lane */ props.setProperties( "highway=*;cycleway=lane", diff --git a/application/src/main/java/org/opentripplanner/routing/TripTimeOnDateHelper.java b/application/src/main/java/org/opentripplanner/routing/TripTimeOnDateHelper.java index f2806d0a1f2..feb5191a612 100644 --- a/application/src/main/java/org/opentripplanner/routing/TripTimeOnDateHelper.java +++ b/application/src/main/java/org/opentripplanner/routing/TripTimeOnDateHelper.java @@ -23,9 +23,9 @@ public static List getTripTimeOnDates( Trip trip, LocalDate serviceDate ) { - TripPattern pattern = transitService.getPatternForTrip(trip, serviceDate); + TripPattern pattern = transitService.findPattern(trip, serviceDate); - Timetable timetable = transitService.getTimetableForTripPattern(pattern, serviceDate); + Timetable timetable = transitService.findTimetable(pattern, serviceDate); // If realtime moved pattern back to original trip, fetch it instead if (timetable.getTripIndex(trip.getId()) == -1) { @@ -33,8 +33,8 @@ public static List getTripTimeOnDates( "Trip {} not found in realtime pattern. This should not happen, and indicates a bug.", trip ); - pattern = transitService.getPatternForTrip(trip); - timetable = transitService.getTimetableForTripPattern(pattern, serviceDate); + pattern = transitService.findPattern(trip); + timetable = transitService.findTimetable(pattern, serviceDate); } // This check is made here to avoid changing TripTimeOnDate.fromTripTimes diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapper.java b/application/src/main/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapper.java index 0fef72f7b3e..64c59b71603 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapper.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/mapping/RaptorPathToItineraryMapper.java @@ -280,7 +280,7 @@ private TripOnServiceDate getTripOnServiceDate(T tripSchedule) { tripSchedule.getOriginalTripTimes().getTrip().getId(), tripSchedule.getServiceDate() ); - return transitService.getTripOnServiceDateForTripAndDay(tripIdAndServiceDate); + return transitService.getTripOnServiceDate(tripIdAndServiceDate); } private boolean isFree(EgressPathLeg egressPathLeg) { diff --git a/application/src/main/java/org/opentripplanner/routing/algorithm/mapping/RouteRequestToFilterChainMapper.java b/application/src/main/java/org/opentripplanner/routing/algorithm/mapping/RouteRequestToFilterChainMapper.java index 695ac5a15f5..277efda3810 100644 --- a/application/src/main/java/org/opentripplanner/routing/algorithm/mapping/RouteRequestToFilterChainMapper.java +++ b/application/src/main/java/org/opentripplanner/routing/algorithm/mapping/RouteRequestToFilterChainMapper.java @@ -86,7 +86,7 @@ public static ItineraryListFilterChain createFilterChain( ) .withTransitAlerts( context.transitService().getTransitAlertService(), - context.transitService()::getMultiModalStationForStation + context.transitService()::findMultiModalStation ) .withSearchWindow(earliestDepartureTimeUsed, searchWindowUsed) .withPageCursorInputSubscriber(pageCursorInputSubscriber) 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 2b9c0136e07..d332013d5ac 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 @@ -381,7 +381,7 @@ private TemporaryVerticesContainer createTemporaryVerticesContainer( private IntStream listStopIndexes(FeedScopedId stopLocationId) { Collection stops = serverContext .transitService() - .getStopOrChildStops(stopLocationId); + .findStopOrChildStops(stopLocationId); if (stops.isEmpty()) { throw new EntityNotFoundException( 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 5f4e40708ef..ff47cb3ea74 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 @@ -29,7 +29,7 @@ static List> mapTransfers( ArrayList list = new ArrayList<>(); - for (PathTransfer pathTransfer : transitService.getTransfersByStop(stop)) { + for (PathTransfer pathTransfer : transitService.findPathTransfers(stop)) { if (pathTransfer.to instanceof RegularStop) { int toStopIndex = pathTransfer.to.getIndex(); Transfer newTransfer; 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 a056efe87df..d6f9c0709c5 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 @@ -67,7 +67,7 @@ private TransitLayer map(TransitTuningParameters tuningParameters) { LOG.info("Mapping transitLayer from TimetableRepository..."); - Collection allTripPatterns = transitService.getAllTripPatterns(); + Collection allTripPatterns = transitService.listTripPatterns(); tripPatternsByStopByDate = mapTripPatterns(allTripPatterns); @@ -109,7 +109,7 @@ private HashMap> mapTripPatterns( transitService.getServiceCodesRunningForDate() ); - Set allServiceDates = transitService.getAllServiceCodes(); + Set allServiceDates = transitService.listServiceDates(); List tripPatternForDates = Collections.synchronizedList(new ArrayList<>()); diff --git a/application/src/main/java/org/opentripplanner/routing/alternativelegs/AlternativeLegs.java b/application/src/main/java/org/opentripplanner/routing/alternativelegs/AlternativeLegs.java index 51af4a27f79..f65a045a8e3 100644 --- a/application/src/main/java/org/opentripplanner/routing/alternativelegs/AlternativeLegs.java +++ b/application/src/main/java/org/opentripplanner/routing/alternativelegs/AlternativeLegs.java @@ -104,7 +104,7 @@ public static List getAlternativeLegs( return origins .stream() - .flatMap(stop -> transitService.getPatternsForStop(stop, true).stream()) + .flatMap(stop -> transitService.findPatterns(stop, true).stream()) .filter(tripPattern -> tripPattern.getStops().stream().anyMatch(destinations::contains)) .filter(tripPatternPredicate) .distinct() @@ -150,7 +150,7 @@ private static Stream generateLegs( var serviceDates = List.of(originalDate.minusDays(1), originalDate, originalDate.plusDays(1)); for (LocalDate serviceDate : serviceDates) { - Timetable timetable = transitService.getTimetableForTripPattern(pattern, serviceDate); + Timetable timetable = transitService.findTimetable(pattern, serviceDate); ZonedDateTime midnight = ServiceDateUtils.asStartOfService( serviceDate, transitService.getTimeZone() @@ -229,7 +229,7 @@ private static ScheduledTransitLeg mapToLeg( tripTimes.getArrivalTime(alightingPosition) ); - TripOnServiceDate tripOnServiceDate = transitService.getTripOnServiceDateForTripAndDay( + TripOnServiceDate tripOnServiceDate = transitService.getTripOnServiceDate( new TripIdAndServiceDate(tripTimeOnDate.getTrip().getId(), tripTimeOnDate.getServiceDay()) ); diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/preference/filter/VehicleParkingFilter.java b/application/src/main/java/org/opentripplanner/routing/api/request/preference/filter/VehicleParkingFilter.java index 5f34dc4e1a7..c03d8d18bea 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/preference/filter/VehicleParkingFilter.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/preference/filter/VehicleParkingFilter.java @@ -4,7 +4,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; import org.opentripplanner.utils.tostring.ToStringBuilder; /** diff --git a/application/src/main/java/org/opentripplanner/routing/api/request/preference/filter/VehicleParkingSelect.java b/application/src/main/java/org/opentripplanner/routing/api/request/preference/filter/VehicleParkingSelect.java index 2d3935461d4..d30f0c6795d 100644 --- a/application/src/main/java/org/opentripplanner/routing/api/request/preference/filter/VehicleParkingSelect.java +++ b/application/src/main/java/org/opentripplanner/routing/api/request/preference/filter/VehicleParkingSelect.java @@ -2,7 +2,7 @@ import java.util.Collections; import java.util.Set; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; /** * A set of conditions that can be used to check if a parking facility should be included/excluded 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 04266476ae5..70ce563700c 100644 --- a/application/src/main/java/org/opentripplanner/routing/graph/Graph.java +++ b/application/src/main/java/org/opentripplanner/routing/graph/Graph.java @@ -22,7 +22,6 @@ import org.opentripplanner.routing.graph.index.StreetIndex; import org.opentripplanner.routing.linking.VertexLinker; import org.opentripplanner.routing.services.notes.StreetNotesService; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingService; import org.opentripplanner.street.model.edge.Edge; import org.opentripplanner.street.model.edge.StreetEdge; import org.opentripplanner.street.model.vertex.TransitStopVertex; @@ -111,7 +110,6 @@ public class Graph implements Serializable { // static variable in CompactElevationProfile in SerializedGraphObject private double distanceBetweenElevationSamples; - private final VehicleParkingService vehicleParkingService = new VehicleParkingService(); private FareService fareService; /** @@ -362,10 +360,6 @@ public void setDistanceBetweenElevationSamples(double distanceBetweenElevationSa CompactElevationProfile.setDistanceBetweenSamplesM(distanceBetweenElevationSamples); } - public VehicleParkingService getVehicleParkingService() { - return vehicleParkingService; - } - public FareService getFareService() { return fareService; } 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 0843124131b..a152b96682d 100644 --- a/application/src/main/java/org/opentripplanner/routing/graph/SerializedGraphObject.java +++ b/application/src/main/java/org/opentripplanner/routing/graph/SerializedGraphObject.java @@ -25,6 +25,7 @@ import org.opentripplanner.model.projectinfo.GraphFileHeader; import org.opentripplanner.model.projectinfo.OtpProjectInfo; import org.opentripplanner.routing.graph.kryosupport.KryoBuilder; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; import org.opentripplanner.service.worldenvelope.WorldEnvelopeRepository; import org.opentripplanner.standalone.config.BuildConfig; import org.opentripplanner.standalone.config.RouterConfig; @@ -79,11 +80,13 @@ public class SerializedGraphObject implements Serializable { private final int routingTripPatternCounter; public final EmissionsDataModel emissionsDataModel; public final StreetLimitationParameters streetLimitationParameters; + public final VehicleParkingRepository parkingRepository; public SerializedGraphObject( Graph graph, TimetableRepository timetableRepository, WorldEnvelopeRepository worldEnvelopeRepository, + VehicleParkingRepository parkingRepository, BuildConfig buildConfig, RouterConfig routerConfig, DataImportIssueSummary issueSummary, @@ -95,6 +98,7 @@ public SerializedGraphObject( this.edges = graph.getEdges(); this.timetableRepository = timetableRepository; this.worldEnvelopeRepository = worldEnvelopeRepository; + this.parkingRepository = parkingRepository; this.buildConfig = buildConfig; this.routerConfig = routerConfig; this.issueSummary = issueSummary; diff --git a/application/src/main/java/org/opentripplanner/routing/graphfinder/PatternAtStop.java b/application/src/main/java/org/opentripplanner/routing/graphfinder/PatternAtStop.java index c06e8bbcf91..ae1380c8f1a 100644 --- a/application/src/main/java/org/opentripplanner/routing/graphfinder/PatternAtStop.java +++ b/application/src/main/java/org/opentripplanner/routing/graphfinder/PatternAtStop.java @@ -48,7 +48,7 @@ public static PatternAtStop fromId(TransitService transitService, String id) { ); return new PatternAtStop( transitService.getRegularStop(stopId), - transitService.getTripPatternForId(patternId) + transitService.getTripPattern(patternId) ); } @@ -70,7 +70,7 @@ public List getStoptimes( int numberOfDepartures, ArrivalDeparture arrivalDeparture ) { - return transitService.stopTimesForPatternAtStop( + return transitService.findTripTimeOnDate( stop, pattern, startTime, diff --git a/application/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java b/application/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java index 16420a0d9eb..1928d4f574b 100644 --- a/application/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java +++ b/application/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java @@ -6,7 +6,7 @@ import java.util.Set; import org.opentripplanner.astar.spi.SkipEdgeStrategy; import org.opentripplanner.astar.spi.TraverseVisitor; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; import org.opentripplanner.service.vehiclerental.street.VehicleRentalPlaceVertex; import org.opentripplanner.street.model.edge.Edge; @@ -174,7 +174,7 @@ private boolean shouldInclude(List filterByPlaceTypes, PlaceType type private boolean stopHasPatternsWithMode(RegularStop stop, Set modes) { return transitService - .getPatternsForStop(stop) + .findPatterns(stop) .stream() .map(TripPattern::getMode) .anyMatch(modes::contains); @@ -234,7 +234,7 @@ private void handleStop(RegularStop stop, double distance) { private void handlePatternsAtStop(RegularStop stop, double distance) { if (includePatternAtStops) { List patterns = transitService - .getPatternsForStop(stop) + .findPatterns(stop) .stream() .filter(pattern -> filterByModes.isEmpty() || filterByModes.contains(pattern.getMode())) .filter(pattern -> diff --git a/application/src/main/java/org/opentripplanner/routing/stoptimes/StopTimesHelper.java b/application/src/main/java/org/opentripplanner/routing/stoptimes/StopTimesHelper.java index 863e2fc6569..b8fe8c9b216 100644 --- a/application/src/main/java/org/opentripplanner/routing/stoptimes/StopTimesHelper.java +++ b/application/src/main/java/org/opentripplanner/routing/stoptimes/StopTimesHelper.java @@ -59,7 +59,7 @@ public static List stopTimesForStop( List result = new ArrayList<>(); // Fetch all patterns, including those from realtime sources - Collection patterns = transitService.getPatternsForStop(stop, true); + Collection patterns = transitService.findPatterns(stop, true); for (TripPattern pattern : patterns) { Queue pq = listTripTimeOnDatesForPatternAtStop( @@ -101,9 +101,9 @@ public static List stopTimesForStop( .asStartOfService(serviceDate, transitService.getTimeZone()) .toInstant(); - for (TripPattern pattern : transitService.getPatternsForStop(stop, true)) { + for (TripPattern pattern : transitService.findPatterns(stop, true)) { StopTimesInPattern stopTimes = new StopTimesInPattern(pattern); - Timetable tt = transitService.getTimetableForTripPattern(pattern, serviceDate); + Timetable tt = transitService.findTimetable(pattern, serviceDate); List stops = pattern.getStops(); for (int i = 0; i < stops.size(); i++) { StopLocation currStop = stops.get(i); @@ -225,7 +225,7 @@ private static Queue listTripTimeOnDatesForPatternAtStop( // Loop through all possible days for (LocalDate serviceDate : serviceDates) { - Timetable timetable = transitService.getTimetableForTripPattern(pattern, serviceDate); + Timetable timetable = transitService.findTimetable(pattern, serviceDate); ZonedDateTime midnight = ServiceDateUtils.asStartOfService(serviceDate, zoneId); int secondsSinceMidnight = ServiceDateUtils.secondsSinceStartOfService( midnight, @@ -291,7 +291,7 @@ private static boolean isReplacedByAnotherPattern( TripPattern pattern, TransitService transitService ) { - final TripPattern replacement = transitService.getNewTripPatternForModifiedTrip( + final TripPattern replacement = transitService.findNewTripPatternForModifiedTrip( trip.getId(), serviceDate ); diff --git a/application/src/main/java/org/opentripplanner/service/realtimevehicles/internal/DefaultRealtimeVehicleService.java b/application/src/main/java/org/opentripplanner/service/realtimevehicles/internal/DefaultRealtimeVehicleService.java index 17a4d22e60c..9bd5c96c899 100644 --- a/application/src/main/java/org/opentripplanner/service/realtimevehicles/internal/DefaultRealtimeVehicleService.java +++ b/application/src/main/java/org/opentripplanner/service/realtimevehicles/internal/DefaultRealtimeVehicleService.java @@ -67,7 +67,7 @@ public List getRealtimeVehicles(TripPattern pattern) { @Override public OccupancyStatus getVehicleOccupancyStatus(Trip trip) { - return getOccupancyStatus(trip.getId(), transitService.getPatternForTrip(trip)); + return getOccupancyStatus(trip.getId(), transitService.findPattern(trip)); } /** diff --git a/application/src/main/java/org/opentripplanner/service/vehicleparking/VehicleParkingRepository.java b/application/src/main/java/org/opentripplanner/service/vehicleparking/VehicleParkingRepository.java new file mode 100644 index 00000000000..7d9e4f110ce --- /dev/null +++ b/application/src/main/java/org/opentripplanner/service/vehicleparking/VehicleParkingRepository.java @@ -0,0 +1,19 @@ +package org.opentripplanner.service.vehicleparking; + +import com.google.common.collect.ListMultimap; +import java.util.Collection; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingGroup; + +/** + * The writable data store of parking facilities. + */ +public interface VehicleParkingRepository { + void updateVehicleParking( + Collection parkingToAdd, + Collection parkingToRemove + ); + Collection listVehicleParkings(); + + ListMultimap getVehicleParkingGroups(); +} diff --git a/application/src/main/java/org/opentripplanner/service/vehicleparking/VehicleParkingService.java b/application/src/main/java/org/opentripplanner/service/vehicleparking/VehicleParkingService.java new file mode 100644 index 00000000000..4603367979e --- /dev/null +++ b/application/src/main/java/org/opentripplanner/service/vehicleparking/VehicleParkingService.java @@ -0,0 +1,25 @@ +package org.opentripplanner.service.vehicleparking; + +import com.google.common.collect.ListMultimap; +import java.util.Collection; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingGroup; + +/** + * The read-only service for getting information about parking facilities. + *

+ * For writing data see {@link VehicleParkingRepository} + */ +public interface VehicleParkingService { + Collection listBikeParks(); + + Collection listCarParks(); + + Collection listVehicleParkings(); + + ListMultimap listVehicleParkingGroups(); + + boolean hasBikeParking(); + + boolean hasCarParking(); +} diff --git a/application/src/main/java/org/opentripplanner/service/vehicleparking/configure/VehicleParkingRepositoryModule.java b/application/src/main/java/org/opentripplanner/service/vehicleparking/configure/VehicleParkingRepositoryModule.java new file mode 100644 index 00000000000..23c5b3e0e51 --- /dev/null +++ b/application/src/main/java/org/opentripplanner/service/vehicleparking/configure/VehicleParkingRepositoryModule.java @@ -0,0 +1,12 @@ +package org.opentripplanner.service.vehicleparking.configure; + +import dagger.Binds; +import dagger.Module; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingRepository; + +@Module +public interface VehicleParkingRepositoryModule { + @Binds + VehicleParkingRepository bind(DefaultVehicleParkingRepository repo); +} diff --git a/application/src/main/java/org/opentripplanner/service/vehicleparking/configure/VehicleParkingServiceModule.java b/application/src/main/java/org/opentripplanner/service/vehicleparking/configure/VehicleParkingServiceModule.java new file mode 100644 index 00000000000..50dbe4b2bcb --- /dev/null +++ b/application/src/main/java/org/opentripplanner/service/vehicleparking/configure/VehicleParkingServiceModule.java @@ -0,0 +1,12 @@ +package org.opentripplanner.service.vehicleparking.configure; + +import dagger.Binds; +import dagger.Module; +import org.opentripplanner.service.vehicleparking.VehicleParkingService; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingService; + +@Module +public interface VehicleParkingServiceModule { + @Binds + VehicleParkingService bind(DefaultVehicleParkingService service); +} diff --git a/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingService.java b/application/src/main/java/org/opentripplanner/service/vehicleparking/internal/DefaultVehicleParkingRepository.java similarity index 65% rename from application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingService.java rename to application/src/main/java/org/opentripplanner/service/vehicleparking/internal/DefaultVehicleParkingRepository.java index b0c08a2309b..ef8f9db99bf 100644 --- a/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingService.java +++ b/application/src/main/java/org/opentripplanner/service/vehicleparking/internal/DefaultVehicleParkingRepository.java @@ -1,23 +1,23 @@ -package org.opentripplanner.routing.vehicle_parking; +package org.opentripplanner.service.vehicleparking.internal; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ImmutableListMultimap; +import com.google.common.collect.ListMultimap; import com.google.common.collect.Multimap; -import java.io.Serializable; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import java.util.Collection; import java.util.HashSet; import java.util.Set; -import java.util.stream.Stream; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingGroup; -/** - * Service that holds all the {@link VehicleParking} instances and an index for fetching parking - * locations within a {@link VehicleParkingGroup}. This class is thread-safe because the collections - * held here are immutable and only updated in atomic operations that replace the existing - * collection with a new copy. - * - *

THIS CLASS IS THREAD-SAFE

- */ -public class VehicleParkingService implements Serializable { +@Singleton +public class DefaultVehicleParkingRepository implements VehicleParkingRepository { + + @Inject + public DefaultVehicleParkingRepository() {} /** * To ensure that his is thread-safe, the set stored here should always be immutable. @@ -38,6 +38,7 @@ public class VehicleParkingService implements Serializable { * service by replacing the existing with a new copy that includes old ones that were not removed * in the update and the new ones that were added in the update. */ + @Override public void updateVehicleParking( Collection parkingToAdd, Collection parkingToRemove @@ -65,27 +66,13 @@ public void updateVehicleParking( vehicleParkings = Set.copyOf(updatedVehicleParkings); } - public Stream getBikeParks() { - return vehicleParkings.stream().filter(VehicleParking::hasBicyclePlaces); - } - - public Stream getCarParks() { - return vehicleParkings.stream().filter(VehicleParking::hasAnyCarPlaces); - } - - public Stream getVehicleParkings() { - return vehicleParkings.stream(); + @Override + public Collection listVehicleParkings() { + return Set.copyOf(vehicleParkings); } - public ImmutableListMultimap getVehicleParkingGroups() { + @Override + public ListMultimap getVehicleParkingGroups() { return vehicleParkingGroups; } - - public boolean hasBikeParking() { - return vehicleParkings.stream().anyMatch(VehicleParking::hasBicyclePlaces); - } - - public boolean hasCarParking() { - return vehicleParkings.stream().anyMatch(VehicleParking::hasAnyCarPlaces); - } } diff --git a/application/src/main/java/org/opentripplanner/service/vehicleparking/internal/DefaultVehicleParkingService.java b/application/src/main/java/org/opentripplanner/service/vehicleparking/internal/DefaultVehicleParkingService.java new file mode 100644 index 00000000000..b874c4338b7 --- /dev/null +++ b/application/src/main/java/org/opentripplanner/service/vehicleparking/internal/DefaultVehicleParkingService.java @@ -0,0 +1,68 @@ +package org.opentripplanner.service.vehicleparking.internal; + +import com.google.common.collect.ListMultimap; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import java.io.Serializable; +import java.util.Collection; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.VehicleParkingService; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingGroup; + +/** + * Service that holds all the {@link VehicleParking} instances and an index for fetching parking + * locations within a {@link VehicleParkingGroup}. This class is thread-safe because the collections + * held here are immutable and only updated in atomic operations that replace the existing + * collection with a new copy. + * + *

THIS CLASS IS THREAD-SAFE

+ */ +@Singleton +public class DefaultVehicleParkingService implements Serializable, VehicleParkingService { + + private final VehicleParkingRepository repository; + + @Inject + public DefaultVehicleParkingService(VehicleParkingRepository repository) { + this.repository = repository; + } + + @Override + public Collection listBikeParks() { + return repository + .listVehicleParkings() + .stream() + .filter(VehicleParking::hasBicyclePlaces) + .toList(); + } + + @Override + public Collection listCarParks() { + return repository + .listVehicleParkings() + .stream() + .filter(VehicleParking::hasAnyCarPlaces) + .toList(); + } + + @Override + public Collection listVehicleParkings() { + return repository.listVehicleParkings(); + } + + @Override + public ListMultimap listVehicleParkingGroups() { + return repository.getVehicleParkingGroups(); + } + + @Override + public boolean hasBikeParking() { + return repository.listVehicleParkings().stream().anyMatch(VehicleParking::hasBicyclePlaces); + } + + @Override + public boolean hasCarParking() { + return repository.listVehicleParkings().stream().anyMatch(VehicleParking::hasAnyCarPlaces); + } +} diff --git a/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParking.java b/application/src/main/java/org/opentripplanner/service/vehicleparking/model/VehicleParking.java similarity index 99% rename from application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParking.java rename to application/src/main/java/org/opentripplanner/service/vehicleparking/model/VehicleParking.java index 4e71ecd1c68..c9539f21eef 100644 --- a/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParking.java +++ b/application/src/main/java/org/opentripplanner/service/vehicleparking/model/VehicleParking.java @@ -1,4 +1,4 @@ -package org.opentripplanner.routing.vehicle_parking; +package org.opentripplanner.service.vehicleparking.model; import java.io.Serializable; import java.util.ArrayList; diff --git a/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingEntrance.java b/application/src/main/java/org/opentripplanner/service/vehicleparking/model/VehicleParkingEntrance.java similarity index 98% rename from application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingEntrance.java rename to application/src/main/java/org/opentripplanner/service/vehicleparking/model/VehicleParkingEntrance.java index f6bc584fb18..d905441641b 100644 --- a/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingEntrance.java +++ b/application/src/main/java/org/opentripplanner/service/vehicleparking/model/VehicleParkingEntrance.java @@ -1,4 +1,4 @@ -package org.opentripplanner.routing.vehicle_parking; +package org.opentripplanner.service.vehicleparking.model; import java.io.Serializable; import java.util.Objects; diff --git a/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingGroup.java b/application/src/main/java/org/opentripplanner/service/vehicleparking/model/VehicleParkingGroup.java similarity index 97% rename from application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingGroup.java rename to application/src/main/java/org/opentripplanner/service/vehicleparking/model/VehicleParkingGroup.java index 74ffedc0dcb..07548efa11a 100644 --- a/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingGroup.java +++ b/application/src/main/java/org/opentripplanner/service/vehicleparking/model/VehicleParkingGroup.java @@ -1,4 +1,4 @@ -package org.opentripplanner.routing.vehicle_parking; +package org.opentripplanner.service.vehicleparking.model; import java.util.Objects; import javax.annotation.Nullable; diff --git a/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingGroupBuilder.java b/application/src/main/java/org/opentripplanner/service/vehicleparking/model/VehicleParkingGroupBuilder.java similarity index 93% rename from application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingGroupBuilder.java rename to application/src/main/java/org/opentripplanner/service/vehicleparking/model/VehicleParkingGroupBuilder.java index 42603e33159..7f109f38002 100644 --- a/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingGroupBuilder.java +++ b/application/src/main/java/org/opentripplanner/service/vehicleparking/model/VehicleParkingGroupBuilder.java @@ -1,4 +1,4 @@ -package org.opentripplanner.routing.vehicle_parking; +package org.opentripplanner.service.vehicleparking.model; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; diff --git a/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingHelper.java b/application/src/main/java/org/opentripplanner/service/vehicleparking/model/VehicleParkingHelper.java similarity index 98% rename from application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingHelper.java rename to application/src/main/java/org/opentripplanner/service/vehicleparking/model/VehicleParkingHelper.java index 257f2805ca2..5832a8d5f91 100644 --- a/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingHelper.java +++ b/application/src/main/java/org/opentripplanner/service/vehicleparking/model/VehicleParkingHelper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.routing.vehicle_parking; +package org.opentripplanner.service.vehicleparking.model; import java.util.List; import java.util.Objects; diff --git a/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingSpaces.java b/application/src/main/java/org/opentripplanner/service/vehicleparking/model/VehicleParkingSpaces.java similarity index 98% rename from application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingSpaces.java rename to application/src/main/java/org/opentripplanner/service/vehicleparking/model/VehicleParkingSpaces.java index eb50440651b..6827e6af198 100644 --- a/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingSpaces.java +++ b/application/src/main/java/org/opentripplanner/service/vehicleparking/model/VehicleParkingSpaces.java @@ -1,4 +1,4 @@ -package org.opentripplanner.routing.vehicle_parking; +package org.opentripplanner.service.vehicleparking.model; import java.io.Serializable; import java.util.Objects; diff --git a/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingState.java b/application/src/main/java/org/opentripplanner/service/vehicleparking/model/VehicleParkingState.java similarity index 80% rename from application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingState.java rename to application/src/main/java/org/opentripplanner/service/vehicleparking/model/VehicleParkingState.java index ff9178a9b34..e3af795459c 100644 --- a/application/src/main/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingState.java +++ b/application/src/main/java/org/opentripplanner/service/vehicleparking/model/VehicleParkingState.java @@ -1,4 +1,4 @@ -package org.opentripplanner.routing.vehicle_parking; +package org.opentripplanner.service.vehicleparking.model; /** * The state of the vehicle parking. TEMPORARILY_CLOSED and CLOSED are distinct states so that they diff --git a/application/src/main/java/org/opentripplanner/standalone/OTPMain.java b/application/src/main/java/org/opentripplanner/standalone/OTPMain.java index a10f8f8ef7b..ade5067a981 100644 --- a/application/src/main/java/org/opentripplanner/standalone/OTPMain.java +++ b/application/src/main/java/org/opentripplanner/standalone/OTPMain.java @@ -152,6 +152,7 @@ private static void startOTPServer(CommandLineParameters cli) { app.graph(), app.timetableRepository(), app.worldEnvelopeRepository(), + app.vehicleParkingRepository(), config.buildConfig(), config.routerConfig(), DataImportIssueSummary.combine(graphBuilder.issueSummary(), app.dataImportIssueSummary()), diff --git a/application/src/main/java/org/opentripplanner/standalone/api/OtpServerRequestContext.java b/application/src/main/java/org/opentripplanner/standalone/api/OtpServerRequestContext.java index 49b43856011..b5b39ddee18 100644 --- a/application/src/main/java/org/opentripplanner/standalone/api/OtpServerRequestContext.java +++ b/application/src/main/java/org/opentripplanner/standalone/api/OtpServerRequestContext.java @@ -23,6 +23,7 @@ import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.routing.graphfinder.GraphFinder; import org.opentripplanner.service.realtimevehicles.RealtimeVehicleService; +import org.opentripplanner.service.vehicleparking.VehicleParkingService; import org.opentripplanner.service.vehiclerental.VehicleRentalService; import org.opentripplanner.service.worldenvelope.WorldEnvelopeService; import org.opentripplanner.standalone.config.routerconfig.VectorTileConfig; @@ -96,6 +97,8 @@ public interface OtpServerRequestContext { VehicleRentalService vehicleRentalService(); + VehicleParkingService vehicleParkingService(); + TransitTuningParameters transitTuningParameters(); RaptorTuningParameters raptorTuningParameters(); 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 279c3c48368..eb3fae5275f 100644 --- a/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplication.java +++ b/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplication.java @@ -19,6 +19,8 @@ import org.opentripplanner.routing.algorithm.raptoradapter.transit.mappers.TransitLayerUpdater; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.service.realtimevehicles.RealtimeVehicleRepository; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.VehicleParkingService; import org.opentripplanner.service.vehiclerental.VehicleRentalRepository; import org.opentripplanner.service.worldenvelope.WorldEnvelopeRepository; import org.opentripplanner.standalone.api.OtpServerRequestContext; @@ -75,6 +77,7 @@ public class ConstructApplication { GraphBuilderDataSources graphBuilderDataSources, DataImportIssueSummary issueSummary, EmissionsDataModel emissionsDataModel, + VehicleParkingRepository vehicleParkingRepository, @Nullable StopConsolidationRepository stopConsolidationRepository, StreetLimitationParameters streetLimitationParameters ) { @@ -93,6 +96,7 @@ public class ConstructApplication { .timetableRepository(timetableRepository) .graphVisualizer(graphVisualizer) .worldEnvelopeRepository(worldEnvelopeRepository) + .vehicleParkingRepository(vehicleParkingRepository) .emissionsDataModel(emissionsDataModel) .dataImportIssueSummary(issueSummary) .stopConsolidationRepository(stopConsolidationRepository) @@ -127,6 +131,7 @@ public GraphBuilder createGraphBuilder() { graph(), timetableRepository(), factory.worldEnvelopeRepository(), + factory.vehicleParkingRepository(), factory.emissionsDataModel(), factory.stopConsolidationRepository(), factory.streetLimitationParameters(), @@ -163,6 +168,7 @@ private void setupTransitRoutingServer() { graph(), realtimeVehicleRepository(), vehicleRentalRepository(), + vehicleParkingRepository(), timetableRepository(), routerConfig().updaterConfig() ); @@ -266,6 +272,14 @@ public VehicleRentalRepository vehicleRentalRepository() { return factory.vehicleRentalRepository(); } + public VehicleParkingService vehicleParkingService() { + return factory.vehicleParkingService(); + } + + public VehicleParkingRepository vehicleParkingRepository() { + return factory.vehicleParkingRepository(); + } + public Graph graph() { return factory.graph(); } 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 7191b82e814..d6310c0c616 100644 --- a/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationFactory.java +++ b/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationFactory.java @@ -22,6 +22,9 @@ import org.opentripplanner.service.realtimevehicles.RealtimeVehicleService; import org.opentripplanner.service.realtimevehicles.configure.RealtimeVehicleRepositoryModule; import org.opentripplanner.service.realtimevehicles.configure.RealtimeVehicleServiceModule; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.VehicleParkingService; +import org.opentripplanner.service.vehicleparking.configure.VehicleParkingServiceModule; import org.opentripplanner.service.vehiclerental.VehicleRentalRepository; import org.opentripplanner.service.vehiclerental.VehicleRentalService; import org.opentripplanner.service.vehiclerental.configure.VehicleRentalRepositoryModule; @@ -54,6 +57,7 @@ RealtimeVehicleRepositoryModule.class, VehicleRentalServiceModule.class, VehicleRentalRepositoryModule.class, + VehicleParkingServiceModule.class, ConstructApplicationModule.class, RideHailingServicesModule.class, EmissionsServiceModule.class, @@ -75,6 +79,8 @@ public interface ConstructApplicationFactory { RealtimeVehicleService realtimeVehicleService(); VehicleRentalRepository vehicleRentalRepository(); VehicleRentalService vehicleRentalService(); + VehicleParkingRepository vehicleParkingRepository(); + VehicleParkingService vehicleParkingService(); DataImportIssueSummary dataImportIssueSummary(); @Nullable @@ -121,6 +127,9 @@ Builder stopConsolidationRepository( @Nullable StopConsolidationRepository stopConsolidationRepository ); + @BindsInstance + Builder vehicleParkingRepository(VehicleParkingRepository parkingRepository); + @BindsInstance Builder dataImportIssueSummary(DataImportIssueSummary issueSummary); diff --git a/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationModule.java b/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationModule.java index ab0f242f834..bbdd39c57d5 100644 --- a/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationModule.java +++ b/application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationModule.java @@ -16,6 +16,7 @@ import org.opentripplanner.routing.algorithm.raptoradapter.transit.TripSchedule; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.service.realtimevehicles.RealtimeVehicleService; +import org.opentripplanner.service.vehicleparking.VehicleParkingService; import org.opentripplanner.service.vehiclerental.VehicleRentalService; import org.opentripplanner.service.worldenvelope.WorldEnvelopeService; import org.opentripplanner.standalone.api.OtpServerRequestContext; @@ -37,6 +38,7 @@ OtpServerRequestContext providesServerContext( WorldEnvelopeService worldEnvelopeService, RealtimeVehicleService realtimeVehicleService, VehicleRentalService vehicleRentalService, + VehicleParkingService vehicleParkingService, List rideHailingServices, @Nullable StopConsolidationService stopConsolidationService, StreetLimitationParametersService streetLimitationParametersService, @@ -59,6 +61,7 @@ OtpServerRequestContext providesServerContext( worldEnvelopeService, realtimeVehicleService, vehicleRentalService, + vehicleParkingService, emissionsService, sorlandsbanenService, routerConfig.flexParameters(), 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 300eb24f997..021af778345 100644 --- a/application/src/main/java/org/opentripplanner/standalone/configure/LoadApplication.java +++ b/application/src/main/java/org/opentripplanner/standalone/configure/LoadApplication.java @@ -8,6 +8,7 @@ import org.opentripplanner.graph_builder.issue.api.DataImportIssueSummary; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.routing.graph.SerializedGraphObject; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; import org.opentripplanner.service.worldenvelope.WorldEnvelopeRepository; import org.opentripplanner.standalone.config.CommandLineParameters; import org.opentripplanner.standalone.config.ConfigModel; @@ -56,6 +57,7 @@ public ConstructApplication appConstruction(SerializedGraphObject obj) { obj.graph, obj.timetableRepository, obj.worldEnvelopeRepository, + obj.parkingRepository, obj.issueSummary, obj.emissionsDataModel, obj.stopConsolidationRepository, @@ -69,6 +71,7 @@ public ConstructApplication appConstruction() { factory.emptyGraph(), factory.emptyTimetableRepository(), factory.emptyWorldEnvelopeRepository(), + factory.emptyVehicleParkingRepository(), DataImportIssueSummary.empty(), factory.emptyEmissionsDataModel(), factory.emptyStopConsolidationRepository(), @@ -91,6 +94,7 @@ private ConstructApplication createAppConstruction( Graph graph, TimetableRepository timetableRepository, WorldEnvelopeRepository worldEnvelopeRepository, + VehicleParkingRepository parkingRepository, DataImportIssueSummary issueSummary, @Nullable EmissionsDataModel emissionsDataModel, @Nullable StopConsolidationRepository stopConsolidationRepository, @@ -105,6 +109,7 @@ private ConstructApplication createAppConstruction( graphBuilderDataSources(), issueSummary, emissionsDataModel, + parkingRepository, stopConsolidationRepository, streetLimitationParameters ); 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 8d11d645c48..b054fac3ca5 100644 --- a/application/src/main/java/org/opentripplanner/standalone/configure/LoadApplicationFactory.java +++ b/application/src/main/java/org/opentripplanner/standalone/configure/LoadApplicationFactory.java @@ -11,6 +11,8 @@ import org.opentripplanner.ext.stopconsolidation.configure.StopConsolidationRepositoryModule; import org.opentripplanner.graph_builder.GraphBuilderDataSources; import org.opentripplanner.routing.graph.Graph; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.configure.VehicleParkingRepositoryModule; import org.opentripplanner.service.worldenvelope.WorldEnvelopeRepository; import org.opentripplanner.service.worldenvelope.configure.WorldEnvelopeRepositoryModule; import org.opentripplanner.standalone.config.CommandLineParameters; @@ -30,6 +32,7 @@ GsDataSourceModule.class, WorldEnvelopeRepositoryModule.class, StopConsolidationRepositoryModule.class, + VehicleParkingRepositoryModule.class, } ) public interface LoadApplicationFactory { @@ -58,6 +61,9 @@ public interface LoadApplicationFactory { @Singleton StreetLimitationParameters emptyStreetLimitationParameters(); + @Singleton + VehicleParkingRepository emptyVehicleParkingRepository(); + @Component.Builder interface Builder { @BindsInstance 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 9f38db5c420..1427dcf1971 100644 --- a/application/src/main/java/org/opentripplanner/standalone/server/DefaultServerRequestContext.java +++ b/application/src/main/java/org/opentripplanner/standalone/server/DefaultServerRequestContext.java @@ -21,6 +21,7 @@ import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.routing.service.DefaultRoutingService; import org.opentripplanner.service.realtimevehicles.RealtimeVehicleService; +import org.opentripplanner.service.vehicleparking.VehicleParkingService; import org.opentripplanner.service.vehiclerental.VehicleRentalService; import org.opentripplanner.service.worldenvelope.WorldEnvelopeService; import org.opentripplanner.standalone.api.HttpRequestScoped; @@ -47,6 +48,7 @@ public class DefaultServerRequestContext implements OtpServerRequestContext { private final WorldEnvelopeService worldEnvelopeService; private final RealtimeVehicleService realtimeVehicleService; private final VehicleRentalService vehicleRentalService; + private final VehicleParkingService vehicleParkingService; private final EmissionsService emissionsService; @Nullable @@ -73,6 +75,7 @@ private DefaultServerRequestContext( WorldEnvelopeService worldEnvelopeService, RealtimeVehicleService realtimeVehicleService, VehicleRentalService vehicleRentalService, + VehicleParkingService vehicleParkingService, @Nullable EmissionsService emissionsService, @Nullable SorlandsbanenNorwayService sorlandsbanenService, List rideHailingServices, @@ -90,6 +93,7 @@ private DefaultServerRequestContext( this.tileRendererManager = tileRendererManager; this.vectorTileConfig = vectorTileConfig; this.vehicleRentalService = vehicleRentalService; + this.vehicleParkingService = vehicleParkingService; this.flexParameters = flexParameters; this.traverseVisitor = traverseVisitor; this.routeRequestDefaults = routeRequestDefaults; @@ -117,6 +121,7 @@ public static DefaultServerRequestContext create( WorldEnvelopeService worldEnvelopeService, RealtimeVehicleService realtimeVehicleService, VehicleRentalService vehicleRentalService, + VehicleParkingService vehicleParkingService, @Nullable EmissionsService emissionsService, @Nullable SorlandsbanenNorwayService sorlandsbanenService, FlexParameters flexParameters, @@ -138,6 +143,7 @@ public static DefaultServerRequestContext create( worldEnvelopeService, realtimeVehicleService, vehicleRentalService, + vehicleParkingService, emissionsService, sorlandsbanenService, rideHailingServices, @@ -201,6 +207,11 @@ public VehicleRentalService vehicleRentalService() { return vehicleRentalService; } + @Override + public VehicleParkingService vehicleParkingService() { + return vehicleParkingService; + } + @Override public TransitTuningParameters transitTuningParameters() { return transitRoutingConfig; diff --git a/application/src/main/java/org/opentripplanner/street/model/edge/StreetVehicleParkingLink.java b/application/src/main/java/org/opentripplanner/street/model/edge/StreetVehicleParkingLink.java index 682aeca0b3e..ac046dd45df 100644 --- a/application/src/main/java/org/opentripplanner/street/model/edge/StreetVehicleParkingLink.java +++ b/application/src/main/java/org/opentripplanner/street/model/edge/StreetVehicleParkingLink.java @@ -4,7 +4,7 @@ import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.routing.api.request.preference.VehicleParkingPreferences; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; import org.opentripplanner.street.model.vertex.StreetVertex; import org.opentripplanner.street.model.vertex.VehicleParkingEntranceVertex; import org.opentripplanner.street.search.TraverseMode; diff --git a/application/src/main/java/org/opentripplanner/street/model/edge/VehicleParkingEdge.java b/application/src/main/java/org/opentripplanner/street/model/edge/VehicleParkingEdge.java index 95d9ea5507d..a7aa7bb2535 100644 --- a/application/src/main/java/org/opentripplanner/street/model/edge/VehicleParkingEdge.java +++ b/application/src/main/java/org/opentripplanner/street/model/edge/VehicleParkingEdge.java @@ -8,7 +8,7 @@ import org.opentripplanner.routing.api.request.preference.CarPreferences; import org.opentripplanner.routing.api.request.preference.RoutingPreferences; import org.opentripplanner.routing.api.request.preference.VehicleParkingPreferences; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; import org.opentripplanner.street.model.vertex.VehicleParkingEntranceVertex; import org.opentripplanner.street.search.TraverseMode; import org.opentripplanner.street.search.request.StreetSearchRequest; diff --git a/application/src/main/java/org/opentripplanner/street/model/vertex/VehicleParkingEntranceVertex.java b/application/src/main/java/org/opentripplanner/street/model/vertex/VehicleParkingEntranceVertex.java index 591f71f1869..9a4e64dc2d6 100644 --- a/application/src/main/java/org/opentripplanner/street/model/vertex/VehicleParkingEntranceVertex.java +++ b/application/src/main/java/org/opentripplanner/street/model/vertex/VehicleParkingEntranceVertex.java @@ -3,8 +3,8 @@ import java.util.Collection; import java.util.Objects; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingEntrance; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingEntrance; import org.opentripplanner.street.model.edge.Edge; import org.opentripplanner.street.model.edge.StreetVehicleParkingLink; import org.opentripplanner.street.model.edge.VehicleParkingEdge; diff --git a/application/src/main/java/org/opentripplanner/street/model/vertex/VertexFactory.java b/application/src/main/java/org/opentripplanner/street/model/vertex/VertexFactory.java index 80bd8021309..422fc16c837 100644 --- a/application/src/main/java/org/opentripplanner/street/model/vertex/VertexFactory.java +++ b/application/src/main/java/org/opentripplanner/street/model/vertex/VertexFactory.java @@ -6,8 +6,8 @@ import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.osm.model.OsmNode; import org.opentripplanner.routing.graph.Graph; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingEntrance; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingEntrance; import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; import org.opentripplanner.service.vehiclerental.street.VehicleRentalPlaceVertex; import org.opentripplanner.street.model.edge.StreetEdge; diff --git a/application/src/main/java/org/opentripplanner/transit/api/model/FilterValues.java b/application/src/main/java/org/opentripplanner/transit/api/model/FilterValues.java new file mode 100644 index 00000000000..391b2531231 --- /dev/null +++ b/application/src/main/java/org/opentripplanner/transit/api/model/FilterValues.java @@ -0,0 +1,86 @@ +package org.opentripplanner.transit.api.model; + +import com.beust.jcommander.internal.Nullable; +import java.util.Collection; +import java.util.NoSuchElementException; +import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.transit.service.TransitService; + +/** + * {@link FilterValues} is meant to be used when filtering results from {@link TransitService}. + *

+ * This abstraction over the Collection type lets us keep filter specific functionality separate + * from interpretation of various states of a collection. For instance in which case the filter values + * should match all entities they are meant to filter. + *

+ * @param - The type of the filter values. Typically, String or {@link FeedScopedId}. + */ +public abstract class FilterValues { + + @Nullable + protected final Collection values; + + private final String name; + + FilterValues(String name, @Nullable Collection values) { + this.name = name; + this.values = values; + } + + /** + * Returns a {@link FilterValues} that matches everything if there are no filter values. + *

+ * @param name - The name of the filter. + * @param - The type of the filter values. Typically, String or {@link FeedScopedId}. + * @param values - The {@link Collection} of filter values. + * @return FilterValues + */ + public static FilterValues ofEmptyIsEverything( + String name, + @Nullable Collection values + ) { + return new FilterValuesEmptyIsEverything<>(name, values); + } + + /** + * Returns a {@link RequiredFilterValues} that throws an exception at creation time if the filter + * values is null or empty. + *

+ * @param name - The name of the filter. + * @param - The type of the filter values. Typically, String or {@link FeedScopedId}. + * @param values - The {@link Collection} of filter values. + * @return RequiredFilterValues + */ + public static RequiredFilterValues ofRequired( + String name, + @Nullable Collection values + ) { + return new RequiredFilterValues<>(name, values); + } + + /** + * Returns True if the collection of filter values matches everything that it could filter. If this + * is the case, then the filter values should not be used to filter anything and filtering logic can + * safely ignore it. + *

+ * @return boolean + */ + public abstract boolean includeEverything(); + + /** + * Returns the collection of filter values. If the filter values effectively don't filter anything, + * an exception is thrown. + *

+ * @return Collection - The values of the filter. + */ + public Collection get() { + if (includeEverything()) { + throw new NoSuchElementException( + "Filter values for filter %s effectively don't filter, use includeEverything() before calling this method.".formatted( + name + ) + ); + } + return values; + } +} diff --git a/application/src/main/java/org/opentripplanner/transit/api/model/FilterValuesEmptyIsEverything.java b/application/src/main/java/org/opentripplanner/transit/api/model/FilterValuesEmptyIsEverything.java new file mode 100644 index 00000000000..ebe0af7bccb --- /dev/null +++ b/application/src/main/java/org/opentripplanner/transit/api/model/FilterValuesEmptyIsEverything.java @@ -0,0 +1,19 @@ +package org.opentripplanner.transit.api.model; + +import java.util.Collection; + +/** + * {@link FilterValuesEmptyIsEverything} is a subclass of {@link FilterValues} that includes + * everything if the values are null or empty. + */ +public class FilterValuesEmptyIsEverything extends FilterValues { + + FilterValuesEmptyIsEverything(String name, Collection values) { + super(name, values); + } + + @Override + public boolean includeEverything() { + return values == null || values.isEmpty(); + } +} diff --git a/application/src/main/java/org/opentripplanner/transit/api/model/RequiredFilterValues.java b/application/src/main/java/org/opentripplanner/transit/api/model/RequiredFilterValues.java new file mode 100644 index 00000000000..f4456dcce75 --- /dev/null +++ b/application/src/main/java/org/opentripplanner/transit/api/model/RequiredFilterValues.java @@ -0,0 +1,24 @@ +package org.opentripplanner.transit.api.model; + +import java.util.Collection; + +/** + * {@link RequiredFilterValues} is a subclass of {@link FilterValues} that requires at least one + * value to be included. + */ +public class RequiredFilterValues extends FilterValues { + + RequiredFilterValues(String name, Collection values) { + super(name, values); + if (values == null || values.isEmpty()) { + throw new IllegalArgumentException("Filter %s values must not be empty.".formatted(name)); + } + } + + @Override + public boolean includeEverything() { + // RequiredFilterValues should never include everything. In theory the filter values could be + // exhaustive, but there is no check for that currently. + return false; + } +} diff --git a/application/src/main/java/org/opentripplanner/transit/api/request/TripOnServiceDateRequest.java b/application/src/main/java/org/opentripplanner/transit/api/request/TripOnServiceDateRequest.java index adc7283ee4d..c61bb8ad107 100644 --- a/application/src/main/java/org/opentripplanner/transit/api/request/TripOnServiceDateRequest.java +++ b/application/src/main/java/org/opentripplanner/transit/api/request/TripOnServiceDateRequest.java @@ -1,77 +1,75 @@ package org.opentripplanner.transit.api.request; import java.time.LocalDate; -import java.util.List; +import org.opentripplanner.transit.api.model.FilterValues; +import org.opentripplanner.transit.api.model.RequiredFilterValues; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.timetable.TripAlteration; -import org.opentripplanner.utils.collection.ListUtils; +import org.opentripplanner.transit.model.timetable.TripOnServiceDate; -/* +/** * A request for trips on a specific service date. - * - * This request is used to retrieve TripsOnServiceDates that match the provided criteria. + *

+ * This request is used to retrieve {@link TripOnServiceDate}s that match the provided filter values. * At least one operatingDay must be provided. */ public class TripOnServiceDateRequest { - private final List operatingDays; - private final List authorities; - private final List lines; - private final List serviceJourneys; - private final List replacementFor; - private final List privateCodes; - private final List alterations; + private final FilterValues serviceDates; + private final FilterValues agencies; + private final FilterValues routes; + private final FilterValues serviceJourneys; + private final FilterValues replacementFor; + private final FilterValues netexInternalPlanningCodes; + private final FilterValues alterations; protected TripOnServiceDateRequest( - List operatingDays, - List authorities, - List lines, - List serviceJourneys, - List replacementFor, - List privateCodes, - List alterations + RequiredFilterValues serviceDates, + FilterValues agencies, + FilterValues routes, + FilterValues serviceJourneys, + FilterValues replacementFor, + FilterValues netexInternalPlanningCodes, + FilterValues alterations ) { - if (operatingDays == null || operatingDays.isEmpty()) { - throw new IllegalArgumentException("operatingDays must have at least one date"); - } - this.operatingDays = ListUtils.nullSafeImmutableList(operatingDays); - this.authorities = ListUtils.nullSafeImmutableList(authorities); - this.lines = ListUtils.nullSafeImmutableList(lines); - this.serviceJourneys = ListUtils.nullSafeImmutableList(serviceJourneys); - this.replacementFor = ListUtils.nullSafeImmutableList(replacementFor); - this.privateCodes = ListUtils.nullSafeImmutableList(privateCodes); - this.alterations = ListUtils.nullSafeImmutableList(alterations); + this.serviceDates = serviceDates; + this.agencies = agencies; + this.routes = routes; + this.serviceJourneys = serviceJourneys; + this.replacementFor = replacementFor; + this.netexInternalPlanningCodes = netexInternalPlanningCodes; + this.alterations = alterations; } - public static TripOnServiceDateRequestBuilder of() { - return new TripOnServiceDateRequestBuilder(); + public static TripOnServiceDateRequestBuilder of(RequiredFilterValues serviceDates) { + return new TripOnServiceDateRequestBuilder(serviceDates); } - public List authorities() { - return authorities; + public FilterValues agencies() { + return agencies; } - public List lines() { - return lines; + public FilterValues routes() { + return routes; } - public List serviceJourneys() { + public FilterValues serviceJourneys() { return serviceJourneys; } - public List replacementFor() { + public FilterValues replacementFor() { return replacementFor; } - public List privateCodes() { - return privateCodes; + public FilterValues netexInternalPlanningCodes() { + return netexInternalPlanningCodes; } - public List alterations() { + public FilterValues alterations() { return alterations; } - public List operatingDays() { - return operatingDays; + public FilterValues serviceDates() { + return serviceDates; } } diff --git a/application/src/main/java/org/opentripplanner/transit/api/request/TripOnServiceDateRequestBuilder.java b/application/src/main/java/org/opentripplanner/transit/api/request/TripOnServiceDateRequestBuilder.java index 7aa2644fdc9..534557c15d8 100644 --- a/application/src/main/java/org/opentripplanner/transit/api/request/TripOnServiceDateRequestBuilder.java +++ b/application/src/main/java/org/opentripplanner/transit/api/request/TripOnServiceDateRequestBuilder.java @@ -2,64 +2,84 @@ import java.time.LocalDate; import java.util.List; +import org.opentripplanner.transit.api.model.FilterValues; +import org.opentripplanner.transit.api.model.RequiredFilterValues; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.timetable.TripAlteration; public class TripOnServiceDateRequestBuilder { - private List authorities; - private List lines; - private List serviceJourneys; - private List replacementFor; - private List privateCodes; - private List alterations; - private List operatingDays; + private FilterValues agencies = FilterValues.ofEmptyIsEverything( + "agencies", + List.of() + ); + private FilterValues routes = FilterValues.ofEmptyIsEverything("routes", List.of()); + private FilterValues serviceJourneys = FilterValues.ofEmptyIsEverything( + "serviceJourneys", + List.of() + ); + private FilterValues replacementFor = FilterValues.ofEmptyIsEverything( + "replacementFor", + List.of() + ); + private FilterValues netexInternalPlanningCodes = FilterValues.ofEmptyIsEverything( + "netexInternalPlanningCodes", + List.of() + ); + private FilterValues alterations = FilterValues.ofEmptyIsEverything( + "alterations", + List.of() + ); + private RequiredFilterValues serviceDates; - protected TripOnServiceDateRequestBuilder() {} - - public TripOnServiceDateRequestBuilder withOperatingDays(List operatingDays) { - this.operatingDays = operatingDays; - return this; + protected TripOnServiceDateRequestBuilder(RequiredFilterValues serviceDates) { + this.serviceDates = serviceDates; } - public TripOnServiceDateRequestBuilder withAuthorities(List authorities) { - this.authorities = authorities; + public TripOnServiceDateRequestBuilder withAgencies(FilterValues agencies) { + this.agencies = agencies; return this; } - public TripOnServiceDateRequestBuilder withLines(List lines) { - this.lines = lines; + public TripOnServiceDateRequestBuilder withRoutes(FilterValues routes) { + this.routes = routes; return this; } - public TripOnServiceDateRequestBuilder withServiceJourneys(List serviceJourneys) { + public TripOnServiceDateRequestBuilder withServiceJourneys( + FilterValues serviceJourneys + ) { this.serviceJourneys = serviceJourneys; return this; } - public TripOnServiceDateRequestBuilder withReplacementFor(List replacementFor) { + public TripOnServiceDateRequestBuilder withReplacementFor( + FilterValues replacementFor + ) { this.replacementFor = replacementFor; return this; } - public TripOnServiceDateRequestBuilder withPrivateCodes(List privateCodes) { - this.privateCodes = privateCodes; + public TripOnServiceDateRequestBuilder withNetexInternalPlanningCodes( + FilterValues netexInternalPlanningCodes + ) { + this.netexInternalPlanningCodes = netexInternalPlanningCodes; return this; } - public TripOnServiceDateRequestBuilder withAlterations(List alterations) { + public TripOnServiceDateRequestBuilder withAlterations(FilterValues alterations) { this.alterations = alterations; return this; } public TripOnServiceDateRequest build() { return new TripOnServiceDateRequest( - operatingDays, - authorities, - lines, + serviceDates, + agencies, + routes, serviceJourneys, replacementFor, - privateCodes, + netexInternalPlanningCodes, alterations ); } diff --git a/application/src/main/java/org/opentripplanner/transit/api/request/TripRequest.java b/application/src/main/java/org/opentripplanner/transit/api/request/TripRequest.java new file mode 100644 index 00000000000..c73e800582b --- /dev/null +++ b/application/src/main/java/org/opentripplanner/transit/api/request/TripRequest.java @@ -0,0 +1,51 @@ +package org.opentripplanner.transit.api.request; + +import java.time.LocalDate; +import org.opentripplanner.transit.api.model.FilterValues; +import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.transit.model.timetable.Trip; + +/** + * A request for {@link Trip}s. + *

+ * This request is used to retrieve {@link Trip}s that match the provided filter values. + */ +public class TripRequest { + + private final FilterValues agencies; + private final FilterValues routes; + private final FilterValues netexInternalPlanningCodes; + private final FilterValues serviceDates; + + protected TripRequest( + FilterValues agencies, + FilterValues routes, + FilterValues netexInternalPlanningCodes, + FilterValues serviceDates + ) { + this.agencies = agencies; + this.routes = routes; + this.netexInternalPlanningCodes = netexInternalPlanningCodes; + this.serviceDates = serviceDates; + } + + public static TripRequestBuilder of() { + return new TripRequestBuilder(); + } + + public FilterValues agencies() { + return agencies; + } + + public FilterValues routes() { + return routes; + } + + public FilterValues netexInternalPlanningCodes() { + return netexInternalPlanningCodes; + } + + public FilterValues serviceDates() { + return serviceDates; + } +} diff --git a/application/src/main/java/org/opentripplanner/transit/api/request/TripRequestBuilder.java b/application/src/main/java/org/opentripplanner/transit/api/request/TripRequestBuilder.java new file mode 100644 index 00000000000..3a2f80a3e34 --- /dev/null +++ b/application/src/main/java/org/opentripplanner/transit/api/request/TripRequestBuilder.java @@ -0,0 +1,51 @@ +package org.opentripplanner.transit.api.request; + +import java.time.LocalDate; +import java.util.List; +import org.opentripplanner.transit.api.model.FilterValues; +import org.opentripplanner.transit.model.framework.FeedScopedId; + +public class TripRequestBuilder { + + private FilterValues agencies = FilterValues.ofEmptyIsEverything( + "agencies", + List.of() + ); + private FilterValues routes = FilterValues.ofEmptyIsEverything("routes", List.of()); + private FilterValues netexInternalPlanningCodes = FilterValues.ofEmptyIsEverything( + "netexInternalPlanningCodes", + List.of() + ); + private FilterValues serviceDates = FilterValues.ofEmptyIsEverything( + "serviceDates", + List.of() + ); + + protected TripRequestBuilder() {} + + public TripRequestBuilder withAgencies(FilterValues agencies) { + this.agencies = agencies; + return this; + } + + public TripRequestBuilder withRoutes(FilterValues routes) { + this.routes = routes; + return this; + } + + public TripRequestBuilder withNetexInternalPlanningCodes( + FilterValues netexInternalPlanningCodes + ) { + this.netexInternalPlanningCodes = netexInternalPlanningCodes; + return this; + } + + public TripRequestBuilder withServiceDates(FilterValues serviceDates) { + this.serviceDates = serviceDates; + return this; + } + + public TripRequest build() { + return new TripRequest(agencies, routes, netexInternalPlanningCodes, serviceDates); + } +} diff --git a/application/src/main/java/org/opentripplanner/transit/model/filter/expr/ContainsMatcher.java b/application/src/main/java/org/opentripplanner/transit/model/filter/expr/ContainsMatcher.java index ed3731897ec..1be81ba9e7f 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/filter/expr/ContainsMatcher.java +++ b/application/src/main/java/org/opentripplanner/transit/model/filter/expr/ContainsMatcher.java @@ -50,6 +50,6 @@ public boolean match(S entity) { @Override public String toString() { - return "ContainsMatcher: " + relationshipName + ": " + valueMatcher.toString(); + return "ContainsMatcher: " + relationshipName + ": " + valueMatcher; } } diff --git a/application/src/main/java/org/opentripplanner/transit/model/filter/expr/ExpressionBuilder.java b/application/src/main/java/org/opentripplanner/transit/model/filter/expr/ExpressionBuilder.java index b1b4d5be322..f2910a4c8d2 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/filter/expr/ExpressionBuilder.java +++ b/application/src/main/java/org/opentripplanner/transit/model/filter/expr/ExpressionBuilder.java @@ -1,9 +1,9 @@ package org.opentripplanner.transit.model.filter.expr; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.function.Function; +import org.opentripplanner.transit.api.model.FilterValues; /** * A builder for creating complex matchers composed of other matchers. @@ -22,12 +22,15 @@ public static ExpressionBuilder of() { return new ExpressionBuilder<>(); } - public ExpressionBuilder or(Collection values, Function> valueProvider) { - if (values.isEmpty()) { + public ExpressionBuilder atLeastOneMatch( + FilterValues filterValues, + Function> matcherProvider + ) { + if (filterValues.includeEverything()) { return this; } - matchers.add(OrMatcher.of(values.stream().map(valueProvider).toList())); + matchers.add(OrMatcher.of(filterValues.get().stream().map(matcherProvider).toList())); return this; } diff --git a/application/src/main/java/org/opentripplanner/transit/model/filter/transit/TripMatcherFactory.java b/application/src/main/java/org/opentripplanner/transit/model/filter/transit/TripMatcherFactory.java new file mode 100644 index 00000000000..1ff33d9928d --- /dev/null +++ b/application/src/main/java/org/opentripplanner/transit/model/filter/transit/TripMatcherFactory.java @@ -0,0 +1,75 @@ +package org.opentripplanner.transit.model.filter.transit; + +import java.time.LocalDate; +import java.util.Set; +import java.util.function.Function; +import org.opentripplanner.transit.api.request.TripRequest; +import org.opentripplanner.transit.model.filter.expr.ContainsMatcher; +import org.opentripplanner.transit.model.filter.expr.EqualityMatcher; +import org.opentripplanner.transit.model.filter.expr.ExpressionBuilder; +import org.opentripplanner.transit.model.filter.expr.Matcher; +import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.transit.model.timetable.Trip; + +/** + * A factory for creating matchers for {@link Trip} objects. + *

+ * This factory is used to create matchers for {@link Trip} objects based on a request. The + * resulting matcher can be used to filter a list of {@link Trip} objects. + */ +public class TripMatcherFactory { + + /** + * Creates a matcher for {@link Trip} objects based on the given request. + * + * @param request - a {@link TripRequest} object that contains the criteria for the matcher. + * @param serviceDateProvider a function that provides the service dates for a given {@link FeedScopedId} of a {@link Trip}. + * @return a {@link Matcher} to be used for filtering {@link Trip} objects. + */ + public static Matcher of( + TripRequest request, + Function> serviceDateProvider + ) { + ExpressionBuilder expr = ExpressionBuilder.of(); + + expr.atLeastOneMatch(request.agencies(), TripMatcherFactory::agencyId); + expr.atLeastOneMatch(request.routes(), TripMatcherFactory::routeId); + expr.atLeastOneMatch( + request.netexInternalPlanningCodes(), + TripMatcherFactory::netexInternalPlanningCode + ); + expr.atLeastOneMatch( + request.serviceDates(), + TripMatcherFactory.serviceDate(serviceDateProvider) + ); + + return expr.build(); + } + + static Matcher agencyId(FeedScopedId id) { + return new EqualityMatcher<>("agency", id, t -> t.getRoute().getAgency().getId()); + } + + static Matcher routeId(FeedScopedId id) { + return new EqualityMatcher<>("route", id, t -> t.getRoute().getId()); + } + + static Matcher netexInternalPlanningCode(String code) { + return new EqualityMatcher<>( + "netexInternalPlanningCode", + code, + Trip::getNetexInternalPlanningCode + ); + } + + static Function> serviceDate( + Function> serviceDateProvider + ) { + return date -> + new ContainsMatcher<>( + "serviceDates", + t -> serviceDateProvider.apply(t.getServiceId()), + new EqualityMatcher<>("serviceDate", date, (dateToMatch -> dateToMatch)) + ); + } +} diff --git a/application/src/main/java/org/opentripplanner/transit/model/filter/transit/TripOnServiceDateMatcherFactory.java b/application/src/main/java/org/opentripplanner/transit/model/filter/transit/TripOnServiceDateMatcherFactory.java index f86e7a1ff77..7442e2874eb 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/filter/transit/TripOnServiceDateMatcherFactory.java +++ b/application/src/main/java/org/opentripplanner/transit/model/filter/transit/TripOnServiceDateMatcherFactory.java @@ -12,27 +12,33 @@ import org.opentripplanner.transit.model.timetable.TripOnServiceDate; /** - * A factory for creating matchers for TripOnServiceDate objects. + * A factory for creating matchers for {@link TripOnServiceDate} objects. *

- * This factory is used to create matchers for TripOnServiceDate objects based on a request. The - * resulting matcher can be used to filter a list of TripOnServiceDate objects. + * This factory is used to create matchers for {@link TripOnServiceDate} objects based on a request. The + * resulting matcher can be used to filter a list of {@link TripOnServiceDate} objects. */ public class TripOnServiceDateMatcherFactory { public static Matcher of(TripOnServiceDateRequest request) { ExpressionBuilder expr = ExpressionBuilder.of(); - expr.or(request.operatingDays(), TripOnServiceDateMatcherFactory::operatingDay); - expr.or(request.authorities(), TripOnServiceDateMatcherFactory::authorityId); - expr.or(request.lines(), TripOnServiceDateMatcherFactory::routeId); - expr.or(request.serviceJourneys(), TripOnServiceDateMatcherFactory::serviceJourneyId); - expr.or(request.replacementFor(), TripOnServiceDateMatcherFactory::replacementFor); - expr.or(request.privateCodes(), TripOnServiceDateMatcherFactory::privateCode); - expr.or(request.alterations(), TripOnServiceDateMatcherFactory::alteration); + expr.atLeastOneMatch(request.serviceDates(), TripOnServiceDateMatcherFactory::serviceDate); + expr.atLeastOneMatch(request.agencies(), TripOnServiceDateMatcherFactory::agencyId); + expr.atLeastOneMatch(request.routes(), TripOnServiceDateMatcherFactory::routeId); + expr.atLeastOneMatch( + request.serviceJourneys(), + TripOnServiceDateMatcherFactory::serviceJourneyId + ); + expr.atLeastOneMatch(request.replacementFor(), TripOnServiceDateMatcherFactory::replacementFor); + expr.atLeastOneMatch( + request.netexInternalPlanningCodes(), + TripOnServiceDateMatcherFactory::netexInternalPlanningCode + ); + expr.atLeastOneMatch(request.alterations(), TripOnServiceDateMatcherFactory::alteration); return expr.build(); } - static Matcher authorityId(FeedScopedId id) { + static Matcher agencyId(FeedScopedId id) { return new EqualityMatcher<>("agency", id, t -> t.getTrip().getRoute().getAgency().getId()); } @@ -52,16 +58,16 @@ static Matcher replacementFor(FeedScopedId id) { ); } - static Matcher privateCode(String code) { + static Matcher netexInternalPlanningCode(String code) { return new EqualityMatcher<>( - "privateCode", + "netexInternalPlanningCode", code, t -> t.getTrip().getNetexInternalPlanningCode() ); } - static Matcher operatingDay(LocalDate date) { - return new EqualityMatcher<>("operatingDay", date, TripOnServiceDate::getServiceDate); + static Matcher serviceDate(LocalDate date) { + return new EqualityMatcher<>("serviceDate", date, TripOnServiceDate::getServiceDate); } static Matcher alteration(TripAlteration alteration) { diff --git a/application/src/main/java/org/opentripplanner/transit/model/timetable/TripOnServiceDate.java b/application/src/main/java/org/opentripplanner/transit/model/timetable/TripOnServiceDate.java index ee520f9e0f0..1a22ec70000 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/timetable/TripOnServiceDate.java +++ b/application/src/main/java/org/opentripplanner/transit/model/timetable/TripOnServiceDate.java @@ -45,10 +45,6 @@ public List getReplacementFor() { return replacementFor; } - public TripIdAndServiceDate getTripIdAndServiceDate() { - return new TripIdAndServiceDate(trip.getId(), serviceDate); - } - @Override public boolean sameAs(TripOnServiceDate other) { return ( diff --git a/application/src/main/java/org/opentripplanner/transit/model/timetable/booking/BookingInfo.java b/application/src/main/java/org/opentripplanner/transit/model/timetable/booking/BookingInfo.java index b21543b717c..8b48a61ffbe 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/timetable/booking/BookingInfo.java +++ b/application/src/main/java/org/opentripplanner/transit/model/timetable/booking/BookingInfo.java @@ -3,6 +3,7 @@ import java.io.Serializable; import java.time.Duration; import java.util.EnumSet; +import java.util.Optional; import javax.annotation.Nullable; import org.opentripplanner.transit.model.organization.ContactInfo; import org.opentripplanner.utils.tostring.ToStringBuilder; @@ -99,14 +100,12 @@ public BookingTime getLatestBookingTime() { return latestBookingTime; } - @Nullable - public Duration getMinimumBookingNotice() { - return minimumBookingNotice; + public Optional getMinimumBookingNotice() { + return Optional.ofNullable(minimumBookingNotice); } - @Nullable - public Duration getMaximumBookingNotice() { - return maximumBookingNotice; + public Optional getMaximumBookingNotice() { + return Optional.ofNullable(maximumBookingNotice); } @Nullable diff --git a/application/src/main/java/org/opentripplanner/transit/model/timetable/booking/RoutingBookingInfo.java b/application/src/main/java/org/opentripplanner/transit/model/timetable/booking/RoutingBookingInfo.java index 471cff394e2..11ea27d48aa 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/timetable/booking/RoutingBookingInfo.java +++ b/application/src/main/java/org/opentripplanner/transit/model/timetable/booking/RoutingBookingInfo.java @@ -151,17 +151,17 @@ Builder withBookingInfo(@Nullable BookingInfo bookingInfo) { return this; } withLatestBookingTime(bookingInfo.getLatestBookingTime()); - withMinimumBookingNotice(bookingInfo.getMinimumBookingNotice()); + withMinimumBookingNotice(bookingInfo.getMinimumBookingNotice().orElse(null)); return this; } - public Builder withLatestBookingTime(BookingTime latestBookingTime) { + public Builder withLatestBookingTime(@Nullable BookingTime latestBookingTime) { this.latestBookingTime = latestBookingTime == null ? NOT_SET : latestBookingTime.relativeTimeSeconds(); return this; } - public Builder withMinimumBookingNotice(Duration minimumBookingNotice) { + public Builder withMinimumBookingNotice(@Nullable Duration minimumBookingNotice) { this.minimumBookingNotice = minimumBookingNotice == null ? NOT_SET : (int) minimumBookingNotice.toSeconds(); return this; 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 f8d1e437a34..d35977cae74 100644 --- a/application/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java +++ b/application/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java @@ -35,9 +35,11 @@ import org.opentripplanner.routing.stoptimes.ArrivalDeparture; import org.opentripplanner.routing.stoptimes.StopTimesHelper; import org.opentripplanner.transit.api.request.TripOnServiceDateRequest; +import org.opentripplanner.transit.api.request.TripRequest; import org.opentripplanner.transit.model.basic.Notice; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.filter.expr.Matcher; +import org.opentripplanner.transit.model.filter.transit.TripMatcherFactory; import org.opentripplanner.transit.model.filter.transit.TripOnServiceDateMatcherFactory; import org.opentripplanner.transit.model.framework.AbstractTransitEntity; import org.opentripplanner.transit.model.framework.Deduplicator; @@ -92,18 +94,18 @@ public DefaultTransitService( } @Override - public Collection getFeedIds() { + public Collection listFeedIds() { return this.timetableRepository.getFeedIds(); } @Override - public Collection getAgencies() { + public Collection listAgencies() { OTPRequestTimeoutException.checkForTimeout(); return this.timetableRepository.getAgencies(); } @Override - public Optional findAgencyById(FeedScopedId id) { + public Optional findAgency(FeedScopedId id) { return this.timetableRepository.findAgencyById(id); } @@ -123,29 +125,23 @@ public void addFeedInfo(FeedInfo info) { } @Override - public Collection getNoticesByEntity(AbstractTransitEntity entity) { + public Collection findNotices(AbstractTransitEntity entity) { return this.timetableRepository.getNoticesByElement().get(entity); } @Override - public TripPattern getTripPatternForId(FeedScopedId id) { + public TripPattern getTripPattern(FeedScopedId id) { return this.timetableRepository.getTripPatternForId(id); } @Override - public Collection getAllTripPatterns() { + public Collection listTripPatterns() { OTPRequestTimeoutException.checkForTimeout(); return this.timetableRepository.getAllTripPatterns(); } @Override - public Collection getNotices() { - OTPRequestTimeoutException.checkForTimeout(); - return this.timetableRepository.getNoticesByElement().values(); - } - - @Override - public Station getStationById(FeedScopedId id) { + public Station getStation(FeedScopedId id) { return this.timetableRepository.getSiteRepository().getStationById(id); } @@ -155,13 +151,13 @@ public MultiModalStation getMultiModalStation(FeedScopedId id) { } @Override - public Collection getStations() { + public Collection listStations() { OTPRequestTimeoutException.checkForTimeout(); return this.timetableRepository.getSiteRepository().listStations(); } @Override - public Integer getServiceCodeForId(FeedScopedId id) { + public Integer getServiceCode(FeedScopedId id) { return this.timetableRepository.getServiceCodes().get(id); } @@ -173,12 +169,7 @@ public TIntSet getServiceCodesRunningForDate(LocalDate serviceDate) { } @Override - public AreaStop getAreaStop(FeedScopedId id) { - return this.timetableRepository.getSiteRepository().getAreaStop(id); - } - - @Override - public Agency getAgencyForId(FeedScopedId id) { + public Agency getAgency(FeedScopedId id) { return this.timetableRepositoryIndex.getAgencyForId(id); } @@ -188,7 +179,7 @@ public RegularStop getRegularStop(FeedScopedId id) { } @Override - public Route getRouteForId(FeedScopedId id) { + public Route getRoute(FeedScopedId id) { TimetableSnapshot currentSnapshot = lazyGetTimeTableSnapShot(); if (currentSnapshot != null) { Route realtimeAddedRoute = currentSnapshot.getRealtimeAddedRoute(id); @@ -209,31 +200,25 @@ public void addRoutes(Route route) { } @Override - public Set getRoutesForStop(StopLocation stop) { + public Set findRoutes(StopLocation stop) { OTPRequestTimeoutException.checkForTimeout(); return this.timetableRepositoryIndex.getRoutesForStop(stop); } @Override - public Collection getPatternsForStop(StopLocation stop) { + public Collection findPatterns(StopLocation stop) { OTPRequestTimeoutException.checkForTimeout(); return this.timetableRepositoryIndex.getPatternsForStop(stop); } @Override - public Collection getTripsForStop(StopLocation stop) { - OTPRequestTimeoutException.checkForTimeout(); - return this.timetableRepositoryIndex.getTripsForStop(stop); - } - - @Override - public Collection getAllOperators() { + public Collection listOperators() { OTPRequestTimeoutException.checkForTimeout(); return this.timetableRepository.getOperators(); } @Override - public Operator getOperatorForId(FeedScopedId id) { + public Operator getOperator(FeedScopedId id) { return this.timetableRepositoryIndex.getOperatorForId(id); } @@ -243,12 +228,6 @@ public Collection listStopLocations() { return timetableRepository.getSiteRepository().listStopLocations(); } - @Override - public Collection listRegularStops() { - OTPRequestTimeoutException.checkForTimeout(); - return timetableRepository.getSiteRepository().listRegularStops(); - } - @Override public Collection listGroupStops() { OTPRequestTimeoutException.checkForTimeout(); @@ -261,7 +240,7 @@ public StopLocation getStopLocation(FeedScopedId id) { } @Override - public Collection getStopOrChildStops(FeedScopedId id) { + public Collection findStopOrChildStops(FeedScopedId id) { return timetableRepository.getSiteRepository().findStopOrChildStops(id); } @@ -277,7 +256,7 @@ public StopLocationsGroup getStopLocationsGroup(FeedScopedId id) { } @Override - public Trip getTripForId(FeedScopedId id) { + public Trip getTrip(FeedScopedId id) { TimetableSnapshot currentSnapshot = lazyGetTimeTableSnapShot(); if (currentSnapshot != null) { Trip trip = currentSnapshot.getRealTimeAddedTrip(id); @@ -285,17 +264,17 @@ public Trip getTripForId(FeedScopedId id) { return trip; } } - return getScheduledTripForId(id); + return getScheduledTrip(id); } @Nullable @Override - public Trip getScheduledTripForId(FeedScopedId id) { + public Trip getScheduledTrip(FeedScopedId id) { return this.timetableRepositoryIndex.getTripForId(id); } @Override - public Collection getAllTrips() { + public Collection listTrips() { OTPRequestTimeoutException.checkForTimeout(); TimetableSnapshot currentSnapshot = lazyGetTimeTableSnapShot(); if (currentSnapshot != null) { @@ -308,7 +287,7 @@ public Collection getAllTrips() { } @Override - public Collection getAllRoutes() { + public Collection listRoutes() { OTPRequestTimeoutException.checkForTimeout(); TimetableSnapshot currentSnapshot = lazyGetTimeTableSnapShot(); if (currentSnapshot != null) { @@ -321,7 +300,7 @@ public Collection getAllRoutes() { } @Override - public TripPattern getPatternForTrip(Trip trip) { + public TripPattern findPattern(Trip trip) { TimetableSnapshot currentSnapshot = lazyGetTimeTableSnapShot(); if (currentSnapshot != null) { TripPattern realtimeAddedTripPattern = currentSnapshot.getRealTimeAddedPatternForTrip(trip); @@ -333,16 +312,16 @@ public TripPattern getPatternForTrip(Trip trip) { } @Override - public TripPattern getPatternForTrip(Trip trip, LocalDate serviceDate) { - TripPattern realtimePattern = getNewTripPatternForModifiedTrip(trip.getId(), serviceDate); + public TripPattern findPattern(Trip trip, LocalDate serviceDate) { + TripPattern realtimePattern = findNewTripPatternForModifiedTrip(trip.getId(), serviceDate); if (realtimePattern != null) { return realtimePattern; } - return getPatternForTrip(trip); + return findPattern(trip); } @Override - public Collection getPatternsForRoute(Route route) { + public Collection findPatterns(Route route) { OTPRequestTimeoutException.checkForTimeout(); Collection tripPatterns = new HashSet<>( timetableRepositoryIndex.getPatternsForRoute(route) @@ -358,7 +337,7 @@ public Collection getPatternsForRoute(Route route) { } @Override - public MultiModalStation getMultiModalStationForStation(Station station) { + public MultiModalStation findMultiModalStation(Station station) { return this.timetableRepository.getSiteRepository().getMultiModalStationForStation(station); } @@ -379,7 +358,7 @@ public MultiModalStation getMultiModalStationForStation(Station station) { * @param includeCancelledTrips If true, cancelled trips will also be included in result. */ @Override - public List stopTimesForStop( + public List findStopTimesInPattern( StopLocation stop, Instant startTime, Duration timeRange, @@ -407,7 +386,7 @@ public List stopTimesForStop( * @param serviceDate Return all departures for the specified date */ @Override - public List getStopTimesForStop( + public List findStopTimesInPattern( StopLocation stop, LocalDate serviceDate, ArrivalDeparture arrivalDeparture, @@ -439,7 +418,7 @@ public List getStopTimesForStop( * @param arrivalDeparture Filter by arrivals, departures, or both */ @Override - public List stopTimesForPatternAtStop( + public List findTripTimeOnDate( StopLocation stop, TripPattern pattern, Instant startTime, @@ -468,11 +447,8 @@ public List stopTimesForPatternAtStop( * that were updated by realtime data is both part of the TimetableRepositoryIndex and the TimetableSnapshot */ @Override - public Collection getPatternsForStop( - StopLocation stop, - boolean includeRealtimeUpdates - ) { - Set tripPatterns = new HashSet<>(getPatternsForStop(stop)); + public Collection findPatterns(StopLocation stop, boolean includeRealtimeUpdates) { + Set tripPatterns = new HashSet<>(findPatterns(stop)); if (includeRealtimeUpdates) { TimetableSnapshot currentSnapshot = lazyGetTimeTableSnapShot(); @@ -484,19 +460,19 @@ public Collection getPatternsForStop( } @Override - public Collection getGroupsOfRoutes() { + public Collection listGroupsOfRoutes() { OTPRequestTimeoutException.checkForTimeout(); return timetableRepositoryIndex.getAllGroupOfRoutes(); } @Override - public Collection getRoutesForGroupOfRoutes(GroupOfRoutes groupOfRoutes) { + public Collection findRoutes(GroupOfRoutes groupOfRoutes) { OTPRequestTimeoutException.checkForTimeout(); return timetableRepositoryIndex.getRoutesForGroupOfRoutes(groupOfRoutes); } @Override - public GroupOfRoutes getGroupOfRoutesForId(FeedScopedId id) { + public GroupOfRoutes getGroupOfRoutes(FeedScopedId id) { return timetableRepositoryIndex.getGroupOfRoutesForId(id); } @@ -506,7 +482,7 @@ public GroupOfRoutes getGroupOfRoutesForId(FeedScopedId id) { * without making a fake routing request. */ @Override - public Timetable getTimetableForTripPattern(TripPattern tripPattern, LocalDate serviceDate) { + public Timetable findTimetable(TripPattern tripPattern, LocalDate serviceDate) { OTPRequestTimeoutException.checkForTimeout(); TimetableSnapshot currentSnapshot = lazyGetTimeTableSnapShot(); return currentSnapshot != null @@ -515,7 +491,7 @@ public Timetable getTimetableForTripPattern(TripPattern tripPattern, LocalDate s } @Override - public TripPattern getNewTripPatternForModifiedTrip(FeedScopedId tripId, LocalDate serviceDate) { + public TripPattern findNewTripPatternForModifiedTrip(FeedScopedId tripId, LocalDate serviceDate) { TimetableSnapshot currentSnapshot = lazyGetTimeTableSnapShot(); if (currentSnapshot == null) { return null; @@ -546,21 +522,21 @@ private TimetableSnapshot lazyGetTimeTableSnapShot() { } @Override - public TripOnServiceDate getTripOnServiceDateById(FeedScopedId tripOnServiceDateId) { + public TripOnServiceDate getTripOnServiceDate(FeedScopedId id) { TimetableSnapshot currentSnapshot = lazyGetTimeTableSnapShot(); if (currentSnapshot != null) { TripOnServiceDate tripOnServiceDate = currentSnapshot.getRealTimeAddedTripOnServiceDateById( - tripOnServiceDateId + id ); if (tripOnServiceDate != null) { return tripOnServiceDate; } } - return timetableRepository.getTripOnServiceDateById(tripOnServiceDateId); + return timetableRepository.getTripOnServiceDateById(id); } @Override - public Collection getAllTripOnServiceDates() { + public Collection listTripsOnServiceDate() { TimetableSnapshot currentSnapshot = lazyGetTimeTableSnapShot(); if (currentSnapshot != null) { return new CollectionsView<>( @@ -572,9 +548,7 @@ public Collection getAllTripOnServiceDates() { } @Override - public TripOnServiceDate getTripOnServiceDateForTripAndDay( - TripIdAndServiceDate tripIdAndServiceDate - ) { + public TripOnServiceDate getTripOnServiceDate(TripIdAndServiceDate tripIdAndServiceDate) { TimetableSnapshot currentSnapshot = lazyGetTimeTableSnapShot(); if (currentSnapshot != null) { TripOnServiceDate tripOnServiceDate = currentSnapshot.getRealTimeAddedTripOnServiceDateForTripAndDay( @@ -594,9 +568,9 @@ public TripOnServiceDate getTripOnServiceDateForTripAndDay( * @return - A list of TripOnServiceDates */ @Override - public List getTripOnServiceDates(TripOnServiceDateRequest request) { + public List findTripsOnServiceDate(TripOnServiceDateRequest request) { Matcher matcher = TripOnServiceDateMatcherFactory.of(request); - return getAllTripOnServiceDates().stream().filter(matcher::match).toList(); + return listTripsOnServiceDate().stream().filter(matcher::match).toList(); } @Override @@ -611,6 +585,21 @@ public boolean containsTrip(FeedScopedId id) { return this.timetableRepositoryIndex.containsTrip(id); } + /** + * Returns a list of Trips that match the filtering defined in the request. + * + * @param request - A TripRequest object with filtering defined. + * @return - A list Trips + */ + @Override + public List getTrips(TripRequest request) { + Matcher matcher = TripMatcherFactory.of( + request, + this.getCalendarService()::getServiceDatesForServiceId + ); + return listTrips().stream().filter(matcher::match).toList(); + } + /** * TODO OTP2 - This is NOT THREAD-SAFE and is used in the real-time updaters, we need to fix * this when doing the issue #3030. @@ -626,12 +615,12 @@ public void addTransitMode(TransitMode mode) { } @Override - public Set getTransitModes() { + public Set listTransitModes() { return this.timetableRepository.getTransitModes(); } @Override - public Collection getTransfersByStop(StopLocation stop) { + public Collection findPathTransfers(StopLocation stop) { return this.timetableRepository.getTransfersByStop(stop); } @@ -710,7 +699,7 @@ public GraphUpdaterStatus getUpdaterStatus() { } @Override - public List getModesOfStopLocationsGroup(StopLocationsGroup station) { + public List findTransitModes(StopLocationsGroup station) { return sortByOccurrenceAndReduce( station.getChildStops().stream().flatMap(this::getPatternModesOfStop) ) @@ -718,7 +707,7 @@ public List getModesOfStopLocationsGroup(StopLocationsGroup station } @Override - public List getModesOfStopLocation(StopLocation stop) { + public List findTransitModes(StopLocation stop) { return sortByOccurrenceAndReduce(getPatternModesOfStop(stop)).toList(); } @@ -728,7 +717,7 @@ public Deduplicator getDeduplicator() { } @Override - public Set getAllServiceCodes() { + public Set listServiceDates() { return Collections.unmodifiableSet( timetableRepositoryIndex.getServiceCodesRunningForDate().keySet() ); @@ -746,7 +735,7 @@ private Stream getPatternModesOfStop(StopLocation stop) { if (stop.getVehicleType() != null) { return Stream.of(stop.getVehicleType()); } else { - return getPatternsForStop(stop).stream().map(TripPattern::getMode); + return findPatterns(stop).stream().map(TripPattern::getMode); } } diff --git a/application/src/main/java/org/opentripplanner/transit/service/TransitEditorService.java b/application/src/main/java/org/opentripplanner/transit/service/TransitEditorService.java index 567cb245af5..411ab3d652b 100644 --- a/application/src/main/java/org/opentripplanner/transit/service/TransitEditorService.java +++ b/application/src/main/java/org/opentripplanner/transit/service/TransitEditorService.java @@ -1,6 +1,7 @@ package org.opentripplanner.transit.service; import java.time.LocalDate; +import javax.annotation.Nullable; import org.opentripplanner.model.FeedInfo; import org.opentripplanner.routing.algorithm.raptoradapter.transit.TransitLayer; import org.opentripplanner.transit.model.basic.TransitMode; @@ -26,6 +27,12 @@ public interface TransitEditorService extends TransitService { FeedScopedId getOrCreateServiceIdForDate(LocalDate serviceDate); + /** + * Return the trip for the given id, not including trips created in real time. + */ + @Nullable + Trip getScheduledTrip(FeedScopedId id); + /** * Set the original, immutable, transit layer, * based on scheduled data (not real-time data). 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 b77eb77d892..c1bba355cdf 100644 --- a/application/src/main/java/org/opentripplanner/transit/service/TransitService.java +++ b/application/src/main/java/org/opentripplanner/transit/service/TransitService.java @@ -25,6 +25,7 @@ import org.opentripplanner.routing.services.TransitAlertService; import org.opentripplanner.routing.stoptimes.ArrivalDeparture; import org.opentripplanner.transit.api.request.TripOnServiceDateRequest; +import org.opentripplanner.transit.api.request.TripRequest; import org.opentripplanner.transit.model.basic.Notice; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.AbstractTransitEntity; @@ -64,76 +65,70 @@ * copy-on-write and shares a lot of objects with any other TransitLayer instances. */ public interface TransitService { - Collection getFeedIds(); + Collection listFeedIds(); - Collection getAgencies(); - Optional findAgencyById(FeedScopedId id); + Collection listAgencies(); + Optional findAgency(FeedScopedId id); FeedInfo getFeedInfo(String feedId); - Collection getNoticesByEntity(AbstractTransitEntity entity); + Collection findNotices(AbstractTransitEntity entity); /** * Return a trip pattern by id, not including patterns created by real-time updates. */ - TripPattern getTripPatternForId(FeedScopedId id); + TripPattern getTripPattern(FeedScopedId id); /** * Return all scheduled trip patterns, not including real-time created trip patterns. * TODO: verify this is the intended behavior and possibly change the method name to * getAllScheduledTripPatterns */ - Collection getAllTripPatterns(); + Collection listTripPatterns(); - Collection getNotices(); - - Station getStationById(FeedScopedId id); + Station getStation(FeedScopedId id); MultiModalStation getMultiModalStation(FeedScopedId id); - Collection getStations(); + Collection listStations(); - Integer getServiceCodeForId(FeedScopedId id); + Integer getServiceCode(FeedScopedId id); TIntSet getServiceCodesRunningForDate(LocalDate date); - Agency getAgencyForId(FeedScopedId id); + Agency getAgency(FeedScopedId id); /** * Return a route for a given id, including routes created by real-time updates. * */ - Route getRouteForId(FeedScopedId id); + Route getRoute(FeedScopedId id); /** * Return the routes using the given stop, not including real-time updates. */ - Set getRoutesForStop(StopLocation stop); + Set findRoutes(StopLocation stop); /** * Return all the scheduled trip patterns for a specific stop * (not taking into account real-time updates). */ - Collection getPatternsForStop(StopLocation stop); + Collection findPatterns(StopLocation stop); /** * Returns all the patterns for a specific stop. If includeRealtimeUpdates is set, new patterns * added by realtime updates are added to the collection. */ - Collection getPatternsForStop(StopLocation stop, boolean includeRealtimeUpdates); - - Collection getTripsForStop(StopLocation stop); + Collection findPatterns(StopLocation stop, boolean includeRealtimeUpdates); - Collection getAllOperators(); + Collection listOperators(); - Operator getOperatorForId(FeedScopedId id); + Operator getOperator(FeedScopedId id); RegularStop getRegularStop(FeedScopedId id); Collection listStopLocations(); - Collection listRegularStops(); - Collection listGroupStops(); StopLocation getStopLocation(FeedScopedId parseId); @@ -144,56 +139,48 @@ public interface TransitService { * stop, area stop or stop group, then a list with one item is returned. * An empty list is if nothing is found. */ - Collection getStopOrChildStops(FeedScopedId id); + Collection findStopOrChildStops(FeedScopedId id); Collection listStopLocationGroups(); StopLocationsGroup getStopLocationsGroup(FeedScopedId id); - AreaStop getAreaStop(FeedScopedId id); - /** * Return the trip for the given id, including trips created in real time. */ @Nullable - Trip getTripForId(FeedScopedId id); - - /** - * Return the trip for the given id, not including trips created in real time. - */ - @Nullable - Trip getScheduledTripForId(FeedScopedId id); + Trip getTrip(FeedScopedId id); /** * Return all trips, including those created by real-time updates. */ - Collection getAllTrips(); + Collection listTrips(); /** * Return all routes, including those created by real-time updates. */ - Collection getAllRoutes(); + Collection listRoutes(); /** * Return the scheduled trip pattern for a given trip. * If the trip is an added trip (extra journey), return the initial trip pattern for this trip. */ - TripPattern getPatternForTrip(Trip trip); + TripPattern findPattern(Trip trip); /** * Return the trip pattern for a given trip on a service date. The real-time updated version * is returned if it exists, otherwise the scheduled trip pattern is returned. */ - TripPattern getPatternForTrip(Trip trip, LocalDate serviceDate); + TripPattern findPattern(Trip trip, LocalDate serviceDate); /** * Return all the trip patterns used in the given route, including those added by real-time updates */ - Collection getPatternsForRoute(Route route); + Collection findPatterns(Route route); - MultiModalStation getMultiModalStationForStation(Station station); + MultiModalStation findMultiModalStation(Station station); - List stopTimesForStop( + List findStopTimesInPattern( StopLocation stop, Instant startTime, Duration timeRange, @@ -202,14 +189,14 @@ List stopTimesForStop( boolean includeCancelledTrips ); - List getStopTimesForStop( + List findStopTimesInPattern( StopLocation stop, LocalDate serviceDate, ArrivalDeparture arrivalDeparture, boolean includeCancellations ); - List stopTimesForPatternAtStop( + List findTripTimeOnDate( StopLocation stop, TripPattern pattern, Instant startTime, @@ -219,18 +206,19 @@ List stopTimesForPatternAtStop( boolean includeCancellations ); - Collection getGroupsOfRoutes(); + Collection listGroupsOfRoutes(); - Collection getRoutesForGroupOfRoutes(GroupOfRoutes groupOfRoutes); + Collection findRoutes(GroupOfRoutes groupOfRoutes); - GroupOfRoutes getGroupOfRoutesForId(FeedScopedId id); + @Nullable + GroupOfRoutes getGroupOfRoutes(FeedScopedId id); /** * Return the timetable for a given trip pattern and date, taking into account real-time updates. * If no real-times update are applied, fall back to scheduled data. */ @Nullable - Timetable getTimetableForTripPattern(TripPattern tripPattern, LocalDate serviceDate); + Timetable findTimetable(TripPattern tripPattern, LocalDate serviceDate); /** * Return the real-time added pattern for a given tripId and a given service date. @@ -238,25 +226,25 @@ List stopTimesForPatternAtStop( * this date (that is: it is still using its scheduled trip pattern for this date). */ @Nullable - TripPattern getNewTripPatternForModifiedTrip(FeedScopedId tripId, LocalDate serviceDate); + TripPattern findNewTripPatternForModifiedTrip(FeedScopedId tripId, LocalDate serviceDate); /** * Return true if at least one trip pattern has been modified by a real-time update. */ boolean hasNewTripPatternsForModifiedTrips(); - TripOnServiceDate getTripOnServiceDateForTripAndDay(TripIdAndServiceDate tripIdAndServiceDate); + TripOnServiceDate getTripOnServiceDate(TripIdAndServiceDate tripIdAndServiceDate); /** * Return the TripOnServiceDate for a given id, including real-time updates. */ - TripOnServiceDate getTripOnServiceDateById(FeedScopedId datedServiceJourneyId); + TripOnServiceDate getTripOnServiceDate(FeedScopedId id); - Collection getAllTripOnServiceDates(); + Collection listTripsOnServiceDate(); - Set getTransitModes(); + Set listTransitModes(); - Collection getTransfersByStop(StopLocation stop); + Collection findPathTransfers(StopLocation stop); TransitLayer getTransitLayer(); @@ -293,7 +281,7 @@ List stopTimesForPatternAtStop( * The returning stream is ordered by the number of occurrences of the mode in the child stops. * So, if more patterns of mode BUS than RAIL visit the group, the result will be [BUS,RAIL]. */ - List getModesOfStopLocationsGroup(StopLocationsGroup station); + List findTransitModes(StopLocationsGroup station); /** * For a {@link StopLocation} return its modes. *

@@ -305,11 +293,11 @@ List stopTimesForPatternAtStop( *

* So, if more patterns of mode BUS than RAIL visit the stop, the result will be [BUS,RAIL]. */ - List getModesOfStopLocation(StopLocation stop); + List findTransitModes(StopLocation stop); Deduplicator getDeduplicator(); - Set getAllServiceCodes(); + Set listServiceDates(); Map getServiceCodesRunningForDate(); @@ -319,7 +307,15 @@ List stopTimesForPatternAtStop( * @param request - A TripOnServiceDateRequest object with filtering defined. * @return - A list of TripOnServiceDates */ - List getTripOnServiceDates(TripOnServiceDateRequest request); + List findTripsOnServiceDate(TripOnServiceDateRequest request); + + /** + * Returns a list of Trips that match the filtering defined in the request. + * + * @param request - A TripRequest object with filtering defined. + * @return - A list of Trips + */ + List getTrips(TripRequest request); /** * Checks if a trip with the given ID exists in the model. diff --git a/application/src/main/java/org/opentripplanner/updater/GtfsRealtimeFuzzyTripMatcher.java b/application/src/main/java/org/opentripplanner/updater/GtfsRealtimeFuzzyTripMatcher.java index 05d0f814263..749b7c0e5af 100644 --- a/application/src/main/java/org/opentripplanner/updater/GtfsRealtimeFuzzyTripMatcher.java +++ b/application/src/main/java/org/opentripplanner/updater/GtfsRealtimeFuzzyTripMatcher.java @@ -57,7 +57,7 @@ public TripDescriptor match(String feedId, TripDescriptor trip) { } catch (ParseException e) { return trip; } - Route route = transitService.getRouteForId(routeId); + Route route = transitService.getRoute(routeId); if (route == null) { return trip; } @@ -87,7 +87,7 @@ public synchronized Trip getTrip( LocalDate date ) { TIntSet servicesRunningForDate = transitService.getServiceCodesRunningForDate(date); - for (TripPattern pattern : transitService.getPatternsForRoute(route)) { + for (TripPattern pattern : transitService.findPatterns(route)) { if (pattern.getDirection() != direction) continue; for (TripTimes times : pattern.getScheduledTimetable().getTripTimes()) { if ( 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 b71dad6a656..a5be5ef4185 100644 --- a/application/src/main/java/org/opentripplanner/updater/alert/GtfsRealtimeAlertsUpdater.java +++ b/application/src/main/java/org/opentripplanner/updater/alert/GtfsRealtimeAlertsUpdater.java @@ -88,7 +88,7 @@ protected void runPolling() { lastTimestamp = feedTimestamp; } catch (Exception e) { - LOG.error("Error reading gtfs-realtime feed from " + url, e); + LOG.error("Failed to process GTFS-RT Alerts feed from {}", url, e); } } } 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 feea541741c..1106d621873 100644 --- a/application/src/main/java/org/opentripplanner/updater/configure/UpdaterConfigurator.java +++ b/application/src/main/java/org/opentripplanner/updater/configure/UpdaterConfigurator.java @@ -12,6 +12,7 @@ import org.opentripplanner.model.calendar.openinghours.OpeningHoursCalendarService; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.service.realtimevehicles.RealtimeVehicleRepository; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; import org.opentripplanner.service.vehiclerental.VehicleRentalRepository; import org.opentripplanner.transit.service.TimetableRepository; import org.opentripplanner.updater.DefaultRealTimeUpdateContext; @@ -49,6 +50,7 @@ public class UpdaterConfigurator { private final UpdatersParameters updatersParameters; private final RealtimeVehicleRepository realtimeVehicleRepository; private final VehicleRentalRepository vehicleRentalRepository; + private final VehicleParkingRepository parkingRepository; private SiriTimetableSnapshotSource siriTimetableSnapshotSource = null; private TimetableSnapshotSource gtfsTimetableSnapshotSource = null; @@ -56,6 +58,7 @@ private UpdaterConfigurator( Graph graph, RealtimeVehicleRepository realtimeVehicleRepository, VehicleRentalRepository vehicleRentalRepository, + VehicleParkingRepository parkingRepository, TimetableRepository timetableRepository, UpdatersParameters updatersParameters ) { @@ -64,12 +67,14 @@ private UpdaterConfigurator( this.vehicleRentalRepository = vehicleRentalRepository; this.timetableRepository = timetableRepository; this.updatersParameters = updatersParameters; + this.parkingRepository = parkingRepository; } public static void configure( Graph graph, RealtimeVehicleRepository realtimeVehicleRepository, VehicleRentalRepository vehicleRentalRepository, + VehicleParkingRepository parkingRepository, TimetableRepository timetableRepository, UpdatersParameters updatersParameters ) { @@ -77,6 +82,7 @@ public static void configure( graph, realtimeVehicleRepository, vehicleRentalRepository, + parkingRepository, timetableRepository, updatersParameters ) @@ -195,22 +201,13 @@ private List createUpdatersFromConfig() { openingHoursCalendarService ); updaters.add( - new VehicleParkingUpdater( - configItem, - source, - graph.getLinker(), - graph.getVehicleParkingService() - ) + new VehicleParkingUpdater(configItem, source, graph.getLinker(), parkingRepository) ); } case AVAILABILITY_ONLY -> { var source = AvailabilityDatasourceFactory.create(configItem); updaters.add( - new VehicleParkingAvailabilityUpdater( - configItem, - source, - graph.getVehicleParkingService() - ) + new VehicleParkingAvailabilityUpdater(configItem, source, parkingRepository) ); } } 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 aff1659653b..d5f68c4d153 100644 --- a/application/src/main/java/org/opentripplanner/updater/siri/AddedTripBuilder.java +++ b/application/src/main/java/org/opentripplanner/updater/siri/AddedTripBuilder.java @@ -226,7 +226,7 @@ Result build() { // but in case of trip cancellation, OTP will fall back to scheduled trip times // therefore they must be valid tripTimes.validateNonIncreasingTimes(); - tripTimes.setServiceCode(transitService.getServiceCodeForId(trip.getServiceId())); + tripTimes.setServiceCode(transitService.getServiceCode(trip.getServiceId())); TripPattern pattern = TripPattern .of(getTripPatternId.apply(trip)) @@ -315,7 +315,7 @@ private Route createRoute(Agency agency) { @Nullable private Agency resolveAgency() { return transitService - .getAllRoutes() + .listRoutes() .stream() .filter(r -> r != null && r.getOperator() != null && r.getOperator().equals(operator)) .findFirst() diff --git a/application/src/main/java/org/opentripplanner/updater/siri/EntityResolver.java b/application/src/main/java/org/opentripplanner/updater/siri/EntityResolver.java index 1bce3e63974..47eb45ad287 100644 --- a/application/src/main/java/org/opentripplanner/updater/siri/EntityResolver.java +++ b/application/src/main/java/org/opentripplanner/updater/siri/EntityResolver.java @@ -54,7 +54,7 @@ public Trip resolveTrip(EstimatedVehicleJourney journey) { if (journey.getDatedVehicleJourneyRef() != null) { String datedServiceJourneyId = journey.getDatedVehicleJourneyRef().getValue(); - TripOnServiceDate tripOnServiceDate = transitService.getTripOnServiceDateById( + TripOnServiceDate tripOnServiceDate = transitService.getTripOnServiceDate( resolveId(datedServiceJourneyId) ); @@ -65,9 +65,7 @@ public Trip resolveTrip(EstimatedVehicleJourney journey) { // It is possible that the trip has previously been added, resolve the added trip if (journey.getEstimatedVehicleJourneyCode() != null) { - var addedTrip = transitService.getTripForId( - resolveId(journey.getEstimatedVehicleJourneyCode()) - ); + var addedTrip = transitService.getTrip(resolveId(journey.getEstimatedVehicleJourneyCode())); if (addedTrip != null) { return addedTrip; } @@ -115,13 +113,13 @@ public TripOnServiceDate resolveTripOnServiceDate( return null; } - return transitService.getTripOnServiceDateForTripAndDay( + return transitService.getTripOnServiceDate( new TripIdAndServiceDate(resolveId(serviceJourneyId), serviceDate) ); } public TripOnServiceDate resolveTripOnServiceDate(FeedScopedId datedServiceJourneyId) { - return transitService.getTripOnServiceDateById(datedServiceJourneyId); + return transitService.getTripOnServiceDate(datedServiceJourneyId); } public FeedScopedId resolveDatedServiceJourneyId( @@ -182,7 +180,7 @@ public Trip resolveTrip(FramedVehicleJourneyRefStructure journey) { } public Trip resolveTrip(String serviceJourneyId) { - return transitService.getTripForId(resolveId(serviceJourneyId)); + return transitService.getTrip(resolveId(serviceJourneyId)); } /** @@ -196,11 +194,11 @@ public RegularStop resolveQuay(String quayRef) { * Resolve a {@link Route} from a line id. */ public Route resolveRoute(String lineRef) { - return transitService.getRouteForId(resolveId(lineRef)); + return transitService.getRoute(resolveId(lineRef)); } public Operator resolveOperator(String operatorRef) { - return transitService.getOperatorForId(resolveId(operatorRef)); + return transitService.getOperator(resolveId(operatorRef)); } @Nullable @@ -246,7 +244,7 @@ private int calculateDayOffset(EstimatedVehicleJourney vehicleJourney) { if (trip == null) { return 0; } - var pattern = transitService.getPatternForTrip(trip); + var pattern = transitService.findPattern(trip); if (pattern == null) { return 0; } diff --git a/application/src/main/java/org/opentripplanner/updater/siri/SiriFuzzyTripMatcher.java b/application/src/main/java/org/opentripplanner/updater/siri/SiriFuzzyTripMatcher.java index 604dceed408..2cffc81b440 100644 --- a/application/src/main/java/org/opentripplanner/updater/siri/SiriFuzzyTripMatcher.java +++ b/application/src/main/java/org/opentripplanner/updater/siri/SiriFuzzyTripMatcher.java @@ -161,8 +161,8 @@ public List getTripIdForInternalPlanningCodeServiceDate( } private void initCache(TransitService index) { - for (Trip trip : index.getAllTrips()) { - TripPattern tripPattern = index.getPatternForTrip(trip); + for (Trip trip : index.listTrips()) { + TripPattern tripPattern = index.findPattern(trip); if (tripPattern == null) { continue; @@ -288,7 +288,7 @@ TripAndPattern getTripAndPatternForJourney( ); TripPattern tripPattern = newTripPatternForModifiedTrip != null ? newTripPatternForModifiedTrip - : transitService.getPatternForTrip(trip); + : transitService.findPattern(trip); var firstStop = tripPattern.firstStop(); var lastStop = tripPattern.lastStop(); 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 fd716e7c232..73e4c711269 100644 --- a/application/src/main/java/org/opentripplanner/updater/siri/SiriTimetableSnapshotSource.java +++ b/application/src/main/java/org/opentripplanner/updater/siri/SiriTimetableSnapshotSource.java @@ -82,7 +82,7 @@ public SiriTimetableSnapshotSource( this.transitEditorService = new DefaultTransitService(timetableRepository, getTimetableSnapshotBuffer()); this.tripPatternCache = - new SiriTripPatternCache(tripPatternIdGenerator, transitEditorService::getPatternForTrip); + new SiriTripPatternCache(tripPatternIdGenerator, transitEditorService::findPattern); timetableRepository.initTimetableSnapshotProvider(this); } @@ -245,7 +245,7 @@ private Result handleModifiedTrip( if (trip != null) { // Found exact match - pattern = transitEditorService.getPatternForTrip(trip); + pattern = transitEditorService.findPattern(trip); } else if (fuzzyTripMatcher != null) { // No exact match found - search for trips based on arrival-times/stop-patterns TripAndPattern tripAndPattern = fuzzyTripMatcher.match( @@ -339,7 +339,7 @@ private Result addTripToGraphAndBuffer(TripUpdate tr private boolean markScheduledTripAsDeleted(Trip trip, final LocalDate serviceDate) { boolean success = false; - final TripPattern pattern = transitEditorService.getPatternForTrip(trip); + final TripPattern pattern = transitEditorService.findPattern(trip); if (pattern != null) { // Mark scheduled trip times for this trip in this pattern as deleted diff --git a/application/src/main/java/org/opentripplanner/updater/siri/mapper/AffectsMapper.java b/application/src/main/java/org/opentripplanner/updater/siri/mapper/AffectsMapper.java index a600f26c640..1f1c8c0b907 100644 --- a/application/src/main/java/org/opentripplanner/updater/siri/mapper/AffectsMapper.java +++ b/application/src/main/java/org/opentripplanner/updater/siri/mapper/AffectsMapper.java @@ -375,7 +375,7 @@ private static FeedScopedId getStop( FeedScopedId id = new FeedScopedId(feedId, siriStopId); if (transitService.getRegularStop(id) != null) { return id; - } else if (transitService.getStationById(id) != null) { + } else if (transitService.getStation(id) != null) { return id; } diff --git a/application/src/main/java/org/opentripplanner/updater/trip/GtfsRealtimeTripUpdateSource.java b/application/src/main/java/org/opentripplanner/updater/trip/GtfsRealtimeTripUpdateSource.java index 0b20a4c22c7..f3d3c62d6ea 100644 --- a/application/src/main/java/org/opentripplanner/updater/trip/GtfsRealtimeTripUpdateSource.java +++ b/application/src/main/java/org/opentripplanner/updater/trip/GtfsRealtimeTripUpdateSource.java @@ -73,7 +73,7 @@ public List getUpdates() { if (feedEntity.hasTripUpdate()) updates.add(feedEntity.getTripUpdate()); } } catch (Exception e) { - LOG.error("Failed to parse GTFS-RT feed from {}", url, e); + LOG.error("Failed to process GTFS-RT TripUpdates feed from {}", url, e); } return updates; } 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 4bc911e114c..e3ec690237e 100644 --- a/application/src/main/java/org/opentripplanner/updater/trip/TimetableSnapshotSource.java +++ b/application/src/main/java/org/opentripplanner/updater/trip/TimetableSnapshotSource.java @@ -400,7 +400,7 @@ private Result handleScheduledTrip( return UpdateError.result(tripId, NO_UPDATES); } - final FeedScopedId serviceId = transitEditorService.getTripForId(tripId).getServiceId(); + final FeedScopedId serviceId = transitEditorService.getTrip(tripId).getServiceId(); final Set serviceDates = transitEditorService .getCalendarService() .getServiceDatesForServiceId(serviceId); @@ -445,7 +445,7 @@ private Result handleScheduledTrip( .cancelStops(skippedStopIndices) .build(); - final Trip trip = transitEditorService.getTripForId(tripId); + final Trip trip = transitEditorService.getTrip(tripId); // Get cached trip pattern or create one if it doesn't exist yet final TripPattern newPattern = tripPatternCache.getOrCreateTripPattern( newStopPattern, @@ -487,7 +487,7 @@ private Result validateAndHandleAddedTrip( // // Check whether trip id already exists in graph - final Trip trip = transitEditorService.getScheduledTripForId(tripId); + final Trip trip = transitEditorService.getScheduledTrip(tripId); if (trip != null) { // TODO: should we support this and add a new instantiation of this trip (making it @@ -691,7 +691,7 @@ private Result handleAddedTrip( boolean routeExists = routeExists(tripId.getFeedId(), tripDescriptor); if (routeExists) { route = - transitEditorService.getRouteForId( + transitEditorService.getRoute( new FeedScopedId(tripId.getFeedId(), tripDescriptor.getRouteId()) ); } else { @@ -745,7 +745,7 @@ private Route createRoute(TripDescriptor tripDescriptor, FeedScopedId tripId) { var addedRouteExtension = AddedRoute.ofTripDescriptor(tripDescriptor); var agency = transitEditorService - .findAgencyById(new FeedScopedId(tripId.getFeedId(), addedRouteExtension.agencyId())) + .findAgency(new FeedScopedId(tripId.getFeedId(), addedRouteExtension.agencyId())) .orElseGet(() -> fallbackAgency(tripId.getFeedId())); builder.withAgency(agency); @@ -790,7 +790,7 @@ private Agency fallbackAgency(String feedId) { private boolean routeExists(String feedId, TripDescriptor tripDescriptor) { if (tripDescriptor.hasRouteId() && StringUtils.hasValue(tripDescriptor.getRouteId())) { var routeId = new FeedScopedId(feedId, tripDescriptor.getRouteId()); - return Objects.nonNull(transitEditorService.getRouteForId(routeId)); + return Objects.nonNull(transitEditorService.getRoute(routeId)); } else { return false; } @@ -882,7 +882,7 @@ private Result addTripToGraphAndBuffer( // Create StopPattern final StopPattern stopPattern = new StopPattern(stopTimes); - final TripPattern originalTripPattern = transitEditorService.getPatternForTrip(trip); + final TripPattern originalTripPattern = transitEditorService.findPattern(trip); // Get cached trip pattern or create one if it doesn't exist yet final TripPattern pattern = tripPatternCache.getOrCreateTripPattern( stopPattern, @@ -1047,7 +1047,7 @@ private Result validateAndHandleModifiedTrip( // // Check whether trip id already exists in graph - Trip trip = transitEditorService.getTripForId(tripId); + Trip trip = transitEditorService.getTrip(tripId); if (trip == null) { // TODO: should we support this and consider it an ADDED trip? @@ -1179,8 +1179,8 @@ private Result handleCanceledTrip( * @return trip pattern or null if no trip pattern was found */ private TripPattern getPatternForTripId(FeedScopedId tripId) { - Trip trip = transitEditorService.getTripForId(tripId); - return transitEditorService.getPatternForTrip(trip); + Trip trip = transitEditorService.getTrip(tripId); + return transitEditorService.findPattern(trip); } private static void debug( diff --git a/application/src/main/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingAvailabilityUpdater.java b/application/src/main/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingAvailabilityUpdater.java index b23f46522c3..e548d5d75be 100644 --- a/application/src/main/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingAvailabilityUpdater.java +++ b/application/src/main/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingAvailabilityUpdater.java @@ -4,9 +4,9 @@ import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingService; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.updater.GraphWriterRunnable; import org.opentripplanner.updater.RealTimeUpdateContext; @@ -29,16 +29,16 @@ public class VehicleParkingAvailabilityUpdater extends PollingGraphUpdater { private final DataSource source; private WriteToGraphCallback saveResultOnGraph; - private final VehicleParkingService vehicleParkingService; + private final VehicleParkingRepository repository; public VehicleParkingAvailabilityUpdater( VehicleParkingUpdaterParameters parameters, DataSource source, - VehicleParkingService vehicleParkingService + VehicleParkingRepository parkingRepository ) { super(parameters); this.source = source; - this.vehicleParkingService = vehicleParkingService; + this.repository = parkingRepository; LOG.info("Creating vehicle-parking updater running every {}: {}", pollingPeriod(), source); } @@ -66,8 +66,9 @@ private class AvailabilityUpdater implements GraphWriterRunnable { private AvailabilityUpdater(List updates) { this.updates = List.copyOf(updates); this.parkingById = - vehicleParkingService - .getVehicleParkings() + repository + .listVehicleParkings() + .stream() .collect(Collectors.toUnmodifiableMap(VehicleParking::getId, Function.identity())); } diff --git a/application/src/main/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingDataSourceFactory.java b/application/src/main/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingDataSourceFactory.java index ef587cd2b68..d7dd8f23c5f 100644 --- a/application/src/main/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingDataSourceFactory.java +++ b/application/src/main/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingDataSourceFactory.java @@ -10,7 +10,7 @@ import org.opentripplanner.ext.vehicleparking.parkapi.CarParkAPIUpdater; import org.opentripplanner.ext.vehicleparking.parkapi.ParkAPIUpdaterParameters; import org.opentripplanner.model.calendar.openinghours.OpeningHoursCalendarService; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; import org.opentripplanner.updater.spi.DataSource; /** diff --git a/application/src/main/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingUpdater.java b/application/src/main/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingUpdater.java index 830429151b4..8e4cf8a862b 100644 --- a/application/src/main/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingUpdater.java +++ b/application/src/main/java/org/opentripplanner/updater/vehicle_parking/VehicleParkingUpdater.java @@ -12,10 +12,10 @@ import org.opentripplanner.routing.linking.DisposableEdgeCollection; import org.opentripplanner.routing.linking.LinkingDirection; import org.opentripplanner.routing.linking.VertexLinker; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingHelper; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingService; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingState; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingHelper; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingState; import org.opentripplanner.street.model.edge.StreetVehicleParkingLink; import org.opentripplanner.street.model.edge.VehicleParkingEdge; import org.opentripplanner.street.model.vertex.VehicleParkingEntranceVertex; @@ -45,20 +45,20 @@ public class VehicleParkingUpdater extends PollingGraphUpdater { private WriteToGraphCallback saveResultOnGraph; private final VertexLinker linker; - private final VehicleParkingService vehicleParkingService; + private final VehicleParkingRepository parkingRepository; public VehicleParkingUpdater( VehicleParkingUpdaterParameters parameters, DataSource source, VertexLinker vertexLinker, - VehicleParkingService vehicleParkingService + VehicleParkingRepository parkingRepository ) { super(parameters); this.source = source; // Creation of network linker library will not modify the graph this.linker = vertexLinker; // Adding a vehicle parking station service needs a graph writer runnable - this.vehicleParkingService = vehicleParkingService; + this.parkingRepository = parkingRepository; LOG.info("Creating vehicle-parking updater running every {}: {}", pollingPeriod(), source); } @@ -155,7 +155,7 @@ public void run(RealTimeUpdateContext context) { tempEdgesByPark.put(updatedVehicleParking, disposableEdgeCollectionsForVertex); } - vehicleParkingService.updateVehicleParking(toAdd, toRemove); + parkingRepository.updateVehicleParking(toAdd, toRemove); oldVehicleParkings.removeAll(toRemove); oldVehicleParkings.addAll(toAdd); diff --git a/application/src/main/java/org/opentripplanner/updater/vehicle_position/VehiclePositionUpdaterRunnable.java b/application/src/main/java/org/opentripplanner/updater/vehicle_position/VehiclePositionUpdaterRunnable.java index 3165221a5fc..9ab2915f566 100644 --- a/application/src/main/java/org/opentripplanner/updater/vehicle_position/VehiclePositionUpdaterRunnable.java +++ b/application/src/main/java/org/opentripplanner/updater/vehicle_position/VehiclePositionUpdaterRunnable.java @@ -35,9 +35,9 @@ public VehiclePositionUpdaterRunnable( public void run(RealTimeUpdateContext context) { RealtimeVehiclePatternMatcher matcher = new RealtimeVehiclePatternMatcher( feedId, - context.transitService()::getTripForId, - context.transitService()::getPatternForTrip, - context.transitService()::getPatternForTrip, + context.transitService()::getTrip, + context.transitService()::findPattern, + context.transitService()::findPattern, realtimeVehicleRepository, context.transitService().getTimeZone(), fuzzyTripMatching ? context.gtfsRealtimeFuzzyTripMatcher() : null, 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 ed182473bb6..783cc3e7948 100644 --- a/application/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/application/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -734,15 +734,15 @@ type QueryType { serverInfo: ServerInfo! @timingData "Get a single service journey based on its id" serviceJourney(id: String!): ServiceJourney @timingData - "Get all service journeys" + "Get all _service journeys_" serviceJourneys( - "Set of ids of active dates to fetch serviceJourneys for." + "Set of _operating days_ to fetch _service journeys_ for." activeDates: [Date], - "Set of ids of authorities to fetch serviceJourneys for." + "Set of ids of _authorities_ to fetch _service journeys_ for." authorities: [String], - "Set of ids of lines to fetch serviceJourneys for." + "Set of ids of _lines_ to fetch _service journeys_ for." lines: [ID], - "Set of ids of private codes to fetch serviceJourneys for." + "Set of ids of _private codes_ to fetch _service journeys_ for." privateCodes: [String] ): [ServiceJourney]! @timingData "Get a single situation based on its situationNumber" diff --git a/application/src/test/java/org/opentripplanner/ConstantsForTests.java b/application/src/test/java/org/opentripplanner/ConstantsForTests.java index f7877e62d6b..e5ab48cee54 100644 --- a/application/src/test/java/org/opentripplanner/ConstantsForTests.java +++ b/application/src/test/java/org/opentripplanner/ConstantsForTests.java @@ -34,6 +34,7 @@ import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.routing.linking.LinkingDirection; import org.opentripplanner.routing.linking.VertexLinker; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingRepository; import org.opentripplanner.service.vehiclerental.model.RentalVehicleType; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; import org.opentripplanner.service.vehiclerental.street.StreetVehicleRentalLink; @@ -138,7 +139,7 @@ public static TestOtpModel buildNewPortlandGraph(boolean withElevation) { { OsmProvider osmProvider = new OsmProvider(PORTLAND_CENTRAL_OSM, false); OsmModule osmModule = OsmModule - .of(osmProvider, graph) + .of(osmProvider, graph, new DefaultVehicleParkingRepository()) .withStaticParkAndRide(true) .withStaticBikeParkAndRide(true) .build(); @@ -195,7 +196,9 @@ public static TestOtpModel buildOsmGraph(File osmFile) { var timetableRepository = new TimetableRepository(siteRepository, deduplicator); // Add street data from OSM OsmProvider osmProvider = new OsmProvider(osmFile, true); - OsmModule osmModule = OsmModule.of(osmProvider, graph).build(); + OsmModule osmModule = OsmModule + .of(osmProvider, graph, new DefaultVehicleParkingRepository()) + .build(); osmModule.buildGraph(); return new TestOtpModel(graph, timetableRepository); } catch (Exception e) { @@ -237,12 +240,13 @@ public static TestOtpModel buildNewMinimalNetexGraph() { try { var deduplicator = new Deduplicator(); var siteRepository = new SiteRepository(); + var parkingService = new DefaultVehicleParkingRepository(); var graph = new Graph(deduplicator); var timetableRepository = new TimetableRepository(siteRepository, deduplicator); // Add street data from OSM { OsmProvider osmProvider = new OsmProvider(OSLO_EAST_OSM, false); - OsmModule osmModule = OsmModule.of(osmProvider, graph).build(); + OsmModule osmModule = OsmModule.of(osmProvider, graph, parkingService).build(); osmModule.buildGraph(); } // Add transit data from Netex @@ -255,7 +259,13 @@ public static TestOtpModel buildNewMinimalNetexGraph() { var sources = List.of(new ConfiguredDataSource<>(NETEX_MINIMAL_DATA_SOURCE, netexConfig)); new NetexConfigure(buildConfig) - .createNetexModule(sources, timetableRepository, graph, DataImportIssueStore.NOOP) + .createNetexModule( + sources, + timetableRepository, + parkingService, + graph, + DataImportIssueStore.NOOP + ) .buildGraph(); } // Link transit stops to streets diff --git a/application/src/test/java/org/opentripplanner/TestServerContext.java b/application/src/test/java/org/opentripplanner/TestServerContext.java index 38bbd81316b..e20720bd7d8 100644 --- a/application/src/test/java/org/opentripplanner/TestServerContext.java +++ b/application/src/test/java/org/opentripplanner/TestServerContext.java @@ -11,6 +11,9 @@ import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.service.realtimevehicles.RealtimeVehicleService; import org.opentripplanner.service.realtimevehicles.internal.DefaultRealtimeVehicleService; +import org.opentripplanner.service.vehicleparking.VehicleParkingService; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingService; import org.opentripplanner.service.vehiclerental.VehicleRentalService; import org.opentripplanner.service.vehiclerental.internal.DefaultVehicleRentalService; import org.opentripplanner.service.worldenvelope.WorldEnvelopeService; @@ -54,6 +57,7 @@ public static OtpServerRequestContext createServerContext( createWorldEnvelopeService(), createRealtimeVehicleService(transitService), createVehicleRentalService(), + createVehicleParkingService(), createEmissionsService(), null, routerConfig.flexParameters(), @@ -87,6 +91,10 @@ public static VehicleRentalService createVehicleRentalService() { return new DefaultVehicleRentalService(); } + public static VehicleParkingService createVehicleParkingService() { + return new DefaultVehicleParkingService(new DefaultVehicleParkingRepository()); + } + public static EmissionsService createEmissionsService() { return new DefaultEmissionsService(new EmissionsDataModel()); } 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 88fbe943bba..12e68c2d453 100644 --- a/application/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java +++ b/application/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java @@ -68,9 +68,12 @@ import org.opentripplanner.routing.graphfinder.PlaceType; import org.opentripplanner.routing.impl.TransitAlertServiceImpl; import org.opentripplanner.routing.services.TransitAlertService; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; import org.opentripplanner.service.realtimevehicles.internal.DefaultRealtimeVehicleService; import org.opentripplanner.service.realtimevehicles.model.RealtimeVehicle; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingService; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; import org.opentripplanner.service.vehiclerental.internal.DefaultVehicleRentalService; import org.opentripplanner.service.vehiclerental.model.TestFreeFloatingRentalVehicleBuilder; import org.opentripplanner.service.vehiclerental.model.TestVehicleRentalStationBuilder; @@ -140,22 +143,21 @@ class GraphQLIntegrationTest { private static GraphQLRequestContext context; private static final Deduplicator DEDUPLICATOR = new Deduplicator(); + private static final VehicleParkingRepository parkingRepository = new DefaultVehicleParkingRepository(); @BeforeAll static void setup() { - GRAPH - .getVehicleParkingService() - .updateVehicleParking( - List.of( - VehicleParking - .builder() - .id(id("parking-1")) - .coordinate(WgsCoordinate.GREENWICH) - .name(NonLocalizedString.ofNullable("parking")) - .build() - ), - List.of() - ); + parkingRepository.updateVehicleParking( + List.of( + VehicleParking + .builder() + .id(id("parking-1")) + .coordinate(WgsCoordinate.GREENWICH) + .name(NonLocalizedString.ofNullable("parking")) + .build() + ), + List.of() + ); var siteRepository = TEST_MODEL.siteRepositoryBuilder(); STOP_LOCATIONS.forEach(siteRepository::withRegularStop); @@ -210,7 +212,7 @@ static void setup() { ); @Override - public List getModesOfStopLocation(StopLocation stop) { + public List findTransitModes(StopLocation stop) { return List.of(BUS, FERRY); } @@ -220,7 +222,7 @@ public TransitAlertService getTransitAlertService() { } @Override - public Set getRoutesForStop(StopLocation stop) { + public Set findRoutes(StopLocation stop) { return Set.of(ROUTE); } }; @@ -315,8 +317,8 @@ public Set getRoutesForStop(StopLocation stop) { new TestRoutingService(List.of(i1)), transitService, new DefaultFareService(), - GRAPH.getVehicleParkingService(), defaultVehicleRentalService, + new DefaultVehicleParkingService(parkingRepository), realtimeVehicleService, finder, new RouteRequest() diff --git a/application/src/test/java/org/opentripplanner/apis/gtfs/datafetchers/BookingInfoImplTest.java b/application/src/test/java/org/opentripplanner/apis/gtfs/datafetchers/BookingInfoImplTest.java new file mode 100644 index 00000000000..1103024aa61 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/apis/gtfs/datafetchers/BookingInfoImplTest.java @@ -0,0 +1,48 @@ +package org.opentripplanner.apis.gtfs.datafetchers; + +import static graphql.execution.ExecutionContextBuilder.newExecutionContextBuilder; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +import graphql.execution.ExecutionId; +import graphql.schema.DataFetchingEnvironment; +import graphql.schema.DataFetchingEnvironmentImpl; +import java.time.Duration; +import org.junit.jupiter.api.Test; +import org.opentripplanner.transit.model.timetable.booking.BookingInfo; + +class BookingInfoImplTest { + + private static final BookingInfoImpl SUBJECT = new BookingInfoImpl(); + private static final Duration TEN_MINUTES = Duration.ofMinutes(10); + + @Test + void emptyDurations() throws Exception { + var env = dataFetchingEnvironment(BookingInfo.of().build()); + assertNull(SUBJECT.minimumBookingNoticeSeconds().get(env)); + assertNull(SUBJECT.maximumBookingNoticeSeconds().get(env)); + } + + @Test + void durations() throws Exception { + var env = dataFetchingEnvironment( + BookingInfo + .of() + .withMinimumBookingNotice(TEN_MINUTES) + .withMaximumBookingNotice(TEN_MINUTES) + .build() + ); + assertEquals(600, SUBJECT.minimumBookingNoticeSeconds().get(env)); + assertEquals(600, SUBJECT.maximumBookingNoticeSeconds().get(env)); + } + + private DataFetchingEnvironment dataFetchingEnvironment(BookingInfo bookingInfo) { + var executionContext = newExecutionContextBuilder() + .executionId(ExecutionId.from(this.getClass().getName())) + .build(); + return DataFetchingEnvironmentImpl + .newDataFetchingEnvironment(executionContext) + .source(bookingInfo) + .build(); + } +} 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 d81b5cf0d43..43dd10dbdce 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 @@ -35,6 +35,8 @@ import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.routing.graphfinder.GraphFinder; import org.opentripplanner.service.realtimevehicles.internal.DefaultRealtimeVehicleService; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingService; import org.opentripplanner.service.vehiclerental.internal.DefaultVehicleRentalService; import org.opentripplanner.street.search.TraverseMode; import org.opentripplanner.transit.model._data.TimetableRepositoryForTest; @@ -60,8 +62,8 @@ class LegacyRouteRequestMapperTest implements PlanTestConstants { new TestRoutingService(List.of()), transitService, new DefaultFareService(), - graph.getVehicleParkingService(), new DefaultVehicleRentalService(), + new DefaultVehicleParkingService(new DefaultVehicleParkingRepository()), new DefaultRealtimeVehicleService(transitService), GraphFinder.getInstance(graph, transitService::findRegularStops), new RouteRequest() 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 cf1dc759a3e..34cb865c81a 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 @@ -31,6 +31,8 @@ import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.routing.graphfinder.GraphFinder; import org.opentripplanner.service.realtimevehicles.internal.DefaultRealtimeVehicleService; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingService; import org.opentripplanner.service.vehiclerental.internal.DefaultVehicleRentalService; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.service.DefaultTransitService; @@ -70,8 +72,8 @@ class RouteRequestMapperTest { new TestRoutingService(List.of()), transitService, new DefaultFareService(), - graph.getVehicleParkingService(), new DefaultVehicleRentalService(), + new DefaultVehicleParkingService(new DefaultVehicleParkingRepository()), new DefaultRealtimeVehicleService(transitService), GraphFinder.getInstance(graph, transitService::findRegularStops), new RouteRequest() 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 372cda4f308..b3c64e0aecb 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 @@ -47,6 +47,8 @@ import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.service.realtimevehicles.internal.DefaultRealtimeVehicleService; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingService; import org.opentripplanner.service.vehiclerental.internal.DefaultVehicleRentalService; import org.opentripplanner.service.worldenvelope.internal.DefaultWorldEnvelopeRepository; import org.opentripplanner.service.worldenvelope.internal.DefaultWorldEnvelopeService; @@ -144,6 +146,7 @@ void setup() { new DefaultWorldEnvelopeService(new DefaultWorldEnvelopeRepository()), new DefaultRealtimeVehicleService(transitService), new DefaultVehicleRentalService(), + new DefaultVehicleParkingService(new DefaultVehicleParkingRepository()), new DefaultEmissionsService(new EmissionsDataModel()), null, RouterConfig.DEFAULT.flexParameters(), 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 a2e7ebef402..c55e482e533 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 @@ -14,6 +14,7 @@ import org.opentripplanner.graph_builder.module.osm.OsmModule; import org.opentripplanner.osm.OsmProvider; import org.opentripplanner.routing.graph.Graph; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingRepository; import org.opentripplanner.street.model.edge.AreaEdge; import org.opentripplanner.street.model.edge.BoardingLocationToStopLink; import org.opentripplanner.street.model.edge.Edge; @@ -83,7 +84,7 @@ void addAndLinkBoardingLocations(boolean areaVisibility, Set linkedVerti new NonLocalizedString("bus stop not connected to street network") ); var osmModule = OsmModule - .of(provider, graph) + .of(provider, graph, new DefaultVehicleParkingRepository()) .withBoardingAreaRefTags(Set.of("ref", "ref:IFOPT")) .withAreaVisibility(areaVisibility) .build(); 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 fd7996aefe3..4f54581fdb8 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 @@ -18,6 +18,7 @@ import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.model.StopTime; import org.opentripplanner.routing.graph.Graph; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingRepository; import org.opentripplanner.street.model._data.StreetModelForTest; import org.opentripplanner.street.model.edge.Edge; import org.opentripplanner.street.model.edge.StreetTransitStopLink; @@ -170,7 +171,14 @@ public TestModel() { graph.addVertex(stopVertex); graph.hasStreets = true; - module = new StreetLinkerModule(graph, timetableRepository, DataImportIssueStore.NOOP, false); + module = + new StreetLinkerModule( + graph, + new DefaultVehicleParkingRepository(), + timetableRepository, + DataImportIssueStore.NOOP, + false + ); assertFalse(stopVertex.isConnectedToGraph()); assertTrue(stopVertex.getIncoming().isEmpty()); 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 49627c6231d..551564cbb05 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,29 @@ import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.routing.graph.Graph; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingRepository; import org.opentripplanner.transit.service.TimetableRepository; public class TestStreetLinkerModule { /** For test only */ - public static void link(Graph graph, TimetableRepository model) { - new StreetLinkerModule(graph, model, DataImportIssueStore.NOOP, false).buildGraph(); + public static void link(Graph graph, TimetableRepository timetableRepository) { + link(graph, new DefaultVehicleParkingRepository(), timetableRepository); + } + + public static void link( + Graph graph, + VehicleParkingRepository parkingRepository, + TimetableRepository timetableRepository + ) { + new StreetLinkerModule( + graph, + parkingRepository, + timetableRepository, + 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 d7f75f530d1..4f0a20bfb7f 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 @@ -9,8 +9,9 @@ import org.junit.jupiter.api.Test; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.routing.graph.Graph; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingHelper; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingTestGraphData; +import org.opentripplanner.service.vehicleparking.VehicleParkingTestGraphData; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingHelper; import org.opentripplanner.street.model.StreetTraversalPermission; import org.opentripplanner.street.model._data.StreetModelForTest; import org.opentripplanner.street.model.edge.StreetVehicleParkingLink; @@ -169,13 +170,13 @@ public void removeVehicleParkingWithOneEntranceAndNonExistingVertexTest() { ) .build(); - var vehicleParkingService = graph.getVehicleParkingService(); + var vehicleParkingService = new DefaultVehicleParkingRepository(); vehicleParkingService.updateVehicleParking(List.of(vehicleParking), List.of()); helper.linkVehicleParkingToGraph(vehicleParking); graph.remove(A); - TestStreetLinkerModule.link(graph, timetableRepository); + TestStreetLinkerModule.link(graph, vehicleParkingService, timetableRepository); assertEquals(0, graph.getVerticesOfType(VehicleParkingEntranceVertex.class).size()); @@ -183,6 +184,6 @@ public void removeVehicleParkingWithOneEntranceAndNonExistingVertexTest() { assertEquals(0, graph.getEdgesOfType(StreetVehicleParkingLink.class).size()); assertEquals(0, graph.getEdgesOfType(StreetVehicleParkingLink.class).size()); - assertEquals(0, vehicleParkingService.getVehicleParkings().count()); + assertEquals(0, vehicleParkingService.listVehicleParkings().size()); } } 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 c59adad6fd5..d71a60a972e 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 @@ -5,6 +5,7 @@ import org.opentripplanner.graph_builder.module.osm.OsmModule; import org.opentripplanner.osm.OsmProvider; import org.opentripplanner.routing.graph.Graph; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingRepository; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.service.SiteRepository; import org.opentripplanner.transit.service.TimetableRepository; @@ -24,7 +25,10 @@ static Graph buildOsmGraph( 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(); + OsmModule osmModule = OsmModule + .of(osmProvider, graph, new DefaultVehicleParkingRepository()) + .withEdgeNamer(new TestNamer()) + .build(); osmModule.buildGraph(); 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 6bda39e5058..a6afa89707f 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 @@ -21,6 +21,7 @@ import org.opentripplanner.graph_builder.module.osm.OsmModule; import org.opentripplanner.osm.OsmProvider; import org.opentripplanner.routing.graph.Graph; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingRepository; import org.opentripplanner.street.model.StreetTraversalPermission; import org.opentripplanner.street.model._data.StreetModelForTest; import org.opentripplanner.street.model.edge.StreetEdge; @@ -157,7 +158,7 @@ public static TestOtpModel buildGraphNoTransit() { File file = ResourceLoader.of(LinkingTest.class).file("columbus.osm.pbf"); OsmProvider provider = new OsmProvider(file, false); - OsmModule osmModule = OsmModule.of(provider, gg).build(); + OsmModule osmModule = OsmModule.of(provider, gg, new DefaultVehicleParkingRepository()).build(); osmModule.buildGraph(); return new TestOtpModel(gg, timetableRepository); diff --git a/application/src/test/java/org/opentripplanner/graph_builder/module/osm/OsmModuleTest.java b/application/src/test/java/org/opentripplanner/graph_builder/module/osm/OsmModuleTest.java index 0b3d762ed6e..833b14ade9d 100644 --- a/application/src/test/java/org/opentripplanner/graph_builder/module/osm/OsmModuleTest.java +++ b/application/src/test/java/org/opentripplanner/graph_builder/module/osm/OsmModuleTest.java @@ -32,6 +32,9 @@ import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.routing.impl.GraphPathFinder; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingService; import org.opentripplanner.street.model.edge.Edge; import org.opentripplanner.street.model.edge.StreetEdge; import org.opentripplanner.street.model.vertex.BarrierVertex; @@ -56,7 +59,10 @@ public void testGraphBuilder() { OsmProvider provider = new OsmProvider(file, true); - OsmModule osmModule = OsmModule.of(provider, gg).withAreaVisibility(true).build(); + OsmModule osmModule = OsmModule + .of(provider, gg, new DefaultVehicleParkingRepository()) + .withAreaVisibility(true) + .build(); osmModule.buildGraph(); @@ -112,7 +118,10 @@ public void testBuildGraphDetailed() { File file = RESOURCE_LOADER.file("NYC_small.osm.pbf"); OsmProvider provider = new OsmProvider(file, true); - OsmModule osmModule = OsmModule.of(provider, gg).withAreaVisibility(true).build(); + OsmModule osmModule = OsmModule + .of(provider, gg, new DefaultVehicleParkingRepository()) + .withAreaVisibility(true) + .build(); osmModule.buildGraph(); @@ -275,17 +284,16 @@ public void testLocalizedString() { @Test void addParkingLotsToService() { - Graph graph = buildParkingLots(); + var service = new DefaultVehicleParkingService(buildParkingLots().repository); - var service = graph.getVehicleParkingService(); - assertEquals(11, service.getVehicleParkings().count()); - assertEquals(6, service.getBikeParks().count()); - assertEquals(5, service.getCarParks().count()); + assertEquals(11, service.listVehicleParkings().size()); + assertEquals(6, service.listBikeParks().size()); + assertEquals(5, service.listCarParks().size()); } @Test void createArtificalEntrancesToUnlikedParkingLots() { - Graph graph = buildParkingLots(); + var graph = buildParkingLots().graph; graph .getVerticesOfType(VehicleParkingEntranceVertex.class) @@ -307,7 +315,7 @@ void testBarrierAtEnd() { File file = RESOURCE_LOADER.file("accessno-at-end.pbf"); OsmProvider provider = new OsmProvider(file, false); - OsmModule loader = OsmModule.of(provider, graph).build(); + OsmModule loader = OsmModule.of(provider, graph, new DefaultVehicleParkingRepository()).build(); loader.buildGraph(); Vertex start = graph.getVertex(VertexLabel.osm(1)); @@ -322,22 +330,25 @@ void testBarrierAtEnd() { assertEquals(barrier.getBarrierPermissions(), ALL); } - private Graph buildParkingLots() { + private BuildResult buildParkingLots() { var graph = new Graph(); + var service = new DefaultVehicleParkingRepository(); var providers = Stream .of("B+R.osm.pbf", "P+R.osm.pbf") .map(RESOURCE_LOADER::file) .map(f -> new OsmProvider(f, false)) .toList(); var module = OsmModule - .of(providers, graph) + .of(providers, graph, service) .withStaticParkAndRide(true) .withStaticBikeParkAndRide(true) .build(); module.buildGraph(); - return graph; + return new BuildResult(graph, service); } + private record BuildResult(Graph graph, VehicleParkingRepository repository) {} + /** * This reads test file with area and tests if it can be routed if visibility is used and if it * isn't @@ -354,7 +365,10 @@ private void testBuildingAreas(boolean skipVisibility) { File file = RESOURCE_LOADER.file("usf_area.osm.pbf"); OsmProvider provider = new OsmProvider(file, false); - OsmModule loader = OsmModule.of(provider, graph).withAreaVisibility(!skipVisibility).build(); + OsmModule loader = OsmModule + .of(provider, graph, new DefaultVehicleParkingRepository()) + .withAreaVisibility(!skipVisibility) + .build(); loader.buildGraph(); diff --git a/application/src/test/java/org/opentripplanner/graph_builder/module/osm/PlatformLinkerTest.java b/application/src/test/java/org/opentripplanner/graph_builder/module/osm/PlatformLinkerTest.java index 2a5d4e8a163..f952bf90710 100644 --- a/application/src/test/java/org/opentripplanner/graph_builder/module/osm/PlatformLinkerTest.java +++ b/application/src/test/java/org/opentripplanner/graph_builder/module/osm/PlatformLinkerTest.java @@ -6,6 +6,7 @@ import org.junit.jupiter.api.Test; import org.opentripplanner.osm.OsmProvider; import org.opentripplanner.routing.graph.Graph; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingRepository; import org.opentripplanner.street.model.edge.AreaEdge; import org.opentripplanner.street.model.vertex.Vertex; import org.opentripplanner.street.model.vertex.VertexLabel; @@ -29,7 +30,10 @@ public void testLinkEntriesToPlatforms() { OsmProvider provider = new OsmProvider(file, false); - OsmModule osmModule = OsmModule.of(provider, gg).withPlatformEntriesLinking(true).build(); + OsmModule osmModule = OsmModule + .of(provider, gg, new DefaultVehicleParkingRepository()) + .withPlatformEntriesLinking(true) + .build(); osmModule.buildGraph(); diff --git a/application/src/test/java/org/opentripplanner/graph_builder/module/osm/TriangleInequalityTest.java b/application/src/test/java/org/opentripplanner/graph_builder/module/osm/TriangleInequalityTest.java index bbf59ad9c53..ffc1f661dcc 100644 --- a/application/src/test/java/org/opentripplanner/graph_builder/module/osm/TriangleInequalityTest.java +++ b/application/src/test/java/org/opentripplanner/graph_builder/module/osm/TriangleInequalityTest.java @@ -21,6 +21,7 @@ import org.opentripplanner.routing.api.request.request.filter.AllowAllTransitFilter; import org.opentripplanner.routing.api.request.request.filter.TransitFilter; import org.opentripplanner.routing.graph.Graph; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingRepository; import org.opentripplanner.street.model.edge.Edge; import org.opentripplanner.street.model.vertex.Vertex; import org.opentripplanner.street.model.vertex.VertexLabel; @@ -50,7 +51,10 @@ public static void onlyOnce() { File file = ResourceLoader.of(TriangleInequalityTest.class).file("NYC_small.osm.pbf"); OsmProvider provider = new OsmProvider(file, true); - OsmModule osmModule = OsmModule.of(provider, graph).withAreaVisibility(true).build(); + OsmModule osmModule = OsmModule + .of(provider, graph, new DefaultVehicleParkingRepository()) + .withAreaVisibility(true) + .build(); osmModule.buildGraph(); } 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 492d04a0007..103dafa61b9 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 @@ -13,6 +13,7 @@ import org.opentripplanner.graph_builder.module.TestStreetLinkerModule; import org.opentripplanner.osm.OsmProvider; import org.opentripplanner.routing.graph.Graph; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingRepository; import org.opentripplanner.street.model.edge.StreetVehicleParkingLink; import org.opentripplanner.street.model.edge.VehicleParkingEdge; import org.opentripplanner.street.model.vertex.VehicleParkingEntranceVertex; @@ -162,7 +163,7 @@ private Graph buildOsmGraph(String osmFileName, DataImportIssueStore issueStore) var timetableRepository = new TimetableRepository(siteRepository, deduplicator); OsmProvider provider = new OsmProvider(RESOURCE_LOADER.file(osmFileName), false); OsmModule loader = OsmModule - .of(provider, graph) + .of(provider, graph, new DefaultVehicleParkingRepository()) .withIssueStore(issueStore) .withAreaVisibility(true) .withStaticParkAndRide(true) diff --git a/application/src/test/java/org/opentripplanner/graph_builder/module/osm/UnroutableTest.java b/application/src/test/java/org/opentripplanner/graph_builder/module/osm/UnroutableTest.java index b759ace9b94..138c3e67181 100644 --- a/application/src/test/java/org/opentripplanner/graph_builder/module/osm/UnroutableTest.java +++ b/application/src/test/java/org/opentripplanner/graph_builder/module/osm/UnroutableTest.java @@ -10,6 +10,7 @@ import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.routing.graph.Graph; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingRepository; import org.opentripplanner.street.model.edge.Edge; import org.opentripplanner.street.model.vertex.Vertex; import org.opentripplanner.street.model.vertex.VertexLabel; @@ -37,7 +38,10 @@ public void setUp() throws Exception { var osmDataFile = ResourceLoader.of(UnroutableTest.class).file("bridge_construction.osm.pbf"); OsmProvider provider = new OsmProvider(osmDataFile, true); - OsmModule osmBuilder = OsmModule.of(provider, graph).withAreaVisibility(true).build(); + OsmModule osmBuilder = OsmModule + .of(provider, graph, new DefaultVehicleParkingRepository()) + .withAreaVisibility(true) + .build(); osmBuilder.buildGraph(); } diff --git a/application/src/test/java/org/opentripplanner/gtfs/mapping/TripMapperTest.java b/application/src/test/java/org/opentripplanner/gtfs/mapping/TripMapperTest.java index 4132b73826c..12df141eaf4 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/mapping/TripMapperTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/mapping/TripMapperTest.java @@ -150,8 +150,8 @@ void testFlexFactorAndOffset( private static Stream provideOffsetAndFactor() { return Stream.of( - Arguments.of(1.5d, 60d, 1.5d, Duration.ofHours(1)), - Arguments.of(null, 120d, 1d, Duration.ofHours(2)), + Arguments.of(1.5d, 60d, 1.5d, Duration.ofMinutes(1)), + Arguments.of(null, 120d, 1d, Duration.ofMinutes(2)), Arguments.of(1.5d, null, 1.5d, Duration.ZERO) ); } 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 728208438a8..4b7636ca07f 100644 --- a/application/src/test/java/org/opentripplanner/model/impl/OtpTransitServiceImplTest.java +++ b/application/src/test/java/org/opentripplanner/model/impl/OtpTransitServiceImplTest.java @@ -123,7 +123,7 @@ public void testGetAllStopTimes() { } @Test - public void testGetAllTrips() { + public void testListTrips() { Collection trips = subject.getAllTrips(); assertEquals(34, trips.size()); diff --git a/application/src/test/java/org/opentripplanner/netex/mapping/BookingInfoMapperTest.java b/application/src/test/java/org/opentripplanner/netex/mapping/BookingInfoMapperTest.java index e561a6155d3..7b917dcf912 100644 --- a/application/src/test/java/org/opentripplanner/netex/mapping/BookingInfoMapperTest.java +++ b/application/src/test/java/org/opentripplanner/netex/mapping/BookingInfoMapperTest.java @@ -193,6 +193,6 @@ void testMapMinimumBookingNotice() { BookingInfo bookingInfo = subject.map(stopPoint, null, null); - assertEquals(THIRTY_MINUTES, bookingInfo.getMinimumBookingNotice()); + assertEquals(THIRTY_MINUTES, bookingInfo.getMinimumBookingNotice().get()); } } diff --git a/application/src/test/java/org/opentripplanner/netex/mapping/VehicleParkingMapperTest.java b/application/src/test/java/org/opentripplanner/netex/mapping/VehicleParkingMapperTest.java index bf56be1be1b..d803e1867cb 100644 --- a/application/src/test/java/org/opentripplanner/netex/mapping/VehicleParkingMapperTest.java +++ b/application/src/test/java/org/opentripplanner/netex/mapping/VehicleParkingMapperTest.java @@ -22,8 +22,8 @@ import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.graph_builder.issue.service.DefaultDataImportIssueStore; import org.opentripplanner.netex.mapping.support.FeedScopedIdFactory; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces; import org.rutebanken.netex.model.LocationStructure; import org.rutebanken.netex.model.MultilingualString; import org.rutebanken.netex.model.Parking; diff --git a/application/src/test/java/org/opentripplanner/osm/tagmapping/FinlandMapperTest.java b/application/src/test/java/org/opentripplanner/osm/tagmapping/FinlandMapperTest.java index f8b07e06bf6..ecbd2eec3be 100644 --- a/application/src/test/java/org/opentripplanner/osm/tagmapping/FinlandMapperTest.java +++ b/application/src/test/java/org/opentripplanner/osm/tagmapping/FinlandMapperTest.java @@ -2,6 +2,8 @@ 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.CAR; 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; @@ -12,15 +14,16 @@ import org.opentripplanner.osm.model.OsmWithTags; import org.opentripplanner.osm.wayproperty.WayProperties; import org.opentripplanner.osm.wayproperty.WayPropertySet; +import org.opentripplanner.osm.wayproperty.specifier.WayTestData; -public class FinlandMapperTest { +class FinlandMapperTest { private WayPropertySet wps; private OsmTagMapper mapper; static float epsilon = 0.01f; @BeforeEach - public void setup() { + void setup() { this.wps = new WayPropertySet(); this.mapper = new FinlandMapper(); this.mapper.populateProperties(this.wps); @@ -30,7 +33,7 @@ public void setup() { * Test that bike and walk safety factors are calculated accurately */ @Test - public void testSafety() { + void testSafety() { OsmWithTags primaryWay = new OsmWithTags(); primaryWay.addTag("highway", "primary"); primaryWay.addTag("oneway", "no"); @@ -141,7 +144,7 @@ public void testSafety() { } @Test - public void testSafetyWithMixins() { + void testSafetyWithMixins() { OsmWithTags wayWithMixins = new OsmWithTags(); // highway=service has no custom bicycle or walk safety wayWithMixins.addTag("highway", "unclassified"); @@ -179,7 +182,7 @@ public void testSafetyWithMixins() { } @Test - public void testTagMapping() { + void testTagMapping() { OsmWithTags way; WayProperties wayData; @@ -206,7 +209,7 @@ public void testTagMapping() { * Test that biking is not allowed in footway areas and transit platforms */ @Test - public void testArea() { + void testArea() { OsmWithTags way; WayProperties wayData; @@ -227,10 +230,21 @@ public void testArea() { } @Test - public void serviceNoThroughTraffic() { + void serviceNoThroughTraffic() { var way = new OsmWay(); way.addTag("highway", "residential"); way.addTag("service", "driveway"); assertTrue(mapper.isMotorVehicleThroughTrafficExplicitlyDisallowed(way)); } + + @Test + void motorroad() { + OsmTagMapper osmTagMapper = new FinlandMapper(); + WayPropertySet wps = new WayPropertySet(); + osmTagMapper.populateProperties(wps); + var way = WayTestData.carTunnel(); + assertEquals(ALL, wps.getDataForWay(way).getPermission()); + way.addTag("motorroad", "yes"); + assertEquals(CAR, wps.getDataForWay(way).getPermission()); + } } diff --git a/application/src/test/java/org/opentripplanner/osm/tagmapping/OsmTagMapperTest.java b/application/src/test/java/org/opentripplanner/osm/tagmapping/OsmTagMapperTest.java index b3ee57f9710..5448f84294d 100644 --- a/application/src/test/java/org/opentripplanner/osm/tagmapping/OsmTagMapperTest.java +++ b/application/src/test/java/org/opentripplanner/osm/tagmapping/OsmTagMapperTest.java @@ -3,15 +3,21 @@ 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.street.model.StreetTraversalPermission.ALL; import static org.opentripplanner.street.model.StreetTraversalPermission.CAR; +import java.util.List; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.osm.model.OsmWithTags; +import org.opentripplanner.osm.wayproperty.WayPropertySet; +import org.opentripplanner.osm.wayproperty.specifier.WayTestData; -public class OsmTagMapperTest { +class OsmTagMapperTest { @Test - public void isMotorThroughTrafficExplicitlyDisallowed() { + void isMotorThroughTrafficExplicitlyDisallowed() { OsmWithTags o = new OsmWithTags(); OsmTagMapper osmTagMapper = new OsmTagMapper(); @@ -34,7 +40,7 @@ public void isMotorThroughTrafficExplicitlyDisallowed() { } @Test - public void isBicycleThroughTrafficExplicitlyDisallowed() { + void isBicycleThroughTrafficExplicitlyDisallowed() { OsmTagMapper osmTagMapper = new OsmTagMapper(); assertTrue( osmTagMapper.isBicycleThroughTrafficExplicitlyDisallowed(way("bicycle", "destination")) @@ -45,14 +51,14 @@ public void isBicycleThroughTrafficExplicitlyDisallowed() { } @Test - public void isWalkThroughTrafficExplicitlyDisallowed() { + void isWalkThroughTrafficExplicitlyDisallowed() { OsmTagMapper osmTagMapper = new OsmTagMapper(); assertTrue(osmTagMapper.isWalkThroughTrafficExplicitlyDisallowed(way("foot", "destination"))); assertTrue(osmTagMapper.isWalkThroughTrafficExplicitlyDisallowed(way("access", "destination"))); } @Test - public void testAccessNo() { + void testAccessNo() { OsmWithTags tags = new OsmWithTags(); OsmTagMapper osmTagMapper = new OsmTagMapper(); @@ -64,7 +70,7 @@ public void testAccessNo() { } @Test - public void testAccessPrivate() { + void testAccessPrivate() { OsmWithTags tags = new OsmWithTags(); OsmTagMapper osmTagMapper = new OsmTagMapper(); @@ -76,7 +82,7 @@ public void testAccessPrivate() { } @Test - public void testFootModifier() { + void testFootModifier() { OsmWithTags tags = new OsmWithTags(); OsmTagMapper osmTagMapper = new OsmTagMapper(); @@ -89,7 +95,7 @@ public void testFootModifier() { } @Test - public void testVehicleDenied() { + void testVehicleDenied() { OsmWithTags tags = new OsmWithTags(); OsmTagMapper osmTagMapper = new OsmTagMapper(); @@ -101,7 +107,7 @@ public void testVehicleDenied() { } @Test - public void testVehicleDeniedMotorVehiclePermissive() { + void testVehicleDeniedMotorVehiclePermissive() { OsmWithTags tags = new OsmWithTags(); OsmTagMapper osmTagMapper = new OsmTagMapper(); @@ -114,7 +120,7 @@ public void testVehicleDeniedMotorVehiclePermissive() { } @Test - public void testVehicleDeniedBicyclePermissive() { + void testVehicleDeniedBicyclePermissive() { OsmWithTags tags = new OsmWithTags(); OsmTagMapper osmTagMapper = new OsmTagMapper(); @@ -127,7 +133,7 @@ public void testVehicleDeniedBicyclePermissive() { } @Test - public void testMotorcycleModifier() { + void testMotorcycleModifier() { OsmWithTags tags = new OsmWithTags(); OsmTagMapper osmTagMapper = new OsmTagMapper(); @@ -140,7 +146,7 @@ public void testMotorcycleModifier() { } @Test - public void testBicycleModifier() { + void testBicycleModifier() { OsmWithTags tags = new OsmWithTags(); OsmTagMapper osmTagMapper = new OsmTagMapper(); @@ -153,7 +159,7 @@ public void testBicycleModifier() { } @Test - public void testBicyclePermissive() { + void testBicyclePermissive() { OsmWithTags tags = new OsmWithTags(); OsmTagMapper osmTagMapper = new OsmTagMapper(); @@ -165,6 +171,29 @@ public void testBicyclePermissive() { assertTrue(osmTagMapper.isWalkThroughTrafficExplicitlyDisallowed(tags)); } + public static List roadCases() { + return List.of( + WayTestData.carTunnel(), + WayTestData.southwestMayoStreet(), + WayTestData.southeastLaBonitaWay(), + WayTestData.fiveLanes(), + WayTestData.highwayTertiary() + ); + } + + @ParameterizedTest + @MethodSource("roadCases") + void motorroad(OsmWithTags way) { + OsmTagMapper osmTagMapper = new OsmTagMapper(); + WayPropertySet wps = new WayPropertySet(); + osmTagMapper.populateProperties(wps); + + assertEquals(ALL, wps.getDataForWay(way).getPermission()); + + way.addTag("motorroad", "yes"); + assertEquals(CAR, wps.getDataForWay(way).getPermission()); + } + public OsmWithTags way(String key, String value) { var way = new OsmWithTags(); way.addTag(key, value); 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 b9f9d7acb56..e283e4e9fa8 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/GraphRoutingTest.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/GraphRoutingTest.java @@ -13,9 +13,9 @@ import org.opentripplanner.model.PickDrop; import org.opentripplanner.model.StopTime; import org.opentripplanner.routing.graph.Graph; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParking.VehicleParkingEntranceCreator; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingHelper; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParking.VehicleParkingEntranceCreator; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingHelper; import org.opentripplanner.service.vehiclerental.model.RentalVehicleType; import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/CarPickupSnapshotTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/CarPickupSnapshotTest.java deleted file mode 100644 index c233d0c6bbc..00000000000 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/CarPickupSnapshotTest.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.opentripplanner.routing.algorithm.mapping; - -import au.com.origin.snapshots.junit5.SnapshotExtension; -import java.util.List; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.opentripplanner.model.GenericLocation; -import org.opentripplanner.model.modes.ExcludeAllTransitFilter; -import org.opentripplanner.routing.api.request.RouteRequest; -import org.opentripplanner.routing.api.request.StreetMode; -import org.opentripplanner.routing.api.request.request.filter.AllowAllTransitFilter; - -@ExtendWith(SnapshotExtension.class) -public class CarPickupSnapshotTest extends SnapshotTestBase { - - static GenericLocation p0 = new GenericLocation( - "SE Stark St. & SE 17th Ave. (P0)", - null, - 45.519320, - -122.648567 - ); - - static GenericLocation p1 = new GenericLocation( - "SE Morrison St. & SE 17th Ave. (P1)", - null, - 45.51726, - -122.64847 - ); - - static GenericLocation p2 = new GenericLocation( - "NW Northrup St. & NW 22nd Ave. (P2)", - null, - 45.53122, - -122.69659 - ); - - @BeforeAll - public static void beforeClass() { - loadGraphBeforeClass(false); - } - - @Test - public void test_trip_planning_with_car_pickup_only() { - RouteRequest request = createTestRequest(2009, 11, 17, 10, 0, 0); - - request.journey().direct().setMode(StreetMode.CAR_PICKUP); - request.journey().transit().setFilters(List.of(ExcludeAllTransitFilter.of())); - - request.setFrom(p0); - request.setTo(p2); - - expectRequestResponseToMatchSnapshot(request); - } - - @Test - public void test_trip_planning_with_car_pickup_transfer() { - RouteRequest request = createTestRequest(2009, 11, 17, 10, 0, 0); - - request.journey().access().setMode(StreetMode.WALK); - request.journey().egress().setMode(StreetMode.WALK); - request.journey().direct().setMode(StreetMode.WALK); - request.journey().transfer().setMode(StreetMode.CAR_PICKUP); - request.journey().transit().setFilters(List.of(AllowAllTransitFilter.of())); - - request.setFrom(p0); - request.setTo(p2); - - expectRequestResponseToMatchSnapshot(request); - } -} diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/__snapshots__/CarPickupSnapshotTest.snap b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/__snapshots__/CarPickupSnapshotTest.snap deleted file mode 100644 index a3a515f82b4..00000000000 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/__snapshots__/CarPickupSnapshotTest.snap +++ /dev/null @@ -1,3438 +0,0 @@ -org.opentripplanner.routing.algorithm.mapping.CarPickupSnapshotTest.test_trip_planning_with_car_pickup_only=[ - [ - { - "arrivedAtDestinationWithRentedBicycle" : false, - "duration" : 634, - "elevationGained" : 0.0, - "elevationLost" : 0.0, - "endTime" : "2009-11-17T18:10:34.000+00:00", - "fare" : { - "details" : { }, - "fare" : { } - }, - "generalizedCost" : 1005, - "legs" : [ - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 5050.5, - "endTime" : "2009-11-17T18:10:34.000+00:00", - "from" : { - "departure" : "2009-11-17T18:00:00.000+00:00", - "lat" : 45.51932, - "lon" : -122.648567, - "name" : "SE Stark St. & SE 17th Ave. (P0)", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 1005, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 200, - "points" : "unytGpxqkVA??dACpB@P?f@?p@?j@?dAAhE?jE?vD?PK?aC?{BAS?mC??hE?nEAfE?hE?hEAnC?^?Z?pB?J?~@?J}B?O?OAo@?A?w@?U?S?iB?O??Z?xC?XAJ?P?R@H@FBFBFBDDDBBDBF@F?d@@H@D@FBFD@BBDBF@H@L?L?b@@RBTGpJCjEA|CArAAxAAxAAdBEzHClF?@Ax@GTAjBAZQ?qBBuA@Y@[@aCDM@K?aCBCV@pCDZ@|D@N@vD?L?F?JBbD?D?N?BK?uBBM?K?uBBI@K?aBBSAM@M@K?GBEDEHIJUX_@f@KNQRSVGFCBQPIHGDGBIBK@W@a@?mA@E?C@C@A?CBQTKJEHIJeC~CYZo@v@g@d@IJAFAD?L@vC@hB@p@?X?T@P?N@P@nA?j@AX?L@`B@dA?R?RBbD?T?NBbD?R?P@|D@jB?x@@J?N?B?P?LBjD@N@fD?T?LBdD?R?PF`K?RDlJ?R?PFlJ?J" - }, - "mode" : "CAR", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:00:00.000+00:00", - "steps" : [ - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 0.69, - "elevation" : "", - "lat" : 45.51932, - "lon" : -122.6485648, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "Southeast 17th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 395.42, - "elevation" : "", - "lat" : 45.5193262, - "lon" : -122.6485648, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Southeast Stark Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 238.05, - "elevation" : "", - "lat" : 45.5193421, - "lon" : -122.6536397, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Southeast 12th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 553.35, - "elevation" : "", - "lat" : 45.5214829, - "lon" : -122.6536226, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Southeast Ash Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 158.48, - "elevation" : "", - "lat" : 45.5215062, - "lon" : -122.6607251, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Southeast Grand Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 78.88, - "elevation" : "", - "lat" : 45.5229315, - "lon" : -122.6607174, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "Northeast Grand Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 168.84, - "elevation" : "", - "lat" : 45.5236409, - "lon" : -122.6607123, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Northeast Couch Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "SOUTHWEST", - "area" : false, - "bogusName" : false, - "distance" : 64.13, - "elevation" : "", - "lat" : 45.5231423, - "lon" : -122.6623136, - "relativeDirection" : "SLIGHTLY_RIGHT", - "stayOn" : true, - "streetName" : "Northeast Couch Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 144.26, - "elevation" : "", - "lat" : 45.522964, - "lon" : -122.6630306, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "East Burnside Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 407.38, - "elevation" : "", - "lat" : 45.523001, - "lon" : -122.6648816, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "Burnside Bridge", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 178.19, - "elevation" : "", - "lat" : 45.5231054, - "lon" : -122.6701087, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "West Burnside Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 310.7, - "elevation" : "", - "lat" : 45.5231958, - "lon" : -122.6723802, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northwest 2nd Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 317.18, - "elevation" : "", - "lat" : 45.5259887, - "lon" : -122.6724927, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Northwest Flanders Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 238.16, - "elevation" : "", - "lat" : 45.5259105, - "lon" : -122.6765581, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northwest 6th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 465.44, - "elevation" : "", - "lat" : 45.5280515, - "lon" : -122.6766232, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "Northwest Station Way", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 1331.38, - "elevation" : "", - "lat" : 45.5315452, - "lon" : -122.679511, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Northwest Northrup Street", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:10:34.000+00:00", - "lat" : 45.53122, - "lon" : -122.69659, - "name" : "NW Northrup St. & NW 22nd Ave. (P2)", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - } - ], - "startTime" : "2009-11-17T18:00:00.000+00:00", - "tooSloped" : false, - "transfers" : 0, - "transitTime" : 0, - "waitingTime" : 0, - "walkDistance" : 5050.5, - "walkLimitExceeded" : false, - "walkTime" : 634 - } - ] -] - - -org.opentripplanner.routing.algorithm.mapping.CarPickupSnapshotTest.test_trip_planning_with_car_pickup_transfer=[ - [ - { - "arrivedAtDestinationWithRentedBicycle" : false, - "duration" : 3804, - "elevationGained" : 0.0, - "elevationLost" : 0.0, - "endTime" : "2009-11-17T19:03:24.000+00:00", - "fare" : { - "details" : { }, - "fare" : { } - }, - "generalizedCost" : 7384, - "legs" : [ - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 4875.79, - "endTime" : "2009-11-17T19:03:24.000+00:00", - "from" : { - "departure" : "2009-11-17T18:00:00.000+00:00", - "lat" : 45.51932, - "lon" : -122.648567, - "name" : "SE Stark St. & SE 17th Ave. (P0)", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 7384, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 252, - "points" : "unytGpxqkVA??dACpB@P?f@?p@?j@?dAAhE?jE?vD?P?RK?GFCDCFADABADADAF?D?FADCF?B?B?@?D@DADABCBC?A?C?AA??GICAAAA?A?A?AACAC?A@ABABC@CDCBCBC@CBABABCJ?J?@?@MR?hE?fEAdB?dB?lE?`A?T?pBA|D?J?x@?r@y@??bBuA?y@AU?{@?O?}@?E?y@?_@Aa@?u@?W??J@N?hA@x@Ap@ATETGpJCjEA|CArAAxAAxAAdBEzHClF?@Ax@GTAjBAZ?R@hC@h@Q@cBBM?M?_CDsA@Y?Q@O?K?Q?mBB[?C?W@[?]@E?IDI@]DO@SBM?S@G@A?GDEJQ|@AL?L@nA?j@@L?V?d@@~@@NI?E?W@Q?Q?m@@Q@AF?DAJBzB?V?NANM@K?GBEDEHIJUX_@f@KNQRSVGFCBQPIHGDGBIBK@W@a@?mA@E?C@C@A?CBQTKJEHIJeC~CYZo@v@g@d@IJAFAD?L@vC@hB@p@?X?T@P?N@P@nA?j@AX?L@`B@dA?R?RBbD?T?NBbD?R?P@|D@jB?x@@J?N?B?P?LBjD@N@fD?T?LBdD?R?PF`K?RDlJ?R?PFlJ?J" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:00:00.000+00:00", - "steps" : [ - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 0.69, - "elevation" : "", - "lat" : 45.51932, - "lon" : -122.6485648, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "Southeast 17th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 402.49, - "elevation" : "", - "lat" : 45.5193262, - "lon" : -122.6485648, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Southeast Stark Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : true, - "distance" : 131.76, - "elevation" : "", - "lat" : 45.5193421, - "lon" : -122.6537305, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "path", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 516.5, - "elevation" : "", - "lat" : 45.5200623, - "lon" : -122.6546522, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Southeast Oak Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : true, - "distance" : 70.84, - "elevation" : "", - "lat" : 45.5200842, - "lon" : -122.6612814, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "parking aisle", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 284.75, - "elevation" : "", - "lat" : 45.5203736, - "lon" : -122.661783, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Southeast Martin Luther King, Junior Boulevard", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 243.45, - "elevation" : "", - "lat" : 45.5229343, - "lon" : -122.6617665, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "East Burnside Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 407.38, - "elevation" : "", - "lat" : 45.523001, - "lon" : -122.6648816, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "Burnside Bridge", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 256.85, - "elevation" : "", - "lat" : 45.5231054, - "lon" : -122.6701087, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "West Burnside Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 460.65, - "elevation" : "", - "lat" : 45.5231776, - "lon" : -122.6733895, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northwest 3rd Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 145.82, - "elevation" : "", - "lat" : 45.5272866, - "lon" : -122.6737165, - "relativeDirection" : "SLIGHTLY_LEFT", - "stayOn" : false, - "streetName" : "Northwest Hoyt Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 77.35, - "elevation" : "", - "lat" : 45.5273496, - "lon" : -122.6755629, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northwest 5th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 80.53, - "elevation" : "", - "lat" : 45.5280449, - "lon" : -122.6755935, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Northwest Irving Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 465.44, - "elevation" : "", - "lat" : 45.5280515, - "lon" : -122.6766232, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northwest Station Way", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 1331.38, - "elevation" : "", - "lat" : 45.5315452, - "lon" : -122.679511, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Northwest Northrup Street", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T19:03:24.000+00:00", - "lat" : 45.53122, - "lon" : -122.69659, - "name" : "NW Northrup St. & NW 22nd Ave. (P2)", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - } - ], - "startTime" : "2009-11-17T18:00:00.000+00:00", - "tooSloped" : false, - "transfers" : 0, - "transitTime" : 0, - "waitingTime" : 0, - "walkDistance" : 4875.79, - "walkLimitExceeded" : false, - "walkTime" : 3804 - }, - { - "arrivedAtDestinationWithRentedBicycle" : false, - "duration" : 1815, - "elevationGained" : 0.0, - "elevationLost" : 0.0, - "endTime" : "2009-11-17T18:34:19.000+00:00", - "fare" : { - "details" : { }, - "fare" : { }, - "legProducts" : [ - { - "legIndices" : [ - 1 - ], - "products" : [ - { - "amount" : { - "cents" : 200, - "currency" : { - "currency" : "USD", - "currencyCode" : "USD", - "defaultFractionDigits" : 2, - "symbol" : "$" - } - }, - "id" : "prt:8", - "name" : "regular" - } - ] - }, - { - "legIndices" : [ - 5 - ], - "products" : [ - { - "amount" : { - "cents" : 200, - "currency" : { - "currency" : "USD", - "currencyCode" : "USD", - "defaultFractionDigits" : 2, - "symbol" : "$" - } - }, - "id" : "prt:8", - "name" : "regular" - } - ] - } - ] - }, - "generalizedCost" : 3832, - "legs" : [ - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 673.56, - "endTime" : "2009-11-17T18:12:58.000+00:00", - "from" : { - "departure" : "2009-11-17T18:04:04.000+00:00", - "lat" : 45.51932, - "lon" : -122.648567, - "name" : "SE Stark St. & SE 17th Ave. (P0)", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 1031, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 42, - "points" : "unytGpxqkVA??dACpB@PoC?_CAM?aC??A?A?A?A??AA?AAA??AAA???A?A?A???A@A??@A@?@??A@?@?BcC?mCAmCAmC?QBIYIWOH" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:04:04.000+00:00", - "steps" : [ - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 0.69, - "elevation" : "", - "lat" : 45.51932, - "lon" : -122.6485648, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "Southeast 17th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 79.12, - "elevation" : "", - "lat" : 45.5193262, - "lon" : -122.6485648, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Southeast Stark Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 402.13, - "elevation" : "", - "lat" : 45.5193388, - "lon" : -122.6495798, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Southeast 16th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 168.89, - "elevation" : "", - "lat" : 45.5228912, - "lon" : -122.6495528, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "Northeast 16th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTHEAST", - "area" : false, - "bogusName" : false, - "distance" : 22.74, - "elevation" : "", - "lat" : 45.524409, - "lon" : -122.6495675, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northeast Sandy Boulevard", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:12:58.000+00:00", - "departure" : "2009-11-17T18:12:58.000+00:00", - "lat" : 45.524581, - "lon" : -122.649367, - "name" : "NE Sandy & 16th", - "stopCode" : "5060", - "stopId" : "prt:5060", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyId" : "prt:prt", - "agencyName" : "TriMet", - "agencyTimeZoneOffset" : -28800000, - "agencyUrl" : "http://trimet.org", - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 2119.06, - "endTime" : "2009-11-17T18:19:00.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:12:58.000+00:00", - "departure" : "2009-11-17T18:12:58.000+00:00", - "lat" : 45.524581, - "lon" : -122.649367, - "name" : "NE Sandy & 16th", - "stopCode" : "5060", - "stopId" : "prt:5060", - "stopIndex" : 92, - "stopSequence" : 93, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 962, - "headsign" : "Beaverton TC", - "interlineWithPreviousLeg" : false, - "intermediateStops" : [ - { - "arrival" : "2009-11-17T18:13:32.000+00:00", - "departure" : "2009-11-17T18:13:32.000+00:00", - "lat" : 45.523767, - "lon" : -122.651428, - "name" : "NE Sandy & 14th", - "stopCode" : "5058", - "stopId" : "prt:5058", - "stopIndex" : 93, - "stopSequence" : 94, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:14:00.000+00:00", - "departure" : "2009-11-17T18:14:00.000+00:00", - "lat" : 45.523103, - "lon" : -122.653064, - "name" : "NE Sandy & 12th", - "stopCode" : "5055", - "stopId" : "prt:5055", - "stopIndex" : 94, - "stopSequence" : 95, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:14:47.000+00:00", - "departure" : "2009-11-17T18:14:47.000+00:00", - "lat" : 45.523024, - "lon" : -122.656526, - "name" : "E Burnside & NE 9th", - "stopCode" : "819", - "stopId" : "prt:819", - "stopIndex" : 95, - "stopSequence" : 96, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:15:24.000+00:00", - "departure" : "2009-11-17T18:15:24.000+00:00", - "lat" : 45.523012, - "lon" : -122.659365, - "name" : "E Burnside & NE 6th", - "stopCode" : "805", - "stopId" : "prt:805", - "stopIndex" : 96, - "stopSequence" : 97, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:15:52.000+00:00", - "departure" : "2009-11-17T18:15:52.000+00:00", - "lat" : 45.523015, - "lon" : -122.661534, - "name" : "E Burnside & NE M L King", - "stopCode" : "705", - "stopId" : "prt:705", - "stopIndex" : 97, - "stopSequence" : 98, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:18:00.000+00:00", - "departure" : "2009-11-17T18:18:00.000+00:00", - "lat" : 45.523249, - "lon" : -122.671269, - "name" : "W Burnside & Burnside Bridge", - "stopCode" : "689", - "stopId" : "prt:689", - "stopIndex" : 98, - "stopSequence" : 99, - "vertexType" : "TRANSIT", - "zoneId" : "0" - } - ], - "legGeometry" : { - "length" : 50, - "points" : "coztGd}qkVNl@r@`CZhA`A`D??Ph@l@tBb@rARh@Pd@???BPj@@jA?jEAhE?pD???VAjE?hE?dB?b@???`AAhE?dD???l@C`EAhEEhE?bAA|@?XAZ@\\AzACnGKbKAjC?bE???JEnE@fEDlE@hE@~A" - }, - "mode" : "BUS", - "pathway" : false, - "realTime" : false, - "route" : "Burnside/Stark", - "routeId" : "prt:20", - "routeLongName" : "Burnside/Stark", - "routeShortName" : "20", - "routeType" : 3, - "serviceDate" : "2009-11-17", - "startTime" : "2009-11-17T18:12:58.000+00:00", - "steps" : [ ], - "to" : { - "arrival" : "2009-11-17T18:19:00.000+00:00", - "departure" : "2009-11-17T18:19:00.000+00:00", - "lat" : 45.523169, - "lon" : -122.675893, - "name" : "W Burnside & NW 5th", - "stopCode" : "782", - "stopId" : "prt:782", - "stopIndex" : 99, - "stopSequence" : 100, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - "transitLeg" : true, - "tripBlockId" : "2002", - "tripId" : "prt:200W1200" - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 0.0, - "endTime" : "2009-11-17T18:19:00.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:19:00.000+00:00", - "departure" : "2009-11-17T18:19:00.000+00:00", - "lat" : 45.523169, - "lon" : -122.675893, - "name" : "W Burnside & NW 5th", - "stopCode" : "782", - "stopId" : "prt:782", - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - "generalizedCost" : 1, - "interlineWithPreviousLeg" : false, - "legElevation" : "", - "legGeometry" : { - "length" : 2, - "points" : "wfztGjcwkVD?" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:19:00.000+00:00", - "steps" : [ ], - "to" : { - "arrival" : "2009-11-17T18:19:00.000+00:00", - "departure" : "2009-11-17T18:19:00.000+00:00", - "lat" : 45.5231324, - "lon" : -122.6758917, - "name" : "West Burnside Street", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 1767.93, - "endTime" : "2009-11-17T18:24:16.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:19:00.000+00:00", - "departure" : "2009-11-17T18:19:00.000+00:00", - "lat" : 45.5231324, - "lon" : -122.6758917, - "name" : "West Burnside Street", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 510, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 97, - "points" : "qfztGjcwkV@`B?H?BM?iBBI?K?wBBK?K?sBDM@M@sB@K?K?uBBM?K?uBBI@K?aBBSAM@M@K?GBEDEHIJUX_@f@KNQRSVGFCBQPIHGDGBIBK@W@a@?mA@E?C@C@A?CBQTKJEHIJeC~CYZo@v@g@d@IJAFAD?L@vC@hB@p@?X?T@P?N@P@nA?j@AX?L@`B@dA?R?RBbD?T?NBbD?R?P@|D@jB?x@@J?N?B?P?LBjD@N" - }, - "mode" : "CAR", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:19:00.000+00:00", - "steps" : [ - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 44.21, - "elevation" : "", - "lat" : 45.5231324, - "lon" : -122.6758917, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "West Burnside Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 548.38, - "elevation" : "", - "lat" : 45.5231221, - "lon" : -122.676459, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northwest 6th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 465.44, - "elevation" : "", - "lat" : 45.5280515, - "lon" : -122.6766232, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "Northwest Station Way", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 709.95, - "elevation" : "", - "lat" : 45.5315452, - "lon" : -122.679511, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Northwest Northrup Street", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:24:16.000+00:00", - "departure" : "2009-11-17T18:24:16.000+00:00", - "lat" : 45.5313992, - "lon" : -122.6886162, - "name" : "corner of Northwest Northrup Street and path", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 70.46, - "endTime" : "2009-11-17T18:26:18.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:24:16.000+00:00", - "departure" : "2009-11-17T18:24:16.000+00:00", - "lat" : 45.5313992, - "lon" : -122.6886162, - "name" : "corner of Northwest Northrup Street and path", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 233, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 7, - "points" : "ez{tGzrykVC?I?@nBBH?d@??" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:24:16.000+00:00", - "steps" : [ - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : true, - "distance" : 7.61, - "elevation" : "", - "lat" : 45.5313992, - "lon" : -122.6886162, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "path", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 62.85, - "elevation" : "", - "lat" : 45.5314676, - "lon" : -122.6886182, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Northwest Northrup Street", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:26:18.000+00:00", - "departure" : "2009-11-17T18:31:26.000+00:00", - "lat" : 45.531434, - "lon" : -122.689417, - "name" : "NW Northrup & 18th", - "stopCode" : "10776", - "stopId" : "prt:10776", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyId" : "prt:prt", - "agencyName" : "TriMet", - "agencyTimeZoneOffset" : -28800000, - "agencyUrl" : "http://trimet.org", - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 547.79, - "endTime" : "2009-11-17T18:33:55.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:26:18.000+00:00", - "departure" : "2009-11-17T18:31:26.000+00:00", - "lat" : 45.531434, - "lon" : -122.689417, - "name" : "NW Northrup & 18th", - "stopCode" : "10776", - "stopId" : "prt:10776", - "stopIndex" : 20, - "stopSequence" : 21, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 1057, - "headsign" : "NW 23rd Ave", - "interlineWithPreviousLeg" : false, - "intermediateStops" : [ - { - "arrival" : "2009-11-17T18:33:13.000+00:00", - "departure" : "2009-11-17T18:33:13.000+00:00", - "lat" : 45.531346, - "lon" : -122.694455, - "name" : "NW Northrup & 21st", - "stopCode" : "10777", - "stopId" : "prt:10777", - "stopIndex" : 21, - "stopSequence" : 22, - "vertexType" : "TRANSIT", - "zoneId" : "1" - } - ], - "legGeometry" : { - "length" : 8, - "points" : "cz{tGzwykV?VBhEFtKDvJ??@\\DnJ" - }, - "mode" : "TRAM", - "pathway" : false, - "realTime" : false, - "route" : "Portland Streetcar", - "routeId" : "prt:193", - "routeLongName" : "Portland Streetcar", - "routeType" : 0, - "serviceDate" : "2009-11-17", - "startTime" : "2009-11-17T18:31:26.000+00:00", - "steps" : [ ], - "to" : { - "arrival" : "2009-11-17T18:33:55.000+00:00", - "departure" : "2009-11-17T18:33:55.000+00:00", - "lat" : 45.531308, - "lon" : -122.696445, - "name" : "NW Northrup & 22nd", - "stopCode" : "10778", - "stopId" : "prt:10778", - "stopIndex" : 22, - "stopSequence" : 23, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : true, - "tripBlockId" : "9384", - "tripId" : "prt:1930W1210" - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 18.81, - "endTime" : "2009-11-17T18:34:19.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:33:55.000+00:00", - "departure" : "2009-11-17T18:33:55.000+00:00", - "lat" : 45.531308, - "lon" : -122.696445, - "name" : "NW Northrup & 22nd", - "stopCode" : "10778", - "stopId" : "prt:10778", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 37, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 7, - "points" : "sy{tGxc{kV???LABF?B??J" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:33:55.000+00:00", - "steps" : [ - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 18.81, - "elevation" : "", - "lat" : 45.5313019, - "lon" : -122.6964448, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "Northwest Northrup Street", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:34:19.000+00:00", - "lat" : 45.53122, - "lon" : -122.69659, - "name" : "NW Northrup St. & NW 22nd Ave. (P2)", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - } - ], - "startTime" : "2009-11-17T18:04:04.000+00:00", - "tooSloped" : false, - "transfers" : 1, - "transitTime" : 511, - "waitingTime" : 308, - "walkDistance" : 2530.76, - "walkLimitExceeded" : false, - "walkTime" : 996 - }, - { - "arrivedAtDestinationWithRentedBicycle" : false, - "duration" : 1598, - "elevationGained" : 0.0, - "elevationLost" : 0.0, - "endTime" : "2009-11-17T18:35:19.000+00:00", - "fare" : { - "details" : { }, - "fare" : { }, - "legProducts" : [ - { - "legIndices" : [ - 1 - ], - "products" : [ - { - "amount" : { - "cents" : 200, - "currency" : { - "currency" : "USD", - "currencyCode" : "USD", - "defaultFractionDigits" : 2, - "symbol" : "$" - } - }, - "id" : "prt:8", - "name" : "regular" - } - ] - }, - { - "legIndices" : [ - 5 - ], - "products" : [ - { - "amount" : { - "cents" : 200, - "currency" : { - "currency" : "USD", - "currencyCode" : "USD", - "defaultFractionDigits" : 2, - "symbol" : "$" - } - }, - "id" : "prt:8", - "name" : "regular" - } - ] - } - ] - }, - "generalizedCost" : 3378, - "legs" : [ - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 408.65, - "endTime" : "2009-11-17T18:14:00.000+00:00", - "from" : { - "departure" : "2009-11-17T18:08:41.000+00:00", - "lat" : 45.51932, - "lon" : -122.648567, - "name" : "SE Stark St. & SE 17th Ave. (P0)", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 623, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 16, - "points" : "unytGpxqkVA??dACpB@P?f@?p@?j@?dAAhE?jE?vD?PJ?J@?S" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:08:41.000+00:00", - "steps" : [ - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 0.69, - "elevation" : "", - "lat" : 45.51932, - "lon" : -122.6485648, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "Southeast 17th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 395.42, - "elevation" : "", - "lat" : 45.5193262, - "lon" : -122.6485648, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Southeast Stark Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "SOUTH", - "area" : false, - "bogusName" : false, - "distance" : 12.54, - "elevation" : "", - "lat" : 45.5193421, - "lon" : -122.6536397, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Southeast 12th Avenue", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:14:00.000+00:00", - "departure" : "2009-11-17T18:14:00.000+00:00", - "lat" : 45.519229, - "lon" : -122.653546, - "name" : "SE 12th & Stark", - "stopCode" : "6594", - "stopId" : "prt:6594", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyId" : "prt:prt", - "agencyName" : "TriMet", - "agencyTimeZoneOffset" : -28800000, - "agencyUrl" : "http://trimet.org", - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 439.45, - "endTime" : "2009-11-17T18:16:00.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:14:00.000+00:00", - "departure" : "2009-11-17T18:14:00.000+00:00", - "lat" : 45.519229, - "lon" : -122.653546, - "name" : "SE 12th & Stark", - "stopCode" : "6594", - "stopId" : "prt:6594", - "stopIndex" : 32, - "stopSequence" : 33, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 720, - "headsign" : "Rose Qtr TC", - "interlineWithPreviousLeg" : false, - "intermediateStops" : [ - { - "arrival" : "2009-11-17T18:14:44.000+00:00", - "departure" : "2009-11-17T18:14:44.000+00:00", - "lat" : 45.520674, - "lon" : -122.653544, - "name" : "SE 12th & Pine", - "stopCode" : "6589", - "stopId" : "prt:6589", - "stopIndex" : 33, - "stopSequence" : 34, - "vertexType" : "TRANSIT", - "zoneId" : "1" - } - ], - "legGeometry" : { - "length" : 11, - "points" : "cnytGdxrkVW?mC?{BA??Q?oC?mC?kBAa@?w@?" - }, - "mode" : "BUS", - "pathway" : false, - "realTime" : false, - "route" : "12th Ave", - "routeId" : "prt:70", - "routeLongName" : "12th Ave", - "routeShortName" : "70", - "routeType" : 3, - "serviceDate" : "2009-11-17", - "startTime" : "2009-11-17T18:14:00.000+00:00", - "steps" : [ ], - "to" : { - "arrival" : "2009-11-17T18:16:00.000+00:00", - "departure" : "2009-11-17T18:16:00.000+00:00", - "lat" : 45.52318, - "lon" : -122.653507, - "name" : "NE 12th & Sandy", - "stopCode" : "6592", - "stopId" : "prt:6592", - "stopIndex" : 34, - "stopSequence" : 35, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : true, - "tripBlockId" : "7004", - "tripId" : "prt:700W1150" - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 0.0, - "endTime" : "2009-11-17T18:16:00.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:16:00.000+00:00", - "departure" : "2009-11-17T18:16:00.000+00:00", - "lat" : 45.52318, - "lon" : -122.653507, - "name" : "NE 12th & Sandy", - "stopCode" : "6592", - "stopId" : "prt:6592", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 1, - "interlineWithPreviousLeg" : false, - "legElevation" : "", - "legGeometry" : { - "length" : 2, - "points" : "{fztGlwrkV?V" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:16:00.000+00:00", - "steps" : [ ], - "to" : { - "arrival" : "2009-11-17T18:16:00.000+00:00", - "departure" : "2009-11-17T18:16:00.000+00:00", - "lat" : 45.5231819, - "lon" : -122.6536285, - "name" : "Northeast 12th Avenue", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 1607.0, - "endTime" : "2009-11-17T18:21:03.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:16:00.000+00:00", - "departure" : "2009-11-17T18:16:00.000+00:00", - "lat" : 45.5231819, - "lon" : -122.6536285, - "name" : "Northeast 12th Avenue", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 473, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 81, - "points" : "{fztGdxrkVc@?C?_@AM?O?oBAO??jE?hEAhE?jE?hEAjE?lD?R?FO?]?qA?O?UBmE?k@EU??X?tC?X?P?HAjG?j@ARANCRG\\KFM\\IXCPKXELCJAHMd@?HM\\O`@KPKNKHMLKFIFYJk@P]JIBM@M@O@O?W@O?O?O?q@?Q@K@IBKDIFGFEFGLSFGHEHKZELGP" - }, - "mode" : "CAR", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:16:00.000+00:00", - "steps" : [ - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 128.28, - "elevation" : "", - "lat" : 45.5231819, - "lon" : -122.6536285, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "Northeast 12th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 553.03, - "elevation" : "", - "lat" : 45.5243354, - "lon" : -122.6536083, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Northeast Davis Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 243.39, - "elevation" : "", - "lat" : 45.5243542, - "lon" : -122.6607071, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northeast Grand Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 542.09, - "elevation" : "", - "lat" : 45.5265408, - "lon" : -122.6606919, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Northeast Lloyd Boulevard", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 140.22, - "elevation" : "", - "lat" : 45.5286604, - "lon" : -122.6657552, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "North Interstate Avenue", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:21:03.000+00:00", - "departure" : "2009-11-17T18:21:03.000+00:00", - "lat" : 45.5297183, - "lon" : -122.6664542, - "name" : "corner of North Interstate Avenue and path", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 43.34, - "endTime" : "2009-11-17T18:22:49.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:21:03.000+00:00", - "departure" : "2009-11-17T18:21:03.000+00:00", - "lat" : 45.5297183, - "lon" : -122.6664542, - "name" : "corner of North Interstate Avenue and path", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 196, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 13, - "points" : "uo{tGjhukVKIC?CDABCDABEFCHGCEEGK@A" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:21:03.000+00:00", - "steps" : [ - { - "absoluteDirection" : "NORTHEAST", - "area" : false, - "bogusName" : true, - "distance" : 28.77, - "elevation" : "", - "lat" : 45.5297183, - "lon" : -122.6664542, - "relativeDirection" : "SLIGHTLY_RIGHT", - "stayOn" : false, - "streetName" : "path", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTHEAST", - "area" : false, - "bogusName" : false, - "distance" : 14.56, - "elevation" : "", - "lat" : 45.5299086, - "lon" : -122.6665929, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Rose Quarter Transit Center", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:22:49.000+00:00", - "departure" : "2009-11-17T18:25:00.000+00:00", - "lat" : 45.530005, - "lon" : -122.666476, - "name" : "Rose Quarter Transit Center", - "stopCode" : "2592", - "stopId" : "prt:2592", - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyId" : "prt:prt", - "agencyName" : "TriMet", - "agencyTimeZoneOffset" : -28800000, - "agencyUrl" : "http://trimet.org", - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 2905.12, - "endTime" : "2009-11-17T18:34:55.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:22:49.000+00:00", - "departure" : "2009-11-17T18:25:00.000+00:00", - "lat" : 45.530005, - "lon" : -122.666476, - "name" : "Rose Quarter Transit Center", - "stopCode" : "2592", - "stopId" : "prt:2592", - "stopIndex" : 84, - "stopSequence" : 85, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - "generalizedCost" : 1326, - "headsign" : "Montgomery Park", - "interlineWithPreviousLeg" : false, - "intermediateStops" : [ - { - "arrival" : "2009-11-17T18:28:20.000+00:00", - "departure" : "2009-11-17T18:28:20.000+00:00", - "lat" : 45.526655, - "lon" : -122.676462, - "name" : "NW Glisan & 6th", - "stopCode" : "10803", - "stopId" : "prt:10803", - "stopIndex" : 85, - "stopSequence" : 86, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:29:15.000+00:00", - "departure" : "2009-11-17T18:29:15.000+00:00", - "lat" : 45.528799, - "lon" : -122.677238, - "name" : "NW Station Way & Union Station", - "stopCode" : "12801", - "stopId" : "prt:12801", - "stopIndex" : 86, - "stopSequence" : 87, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:31:00.000+00:00", - "departure" : "2009-11-17T18:31:00.000+00:00", - "lat" : 45.531582, - "lon" : -122.681193, - "name" : "NW Northrup & 10th", - "stopCode" : "12802", - "stopId" : "prt:12802", - "stopIndex" : 87, - "stopSequence" : 88, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:31:33.000+00:00", - "departure" : "2009-11-17T18:31:33.000+00:00", - "lat" : 45.531534, - "lon" : -122.683319, - "name" : "NW 12th & Northrup", - "stopCode" : "12796", - "stopId" : "prt:12796", - "stopIndex" : 88, - "stopSequence" : 89, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:32:04.000+00:00", - "departure" : "2009-11-17T18:32:04.000+00:00", - "lat" : 45.531503, - "lon" : -122.685357, - "name" : "NW Northrup & 14th", - "stopCode" : "10775", - "stopId" : "prt:10775", - "stopIndex" : 89, - "stopSequence" : 90, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:33:07.000+00:00", - "departure" : "2009-11-17T18:33:07.000+00:00", - "lat" : 45.531434, - "lon" : -122.689417, - "name" : "NW Northrup & 18th", - "stopCode" : "10776", - "stopId" : "prt:10776", - "stopIndex" : 90, - "stopSequence" : 91, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:34:24.000+00:00", - "departure" : "2009-11-17T18:34:24.000+00:00", - "lat" : 45.531346, - "lon" : -122.694455, - "name" : "NW Northrup & 21st", - "stopCode" : "10777", - "stopId" : "prt:10777", - "stopIndex" : 91, - "stopSequence" : 92, - "vertexType" : "TRANSIT", - "zoneId" : "1" - } - ], - "legGeometry" : { - "length" : 76, - "points" : "eq{tG`hukVNXJPPVJFf@Vf@Pp@Nd@NRLB@RNXZR\\vAhC@BhAhD`AhClAbDBrDCnG@n@@^@d@HdAP`CBjEDvD???LqCFmCDYBGDEBGJkAzAQR??KNa@b@MJuBBY?OHW@u@~@aD`EcBhBBrD@xC??@l@BlE@lD???XBjEBpD???VBlE?dA@t@?b@?h@BfEBrD???VBhEFtKDvJ??@\\DnJ" - }, - "mode" : "BUS", - "pathway" : false, - "realTime" : false, - "route" : "Broadway/Halsey", - "routeId" : "prt:77", - "routeLongName" : "Broadway/Halsey", - "routeShortName" : "77", - "routeType" : 3, - "serviceDate" : "2009-11-17", - "startTime" : "2009-11-17T18:25:00.000+00:00", - "steps" : [ ], - "to" : { - "arrival" : "2009-11-17T18:34:55.000+00:00", - "departure" : "2009-11-17T18:34:55.000+00:00", - "lat" : 45.531308, - "lon" : -122.696445, - "name" : "NW Northrup & 22nd", - "stopCode" : "10778", - "stopId" : "prt:10778", - "stopIndex" : 92, - "stopSequence" : 93, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : true, - "tripBlockId" : "7736", - "tripId" : "prt:771W1160" - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 18.81, - "endTime" : "2009-11-17T18:35:19.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:34:55.000+00:00", - "departure" : "2009-11-17T18:34:55.000+00:00", - "lat" : 45.531308, - "lon" : -122.696445, - "name" : "NW Northrup & 22nd", - "stopCode" : "10778", - "stopId" : "prt:10778", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 37, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 7, - "points" : "sy{tGxc{kV???LABF?B??J" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:34:55.000+00:00", - "steps" : [ - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 18.81, - "elevation" : "", - "lat" : 45.5313019, - "lon" : -122.6964448, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "Northwest Northrup Street", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:35:19.000+00:00", - "lat" : 45.53122, - "lon" : -122.69659, - "name" : "NW Northrup St. & NW 22nd Ave. (P2)", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - } - ], - "startTime" : "2009-11-17T18:08:41.000+00:00", - "tooSloped" : false, - "transfers" : 1, - "transitTime" : 715, - "waitingTime" : 131, - "walkDistance" : 2077.8, - "walkLimitExceeded" : false, - "walkTime" : 752 - }, - { - "arrivedAtDestinationWithRentedBicycle" : false, - "duration" : 2077, - "elevationGained" : 0.0, - "elevationLost" : 0.0, - "endTime" : "2009-11-17T18:38:41.000+00:00", - "fare" : { - "details" : { }, - "fare" : { }, - "legProducts" : [ - { - "legIndices" : [ - 1 - ], - "products" : [ - { - "amount" : { - "cents" : 200, - "currency" : { - "currency" : "USD", - "currencyCode" : "USD", - "defaultFractionDigits" : 2, - "symbol" : "$" - } - }, - "id" : "prt:8", - "name" : "regular" - } - ] - } - ] - }, - "generalizedCost" : 3914, - "legs" : [ - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 673.56, - "endTime" : "2009-11-17T18:12:58.000+00:00", - "from" : { - "departure" : "2009-11-17T18:04:04.000+00:00", - "lat" : 45.51932, - "lon" : -122.648567, - "name" : "SE Stark St. & SE 17th Ave. (P0)", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 1031, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 42, - "points" : "unytGpxqkVA??dACpB@PoC?_CAM?aC??A?A?A?A??AA?AAA??AAA???A?A?A???A@A??@A@?@??A@?@?BcC?mCAmCAmC?QBIYIWOH" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:04:04.000+00:00", - "steps" : [ - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 0.69, - "elevation" : "", - "lat" : 45.51932, - "lon" : -122.6485648, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "Southeast 17th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 79.12, - "elevation" : "", - "lat" : 45.5193262, - "lon" : -122.6485648, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Southeast Stark Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 402.13, - "elevation" : "", - "lat" : 45.5193388, - "lon" : -122.6495798, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Southeast 16th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 168.89, - "elevation" : "", - "lat" : 45.5228912, - "lon" : -122.6495528, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "Northeast 16th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTHEAST", - "area" : false, - "bogusName" : false, - "distance" : 22.74, - "elevation" : "", - "lat" : 45.524409, - "lon" : -122.6495675, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northeast Sandy Boulevard", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:12:58.000+00:00", - "departure" : "2009-11-17T18:12:58.000+00:00", - "lat" : 45.524581, - "lon" : -122.649367, - "name" : "NE Sandy & 16th", - "stopCode" : "5060", - "stopId" : "prt:5060", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyId" : "prt:prt", - "agencyName" : "TriMet", - "agencyTimeZoneOffset" : -28800000, - "agencyUrl" : "http://trimet.org", - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 3602.73, - "endTime" : "2009-11-17T18:25:49.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:12:58.000+00:00", - "departure" : "2009-11-17T18:12:58.000+00:00", - "lat" : 45.524581, - "lon" : -122.649367, - "name" : "NE Sandy & 16th", - "stopCode" : "5060", - "stopId" : "prt:5060", - "stopIndex" : 92, - "stopSequence" : 93, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 1371, - "headsign" : "Beaverton TC", - "interlineWithPreviousLeg" : false, - "intermediateStops" : [ - { - "arrival" : "2009-11-17T18:13:32.000+00:00", - "departure" : "2009-11-17T18:13:32.000+00:00", - "lat" : 45.523767, - "lon" : -122.651428, - "name" : "NE Sandy & 14th", - "stopCode" : "5058", - "stopId" : "prt:5058", - "stopIndex" : 93, - "stopSequence" : 94, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:14:00.000+00:00", - "departure" : "2009-11-17T18:14:00.000+00:00", - "lat" : 45.523103, - "lon" : -122.653064, - "name" : "NE Sandy & 12th", - "stopCode" : "5055", - "stopId" : "prt:5055", - "stopIndex" : 94, - "stopSequence" : 95, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:14:47.000+00:00", - "departure" : "2009-11-17T18:14:47.000+00:00", - "lat" : 45.523024, - "lon" : -122.656526, - "name" : "E Burnside & NE 9th", - "stopCode" : "819", - "stopId" : "prt:819", - "stopIndex" : 95, - "stopSequence" : 96, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:15:24.000+00:00", - "departure" : "2009-11-17T18:15:24.000+00:00", - "lat" : 45.523012, - "lon" : -122.659365, - "name" : "E Burnside & NE 6th", - "stopCode" : "805", - "stopId" : "prt:805", - "stopIndex" : 96, - "stopSequence" : 97, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:15:52.000+00:00", - "departure" : "2009-11-17T18:15:52.000+00:00", - "lat" : 45.523015, - "lon" : -122.661534, - "name" : "E Burnside & NE M L King", - "stopCode" : "705", - "stopId" : "prt:705", - "stopIndex" : 97, - "stopSequence" : 98, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:18:00.000+00:00", - "departure" : "2009-11-17T18:18:00.000+00:00", - "lat" : 45.523249, - "lon" : -122.671269, - "name" : "W Burnside & Burnside Bridge", - "stopCode" : "689", - "stopId" : "prt:689", - "stopIndex" : 98, - "stopSequence" : 99, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:19:00.000+00:00", - "departure" : "2009-11-17T18:19:00.000+00:00", - "lat" : 45.523169, - "lon" : -122.675893, - "name" : "W Burnside & NW 5th", - "stopCode" : "782", - "stopId" : "prt:782", - "stopIndex" : 99, - "stopSequence" : 100, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:20:17.000+00:00", - "departure" : "2009-11-17T18:20:17.000+00:00", - "lat" : 45.523115, - "lon" : -122.678939, - "name" : "W Burnside & NW Park", - "stopCode" : "716", - "stopId" : "prt:716", - "stopIndex" : 100, - "stopSequence" : 101, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:21:25.000+00:00", - "departure" : "2009-11-17T18:21:25.000+00:00", - "lat" : 45.523048, - "lon" : -122.681606, - "name" : "W Burnside & NW 10th", - "stopCode" : "10791", - "stopId" : "prt:10791", - "stopIndex" : 101, - "stopSequence" : 102, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:22:14.000+00:00", - "departure" : "2009-11-17T18:22:14.000+00:00", - "lat" : 45.523, - "lon" : -122.683535, - "name" : "W Burnside & NW 12th", - "stopCode" : "11032", - "stopId" : "prt:11032", - "stopIndex" : 102, - "stopSequence" : 103, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:24:09.000+00:00", - "departure" : "2009-11-17T18:24:09.000+00:00", - "lat" : 45.522985, - "lon" : -122.688091, - "name" : "W Burnside & NW 17th", - "stopCode" : "10809", - "stopId" : "prt:10809", - "stopIndex" : 103, - "stopSequence" : 104, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:25:00.000+00:00", - "departure" : "2009-11-17T18:25:00.000+00:00", - "lat" : 45.523097, - "lon" : -122.690083, - "name" : "W Burnside & NW 19th", - "stopCode" : "735", - "stopId" : "prt:735", - "stopIndex" : 104, - "stopSequence" : 105, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:25:21.000+00:00", - "departure" : "2009-11-17T18:25:21.000+00:00", - "lat" : 45.523176, - "lon" : -122.692139, - "name" : "W Burnside & NW 20th", - "stopCode" : "741", - "stopId" : "prt:741", - "stopIndex" : 105, - "stopSequence" : 106, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:25:31.000+00:00", - "departure" : "2009-11-17T18:25:31.000+00:00", - "lat" : 45.52322, - "lon" : -122.69313, - "name" : "W Burnside & NW 20th Pl", - "stopCode" : "742", - "stopId" : "prt:742", - "stopIndex" : 106, - "stopSequence" : 107, - "vertexType" : "TRANSIT", - "zoneId" : "1" - } - ], - "legGeometry" : { - "length" : 94, - "points" : "coztGd}qkVNl@r@`CZhA`A`D??Ph@l@tBb@rARh@Pd@???BPj@@jA?jEAhE?pD???VAjE?hE?dB?b@???`AAhE?dD???l@C`EAhEEhE?bAA|@?XAZ@\\AzACnGKbKAjC?bE???JEnE@fEDlE@hE@~A??@rBBzDBpE@~A???Z@tD@RBnEB|A???@BdB?lEBjA??BnBApF@dB?X?^@r@?f@@bCAx@EtB???VChAE|BGnD??AXKnEGnD???XGjD??AZEfCC`AEzB" - }, - "mode" : "BUS", - "pathway" : false, - "realTime" : false, - "route" : "Burnside/Stark", - "routeId" : "prt:20", - "routeLongName" : "Burnside/Stark", - "routeShortName" : "20", - "routeType" : 3, - "serviceDate" : "2009-11-17", - "startTime" : "2009-11-17T18:12:58.000+00:00", - "steps" : [ ], - "to" : { - "arrival" : "2009-11-17T18:25:49.000+00:00", - "departure" : "2009-11-17T18:25:49.000+00:00", - "lat" : 45.523312, - "lon" : -122.694901, - "name" : "W Burnside & NW King", - "stopCode" : "747", - "stopId" : "prt:747", - "stopIndex" : 107, - "stopSequence" : 108, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : true, - "tripBlockId" : "2002", - "tripId" : "prt:200W1200" - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 999.1, - "endTime" : "2009-11-17T18:38:41.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:25:49.000+00:00", - "departure" : "2009-11-17T18:25:49.000+00:00", - "lat" : 45.523312, - "lon" : -122.694901, - "name" : "W Burnside & NW King", - "stopCode" : "747", - "stopId" : "prt:747", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 1511, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 29, - "points" : "ugztGdzzkVL?ATClAI|DK?G?mCBkCDoCDmCBoCDkCBoCB[?sBD]?Y@eA@K?C?K?W@{A@M@C@I?_CB?G" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:25:49.000+00:00", - "steps" : [ - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 113.27, - "elevation" : "", - "lat" : 45.5232491, - "lon" : -122.6949067, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "West Burnside Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 882.16, - "elevation" : "", - "lat" : 45.5233204, - "lon" : -122.696357, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northwest 22nd Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "EAST", - "area" : false, - "bogusName" : false, - "distance" : 3.68, - "elevation" : "", - "lat" : 45.5312508, - "lon" : -122.6966386, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northwest Northrup Street", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:38:41.000+00:00", - "lat" : 45.53122, - "lon" : -122.69659, - "name" : "NW Northrup St. & NW 22nd Ave. (P2)", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - } - ], - "startTime" : "2009-11-17T18:04:04.000+00:00", - "tooSloped" : false, - "transfers" : 0, - "transitTime" : 771, - "waitingTime" : 0, - "walkDistance" : 1672.66, - "walkLimitExceeded" : false, - "walkTime" : 1306 - }, - { - "arrivedAtDestinationWithRentedBicycle" : false, - "duration" : 1646, - "elevationGained" : 0.0, - "elevationLost" : 0.0, - "endTime" : "2009-11-17T18:39:22.000+00:00", - "fare" : { - "details" : { }, - "fare" : { }, - "legProducts" : [ - { - "legIndices" : [ - 1 - ], - "products" : [ - { - "amount" : { - "cents" : 200, - "currency" : { - "currency" : "USD", - "currencyCode" : "USD", - "defaultFractionDigits" : 2, - "symbol" : "$" - } - }, - "id" : "prt:8", - "name" : "regular" - } - ] - } - ] - }, - "generalizedCost" : 2662, - "legs" : [ - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 290.72, - "endTime" : "2009-11-17T18:15:40.000+00:00", - "from" : { - "departure" : "2009-11-17T18:11:56.000+00:00", - "lat" : 45.51932, - "lon" : -122.648567, - "name" : "SE Stark St. & SE 17th Ave. (P0)", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 442, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 6, - "points" : "unytGpxqkVjC?lC@nC@?fCG?" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:11:56.000+00:00", - "steps" : [ - { - "absoluteDirection" : "SOUTH", - "area" : false, - "bogusName" : false, - "distance" : 237.26, - "elevation" : "", - "lat" : 45.51932, - "lon" : -122.6485648, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "Southeast 17th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 53.47, - "elevation" : "", - "lat" : 45.5171863, - "lon" : -122.6485801, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Southeast Morrison Street", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:15:40.000+00:00", - "departure" : "2009-11-17T18:15:40.000+00:00", - "lat" : 45.517226, - "lon" : -122.649266, - "name" : "SE Morrison & 16th", - "stopCode" : "4019", - "stopId" : "prt:4019", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyId" : "prt:prt", - "agencyName" : "TriMet", - "agencyTimeZoneOffset" : -28800000, - "agencyUrl" : "http://trimet.org", - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 5218.86, - "endTime" : "2009-11-17T18:35:54.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:15:40.000+00:00", - "departure" : "2009-11-17T18:15:40.000+00:00", - "lat" : 45.517226, - "lon" : -122.649266, - "name" : "SE Morrison & 16th", - "stopCode" : "4019", - "stopId" : "prt:4019", - "stopIndex" : 50, - "stopSequence" : 51, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 1814, - "headsign" : "Montgomery Park", - "interlineWithPreviousLeg" : false, - "intermediateStops" : [ - { - "arrival" : "2009-11-17T18:16:15.000+00:00", - "departure" : "2009-11-17T18:16:15.000+00:00", - "lat" : 45.517253, - "lon" : -122.651354, - "name" : "SE Morrison & 14th", - "stopCode" : "4016", - "stopId" : "prt:4016", - "stopIndex" : 51, - "stopSequence" : 52, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:17:00.000+00:00", - "departure" : "2009-11-17T18:17:00.000+00:00", - "lat" : 45.517299, - "lon" : -122.654067, - "name" : "SE Morrison & 12th", - "stopCode" : "4014", - "stopId" : "prt:4014", - "stopIndex" : 52, - "stopSequence" : 53, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:17:38.000+00:00", - "departure" : "2009-11-17T18:17:38.000+00:00", - "lat" : 45.517292, - "lon" : -122.656563, - "name" : "SE Morrison & 9th", - "stopCode" : "4026", - "stopId" : "prt:4026", - "stopIndex" : 53, - "stopSequence" : 54, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:18:08.000+00:00", - "departure" : "2009-11-17T18:18:08.000+00:00", - "lat" : 45.517322, - "lon" : -122.65847, - "name" : "SE Morrison & 7th", - "stopCode" : "4025", - "stopId" : "prt:4025", - "stopIndex" : 54, - "stopSequence" : 55, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:18:39.000+00:00", - "departure" : "2009-11-17T18:18:39.000+00:00", - "lat" : 45.517298, - "lon" : -122.660523, - "name" : "SE Morrison & Grand", - "stopCode" : "4013", - "stopId" : "prt:4013", - "stopIndex" : 55, - "stopSequence" : 56, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:20:03.000+00:00", - "departure" : "2009-11-17T18:20:03.000+00:00", - "lat" : 45.517351, - "lon" : -122.66601, - "name" : "Morrison Bridge", - "stopCode" : "4029", - "stopId" : "prt:4029", - "stopIndex" : 56, - "stopSequence" : 57, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:22:27.000+00:00", - "departure" : "2009-11-17T18:22:27.000+00:00", - "lat" : 45.51959, - "lon" : -122.674599, - "name" : "SW Washington & 3rd", - "stopCode" : "6158", - "stopId" : "prt:6158", - "stopIndex" : 57, - "stopSequence" : 58, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:23:00.000+00:00", - "departure" : "2009-11-17T18:23:00.000+00:00", - "lat" : 45.520129, - "lon" : -122.676635, - "name" : "SW Washington & 5th", - "stopCode" : "6160", - "stopId" : "prt:6160", - "stopIndex" : 58, - "stopSequence" : 59, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:23:52.000+00:00", - "departure" : "2009-11-17T18:23:52.000+00:00", - "lat" : 45.520695, - "lon" : -122.678657, - "name" : "SW Washington & Broadway", - "stopCode" : "6137", - "stopId" : "prt:6137", - "stopIndex" : 59, - "stopSequence" : 60, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:24:34.000+00:00", - "departure" : "2009-11-17T18:24:34.000+00:00", - "lat" : 45.521124, - "lon" : -122.6803, - "name" : "SW Washington & 9th", - "stopCode" : "6169", - "stopId" : "prt:6169", - "stopIndex" : 60, - "stopSequence" : 61, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:25:47.000+00:00", - "departure" : "2009-11-17T18:25:47.000+00:00", - "lat" : 45.521094, - "lon" : -122.682819, - "name" : "SW 11th & Alder", - "stopCode" : "9600", - "stopId" : "prt:9600", - "stopIndex" : 61, - "stopSequence" : 62, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:26:36.000+00:00", - "departure" : "2009-11-17T18:26:36.000+00:00", - "lat" : 45.52055, - "lon" : -122.683933, - "name" : "SW Morrison & 12th", - "stopCode" : "9598", - "stopId" : "prt:9598", - "stopIndex" : 62, - "stopSequence" : 63, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:27:25.000+00:00", - "departure" : "2009-11-17T18:27:25.000+00:00", - "lat" : 45.521063, - "lon" : -122.685848, - "name" : "SW Morrison & 14th", - "stopCode" : "9708", - "stopId" : "prt:9708", - "stopIndex" : 63, - "stopSequence" : 64, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:28:18.000+00:00", - "departure" : "2009-11-17T18:28:18.000+00:00", - "lat" : 45.521641, - "lon" : -122.687932, - "name" : "SW Morrison & 16th", - "stopCode" : "9613", - "stopId" : "prt:9613", - "stopIndex" : 64, - "stopSequence" : 65, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:29:00.000+00:00", - "departure" : "2009-11-17T18:29:00.000+00:00", - "lat" : 45.52206, - "lon" : -122.689577, - "name" : "SW Morrison & 17th", - "stopCode" : "9599", - "stopId" : "prt:9599", - "stopIndex" : 65, - "stopSequence" : 66, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:29:54.000+00:00", - "departure" : "2009-11-17T18:29:54.000+00:00", - "lat" : 45.523097, - "lon" : -122.690083, - "name" : "W Burnside & NW 19th", - "stopCode" : "735", - "stopId" : "prt:735", - "stopIndex" : 66, - "stopSequence" : 67, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:30:31.000+00:00", - "departure" : "2009-11-17T18:30:31.000+00:00", - "lat" : 45.523176, - "lon" : -122.692139, - "name" : "W Burnside & NW 20th", - "stopCode" : "741", - "stopId" : "prt:741", - "stopIndex" : 67, - "stopSequence" : 68, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:30:48.000+00:00", - "departure" : "2009-11-17T18:30:48.000+00:00", - "lat" : 45.52322, - "lon" : -122.69313, - "name" : "W Burnside & NW 20th Pl", - "stopCode" : "742", - "stopId" : "prt:742", - "stopIndex" : 68, - "stopSequence" : 69, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:31:20.000+00:00", - "departure" : "2009-11-17T18:31:20.000+00:00", - "lat" : 45.523312, - "lon" : -122.694901, - "name" : "W Burnside & NW King", - "stopCode" : "747", - "stopId" : "prt:747", - "stopIndex" : 69, - "stopSequence" : 70, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:32:18.000+00:00", - "departure" : "2009-11-17T18:32:18.000+00:00", - "lat" : 45.523512, - "lon" : -122.698081, - "name" : "W Burnside & NW 23rd", - "stopCode" : "755", - "stopId" : "prt:755", - "stopIndex" : 70, - "stopSequence" : 71, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:33:11.000+00:00", - "departure" : "2009-11-17T18:33:11.000+00:00", - "lat" : 45.525416, - "lon" : -122.698381, - "name" : "NW 23rd & Flanders", - "stopCode" : "7157", - "stopId" : "prt:7157", - "stopIndex" : 71, - "stopSequence" : 72, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:34:05.000+00:00", - "departure" : "2009-11-17T18:34:05.000+00:00", - "lat" : 45.527543, - "lon" : -122.698473, - "name" : "NW 23rd & Irving", - "stopCode" : "7161", - "stopId" : "prt:7161", - "stopIndex" : 72, - "stopSequence" : 73, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:35:00.000+00:00", - "departure" : "2009-11-17T18:35:00.000+00:00", - "lat" : 45.529681, - "lon" : -122.698529, - "name" : "NW 23rd & Lovejoy", - "stopCode" : "7163", - "stopId" : "prt:7163", - "stopIndex" : 73, - "stopSequence" : 74, - "vertexType" : "TRANSIT", - "zoneId" : "1" - } - ], - "legGeometry" : { - "length" : 135, - "points" : "kaytG||qkVA~@?jE?tC???r@AhE?jE?rA???tBAjE?nD???X?hE?xC??Ah@?pE?~C???J?`@?vAAvBEbE?jEAlE?`BAbB@d@??@tAAj@Cx@Cb@Cp@_@dEcAtFoA`IS~@i@`BmAzDi@zAc@pAi@~C??Id@u@jEm@bD??If@u@jEk@bD??If@u@|DW`B??CPs@|Du@lElBz@??VJbCfAk@dD??Id@w@rEWvAId@AF??Q~@s@`Ei@~C??Ib@u@dEWzA??]jB]MQSe@WOKOKIIQe@GWE]GnD??AXKnEGnD???XGjD??AZEfCC`AEzB??AXCfAGxDE|AEtBIlC??APkAh@o@?sCB{BD??S?mCDmCDyBB??U?mCDmCDyBB??S?oCDmCDmCBo@@" - }, - "mode" : "BUS", - "pathway" : false, - "realTime" : false, - "route" : "Belmont/NW 23rd", - "routeId" : "prt:15", - "routeLongName" : "Belmont/NW 23rd", - "routeShortName" : "15", - "routeType" : 3, - "serviceDate" : "2009-11-17", - "startTime" : "2009-11-17T18:15:40.000+00:00", - "steps" : [ ], - "to" : { - "arrival" : "2009-11-17T18:35:54.000+00:00", - "departure" : "2009-11-17T18:35:54.000+00:00", - "lat" : 45.532159, - "lon" : -122.698634, - "name" : "NW 23rd & Overton", - "stopCode" : "8981", - "stopId" : "prt:8981", - "stopIndex" : 74, - "stopSequence" : 75, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : true, - "tripBlockId" : "1549", - "tripId" : "prt:150W1400" - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 266.21, - "endTime" : "2009-11-17T18:39:22.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:35:54.000+00:00", - "departure" : "2009-11-17T18:35:54.000+00:00", - "lat" : 45.532159, - "lon" : -122.698634, - "name" : "NW 23rd & Overton", - "stopCode" : "8981", - "stopId" : "prt:8981", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 405, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 13, - "points" : "}~{tGnq{kV?LVAF?J?L?rBCLA?Q?EAyAEcH?G" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:35:54.000+00:00", - "steps" : [ - { - "absoluteDirection" : "SOUTH", - "area" : false, - "bogusName" : false, - "distance" : 104.46, - "elevation" : "", - "lat" : 45.5321578, - "lon" : -122.6987026, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "Northwest 23rd Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "EAST", - "area" : false, - "bogusName" : false, - "distance" : 161.77, - "elevation" : "", - "lat" : 45.5312188, - "lon" : -122.6986675, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Northwest Northrup Street", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:39:22.000+00:00", - "lat" : 45.53122, - "lon" : -122.69659, - "name" : "NW Northrup St. & NW 22nd Ave. (P2)", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - } - ], - "startTime" : "2009-11-17T18:11:56.000+00:00", - "tooSloped" : false, - "transfers" : 0, - "transitTime" : 1214, - "waitingTime" : 0, - "walkDistance" : 556.93, - "walkLimitExceeded" : false, - "walkTime" : 432 - }, - { - "arrivedAtDestinationWithRentedBicycle" : false, - "duration" : 1635, - "elevationGained" : 0.0, - "elevationLost" : 0.0, - "endTime" : "2009-11-17T18:46:19.000+00:00", - "fare" : { - "details" : { }, - "fare" : { }, - "legProducts" : [ - { - "legIndices" : [ - 1 - ], - "products" : [ - { - "amount" : { - "cents" : 200, - "currency" : { - "currency" : "USD", - "currencyCode" : "USD", - "defaultFractionDigits" : 2, - "symbol" : "$" - } - }, - "id" : "prt:8", - "name" : "regular" - } - ] - }, - { - "legIndices" : [ - 5 - ], - "products" : [ - { - "amount" : { - "cents" : 200, - "currency" : { - "currency" : "USD", - "currencyCode" : "USD", - "defaultFractionDigits" : 2, - "symbol" : "$" - } - }, - "id" : "prt:8", - "name" : "regular" - } - ] - } - ] - }, - "generalizedCost" : 3652, - "legs" : [ - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 673.56, - "endTime" : "2009-11-17T18:27:58.000+00:00", - "from" : { - "departure" : "2009-11-17T18:19:04.000+00:00", - "lat" : 45.51932, - "lon" : -122.648567, - "name" : "SE Stark St. & SE 17th Ave. (P0)", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 1031, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 42, - "points" : "unytGpxqkVA??dACpB@PoC?_CAM?aC??A?A?A?A??AA?AAA??AAA???A?A?A???A@A??@A@?@??A@?@?BcC?mCAmCAmC?QBIYIWOH" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:19:04.000+00:00", - "steps" : [ - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 0.69, - "elevation" : "", - "lat" : 45.51932, - "lon" : -122.6485648, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "Southeast 17th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 79.12, - "elevation" : "", - "lat" : 45.5193262, - "lon" : -122.6485648, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Southeast Stark Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 402.13, - "elevation" : "", - "lat" : 45.5193388, - "lon" : -122.6495798, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Southeast 16th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 168.89, - "elevation" : "", - "lat" : 45.5228912, - "lon" : -122.6495528, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "Northeast 16th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTHEAST", - "area" : false, - "bogusName" : false, - "distance" : 22.74, - "elevation" : "", - "lat" : 45.524409, - "lon" : -122.6495675, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northeast Sandy Boulevard", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:27:58.000+00:00", - "departure" : "2009-11-17T18:27:58.000+00:00", - "lat" : 45.524581, - "lon" : -122.649367, - "name" : "NE Sandy & 16th", - "stopCode" : "5060", - "stopId" : "prt:5060", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyId" : "prt:prt", - "agencyName" : "TriMet", - "agencyTimeZoneOffset" : -28800000, - "agencyUrl" : "http://trimet.org", - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 2119.06, - "endTime" : "2009-11-17T18:34:00.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:27:58.000+00:00", - "departure" : "2009-11-17T18:27:58.000+00:00", - "lat" : 45.524581, - "lon" : -122.649367, - "name" : "NE Sandy & 16th", - "stopCode" : "5060", - "stopId" : "prt:5060", - "stopIndex" : 92, - "stopSequence" : 93, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 962, - "headsign" : "23rd Ave to Tichner", - "interlineWithPreviousLeg" : false, - "intermediateStops" : [ - { - "arrival" : "2009-11-17T18:28:32.000+00:00", - "departure" : "2009-11-17T18:28:32.000+00:00", - "lat" : 45.523767, - "lon" : -122.651428, - "name" : "NE Sandy & 14th", - "stopCode" : "5058", - "stopId" : "prt:5058", - "stopIndex" : 93, - "stopSequence" : 94, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:29:00.000+00:00", - "departure" : "2009-11-17T18:29:00.000+00:00", - "lat" : 45.523103, - "lon" : -122.653064, - "name" : "NE Sandy & 12th", - "stopCode" : "5055", - "stopId" : "prt:5055", - "stopIndex" : 94, - "stopSequence" : 95, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:29:47.000+00:00", - "departure" : "2009-11-17T18:29:47.000+00:00", - "lat" : 45.523024, - "lon" : -122.656526, - "name" : "E Burnside & NE 9th", - "stopCode" : "819", - "stopId" : "prt:819", - "stopIndex" : 95, - "stopSequence" : 96, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:30:24.000+00:00", - "departure" : "2009-11-17T18:30:24.000+00:00", - "lat" : 45.523012, - "lon" : -122.659365, - "name" : "E Burnside & NE 6th", - "stopCode" : "805", - "stopId" : "prt:805", - "stopIndex" : 96, - "stopSequence" : 97, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:30:52.000+00:00", - "departure" : "2009-11-17T18:30:52.000+00:00", - "lat" : 45.523015, - "lon" : -122.661534, - "name" : "E Burnside & NE M L King", - "stopCode" : "705", - "stopId" : "prt:705", - "stopIndex" : 97, - "stopSequence" : 98, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:33:00.000+00:00", - "departure" : "2009-11-17T18:33:00.000+00:00", - "lat" : 45.523249, - "lon" : -122.671269, - "name" : "W Burnside & Burnside Bridge", - "stopCode" : "689", - "stopId" : "prt:689", - "stopIndex" : 98, - "stopSequence" : 99, - "vertexType" : "TRANSIT", - "zoneId" : "0" - } - ], - "legGeometry" : { - "length" : 50, - "points" : "coztGd}qkVNl@r@`CZhA`A`D??Ph@l@tBb@rARh@Pd@???BPj@@jA?jEAhE?pD???VAjE?hE?dB?b@???`AAhE?dD???l@C`EAhEEhE?bAA|@?XAZ@\\AzACnGKbKAjC?bE???JEnE@fEDlE@hE@~A" - }, - "mode" : "BUS", - "pathway" : false, - "realTime" : false, - "route" : "Burnside/Stark", - "routeId" : "prt:20", - "routeLongName" : "Burnside/Stark", - "routeShortName" : "20", - "routeType" : 3, - "serviceDate" : "2009-11-17", - "startTime" : "2009-11-17T18:27:58.000+00:00", - "steps" : [ ], - "to" : { - "arrival" : "2009-11-17T18:34:00.000+00:00", - "departure" : "2009-11-17T18:34:00.000+00:00", - "lat" : 45.523169, - "lon" : -122.675893, - "name" : "W Burnside & NW 5th", - "stopCode" : "782", - "stopId" : "prt:782", - "stopIndex" : 99, - "stopSequence" : 100, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - "transitLeg" : true, - "tripBlockId" : "2071", - "tripId" : "prt:200W1210" - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 0.0, - "endTime" : "2009-11-17T18:34:00.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:34:00.000+00:00", - "departure" : "2009-11-17T18:34:00.000+00:00", - "lat" : 45.523169, - "lon" : -122.675893, - "name" : "W Burnside & NW 5th", - "stopCode" : "782", - "stopId" : "prt:782", - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - "generalizedCost" : 1, - "interlineWithPreviousLeg" : false, - "legElevation" : "", - "legGeometry" : { - "length" : 2, - "points" : "wfztGjcwkVD?" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:34:00.000+00:00", - "steps" : [ ], - "to" : { - "arrival" : "2009-11-17T18:34:00.000+00:00", - "departure" : "2009-11-17T18:34:00.000+00:00", - "lat" : 45.5231324, - "lon" : -122.6758917, - "name" : "West Burnside Street", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 1767.93, - "endTime" : "2009-11-17T18:39:16.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:34:00.000+00:00", - "departure" : "2009-11-17T18:34:00.000+00:00", - "lat" : 45.5231324, - "lon" : -122.6758917, - "name" : "West Burnside Street", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 510, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 97, - "points" : "qfztGjcwkV@`B?H?BM?iBBI?K?wBBK?K?sBDM@M@sB@K?K?uBBM?K?uBBI@K?aBBSAM@M@K?GBEDEHIJUX_@f@KNQRSVGFCBQPIHGDGBIBK@W@a@?mA@E?C@C@A?CBQTKJEHIJeC~CYZo@v@g@d@IJAFAD?L@vC@hB@p@?X?T@P?N@P@nA?j@AX?L@`B@dA?R?RBbD?T?NBbD?R?P@|D@jB?x@@J?N?B?P?LBjD@N" - }, - "mode" : "CAR", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:34:00.000+00:00", - "steps" : [ - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 44.21, - "elevation" : "", - "lat" : 45.5231324, - "lon" : -122.6758917, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "West Burnside Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 548.38, - "elevation" : "", - "lat" : 45.5231221, - "lon" : -122.676459, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northwest 6th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 465.44, - "elevation" : "", - "lat" : 45.5280515, - "lon" : -122.6766232, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "Northwest Station Way", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 709.95, - "elevation" : "", - "lat" : 45.5315452, - "lon" : -122.679511, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Northwest Northrup Street", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:39:16.000+00:00", - "departure" : "2009-11-17T18:39:16.000+00:00", - "lat" : 45.5313992, - "lon" : -122.6886162, - "name" : "corner of Northwest Northrup Street and path", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 70.46, - "endTime" : "2009-11-17T18:41:18.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:39:16.000+00:00", - "departure" : "2009-11-17T18:39:16.000+00:00", - "lat" : 45.5313992, - "lon" : -122.6886162, - "name" : "corner of Northwest Northrup Street and path", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 233, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 7, - "points" : "ez{tGzrykVC?I?@nBBH?d@??" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:39:16.000+00:00", - "steps" : [ - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : true, - "distance" : 7.61, - "elevation" : "", - "lat" : 45.5313992, - "lon" : -122.6886162, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "path", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 62.85, - "elevation" : "", - "lat" : 45.5314676, - "lon" : -122.6886182, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Northwest Northrup Street", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:41:18.000+00:00", - "departure" : "2009-11-17T18:43:26.000+00:00", - "lat" : 45.531434, - "lon" : -122.689417, - "name" : "NW Northrup & 18th", - "stopCode" : "10776", - "stopId" : "prt:10776", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyId" : "prt:prt", - "agencyName" : "TriMet", - "agencyTimeZoneOffset" : -28800000, - "agencyUrl" : "http://trimet.org", - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 547.79, - "endTime" : "2009-11-17T18:45:55.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:41:18.000+00:00", - "departure" : "2009-11-17T18:43:26.000+00:00", - "lat" : 45.531434, - "lon" : -122.689417, - "name" : "NW Northrup & 18th", - "stopCode" : "10776", - "stopId" : "prt:10776", - "stopIndex" : 20, - "stopSequence" : 21, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 877, - "headsign" : "NW 23rd Ave", - "interlineWithPreviousLeg" : false, - "intermediateStops" : [ - { - "arrival" : "2009-11-17T18:45:13.000+00:00", - "departure" : "2009-11-17T18:45:13.000+00:00", - "lat" : 45.531346, - "lon" : -122.694455, - "name" : "NW Northrup & 21st", - "stopCode" : "10777", - "stopId" : "prt:10777", - "stopIndex" : 21, - "stopSequence" : 22, - "vertexType" : "TRANSIT", - "zoneId" : "1" - } - ], - "legGeometry" : { - "length" : 8, - "points" : "cz{tGzwykV?VBhEFtKDvJ??@\\DnJ" - }, - "mode" : "TRAM", - "pathway" : false, - "realTime" : false, - "route" : "Portland Streetcar", - "routeId" : "prt:193", - "routeLongName" : "Portland Streetcar", - "routeType" : 0, - "serviceDate" : "2009-11-17", - "startTime" : "2009-11-17T18:43:26.000+00:00", - "steps" : [ ], - "to" : { - "arrival" : "2009-11-17T18:45:55.000+00:00", - "departure" : "2009-11-17T18:45:55.000+00:00", - "lat" : 45.531308, - "lon" : -122.696445, - "name" : "NW Northrup & 22nd", - "stopCode" : "10778", - "stopId" : "prt:10778", - "stopIndex" : 22, - "stopSequence" : 23, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : true, - "tripBlockId" : "9385", - "tripId" : "prt:1930W1220" - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 18.81, - "endTime" : "2009-11-17T18:46:19.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:45:55.000+00:00", - "departure" : "2009-11-17T18:45:55.000+00:00", - "lat" : 45.531308, - "lon" : -122.696445, - "name" : "NW Northrup & 22nd", - "stopCode" : "10778", - "stopId" : "prt:10778", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 37, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 7, - "points" : "sy{tGxc{kV???LABF?B??J" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:45:55.000+00:00", - "steps" : [ - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 18.81, - "elevation" : "", - "lat" : 45.5313019, - "lon" : -122.6964448, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "Northwest Northrup Street", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:46:19.000+00:00", - "lat" : 45.53122, - "lon" : -122.69659, - "name" : "NW Northrup St. & NW 22nd Ave. (P2)", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - } - ], - "startTime" : "2009-11-17T18:19:04.000+00:00", - "tooSloped" : false, - "transfers" : 1, - "transitTime" : 511, - "waitingTime" : 128, - "walkDistance" : 2530.76, - "walkLimitExceeded" : false, - "walkTime" : 996 - } - ] -] \ No newline at end of file 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 a019a7059e5..ab897e3410b 100644 --- a/application/src/test/java/org/opentripplanner/routing/graph/DefaultRoutingServiceTest.java +++ b/application/src/test/java/org/opentripplanner/routing/graph/DefaultRoutingServiceTest.java @@ -56,11 +56,11 @@ public void testIdLookup() { } /* Agencies */ - String feedId = transitService.getFeedIds().iterator().next(); + String feedId = transitService.listFeedIds().iterator().next(); Agency agency; - agency = transitService.getAgencyForId(new FeedScopedId(feedId, "azerty")); + agency = transitService.getAgency(new FeedScopedId(feedId, "azerty")); assertNull(agency); - agency = transitService.getAgencyForId(new FeedScopedId(feedId, "agency")); + agency = transitService.getAgency(new FeedScopedId(feedId, "agency")); assertEquals(feedId + ":" + "agency", agency.getId().toString()); assertEquals("Fake Agency", agency.getName()); @@ -79,18 +79,18 @@ public void testIdLookup() { */ @Test public void testPatternsCoherent() { - for (Trip trip : transitService.getAllTrips()) { - TripPattern pattern = transitService.getPatternForTrip(trip); + for (Trip trip : transitService.listTrips()) { + TripPattern pattern = transitService.findPattern(trip); assertTrue(pattern.scheduledTripsAsStream().anyMatch(t -> t.equals(trip))); } /* This one depends on a feed where each TripPattern appears on only one route. */ - for (Route route : transitService.getAllRoutes()) { - for (TripPattern pattern : transitService.getPatternsForRoute(route)) { + for (Route route : transitService.listRoutes()) { + for (TripPattern pattern : transitService.findPatterns(route)) { assertEquals(pattern.getRoute(), route); } } for (var stop : transitService.listStopLocations()) { - for (TripPattern pattern : transitService.getPatternsForStop(stop)) { + for (TripPattern pattern : transitService.findPatterns(stop)) { int stopPos = pattern.findStopPosition(stop); assertTrue(stopPos >= 0, "Stop position exist"); } @@ -99,7 +99,7 @@ public void testPatternsCoherent() { @Test public void testSpatialIndex() { - String feedId = transitService.getFeedIds().iterator().next(); + String feedId = transitService.listFeedIds().iterator().next(); FeedScopedId idJ = new FeedScopedId(feedId, "J"); var stopJ = transitService.getRegularStop(idJ); FeedScopedId idL = new FeedScopedId(feedId, "L"); 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 47568fa1252..400a9eba2ba 100644 --- a/application/src/test/java/org/opentripplanner/routing/graph/GraphSerializationTest.java +++ b/application/src/test/java/org/opentripplanner/routing/graph/GraphSerializationTest.java @@ -23,6 +23,8 @@ import org.opentripplanner.ext.emissions.EmissionsDataModel; import org.opentripplanner.framework.geometry.HashGridSpatialIndex; import org.opentripplanner.graph_builder.issue.api.DataImportIssueSummary; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingRepository; import org.opentripplanner.service.worldenvelope.WorldEnvelopeRepository; import org.opentripplanner.service.worldenvelope.internal.DefaultWorldEnvelopeRepository; import org.opentripplanner.standalone.config.BuildConfig; @@ -67,7 +69,14 @@ public void testRoundTripSerializationForGTFSGraph() throws Exception { TestOtpModel model = ConstantsForTests.buildNewPortlandGraph(true); var weRepo = new DefaultWorldEnvelopeRepository(); var emissionsDataModel = new EmissionsDataModel(); - testRoundTrip(model.graph(), model.timetableRepository(), weRepo, emissionsDataModel); + var parkingRepository = new DefaultVehicleParkingRepository(); + testRoundTrip( + model.graph(), + model.timetableRepository(), + weRepo, + parkingRepository, + emissionsDataModel + ); } /** @@ -78,10 +87,12 @@ public void testRoundTripSerializationForNetexGraph() throws Exception { TestOtpModel model = ConstantsForTests.buildNewMinimalNetexGraph(); var worldEnvelopeRepository = new DefaultWorldEnvelopeRepository(); var emissionsDataModel = new EmissionsDataModel(); + var parkingRepository = new DefaultVehicleParkingRepository(); testRoundTrip( model.graph(), model.timetableRepository(), worldEnvelopeRepository, + parkingRepository, emissionsDataModel ); } @@ -182,6 +193,7 @@ private void testRoundTrip( Graph originalGraph, TimetableRepository originalTimetableRepository, WorldEnvelopeRepository worldEnvelopeRepository, + VehicleParkingRepository vehicleParkingRepository, EmissionsDataModel emissionsDataModel ) throws Exception { // Now round-trip the graph through serialization. @@ -192,6 +204,7 @@ private void testRoundTrip( originalGraph, originalTimetableRepository, worldEnvelopeRepository, + vehicleParkingRepository, BuildConfig.DEFAULT, RouterConfig.DEFAULT, DataImportIssueSummary.empty(), 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 622b76a431a..2c787bc682c 100644 --- a/application/src/test/java/org/opentripplanner/routing/graphfinder/StreetGraphFinderTest.java +++ b/application/src/test/java/org/opentripplanner/routing/graphfinder/StreetGraphFinderTest.java @@ -8,7 +8,7 @@ import org.junit.jupiter.api.Test; import org.locationtech.jts.geom.Coordinate; import org.opentripplanner.routing.algorithm.GraphRoutingTest; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; import org.opentripplanner.service.vehiclerental.street.VehicleRentalPlaceVertex; import org.opentripplanner.street.model.StreetTraversalPermission; import org.opentripplanner.street.model.vertex.IntersectionVertex; 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 b5b4d471e53..52ddaf86d91 100644 --- a/application/src/test/java/org/opentripplanner/routing/stoptimes/StopTimesHelperTest.java +++ b/application/src/test/java/org/opentripplanner/routing/stoptimes/StopTimesHelperTest.java @@ -33,8 +33,8 @@ public static void setUp() throws Exception { 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")) + var originalPattern = transitService.findPattern( + transitService.getTrip(new FeedScopedId(feedId, "5.1")) ); var tt = originalPattern.getScheduledTimetable(); var newTripTimes = tt.getTripTimes(0).copyScheduledTimes(); diff --git a/application/src/test/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingHelperTest.java b/application/src/test/java/org/opentripplanner/service/vehicleparking/VehicleParkingHelperTest.java similarity index 92% rename from application/src/test/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingHelperTest.java rename to application/src/test/java/org/opentripplanner/service/vehicleparking/VehicleParkingHelperTest.java index 90bdeb015a4..34b48bfe051 100644 --- a/application/src/test/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingHelperTest.java +++ b/application/src/test/java/org/opentripplanner/service/vehicleparking/VehicleParkingHelperTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.routing.vehicle_parking; +package org.opentripplanner.service.vehicleparking; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -9,7 +9,9 @@ import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.routing.graph.Graph; -import org.opentripplanner.routing.vehicle_parking.VehicleParking.VehicleParkingEntranceCreator; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParking.VehicleParkingEntranceCreator; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingHelper; import org.opentripplanner.street.model._data.StreetModelForTest; import org.opentripplanner.street.model.edge.VehicleParkingEdge; import org.opentripplanner.street.model.vertex.VehicleParkingEntranceVertex; diff --git a/application/src/test/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingTestGraphData.java b/application/src/test/java/org/opentripplanner/service/vehicleparking/VehicleParkingTestGraphData.java similarity index 96% rename from application/src/test/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingTestGraphData.java rename to application/src/test/java/org/opentripplanner/service/vehicleparking/VehicleParkingTestGraphData.java index 03c4981f181..b2a847d267d 100644 --- a/application/src/test/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingTestGraphData.java +++ b/application/src/test/java/org/opentripplanner/service/vehicleparking/VehicleParkingTestGraphData.java @@ -1,4 +1,4 @@ -package org.opentripplanner.routing.vehicle_parking; +package org.opentripplanner.service.vehicleparking; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.street.model.StreetTraversalPermission; diff --git a/application/src/test/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingTestUtil.java b/application/src/test/java/org/opentripplanner/service/vehicleparking/VehicleParkingTestUtil.java similarity index 85% rename from application/src/test/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingTestUtil.java rename to application/src/test/java/org/opentripplanner/service/vehicleparking/VehicleParkingTestUtil.java index fca20322ebe..aebd422cf81 100644 --- a/application/src/test/java/org/opentripplanner/routing/vehicle_parking/VehicleParkingTestUtil.java +++ b/application/src/test/java/org/opentripplanner/service/vehicleparking/VehicleParkingTestUtil.java @@ -1,7 +1,9 @@ -package org.opentripplanner.routing.vehicle_parking; +package org.opentripplanner.service.vehicleparking; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.NonLocalizedString; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces; import org.opentripplanner.street.model._data.StreetModelForTest; import org.opentripplanner.transit.model.framework.FeedScopedId; 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 8d06e06a0c1..08710fe0599 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 @@ -8,7 +8,7 @@ import org.opentripplanner.framework.geometry.SphericalDistanceLibrary; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; import org.opentripplanner.service.vehiclerental.model.TestFreeFloatingRentalVehicleBuilder; import org.opentripplanner.service.vehiclerental.street.VehicleRentalPlaceVertex; import org.opentripplanner.street.model.RentalFormFactor; 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 8c6127e716e..a44bed87bdf 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 @@ -16,8 +16,8 @@ import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.routing.api.request.StreetMode; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingEntrance; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingEntrance; import org.opentripplanner.street.model._data.StreetModelForTest; import org.opentripplanner.street.model.vertex.VehicleParkingEntranceVertex; import org.opentripplanner.street.model.vertex.Vertex; 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 e28bf75583d..4fa7f682dfb 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 @@ -8,8 +8,8 @@ import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.routing.api.request.StreetMode; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces; import org.opentripplanner.street.model._data.StreetModelForTest; import org.opentripplanner.street.model.vertex.VehicleParkingEntranceVertex; import org.opentripplanner.street.search.request.StreetSearchRequest; diff --git a/application/src/test/java/org/opentripplanner/street/model/edge/VehicleParkingPreferredTagsTest.java b/application/src/test/java/org/opentripplanner/street/model/edge/VehicleParkingPreferredTagsTest.java index 579ae4e964d..2f18f02b89b 100644 --- a/application/src/test/java/org/opentripplanner/street/model/edge/VehicleParkingPreferredTagsTest.java +++ b/application/src/test/java/org/opentripplanner/street/model/edge/VehicleParkingPreferredTagsTest.java @@ -11,8 +11,8 @@ import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.routing.api.request.StreetMode; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingEntrance; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingEntrance; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces; import org.opentripplanner.street.model._data.StreetModelForTest; import org.opentripplanner.street.model.vertex.VehicleParkingEntranceVertex; import org.opentripplanner.street.model.vertex.Vertex; diff --git a/application/src/test/java/org/opentripplanner/transit/api/model/FilterValuesEmptyIsEverythingTest.java b/application/src/test/java/org/opentripplanner/transit/api/model/FilterValuesEmptyIsEverythingTest.java new file mode 100644 index 00000000000..95e8f2ca292 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/transit/api/model/FilterValuesEmptyIsEverythingTest.java @@ -0,0 +1,22 @@ +package org.opentripplanner.transit.api.model; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; +import org.junit.jupiter.api.Test; + +public class FilterValuesEmptyIsEverythingTest { + + @Test + void testEmptyIncludeEverything() { + FilterValues filterValues = FilterValues.ofEmptyIsEverything("null", List.of()); + assertTrue(filterValues.includeEverything()); + } + + @Test + void testNullIncludeEverything() { + List nullList = null; + FilterValues filterValues2 = FilterValues.ofEmptyIsEverything("null", nullList); + assertTrue(filterValues2.includeEverything()); + } +} diff --git a/application/src/test/java/org/opentripplanner/transit/api/model/RequiredFilterValuesTest.java b/application/src/test/java/org/opentripplanner/transit/api/model/RequiredFilterValuesTest.java new file mode 100644 index 00000000000..7c06128c7bf --- /dev/null +++ b/application/src/test/java/org/opentripplanner/transit/api/model/RequiredFilterValuesTest.java @@ -0,0 +1,32 @@ +package org.opentripplanner.transit.api.model; + +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; +import org.junit.jupiter.api.Test; + +class RequiredFilterValuesTest { + + @Test + void testEmptyIsInvalid() { + IllegalArgumentException e = assertThrows( + IllegalArgumentException.class, + () -> { + FilterValues.ofRequired("empty", List.of()); + } + ); + assertEquals("Filter empty values must not be empty.", e.getMessage()); + } + + @Test + void testNullIsInvalid() { + List nullList = null; + IllegalArgumentException e = assertThrows( + IllegalArgumentException.class, + () -> { + FilterValues.ofRequired("null", nullList); + } + ); + assertEquals("Filter null values must not be empty.", e.getMessage()); + } +} diff --git a/application/src/test/java/org/opentripplanner/transit/model/filter/transit/TripMatcherFactoryTest.java b/application/src/test/java/org/opentripplanner/transit/model/filter/transit/TripMatcherFactoryTest.java new file mode 100644 index 00000000000..ec4b3241dd5 --- /dev/null +++ b/application/src/test/java/org/opentripplanner/transit/model/filter/transit/TripMatcherFactoryTest.java @@ -0,0 +1,157 @@ +package org.opentripplanner.transit.model.filter.transit; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.time.LocalDate; +import java.util.List; +import java.util.Set; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.opentripplanner.transit.api.model.FilterValues; +import org.opentripplanner.transit.api.request.TripRequest; +import org.opentripplanner.transit.model.basic.TransitMode; +import org.opentripplanner.transit.model.filter.expr.Matcher; +import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.transit.model.network.Route; +import org.opentripplanner.transit.model.organization.Agency; +import org.opentripplanner.transit.model.timetable.Trip; + +public class TripMatcherFactoryTest { + + private Trip tripRut; + private Trip tripRut2; + private Trip tripAkt; + + @BeforeEach + void setup() { + tripRut = + Trip + .of(new FeedScopedId("F", "RUT:route:trip:1")) + .withRoute( + Route + .of(new FeedScopedId("F", "RUT:route:1")) + .withAgency( + Agency + .of(new FeedScopedId("F", "RUT:1")) + .withName("RUT") + .withTimezone("Europe/Oslo") + .build() + ) + .withMode(TransitMode.BUS) + .withShortName("BUS") + .build() + ) + .withServiceId(new FeedScopedId("F", "RUT:route:trip:1")) + .build(); + tripRut2 = + Trip + .of(new FeedScopedId("F", "RUT:route:trip:2")) + .withRoute( + Route + .of(new FeedScopedId("F", "RUT:route:2")) + .withAgency( + Agency + .of(new FeedScopedId("F", "RUT:2")) + .withName("RUT") + .withTimezone("Europe/Oslo") + .build() + ) + .withMode(TransitMode.BUS) + .withShortName("BUS") + .build() + ) + .withServiceId(new FeedScopedId("F", "RUT:route:trip:2")) + .build(); + tripAkt = + Trip + .of(new FeedScopedId("F", "AKT:route:trip:1")) + .withRoute( + Route + .of(new FeedScopedId("F", "AKT:route:1")) + .withAgency( + Agency + .of(new FeedScopedId("F", "AKT")) + .withName("AKT") + .withTimezone("Europe/Oslo") + .build() + ) + .withMode(TransitMode.BUS) + .withShortName("BUS") + .build() + ) + .withServiceId(new FeedScopedId("F", "AKT:route:trip:1")) + .build(); + } + + @Test + void testMatchRouteId() { + TripRequest request = TripRequest + .of() + .withRoutes( + FilterValues.ofEmptyIsEverything("routes", List.of(new FeedScopedId("F", "RUT:route:1"))) + ) + .build(); + + Matcher matcher = TripMatcherFactory.of(request, feedScopedId -> Set.of()); + + assertTrue(matcher.match(tripRut)); + assertFalse(matcher.match(tripRut2)); + assertFalse(matcher.match(tripAkt)); + } + + @Test + void testMatchDefaultAll() { + TripRequest request = TripRequest.of().build(); + + Matcher matcher = TripMatcherFactory.of(request, feedScopedId -> Set.of()); + + assertTrue(matcher.match(tripRut)); + assertTrue(matcher.match(tripRut2)); + assertTrue(matcher.match(tripAkt)); + } + + @Test + void testMatchAgencyId() { + TripRequest request = TripRequest + .of() + .withAgencies( + FilterValues.ofEmptyIsEverything("agencies", List.of(new FeedScopedId("F", "RUT:1"))) + ) + .build(); + + Matcher matcher = TripMatcherFactory.of(request, feedScopedId -> Set.of()); + + assertTrue(matcher.match(tripRut)); + assertFalse(matcher.match(tripRut2)); + assertFalse(matcher.match(tripAkt)); + } + + @Test + void testMatchServiceDates() { + TripRequest request = TripRequest + .of() + .withServiceDates( + FilterValues.ofEmptyIsEverything( + "operatingDays", + List.of(LocalDate.of(2024, 2, 22), LocalDate.of(2024, 2, 23)) + ) + ) + .build(); + + Matcher matcher = TripMatcherFactory.of(request, this::dummyServiceDateProvider); + + assertTrue(matcher.match(tripRut)); + assertTrue(matcher.match(tripRut2)); + assertFalse(matcher.match(tripAkt)); + } + + private Set dummyServiceDateProvider(FeedScopedId feedScopedId) { + if (feedScopedId.equals(new FeedScopedId("F", "RUT:route:trip:1"))) { + return Set.of(LocalDate.of(2024, 2, 22), LocalDate.of(2024, 2, 23)); + } else if (feedScopedId.equals(new FeedScopedId("F", "RUT:route:trip:2"))) { + return Set.of(LocalDate.of(2024, 2, 23)); + } + return Set.of(); + } +} diff --git a/application/src/test/java/org/opentripplanner/transit/model/filter/transit/TripOnServiceDateMatcherFactoryTest.java b/application/src/test/java/org/opentripplanner/transit/model/filter/transit/TripOnServiceDateMatcherFactoryTest.java index b7cb7aa6698..dcfb10b5947 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/filter/transit/TripOnServiceDateMatcherFactoryTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/filter/transit/TripOnServiceDateMatcherFactoryTest.java @@ -6,6 +6,7 @@ import java.util.List; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.opentripplanner.transit.api.model.FilterValues; import org.opentripplanner.transit.api.request.TripOnServiceDateRequest; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.filter.expr.Matcher; @@ -25,16 +26,16 @@ class TripOnServiceDateMatcherFactoryTest { void setup() { tripOnServiceDateRut = TripOnServiceDate - .of(new FeedScopedId("RUT:route:trip:date", "123")) + .of(new FeedScopedId("F", "RUT:route:trip:date:1")) .withTrip( Trip - .of(new FeedScopedId("RUT:route:trip", "1")) + .of(new FeedScopedId("F", "RUT:route:trip:1")) .withRoute( Route - .of(new FeedScopedId("RUT:route", "2")) + .of(new FeedScopedId("F", "RUT:route:1")) .withAgency( Agency - .of(new FeedScopedId("RUT", "3")) + .of(new FeedScopedId("F", "RUT:1")) .withName("RUT") .withTimezone("Europe/Oslo") .build() @@ -50,16 +51,16 @@ void setup() { tripOnServiceDateRut2 = TripOnServiceDate - .of(new FeedScopedId("RUT:route:trip:date", "123")) + .of(new FeedScopedId("F", "RUT:route:trip:date:2")) .withTrip( Trip - .of(new FeedScopedId("RUT:route:trip2", "1")) + .of(new FeedScopedId("F", "RUT:route:trip:2")) .withRoute( Route - .of(new FeedScopedId("RUT:route", "2")) + .of(new FeedScopedId("F", "RUT:route:2")) .withAgency( Agency - .of(new FeedScopedId("RUT", "3")) + .of(new FeedScopedId("F", "RUT:2")) .withName("RUT") .withTimezone("Europe/Oslo") .build() @@ -75,16 +76,16 @@ void setup() { tripOnServiceDateAkt = TripOnServiceDate - .of(new FeedScopedId("AKT:route:trip:date", "123")) + .of(new FeedScopedId("F", "AKT:route:trip:date:1")) .withTrip( Trip - .of(new FeedScopedId("AKT:route:trip", "1")) + .of(new FeedScopedId("F", "AKT:route:trip:1")) .withRoute( Route - .of(new FeedScopedId("AKT:route", "2")) + .of(new FeedScopedId("F", "AKT:route:1")) .withAgency( Agency - .of(new FeedScopedId("AKT", "3")) + .of(new FeedScopedId("F", "AKT:1")) .withName("AKT") .withTimezone("Europe/Oslo") .build() @@ -102,8 +103,7 @@ void setup() { @Test void testMatchOperatingDays() { TripOnServiceDateRequest request = TripOnServiceDateRequest - .of() - .withOperatingDays(List.of(LocalDate.of(2024, 2, 22))) + .of(FilterValues.ofRequired("serviceDates", List.of(LocalDate.of(2024, 2, 22)))) .build(); Matcher matcher = TripOnServiceDateMatcherFactory.of(request); @@ -116,11 +116,19 @@ void testMatchOperatingDays() { @Test void testMatchMultiple() { TripOnServiceDateRequest request = TripOnServiceDateRequest - .of() - .withOperatingDays(List.of(LocalDate.of(2024, 2, 22))) - .withAuthorities(List.of(new FeedScopedId("RUT", "3"))) - .withLines(List.of(new FeedScopedId("RUT:route", "2"))) - .withServiceJourneys(List.of(new FeedScopedId("RUT:route:trip", "1"))) + .of(FilterValues.ofRequired("serviceDates", List.of(LocalDate.of(2024, 2, 22)))) + .withAgencies( + FilterValues.ofEmptyIsEverything("agencies", List.of(new FeedScopedId("F", "RUT:1"))) + ) + .withRoutes( + FilterValues.ofEmptyIsEverything("routes", List.of(new FeedScopedId("F", "RUT:route:1"))) + ) + .withServiceJourneys( + FilterValues.ofEmptyIsEverything( + "serviceJourneys", + List.of(new FeedScopedId("F", "RUT:route:trip:1")) + ) + ) .build(); Matcher matcher = TripOnServiceDateMatcherFactory.of(request); @@ -133,12 +141,27 @@ void testMatchMultiple() { @Test void testMatchMultipleServiceJourneyMatchers() { TripOnServiceDateRequest request = TripOnServiceDateRequest - .of() - .withOperatingDays(List.of(LocalDate.of(2024, 2, 22))) - .withAuthorities(List.of(new FeedScopedId("RUT", "3"))) - .withLines(List.of(new FeedScopedId("RUT:route", "2"))) + .of(FilterValues.ofRequired("serviceDates", List.of(LocalDate.of(2024, 2, 22)))) + .withAgencies( + FilterValues.ofEmptyIsEverything( + "agencies", + List.of(new FeedScopedId("F", "RUT:1"), new FeedScopedId("F", "RUT:2")) + ) + ) + .withRoutes( + FilterValues.ofEmptyIsEverything( + "routes", + List.of(new FeedScopedId("F", "RUT:route:1"), new FeedScopedId("F", "RUT:route:2")) + ) + ) .withServiceJourneys( - List.of(new FeedScopedId("RUT:route:trip", "1"), new FeedScopedId("RUT:route:trip2", "1")) + FilterValues.ofEmptyIsEverything( + "serviceJourneys", + List.of( + new FeedScopedId("F", "RUT:route:trip:1"), + new FeedScopedId("F", "RUT:route:trip:2") + ) + ) ) .build(); diff --git a/application/src/test/java/org/opentripplanner/transit/model/timetable/booking/BookingInfoTest.java b/application/src/test/java/org/opentripplanner/transit/model/timetable/booking/BookingInfoTest.java index 0bf189a1c29..36587e1f696 100644 --- a/application/src/test/java/org/opentripplanner/transit/model/timetable/booking/BookingInfoTest.java +++ b/application/src/test/java/org/opentripplanner/transit/model/timetable/booking/BookingInfoTest.java @@ -58,7 +58,7 @@ void testBookingInfoWithMinBookingNotice() { .build(); assertNull(subject.getLatestBookingTime()); - assertEquals(minimumBookingNotice, subject.getMinimumBookingNotice()); + assertEquals(minimumBookingNotice, subject.getMinimumBookingNotice().get()); assertEquals( "BookingInfo{bookingMethods: [CALL_DRIVER], minimumBookingNotice: 45m}", 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 ac0530d1ef9..c3086bcc61b 100644 --- a/application/src/test/java/org/opentripplanner/transit/service/DefaultTransitServiceTest.java +++ b/application/src/test/java/org/opentripplanner/transit/service/DefaultTransitServiceTest.java @@ -84,7 +84,7 @@ static void setup() { service = new DefaultTransitService(timetableRepository) { @Override - public Collection getPatternsForStop(StopLocation stop) { + public Collection findPatterns(StopLocation stop) { if (stop.equals(STOP_B)) { return List.of(FERRY_PATTERN, FERRY_PATTERN, RAIL_PATTERN, RAIL_PATTERN, RAIL_PATTERN); } else { @@ -96,31 +96,31 @@ public Collection getPatternsForStop(StopLocation stop) { @Test void modeFromGtfsVehicleType() { - var modes = service.getModesOfStopLocation(STOP_A); + var modes = service.findTransitModes(STOP_A); assertEquals(List.of(TRAM), modes); } @Test void modeFromPatterns() { - var modes = service.getModesOfStopLocation(STOP_B); + var modes = service.findTransitModes(STOP_B); assertEquals(List.of(RAIL, FERRY), modes); } @Test void stationModes() { - var modes = service.getModesOfStopLocationsGroup(STATION); + var modes = service.findTransitModes(STATION); assertEquals(List.of(RAIL, FERRY, TRAM), modes); } @Test void getPatternForStopsWithoutRealTime() { - Collection patternsForStop = service.getPatternsForStop(STOP_B, false); + Collection patternsForStop = service.findPatterns(STOP_B, false); assertEquals(Set.of(FERRY_PATTERN, RAIL_PATTERN), patternsForStop); } @Test void getPatternForStopsWithRealTime() { - Collection patternsForStop = service.getPatternsForStop(STOP_B, true); + Collection patternsForStop = service.findPatterns(STOP_B, true); assertEquals(Set.of(FERRY_PATTERN, RAIL_PATTERN, REAL_TIME_PATTERN), patternsForStop); } 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 e5e305d8081..c55ddff854f 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 @@ -23,6 +23,7 @@ import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.routing.graph.SerializedGraphObject; import org.opentripplanner.service.realtimevehicles.internal.DefaultRealtimeVehicleService; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingRepository; import org.opentripplanner.service.vehiclerental.internal.DefaultVehicleRentalService; import org.opentripplanner.standalone.OtpStartupInfo; import org.opentripplanner.standalone.api.OtpServerRequestContext; @@ -98,6 +99,7 @@ public SpeedTest( graph, new DefaultRealtimeVehicleService(transitService), new DefaultVehicleRentalService(), + new DefaultVehicleParkingRepository(), timetableRepository, config.updatersConfig ); @@ -120,6 +122,7 @@ public SpeedTest( TestServerContext.createWorldEnvelopeService(), TestServerContext.createRealtimeVehicleService(transitService), TestServerContext.createVehicleRentalService(), + TestServerContext.createVehicleParkingService(), TestServerContext.createEmissionsService(), null, config.flexConfig, @@ -336,8 +339,8 @@ private void saveTestCasesToResultFile() { private void updateTimersWithGlobalCounters() { final var transitService = serverContext.transitService(); timer.globalCount("transitdata_stops", transitService.listStopLocations().size()); - timer.globalCount("transitdata_patterns", transitService.getAllTripPatterns().size()); - timer.globalCount("transitdata_trips", transitService.getAllTrips().size()); + timer.globalCount("transitdata_patterns", transitService.listTripPatterns().size()); + timer.globalCount("transitdata_trips", transitService.listTrips().size()); // we want to get the numbers after the garbage collection forceGCToAvoidGCLater(); 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 901842adb45..fea39f912db 100644 --- a/application/src/test/java/org/opentripplanner/updater/siri/SiriTimetableSnapshotSourceTest.java +++ b/application/src/test/java/org/opentripplanner/updater/siri/SiriTimetableSnapshotSourceTest.java @@ -56,7 +56,7 @@ void testAddJourneyWithExistingRoute() { var env = RealtimeTestEnvironment.siri().addTrip(TRIP_1_INPUT).build(); Route route = ROUTE_1; - int numPatternForRoute = env.getTransitService().getPatternsForRoute(route).size(); + int numPatternForRoute = env.getTransitService().findPatterns(route).size(); String newJourneyId = "newJourney"; var updates = createValidAddedJourney(env).buildEstimatedTimetableDeliveries(); @@ -71,18 +71,16 @@ void testAddJourneyWithExistingRoute() { ); FeedScopedId tripId = id(newJourneyId); TransitService transitService = env.getTransitService(); - Trip trip = transitService.getTripForId(tripId); + Trip trip = transitService.getTrip(tripId); assertNotNull(trip); - assertNotNull(transitService.getPatternForTrip(trip)); - assertNotNull(transitService.getTripOnServiceDateById(tripId)); + assertNotNull(transitService.findPattern(trip)); + assertNotNull(transitService.getTripOnServiceDate(tripId)); assertNotNull( - transitService.getTripOnServiceDateForTripAndDay( - new TripIdAndServiceDate(tripId, SERVICE_DATE) - ) + transitService.getTripOnServiceDate(new TripIdAndServiceDate(tripId, SERVICE_DATE)) ); assertEquals( numPatternForRoute + 1, - transitService.getPatternsForRoute(route).size(), + transitService.findPatterns(route).size(), "The added trip should use a new pattern for this route" ); } @@ -97,7 +95,7 @@ void testAddJourneyWithNewRoute() { .withLineRef(newRouteRef) .buildEstimatedTimetableDeliveries(); - int numRoutes = env.getTransitService().getAllRoutes().size(); + int numRoutes = env.getTransitService().listRoutes().size(); var result = env.applyEstimatedTimetable(updates); assertEquals(1, result.successful()); @@ -107,11 +105,11 @@ void testAddJourneyWithNewRoute() { env.getScheduledTimetable("newJourney") ); TransitService transitService = env.getTransitService(); - assertEquals(numRoutes + 1, transitService.getAllRoutes().size()); + assertEquals(numRoutes + 1, transitService.listRoutes().size()); FeedScopedId newRouteId = id(newRouteRef); - Route newRoute = transitService.getRouteForId(newRouteId); + Route newRoute = transitService.getRoute(newRouteId); assertNotNull(newRoute); - assertEquals(1, transitService.getPatternsForRoute(newRoute).size()); + assertEquals(1, transitService.findPatterns(newRoute).size()); } @Test @@ -120,13 +118,13 @@ void testAddJourneyMultipleTimes() { var env = RealtimeTestEnvironment.siri().addTrip(TRIP_1_INPUT).build(); var updates = createValidAddedJourney(env).buildEstimatedTimetableDeliveries(); - int numTrips = env.getTransitService().getAllTrips().size(); + int numTrips = env.getTransitService().listTrips().size(); var result1 = env.applyEstimatedTimetable(updates); assertEquals(1, result1.successful()); - assertEquals(numTrips + 1, env.getTransitService().getAllTrips().size()); + assertEquals(numTrips + 1, env.getTransitService().listTrips().size()); var result2 = env.applyEstimatedTimetable(updates); assertEquals(1, result2.successful()); - assertEquals(numTrips + 1, env.getTransitService().getAllTrips().size()); + assertEquals(numTrips + 1, env.getTransitService().listTrips().size()); } @Test 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 8231d8868f1..f20e58a7b62 100644 --- a/application/src/test/java/org/opentripplanner/updater/trip/RealtimeTestEnvironment.java +++ b/application/src/test/java/org/opentripplanner/updater/trip/RealtimeTestEnvironment.java @@ -96,9 +96,9 @@ public TransitService getTransitService() { */ public TripTimes getTripTimesForTrip(FeedScopedId tripId, LocalDate serviceDate) { var transitService = getTransitService(); - var trip = transitService.getTripOnServiceDateById(tripId).getTrip(); - var pattern = transitService.getPatternForTrip(trip, serviceDate); - var timetable = transitService.getTimetableForTripPattern(pattern, serviceDate); + var trip = transitService.getTripOnServiceDate(tripId).getTrip(); + var pattern = transitService.findPattern(trip, serviceDate); + var timetable = transitService.findTimetable(pattern, serviceDate); return timetable.getTripTimes(trip); } @@ -120,8 +120,8 @@ public TripPattern getPatternForTrip(String id) { public TripPattern getPatternForTrip(FeedScopedId tripId, LocalDate serviceDate) { var transitService = getTransitService(); - var trip = transitService.getTripOnServiceDateById(tripId); - return transitService.getPatternForTrip(trip.getTrip(), serviceDate); + var trip = transitService.getTripOnServiceDate(tripId); + return transitService.findPattern(trip.getTrip(), serviceDate); } /** 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 8e3c793666a..d0e6f19a156 100644 --- a/application/src/test/java/org/opentripplanner/updater/trip/TimetableSnapshotSourceTest.java +++ b/application/src/test/java/org/opentripplanner/updater/trip/TimetableSnapshotSourceTest.java @@ -61,7 +61,7 @@ public void setUp() { timetableRepository = model.timetableRepository(); transitService = new DefaultTransitService(timetableRepository); - feedId = transitService.getFeedIds().stream().findFirst().get(); + feedId = transitService.listFeedIds().stream().findFirst().get(); } @Test @@ -206,8 +206,8 @@ public void testHandleModifiedTrip() { // Original trip pattern { final FeedScopedId tripId = new FeedScopedId(feedId, modifiedTripId); - final Trip trip = transitService.getTripForId(tripId); - final TripPattern originalTripPattern = transitService.getPatternForTrip(trip); + final Trip trip = transitService.getTrip(tripId); + final TripPattern originalTripPattern = transitService.findPattern(trip); final Timetable originalTimetableForToday = snapshot.resolve( originalTripPattern, 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 3a3d7d5e130..e926361f4ea 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 @@ -63,9 +63,9 @@ void addedTripWithNewRoute() { assertEquals(TransitMode.RAIL, route.getMode()); TransitService transitService = env.getTransitService(); - var fromTimetableRepository = transitService.getRouteForId(route.getId()); + var fromTimetableRepository = transitService.getRoute(route.getId()); assertEquals(fromTimetableRepository, route); - var patternsForRoute = transitService.getPatternsForRoute(route); + var patternsForRoute = transitService.findPatterns(route); assertEquals(1, patternsForRoute.size()); assertEquals(pattern, patternsForRoute.stream().findFirst().orElseThrow()); @@ -121,16 +121,16 @@ void repeatedlyAddedTripWithNewRoute() { var secondRoute = secondPattern.getRoute(); assertSame(firstRoute, secondRoute); - assertNotNull(env.getTransitService().getRouteForId(firstRoute.getId())); + assertNotNull(env.getTransitService().getRoute(firstRoute.getId())); } private TripPattern assertAddedTrip(String tripId, RealtimeTestEnvironment env) { var snapshot = env.getTimetableSnapshot(); TransitService transitService = env.getTransitService(); - Trip trip = transitService.getTripForId(TimetableRepositoryForTest.id(ADDED_TRIP_ID)); + Trip trip = transitService.getTrip(TimetableRepositoryForTest.id(ADDED_TRIP_ID)); assertNotNull(trip); - assertNotNull(transitService.getPatternForTrip(trip)); + assertNotNull(transitService.findPattern(trip)); var stopA = env.timetableRepository.getSiteRepository().getRegularStop(STOP_A1.getId()); // Get the trip pattern of the added trip which goes through stopA 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 8231e21bce7..665c79d193c 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 @@ -90,8 +90,8 @@ void complexDelay() { var snapshot = env.getTimetableSnapshot(); - var trip2 = env.getTransitService().getTripForId(id(TRIP_2_ID)); - var originalTripPattern = env.getTransitService().getPatternForTrip(trip2); + var trip2 = env.getTransitService().getTrip(id(TRIP_2_ID)); + var originalTripPattern = env.getTransitService().findPattern(trip2); var originalTimetableForToday = snapshot.resolve(originalTripPattern, SERVICE_DATE); var originalTimetableScheduled = snapshot.resolve(originalTripPattern, null); 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 c4b4c9e9bbd..e10b86797b8 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 @@ -133,8 +133,8 @@ private static void assertOriginalTripPatternIsDeleted( RealtimeTestEnvironment env, String tripId ) { - var trip = env.getTransitService().getTripForId(id(tripId)); - var originalTripPattern = env.getTransitService().getPatternForTrip(trip); + var trip = env.getTransitService().getTrip(id(tripId)); + var originalTripPattern = env.getTransitService().findPattern(trip); var snapshot = env.getTimetableSnapshot(); var originalTimetableForToday = snapshot.resolve(originalTripPattern, SERVICE_DATE); var originalTimetableScheduled = snapshot.resolve(originalTripPattern, null); @@ -176,8 +176,8 @@ private static void assertOriginalTripPatternIsDeleted( } private static void assertNewTripTimesIsUpdated(RealtimeTestEnvironment env, String tripId) { - var trip = env.getTransitService().getTripForId(id(tripId)); - var originalTripPattern = env.getTransitService().getPatternForTrip(trip); + var trip = env.getTransitService().getTrip(id(tripId)); + var originalTripPattern = env.getTransitService().findPattern(trip); var snapshot = env.getTimetableSnapshot(); var originalTimetableForToday = snapshot.resolve(originalTripPattern, SERVICE_DATE); 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 27b6a038418..ecf7904de4a 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 @@ -12,9 +12,10 @@ import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.routing.graph.Graph; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingService; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces; import org.opentripplanner.standalone.config.routerconfig.updaters.VehicleParkingUpdaterConfig; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.service.TimetableRepository; @@ -46,7 +47,7 @@ class VehicleParkingAvailabilityUpdaterTest { @Test void updateCarAvailability() { - var service = buildParkingService(VehicleParkingSpaces.builder().carSpaces(10).build()); + var service = buildParkingRepository(VehicleParkingSpaces.builder().carSpaces(10).build()); var updater = new VehicleParkingAvailabilityUpdater( PARAMETERS, new StubDatasource(DEFAULT_UPDATE), @@ -55,7 +56,7 @@ void updateCarAvailability() { runUpdaterOnce(updater); - var updated = service.getVehicleParkings().toList().getFirst(); + var updated = List.copyOf(service.listVehicleParkings()).getFirst(); assertEquals(ID, updated.getId()); assertEquals(8, updated.getAvailability().getCarSpaces()); assertNull(updated.getAvailability().getBicycleSpaces()); @@ -63,7 +64,7 @@ void updateCarAvailability() { @Test void updateBicycleAvailability() { - var service = buildParkingService(VehicleParkingSpaces.builder().bicycleSpaces(15).build()); + var service = buildParkingRepository(VehicleParkingSpaces.builder().bicycleSpaces(15).build()); var updater = new VehicleParkingAvailabilityUpdater( PARAMETERS, new StubDatasource(DEFAULT_UPDATE), @@ -72,7 +73,7 @@ void updateBicycleAvailability() { runUpdaterOnce(updater); - var updated = service.getVehicleParkings().toList().getFirst(); + var updated = List.copyOf(service.listVehicleParkings()).getFirst(); assertEquals(ID, updated.getId()); assertEquals(8, updated.getAvailability().getBicycleSpaces()); assertNull(updated.getAvailability().getCarSpaces()); @@ -80,7 +81,7 @@ void updateBicycleAvailability() { @Test void notFound() { - var service = buildParkingService(VehicleParkingSpaces.builder().bicycleSpaces(15).build()); + var service = buildParkingRepository(VehicleParkingSpaces.builder().bicycleSpaces(15).build()); var updater = new VehicleParkingAvailabilityUpdater( PARAMETERS, new StubDatasource(new AvailabiltyUpdate(id("not-found"), 100)), @@ -89,21 +90,21 @@ void notFound() { runUpdaterOnce(updater); - var updated = service.getVehicleParkings().toList().getFirst(); + var updated = List.copyOf(service.listVehicleParkings()).getFirst(); assertEquals(ID, updated.getId()); assertNull(updated.getAvailability()); } - private static VehicleParkingService buildParkingService(VehicleParkingSpaces capacity) { - var service = new VehicleParkingService(); + private static VehicleParkingRepository buildParkingRepository(VehicleParkingSpaces capacity) { + var repo = new DefaultVehicleParkingRepository(); var parking = parkingBuilder() .carPlaces(capacity.getCarSpaces() != null) .bicyclePlaces(capacity.getBicycleSpaces() != null) .capacity(capacity) .build(); - service.updateVehicleParking(List.of(parking), List.of()); - return service; + repo.updateVehicleParking(List.of(parking), List.of()); + return repo; } private static VehicleParking.VehicleParkingBuilder parkingBuilder() { 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 44a37943d8b..261cd55011d 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 @@ -11,11 +11,13 @@ import org.junit.jupiter.api.Test; import org.mockito.Mockito; import org.opentripplanner.routing.graph.Graph; -import org.opentripplanner.routing.vehicle_parking.VehicleParking; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingSpaces; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingState; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingTestGraphData; -import org.opentripplanner.routing.vehicle_parking.VehicleParkingTestUtil; +import org.opentripplanner.service.vehicleparking.VehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.VehicleParkingTestGraphData; +import org.opentripplanner.service.vehicleparking.VehicleParkingTestUtil; +import org.opentripplanner.service.vehicleparking.internal.DefaultVehicleParkingRepository; +import org.opentripplanner.service.vehicleparking.model.VehicleParking; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces; +import org.opentripplanner.service.vehicleparking.model.VehicleParkingState; import org.opentripplanner.street.model._data.StreetModelForTest; import org.opentripplanner.street.model.edge.StreetVehicleParkingLink; import org.opentripplanner.street.model.edge.VehicleParkingEdge; @@ -31,10 +33,10 @@ class VehicleParkingUpdaterTest { private DataSource dataSource; private Graph graph; - private TimetableRepository timetableRepository; private DefaultRealTimeUpdateContext realTimeUpdateContext; private VehicleParkingUpdater vehicleParkingUpdater; + private VehicleParkingRepository parkingRepository; @BeforeEach @SuppressWarnings("unchecked") @@ -42,7 +44,8 @@ public void setup() { VehicleParkingTestGraphData graphData = new VehicleParkingTestGraphData(); graphData.initGraph(); graph = graphData.getGraph(); - timetableRepository = graphData.getTimetableRepository(); + TimetableRepository timetableRepository = graphData.getTimetableRepository(); + parkingRepository = new DefaultVehicleParkingRepository(); realTimeUpdateContext = new DefaultRealTimeUpdateContext(graph, timetableRepository); dataSource = (DataSource) Mockito.mock(DataSource.class); @@ -73,12 +76,7 @@ public String configRef() { } }; vehicleParkingUpdater = - new VehicleParkingUpdater( - parameters, - dataSource, - graph.getLinker(), - graph.getVehicleParkingService() - ); + new VehicleParkingUpdater(parameters, dataSource, graph.getLinker(), parkingRepository); } @Test @@ -106,9 +104,9 @@ void updateVehicleParkingTest() { assertVehicleParkingsInGraph(1); - var vehicleParkingInGraph = graph - .getVehicleParkingService() - .getVehicleParkings() + var vehicleParkingInGraph = parkingRepository + .listVehicleParkings() + .stream() .findFirst() .orElseThrow(); assertEquals(vehiclePlaces, vehicleParkingInGraph.getAvailability()); @@ -124,7 +122,7 @@ void updateVehicleParkingTest() { assertVehicleParkingsInGraph(1); vehicleParkingInGraph = - graph.getVehicleParkingService().getVehicleParkings().findFirst().orElseThrow(); + parkingRepository.listVehicleParkings().stream().findFirst().orElseThrow(); assertEquals(vehiclePlaces, vehicleParkingInGraph.getAvailability()); assertEquals(vehiclePlaces, vehicleParkingInGraph.getCapacity()); } @@ -159,7 +157,7 @@ void addNotOperatingVehicleParkingTest() { when(dataSource.getUpdates()).thenReturn(List.of(vehicleParking)); runUpdaterOnce(); - assertEquals(1, graph.getVehicleParkingService().getVehicleParkings().count()); + assertEquals(1, parkingRepository.listVehicleParkings().size()); assertVehicleParkingNotLinked(); } @@ -176,11 +174,10 @@ void updateNotOperatingVehicleParkingTest() { when(dataSource.getUpdates()).thenReturn(List.of(vehicleParking)); runUpdaterOnce(); - var vehicleParkingService = graph.getVehicleParkingService(); - assertEquals(1, vehicleParkingService.getVehicleParkings().count()); + assertEquals(1, parkingRepository.listVehicleParkings().size()); assertEquals( vehiclePlaces, - vehicleParkingService.getVehicleParkings().findFirst().orElseThrow().getAvailability() + parkingRepository.listVehicleParkings().stream().findFirst().orElseThrow().getAvailability() ); assertVehicleParkingNotLinked(); @@ -196,10 +193,10 @@ void updateNotOperatingVehicleParkingTest() { when(dataSource.getUpdates()).thenReturn(List.of(vehicleParking)); runUpdaterOnce(); - assertEquals(1, vehicleParkingService.getVehicleParkings().count()); + assertEquals(1, parkingRepository.listVehicleParkings().size()); assertEquals( vehiclePlaces, - vehicleParkingService.getVehicleParkings().findFirst().orElseThrow().getAvailability() + parkingRepository.listVehicleParkings().stream().findFirst().orElseThrow().getAvailability() ); assertVehicleParkingNotLinked(); } @@ -214,13 +211,12 @@ void deleteNotOperatingVehicleParkingTest() { when(dataSource.getUpdates()).thenReturn(List.of(vehicleParking)); runUpdaterOnce(); - var vehicleParkingService = graph.getVehicleParkingService(); - assertEquals(1, vehicleParkingService.getVehicleParkings().count()); + assertEquals(1, parkingRepository.listVehicleParkings().size()); when(dataSource.getUpdates()).thenReturn(List.of()); runUpdaterOnce(); - assertEquals(0, vehicleParkingService.getVehicleParkings().count()); + assertEquals(0, parkingRepository.listVehicleParkings().size()); } private void assertVehicleParkingsInGraph(int vehicleParkingNumber) { @@ -261,20 +257,13 @@ private void assertVehicleParkingsInGraph(int vehicleParkingNumber) { ); } - assertEquals( - vehicleParkingNumber, - graph.getVehicleParkingService().getVehicleParkings().count() - ); + assertEquals(vehicleParkingNumber, parkingRepository.listVehicleParkings().size()); } private void runUpdaterOnce() { class GraphUpdaterMock extends GraphUpdaterManager { - public GraphUpdaterMock( - Graph graph, - TimetableRepository timetableRepository, - List updaters - ) { + public GraphUpdaterMock(List updaters) { super(realTimeUpdateContext, updaters); } @@ -285,11 +274,7 @@ public Future execute(GraphWriterRunnable runnable) { } } - var graphUpdaterManager = new GraphUpdaterMock( - graph, - timetableRepository, - List.of(vehicleParkingUpdater) - ); + var graphUpdaterManager = new GraphUpdaterMock(List.of(vehicleParkingUpdater)); graphUpdaterManager.startUpdaters(); graphUpdaterManager.stop(false); } diff --git a/application/src/test/resources/gbfs/helsinki/gbfs.json b/application/src/test/resources/gbfs/helsinki/gbfs.json index cad3f88a286..7f4fda298d3 100644 --- a/application/src/test/resources/gbfs/helsinki/gbfs.json +++ b/application/src/test/resources/gbfs/helsinki/gbfs.json @@ -19,4 +19,4 @@ ] } } -} \ No newline at end of file +} diff --git a/application/src/test/resources/gbfs/helsinki/station_information.json b/application/src/test/resources/gbfs/helsinki/station_information.json index 7b39eb6c096..bb20c0ae1c9 100644 --- a/application/src/test/resources/gbfs/helsinki/station_information.json +++ b/application/src/test/resources/gbfs/helsinki/station_information.json @@ -75,4 +75,4 @@ } ] } -} \ No newline at end of file +} diff --git a/application/src/test/resources/gbfs/helsinki/station_status.json b/application/src/test/resources/gbfs/helsinki/station_status.json index a97734b8b0b..375043145cc 100644 --- a/application/src/test/resources/gbfs/helsinki/station_status.json +++ b/application/src/test/resources/gbfs/helsinki/station_status.json @@ -105,4 +105,4 @@ } ] } -} \ No newline at end of file +} diff --git a/application/src/test/resources/gbfs/helsinki/system_information.json b/application/src/test/resources/gbfs/helsinki/system_information.json index 2bb380d81a2..0215fd78268 100644 --- a/application/src/test/resources/gbfs/helsinki/system_information.json +++ b/application/src/test/resources/gbfs/helsinki/system_information.json @@ -7,4 +7,4 @@ "name": "HSL Bikes Share", "timezone": "Europe/Helsinki" } -} \ No newline at end of file +} diff --git a/application/src/test/resources/gbfs/lillestrombysykkel/station_information.json b/application/src/test/resources/gbfs/lillestrombysykkel/station_information.json index 785a96c3b7a..d65fc587e9d 100644 --- a/application/src/test/resources/gbfs/lillestrombysykkel/station_information.json +++ b/application/src/test/resources/gbfs/lillestrombysykkel/station_information.json @@ -54,4 +54,4 @@ } ] } -} \ No newline at end of file +} diff --git a/application/src/test/resources/gbfs/lillestrombysykkel/station_status.json b/application/src/test/resources/gbfs/lillestrombysykkel/station_status.json index 0bd92fb6088..f3cac10ee59 100644 --- a/application/src/test/resources/gbfs/lillestrombysykkel/station_status.json +++ b/application/src/test/resources/gbfs/lillestrombysykkel/station_status.json @@ -114,4 +114,4 @@ } ] } -} \ No newline at end of file +} diff --git a/application/src/test/resources/gbfs/lillestrombysykkel/system_information.json b/application/src/test/resources/gbfs/lillestrombysykkel/system_information.json index 0ea3c6a3bbc..f8331cb1f8c 100644 --- a/application/src/test/resources/gbfs/lillestrombysykkel/system_information.json +++ b/application/src/test/resources/gbfs/lillestrombysykkel/system_information.json @@ -8,4 +8,4 @@ "name": "Lillestrøm bysykkel", "timezone": "Europe/Oslo" } -} \ No newline at end of file +} diff --git a/application/src/test/resources/gbfs/lillestrombysykkel/system_pricing_plans.json b/application/src/test/resources/gbfs/lillestrombysykkel/system_pricing_plans.json index 84aba1c609a..82eb22e4e44 100644 --- a/application/src/test/resources/gbfs/lillestrombysykkel/system_pricing_plans.json +++ b/application/src/test/resources/gbfs/lillestrombysykkel/system_pricing_plans.json @@ -24,4 +24,4 @@ } ] } -} \ No newline at end of file +} diff --git a/application/src/test/resources/gbfs/lillestrombysykkel/vehicle_types.json b/application/src/test/resources/gbfs/lillestrombysykkel/vehicle_types.json index 834380fd87a..3145a2b1672 100644 --- a/application/src/test/resources/gbfs/lillestrombysykkel/vehicle_types.json +++ b/application/src/test/resources/gbfs/lillestrombysykkel/vehicle_types.json @@ -11,4 +11,4 @@ } ] } -} \ No newline at end of file +} diff --git a/application/src/test/resources/gbfs/tieroslo/gbfs.json b/application/src/test/resources/gbfs/tieroslo/gbfs.json index 6ba0c62d3e8..72fd1309db5 100644 --- a/application/src/test/resources/gbfs/tieroslo/gbfs.json +++ b/application/src/test/resources/gbfs/tieroslo/gbfs.json @@ -16,4 +16,4 @@ ] } } -} \ No newline at end of file +} diff --git a/application/src/test/resources/gbfs/tieroslo/geofencing_zones.json b/application/src/test/resources/gbfs/tieroslo/geofencing_zones.json index 19189f4f86b..26700ae9e35 100644 --- a/application/src/test/resources/gbfs/tieroslo/geofencing_zones.json +++ b/application/src/test/resources/gbfs/tieroslo/geofencing_zones.json @@ -26,1722 +26,435 @@ "coordinates": [ [ [ - [ - 10.687577, - 59.917346 - ], - [ - 10.689719, - 59.91757 - ], - [ - 10.693149, - 59.915496 - ], - [ - 10.693549, - 59.915603 - ], - [ - 10.695344, - 59.915406 - ], - [ - 10.696433, - 59.9152 - ], - [ - 10.697358, - 59.914945 - ], - [ - 10.703902, - 59.910901 - ], - [ - 10.704973, - 59.910023 - ], - [ - 10.706125, - 59.910367 - ], - [ - 10.708318, - 59.90981 - ], - [ - 10.709048, - 59.90921 - ], - [ - 10.709194, - 59.907373 - ], - [ - 10.709308, - 59.906807 - ], - [ - 10.710676, - 59.906546 - ], - [ - 10.712482, - 59.906047 - ], - [ - 10.715777, - 59.906964 - ], - [ - 10.717585, - 59.907176 - ], - [ - 10.718362, - 59.907068 - ], - [ - 10.720131, - 59.906389 - ], - [ - 10.722097, - 59.906165 - ], - [ - 10.724074, - 59.907995 - ], - [ - 10.725487, - 59.908637 - ], - [ - 10.726011, - 59.908948 - ], - [ - 10.727579, - 59.909715 - ], - [ - 10.729922, - 59.910772 - ], - [ - 10.731534, - 59.910969 - ], - [ - 10.734022, - 59.910463 - ], - [ - 10.734379, - 59.909063 - ], - [ - 10.734218, - 59.907531 - ], - [ - 10.735753, - 59.905218 - ], - [ - 10.738504, - 59.903317 - ], - [ - 10.741168, - 59.902322 - ], - [ - 10.743451, - 59.902637 - ], - [ - 10.744563, - 59.903929 - ], - [ - 10.74708, - 59.906759 - ], - [ - 10.749004, - 59.907773 - ], - [ - 10.751673, - 59.907154 - ], - [ - 10.75142, - 59.904713 - ], - [ - 10.752924, - 59.904548 - ], - [ - 10.753226, - 59.904059 - ], - [ - 10.753523, - 59.903061 - ], - [ - 10.750778, - 59.901725 - ], - [ - 10.752392, - 59.900919 - ], - [ - 10.75685, - 59.902768 - ], - [ - 10.757897, - 59.902216 - ], - [ - 10.75732, - 59.901444 - ], - [ - 10.756139, - 59.900651 - ], - [ - 10.754918, - 59.898621 - ], - [ - 10.754512, - 59.897874 - ], - [ - 10.754745, - 59.897098 - ], - [ - 10.755141, - 59.896554 - ], - [ - 10.755718, - 59.895909 - ], - [ - 10.755684, - 59.895421 - ], - [ - 10.75486, - 59.894861 - ], - [ - 10.75628, - 59.894047 - ], - [ - 10.757165221094933, - 59.89390175879156 - ], - [ - 10.759106447045964, - 59.89147857906161 - ], - [ - 10.761746326879063, - 59.88890934390498 - ], - [ - 10.764488740333803, - 59.886756017380435 - ], - [ - 10.767790076895182, - 59.884918153072604 - ], - [ - 10.768649096133226, - 59.883717148821795 - ], - [ - 10.774173632442148, - 59.883563457076114 - ], - [ - 10.774906116394662, - 59.88327546158081 - ], - [ - 10.774591630458728, - 59.88282789499579 - ], - [ - 10.776189, - 59.882927 - ], - [ - 10.776783, - 59.882649 - ], - [ - 10.778223, - 59.88239 - ], - [ - 10.779364, - 59.88221 - ], - [ - 10.78106, - 59.88226 - ], - [ - 10.78352, - 59.881761 - ], - [ - 10.784643, - 59.88144 - ], - [ - 10.78564, - 59.880914 - ], - [ - 10.786738, - 59.880499 - ], - [ - 10.78852, - 59.879795 - ], - [ - 10.788919, - 59.879665 - ], - [ - 10.789433, - 59.879383 - ], - [ - 10.790716, - 59.879292 - ], - [ - 10.792192, - 59.879244 - ], - [ - 10.799489, - 59.879952 - ], - [ - 10.80197, - 59.879402 - ], - [ - 10.806901, - 59.87959 - ], - [ - 10.810856, - 59.880185 - ], - [ - 10.805831, - 59.887359 - ], - [ - 10.801735, - 59.892648 - ], - [ - 10.803608, - 59.894296 - ], - [ - 10.804989, - 59.894104 - ], - [ - 10.805318, - 59.893477 - ], - [ - 10.80519, - 59.892795 - ], - [ - 10.805487, - 59.89217 - ], - [ - 10.805705, - 59.891759 - ], - [ - 10.806059, - 59.891418 - ], - [ - 10.80841, - 59.888222 - ], - [ - 10.815093, - 59.887873 - ], - [ - 10.821355, - 59.890048 - ], - [ - 10.822055, - 59.891379 - ], - [ - 10.821592, - 59.894541 - ], - [ - 10.820849, - 59.897019 - ], - [ - 10.82081, - 59.898294 - ], - [ - 10.820285, - 59.899129 - ], - [ - 10.820063, - 59.900453 - ], - [ - 10.819054, - 59.90147 - ], - [ - 10.821037, - 59.903571 - ], - [ - 10.821163, - 59.903519 - ], - [ - 10.822416, - 59.903528 - ], - [ - 10.822439, - 59.903451 - ], - [ - 10.823081, - 59.903455 - ], - [ - 10.823077, - 59.903521 - ], - [ - 10.822077, - 59.904421 - ], - [ - 10.822345, - 59.904619 - ], - [ - 10.82239, - 59.904733 - ], - [ - 10.821725, - 59.905312 - ], - [ - 10.820101, - 59.907008 - ], - [ - 10.820445, - 59.908342 - ], - [ - 10.818684, - 59.911458 - ], - [ - 10.818111, - 59.912228 - ], - [ - 10.823407, - 59.912687 - ], - [ - 10.824883, - 59.913119 - ], - [ - 10.822054, - 59.914982 - ], - [ - 10.820256, - 59.916701 - ], - [ - 10.818784, - 59.917621 - ], - [ - 10.818894, - 59.917652 - ], - [ - 10.818823, - 59.917706 - ], - [ - 10.8184, - 59.917827 - ], - [ - 10.818414, - 59.917968 - ], - [ - 10.818182, - 59.918099 - ], - [ - 10.818195, - 59.918179 - ], - [ - 10.818002, - 59.918324 - ], - [ - 10.818065, - 59.918537 - ], - [ - 10.817746, - 59.918747 - ], - [ - 10.817771853184778, - 59.919060015777795 - ], - [ - 10.817641535436191, - 59.919334313241 - ], - [ - 10.817253369762122, - 59.92016471317217 - ], - [ - 10.817067537520016, - 59.921261284050956 - ], - [ - 10.817737023934322, - 59.922733200931205 - ], - [ - 10.814197529700122, - 59.92460810083015 - ], - [ - 10.810978161382877, - 59.9264397852684 - ], - [ - 10.812405069001775, - 59.92660364907742 - ], - [ - 10.813117506743577, - 59.92712347193087 - ], - [ - 10.813882519011425, - 59.92802623695317 - ], - [ - 10.81558560488797, - 59.92881325879451 - ], - [ - 10.819868304249026, - 59.930211473383615 - ], - [ - 10.824304829920784, - 59.9316174994396 - ], - [ - 10.83025248260097, - 59.93448904912082 - ], - [ - 10.832611785455912, - 59.936347545299554 - ], - [ - 10.829367317734333, - 59.93953928328541 - ], - [ - 10.819790907558911, - 59.940711418196614 - ], - [ - 10.81881548029232, - 59.941866346895225 - ], - [ - 10.81031703932274, - 59.943246252399135 - ], - [ - 10.802510433894849, - 59.94232820122942 - ], - [ - 10.800143, - 59.94264 - ], - [ - 10.797091, - 59.943181 - ], - [ - 10.794973, - 59.947701 - ], - [ - 10.792395, - 59.948248 - ], - [ - 10.794348, - 59.950349 - ], - [ - 10.795747, - 59.9514 - ], - [ - 10.797669, - 59.952565 - ], - [ - 10.79768, - 59.953333 - ], - [ - 10.793784, - 59.95392 - ], - [ - 10.79339, - 59.956074 - ], - [ - 10.797104, - 59.956691 - ], - [ - 10.795132, - 59.959956 - ], - [ - 10.794082, - 59.960799 - ], - [ - 10.793441, - 59.960794 - ], - [ - 10.791472, - 59.960936 - ], - [ - 10.788484, - 59.960297 - ], - [ - 10.786342, - 59.960273 - ], - [ - 10.784512, - 59.96229 - ], - [ - 10.784255, - 59.96301 - ], - [ - 10.785606, - 59.964267 - ], - [ - 10.785628, - 59.965209 - ], - [ - 10.783802, - 59.966468 - ], - [ - 10.781205, - 59.965769 - ], - [ - 10.780721, - 59.966028 - ], - [ - 10.780177, - 59.966117 - ], - [ - 10.77965, - 59.966055 - ], - [ - 10.778763, - 59.965858 - ], - [ - 10.778379, - 59.965797 - ], - [ - 10.777944, - 59.965853 - ], - [ - 10.777004, - 59.966234 - ], - [ - 10.769503, - 59.967927 - ], - [ - 10.766244, - 59.967631 - ], - [ - 10.765191, - 59.965302 - ], - [ - 10.76122, - 59.965685 - ], - [ - 10.754526, - 59.965425 - ], - [ - 10.751988, - 59.9647 - ], - [ - 10.750515, - 59.964404 - ], - [ - 10.748898, - 59.964421 - ], - [ - 10.746719, - 59.964153 - ], - [ - 10.744433, - 59.963341 - ], - [ - 10.739722, - 59.963308 - ], - [ - 10.737243, - 59.963478 - ], - [ - 10.73483, - 59.963531 - ], - [ - 10.734494, - 59.967231 - ], - [ - 10.73258, - 59.968011 - ], - [ - 10.73374, - 59.964376 - ], - [ - 10.733217, - 59.962427 - ], - [ - 10.734604, - 59.961139 - ], - [ - 10.732683, - 59.959511 - ], - [ - 10.732454, - 59.957576 - ], - [ - 10.732339, - 59.956654 - ], - [ - 10.731767, - 59.955778 - ], - [ - 10.729022, - 59.9544 - ], - [ - 10.727162, - 59.953346 - ], - [ - 10.727, - 59.952709 - ], - [ - 10.726269, - 59.951945 - ], - [ - 10.724372, - 59.949613 - ], - [ - 10.722744, - 59.948744 - ], - [ - 10.720964, - 59.947867 - ], - [ - 10.719147, - 59.947458 - ], - [ - 10.716952, - 59.947768 - ], - [ - 10.717625, - 59.950161 - ], - [ - 10.716953304599347, - 59.95123857393473 - ], - [ - 10.716361743887454, - 59.951196807911636 - ], - [ - 10.714308, - 59.950961 - ], - [ - 10.7123, - 59.950721 - ], - [ - 10.711077, - 59.950103 - ], - [ - 10.710495, - 59.950611 - ], - [ - 10.70858, - 59.950256 - ], - [ - 10.706861, - 59.949741 - ], - [ - 10.708201, - 59.952176 - ], - [ - 10.708676, - 59.954882 - ], - [ - 10.708067, - 59.95738 - ], - [ - 10.7072, - 59.958238 - ], - [ - 10.705126, - 59.958376 - ], - [ - 10.703478, - 59.958013 - ], - [ - 10.700792, - 59.957345 - ], - [ - 10.697309, - 59.957191 - ], - [ - 10.695678, - 59.955528 - ], - [ - 10.694974, - 59.954029 - ], - [ - 10.694844, - 59.953168 - ], - [ - 10.693603, - 59.952752 - ], - [ - 10.692661, - 59.953666 - ], - [ - 10.691528, - 59.95491 - ], - [ - 10.690429, - 59.956215 - ], - [ - 10.690447, - 59.959074 - ], - [ - 10.689576, - 59.959484 - ], - [ - 10.685242, - 59.959649 - ], - [ - 10.680987, - 59.959724 - ], - [ - 10.678302, - 59.959411 - ], - [ - 10.676037, - 59.958745 - ], - [ - 10.674125216549873, - 59.957909368938346 - ], - [ - 10.67322992850205, - 59.95743845698356 - ], - [ - 10.672213433099746, - 59.957073737876684 - ], - [ - 10.666666, - 59.956539 - ], - [ - 10.664284, - 59.956772 - ], - [ - 10.662673, - 59.956543 - ], - [ - 10.65942, - 59.955745 - ], - [ - 10.658216, - 59.955569 - ], - [ - 10.654555, - 59.956926 - ], - [ - 10.65292, - 59.957484 - ], - [ - 10.651637, - 59.958384 - ], - [ - 10.651486, - 59.959286 - ], - [ - 10.650796, - 59.95996 - ], - [ - 10.647778, - 59.961542 - ], - [ - 10.64712, - 59.962482 - ], - [ - 10.646076, - 59.9629 - ], - [ - 10.640822, - 59.96219 - ], - [ - 10.639926, - 59.961995 - ], - [ - 10.630801, - 59.961333 - ], - [ - 10.632761, - 59.954949 - ], - [ - 10.634492, - 59.952681 - ], - [ - 10.634186, - 59.952483 - ], - [ - 10.633764, - 59.952135 - ], - [ - 10.634263, - 59.951901 - ], - [ - 10.634572, - 59.951578 - ], - [ - 10.63479, - 59.95062 - ], - [ - 10.635518, - 59.949692 - ], - [ - 10.635869, - 59.947503 - ], - [ - 10.635935, - 59.946419 - ], - [ - 10.636382, - 59.945364 - ], - [ - 10.635548, - 59.944527 - ], - [ - 10.634821, - 59.94371 - ], - [ - 10.633683, - 59.943055 - ], - [ - 10.633628, - 59.942171 - ], - [ - 10.633083, - 59.941489 - ], - [ - 10.63261, - 59.940036 - ], - [ - 10.632291, - 59.938903 - ], - [ - 10.633838, - 59.937789 - ], - [ - 10.634985, - 59.936781 - ], - [ - 10.635825, - 59.935926 - ], - [ - 10.634147, - 59.933758 - ], - [ - 10.633299, - 59.93226 - ], - [ - 10.631951, - 59.931097 - ], - [ - 10.629841, - 59.93033 - ], - [ - 10.627535, - 59.929842 - ], - [ - 10.627202, - 59.929558 - ], - [ - 10.62783, - 59.928948 - ], - [ - 10.62824, - 59.928668 - ], - [ - 10.627808, - 59.927866 - ], - [ - 10.62595, - 59.927039 - ], - [ - 10.625788, - 59.926851 - ], - [ - 10.626434, - 59.926353 - ], - [ - 10.62701, - 59.926144 - ], - [ - 10.627806, - 59.925847 - ], - [ - 10.628272, - 59.925301 - ], - [ - 10.627081, - 59.92463 - ], - [ - 10.626299, - 59.924299 - ], - [ - 10.625889, - 59.923806 - ], - [ - 10.625752, - 59.923353 - ], - [ - 10.625976, - 59.922638 - ], - [ - 10.627122, - 59.922431 - ], - [ - 10.627907, - 59.922338 - ], - [ - 10.628355, - 59.922162 - ], - [ - 10.628967, - 59.922014 - ], - [ - 10.629751, - 59.921695 - ], - [ - 10.630176, - 59.921335 - ], - [ - 10.629969, - 59.920491 - ], - [ - 10.63008, - 59.920209 - ], - [ - 10.630297, - 59.91959 - ], - [ - 10.63057, - 59.919256 - ], - [ - 10.630619, - 59.918453 - ], - [ - 10.631062, - 59.918122 - ], - [ - 10.631561, - 59.918051 - ], - [ - 10.632437, - 59.918529 - ], - [ - 10.632973, - 59.918476 - ], - [ - 10.633472, - 59.918293 - ], - [ - 10.634406, - 59.917735 - ], - [ - 10.634705, - 59.917042 - ], - [ - 10.634257, - 59.916489 - ], - [ - 10.633487, - 59.916275 - ], - [ - 10.63336, - 59.916172 - ], - [ - 10.63331, - 59.91598 - ], - [ - 10.633315, - 59.914699 - ], - [ - 10.634435, - 59.914175 - ], - [ - 10.635022, - 59.914218 - ], - [ - 10.635022, - 59.914623 - ], - [ - 10.635539, - 59.914922 - ], - [ - 10.63602, - 59.914995 - ], - [ - 10.636347, - 59.914927 - ], - [ - 10.638346, - 59.914527 - ], - [ - 10.640538, - 59.914083 - ], - [ - 10.64214, - 59.911986 - ], - [ - 10.64676, - 59.91294 - ], - [ - 10.649693, - 59.91406 - ], - [ - 10.649041, - 59.91244 - ], - [ - 10.65145, - 59.912597 - ], - [ - 10.652128, - 59.913311 - ], - [ - 10.654842, - 59.914189 - ], - [ - 10.656544, - 59.914563 - ], - [ - 10.65577, - 59.915611 - ], - [ - 10.655881, - 59.91591 - ], - [ - 10.657296, - 59.916305 - ], - [ - 10.660673, - 59.916977 - ], - [ - 10.66344, - 59.917713 - ], - [ - 10.664669, - 59.917915 - ], - [ - 10.666225, - 59.918045 - ], - [ - 10.667923, - 59.918365 - ], - [ - 10.671949, - 59.919449 - ], - [ - 10.672596, - 59.919468 - ], - [ - 10.67297, - 59.919106 - ], - [ - 10.67254, - 59.918542 - ], - [ - 10.67034, - 59.916935 - ], - [ - 10.667644, - 59.915772 - ], - [ - 10.666052, - 59.91499 - ], - [ - 10.66424, - 59.914329 - ], - [ - 10.662968, - 59.913975 - ], - [ - 10.662679, - 59.912894 - ], - [ - 10.662802, - 59.91271 - ], - [ - 10.662855, - 59.912525 - ], - [ - 10.662892, - 59.912248 - ], - [ - 10.663268, - 59.912123 - ], - [ - 10.663674, - 59.911903 - ], - [ - 10.663718, - 59.911682 - ], - [ - 10.666089, - 59.911342 - ], - [ - 10.666437, - 59.911073 - ], - [ - 10.666612, - 59.910603 - ], - [ - 10.667331, - 59.910313 - ], - [ - 10.666122, - 59.909331 - ], - [ - 10.665722, - 59.908822 - ], - [ - 10.664803, - 59.908294 - ], - [ - 10.663568, - 59.907353 - ], - [ - 10.664236, - 59.90647 - ], - [ - 10.664365, - 59.905735 - ], - [ - 10.664373, - 59.90399 - ], - [ - 10.664338, - 59.902448 - ], - [ - 10.666901, - 59.90081 - ], - [ - 10.668391, - 59.899236 - ], - [ - 10.668717, - 59.898815 - ], - [ - 10.669702, - 59.89854 - ], - [ - 10.670936, - 59.898469 - ], - [ - 10.671516, - 59.89844 - ], - [ - 10.672208, - 59.898521 - ], - [ - 10.672678, - 59.898752 - ], - [ - 10.673036, - 59.898886 - ], - [ - 10.672998, - 59.898393 - ], - [ - 10.673574, - 59.898072 - ], - [ - 10.674904, - 59.898919 - ], - [ - 10.675568, - 59.898951 - ], - [ - 10.676719, - 59.900216 - ], - [ - 10.677554, - 59.900122 - ], - [ - 10.678753, - 59.898899 - ], - [ - 10.677605, - 59.89743 - ], - [ - 10.677497, - 59.896483 - ], - [ - 10.682677, - 59.897315 - ], - [ - 10.684746, - 59.897508 - ], - [ - 10.685371, - 59.898127 - ], - [ - 10.685312, - 59.898734 - ], - [ - 10.688495, - 59.899716 - ], - [ - 10.694208, - 59.901146 - ], - [ - 10.698902, - 59.902867 - ], - [ - 10.697001, - 59.904053 - ], - [ - 10.692517, - 59.902632 - ], - [ - 10.691911, - 59.902705 - ], - [ - 10.687294, - 59.901715 - ], - [ - 10.686957, - 59.902824 - ], - [ - 10.687309, - 59.90323 - ], - [ - 10.689902, - 59.903918 - ], - [ - 10.693765, - 59.90566 - ], - [ - 10.694209, - 59.906718 - ], - [ - 10.696105, - 59.90734 - ], - [ - 10.695788, - 59.907558 - ], - [ - 10.694281, - 59.907216 - ], - [ - 10.693907, - 59.907558 - ], - [ - 10.693459, - 59.907877 - ], - [ - 10.693087, - 59.908858 - ], - [ - 10.690732, - 59.909233 - ], - [ - 10.691793, - 59.909689 - ], - [ - 10.692658, - 59.910216 - ], - [ - 10.692771, - 59.910641 - ], - [ - 10.693086, - 59.910997 - ], - [ - 10.693085, - 59.91143 - ], - [ - 10.69305, - 59.911802 - ], - [ - 10.692947, - 59.912254 - ], - [ - 10.692032, - 59.913482 - ], - [ - 10.68968, - 59.915085 - ], - [ - 10.687044, - 59.915443 - ], - [ - 10.687544, - 59.916644 - ], - [ - 10.687577, - 59.917346 - ] + [10.687577, 59.917346], + [10.689719, 59.91757], + [10.693149, 59.915496], + [10.693549, 59.915603], + [10.695344, 59.915406], + [10.696433, 59.9152], + [10.697358, 59.914945], + [10.703902, 59.910901], + [10.704973, 59.910023], + [10.706125, 59.910367], + [10.708318, 59.90981], + [10.709048, 59.90921], + [10.709194, 59.907373], + [10.709308, 59.906807], + [10.710676, 59.906546], + [10.712482, 59.906047], + [10.715777, 59.906964], + [10.717585, 59.907176], + [10.718362, 59.907068], + [10.720131, 59.906389], + [10.722097, 59.906165], + [10.724074, 59.907995], + [10.725487, 59.908637], + [10.726011, 59.908948], + [10.727579, 59.909715], + [10.729922, 59.910772], + [10.731534, 59.910969], + [10.734022, 59.910463], + [10.734379, 59.909063], + [10.734218, 59.907531], + [10.735753, 59.905218], + [10.738504, 59.903317], + [10.741168, 59.902322], + [10.743451, 59.902637], + [10.744563, 59.903929], + [10.74708, 59.906759], + [10.749004, 59.907773], + [10.751673, 59.907154], + [10.75142, 59.904713], + [10.752924, 59.904548], + [10.753226, 59.904059], + [10.753523, 59.903061], + [10.750778, 59.901725], + [10.752392, 59.900919], + [10.75685, 59.902768], + [10.757897, 59.902216], + [10.75732, 59.901444], + [10.756139, 59.900651], + [10.754918, 59.898621], + [10.754512, 59.897874], + [10.754745, 59.897098], + [10.755141, 59.896554], + [10.755718, 59.895909], + [10.755684, 59.895421], + [10.75486, 59.894861], + [10.75628, 59.894047], + [10.757165221094933, 59.89390175879156], + [10.759106447045964, 59.89147857906161], + [10.761746326879063, 59.88890934390498], + [10.764488740333803, 59.886756017380435], + [10.767790076895182, 59.884918153072604], + [10.768649096133226, 59.883717148821795], + [10.774173632442148, 59.883563457076114], + [10.774906116394662, 59.88327546158081], + [10.774591630458728, 59.88282789499579], + [10.776189, 59.882927], + [10.776783, 59.882649], + [10.778223, 59.88239], + [10.779364, 59.88221], + [10.78106, 59.88226], + [10.78352, 59.881761], + [10.784643, 59.88144], + [10.78564, 59.880914], + [10.786738, 59.880499], + [10.78852, 59.879795], + [10.788919, 59.879665], + [10.789433, 59.879383], + [10.790716, 59.879292], + [10.792192, 59.879244], + [10.799489, 59.879952], + [10.80197, 59.879402], + [10.806901, 59.87959], + [10.810856, 59.880185], + [10.805831, 59.887359], + [10.801735, 59.892648], + [10.803608, 59.894296], + [10.804989, 59.894104], + [10.805318, 59.893477], + [10.80519, 59.892795], + [10.805487, 59.89217], + [10.805705, 59.891759], + [10.806059, 59.891418], + [10.80841, 59.888222], + [10.815093, 59.887873], + [10.821355, 59.890048], + [10.822055, 59.891379], + [10.821592, 59.894541], + [10.820849, 59.897019], + [10.82081, 59.898294], + [10.820285, 59.899129], + [10.820063, 59.900453], + [10.819054, 59.90147], + [10.821037, 59.903571], + [10.821163, 59.903519], + [10.822416, 59.903528], + [10.822439, 59.903451], + [10.823081, 59.903455], + [10.823077, 59.903521], + [10.822077, 59.904421], + [10.822345, 59.904619], + [10.82239, 59.904733], + [10.821725, 59.905312], + [10.820101, 59.907008], + [10.820445, 59.908342], + [10.818684, 59.911458], + [10.818111, 59.912228], + [10.823407, 59.912687], + [10.824883, 59.913119], + [10.822054, 59.914982], + [10.820256, 59.916701], + [10.818784, 59.917621], + [10.818894, 59.917652], + [10.818823, 59.917706], + [10.8184, 59.917827], + [10.818414, 59.917968], + [10.818182, 59.918099], + [10.818195, 59.918179], + [10.818002, 59.918324], + [10.818065, 59.918537], + [10.817746, 59.918747], + [10.817771853184778, 59.919060015777795], + [10.817641535436191, 59.919334313241], + [10.817253369762122, 59.92016471317217], + [10.817067537520016, 59.921261284050956], + [10.817737023934322, 59.922733200931205], + [10.814197529700122, 59.92460810083015], + [10.810978161382877, 59.9264397852684], + [10.812405069001775, 59.92660364907742], + [10.813117506743577, 59.92712347193087], + [10.813882519011425, 59.92802623695317], + [10.81558560488797, 59.92881325879451], + [10.819868304249026, 59.930211473383615], + [10.824304829920784, 59.9316174994396], + [10.83025248260097, 59.93448904912082], + [10.832611785455912, 59.936347545299554], + [10.829367317734333, 59.93953928328541], + [10.819790907558911, 59.940711418196614], + [10.81881548029232, 59.941866346895225], + [10.81031703932274, 59.943246252399135], + [10.802510433894849, 59.94232820122942], + [10.800143, 59.94264], + [10.797091, 59.943181], + [10.794973, 59.947701], + [10.792395, 59.948248], + [10.794348, 59.950349], + [10.795747, 59.9514], + [10.797669, 59.952565], + [10.79768, 59.953333], + [10.793784, 59.95392], + [10.79339, 59.956074], + [10.797104, 59.956691], + [10.795132, 59.959956], + [10.794082, 59.960799], + [10.793441, 59.960794], + [10.791472, 59.960936], + [10.788484, 59.960297], + [10.786342, 59.960273], + [10.784512, 59.96229], + [10.784255, 59.96301], + [10.785606, 59.964267], + [10.785628, 59.965209], + [10.783802, 59.966468], + [10.781205, 59.965769], + [10.780721, 59.966028], + [10.780177, 59.966117], + [10.77965, 59.966055], + [10.778763, 59.965858], + [10.778379, 59.965797], + [10.777944, 59.965853], + [10.777004, 59.966234], + [10.769503, 59.967927], + [10.766244, 59.967631], + [10.765191, 59.965302], + [10.76122, 59.965685], + [10.754526, 59.965425], + [10.751988, 59.9647], + [10.750515, 59.964404], + [10.748898, 59.964421], + [10.746719, 59.964153], + [10.744433, 59.963341], + [10.739722, 59.963308], + [10.737243, 59.963478], + [10.73483, 59.963531], + [10.734494, 59.967231], + [10.73258, 59.968011], + [10.73374, 59.964376], + [10.733217, 59.962427], + [10.734604, 59.961139], + [10.732683, 59.959511], + [10.732454, 59.957576], + [10.732339, 59.956654], + [10.731767, 59.955778], + [10.729022, 59.9544], + [10.727162, 59.953346], + [10.727, 59.952709], + [10.726269, 59.951945], + [10.724372, 59.949613], + [10.722744, 59.948744], + [10.720964, 59.947867], + [10.719147, 59.947458], + [10.716952, 59.947768], + [10.717625, 59.950161], + [10.716953304599347, 59.95123857393473], + [10.716361743887454, 59.951196807911636], + [10.714308, 59.950961], + [10.7123, 59.950721], + [10.711077, 59.950103], + [10.710495, 59.950611], + [10.70858, 59.950256], + [10.706861, 59.949741], + [10.708201, 59.952176], + [10.708676, 59.954882], + [10.708067, 59.95738], + [10.7072, 59.958238], + [10.705126, 59.958376], + [10.703478, 59.958013], + [10.700792, 59.957345], + [10.697309, 59.957191], + [10.695678, 59.955528], + [10.694974, 59.954029], + [10.694844, 59.953168], + [10.693603, 59.952752], + [10.692661, 59.953666], + [10.691528, 59.95491], + [10.690429, 59.956215], + [10.690447, 59.959074], + [10.689576, 59.959484], + [10.685242, 59.959649], + [10.680987, 59.959724], + [10.678302, 59.959411], + [10.676037, 59.958745], + [10.674125216549873, 59.957909368938346], + [10.67322992850205, 59.95743845698356], + [10.672213433099746, 59.957073737876684], + [10.666666, 59.956539], + [10.664284, 59.956772], + [10.662673, 59.956543], + [10.65942, 59.955745], + [10.658216, 59.955569], + [10.654555, 59.956926], + [10.65292, 59.957484], + [10.651637, 59.958384], + [10.651486, 59.959286], + [10.650796, 59.95996], + [10.647778, 59.961542], + [10.64712, 59.962482], + [10.646076, 59.9629], + [10.640822, 59.96219], + [10.639926, 59.961995], + [10.630801, 59.961333], + [10.632761, 59.954949], + [10.634492, 59.952681], + [10.634186, 59.952483], + [10.633764, 59.952135], + [10.634263, 59.951901], + [10.634572, 59.951578], + [10.63479, 59.95062], + [10.635518, 59.949692], + [10.635869, 59.947503], + [10.635935, 59.946419], + [10.636382, 59.945364], + [10.635548, 59.944527], + [10.634821, 59.94371], + [10.633683, 59.943055], + [10.633628, 59.942171], + [10.633083, 59.941489], + [10.63261, 59.940036], + [10.632291, 59.938903], + [10.633838, 59.937789], + [10.634985, 59.936781], + [10.635825, 59.935926], + [10.634147, 59.933758], + [10.633299, 59.93226], + [10.631951, 59.931097], + [10.629841, 59.93033], + [10.627535, 59.929842], + [10.627202, 59.929558], + [10.62783, 59.928948], + [10.62824, 59.928668], + [10.627808, 59.927866], + [10.62595, 59.927039], + [10.625788, 59.926851], + [10.626434, 59.926353], + [10.62701, 59.926144], + [10.627806, 59.925847], + [10.628272, 59.925301], + [10.627081, 59.92463], + [10.626299, 59.924299], + [10.625889, 59.923806], + [10.625752, 59.923353], + [10.625976, 59.922638], + [10.627122, 59.922431], + [10.627907, 59.922338], + [10.628355, 59.922162], + [10.628967, 59.922014], + [10.629751, 59.921695], + [10.630176, 59.921335], + [10.629969, 59.920491], + [10.63008, 59.920209], + [10.630297, 59.91959], + [10.63057, 59.919256], + [10.630619, 59.918453], + [10.631062, 59.918122], + [10.631561, 59.918051], + [10.632437, 59.918529], + [10.632973, 59.918476], + [10.633472, 59.918293], + [10.634406, 59.917735], + [10.634705, 59.917042], + [10.634257, 59.916489], + [10.633487, 59.916275], + [10.63336, 59.916172], + [10.63331, 59.91598], + [10.633315, 59.914699], + [10.634435, 59.914175], + [10.635022, 59.914218], + [10.635022, 59.914623], + [10.635539, 59.914922], + [10.63602, 59.914995], + [10.636347, 59.914927], + [10.638346, 59.914527], + [10.640538, 59.914083], + [10.64214, 59.911986], + [10.64676, 59.91294], + [10.649693, 59.91406], + [10.649041, 59.91244], + [10.65145, 59.912597], + [10.652128, 59.913311], + [10.654842, 59.914189], + [10.656544, 59.914563], + [10.65577, 59.915611], + [10.655881, 59.91591], + [10.657296, 59.916305], + [10.660673, 59.916977], + [10.66344, 59.917713], + [10.664669, 59.917915], + [10.666225, 59.918045], + [10.667923, 59.918365], + [10.671949, 59.919449], + [10.672596, 59.919468], + [10.67297, 59.919106], + [10.67254, 59.918542], + [10.67034, 59.916935], + [10.667644, 59.915772], + [10.666052, 59.91499], + [10.66424, 59.914329], + [10.662968, 59.913975], + [10.662679, 59.912894], + [10.662802, 59.91271], + [10.662855, 59.912525], + [10.662892, 59.912248], + [10.663268, 59.912123], + [10.663674, 59.911903], + [10.663718, 59.911682], + [10.666089, 59.911342], + [10.666437, 59.911073], + [10.666612, 59.910603], + [10.667331, 59.910313], + [10.666122, 59.909331], + [10.665722, 59.908822], + [10.664803, 59.908294], + [10.663568, 59.907353], + [10.664236, 59.90647], + [10.664365, 59.905735], + [10.664373, 59.90399], + [10.664338, 59.902448], + [10.666901, 59.90081], + [10.668391, 59.899236], + [10.668717, 59.898815], + [10.669702, 59.89854], + [10.670936, 59.898469], + [10.671516, 59.89844], + [10.672208, 59.898521], + [10.672678, 59.898752], + [10.673036, 59.898886], + [10.672998, 59.898393], + [10.673574, 59.898072], + [10.674904, 59.898919], + [10.675568, 59.898951], + [10.676719, 59.900216], + [10.677554, 59.900122], + [10.678753, 59.898899], + [10.677605, 59.89743], + [10.677497, 59.896483], + [10.682677, 59.897315], + [10.684746, 59.897508], + [10.685371, 59.898127], + [10.685312, 59.898734], + [10.688495, 59.899716], + [10.694208, 59.901146], + [10.698902, 59.902867], + [10.697001, 59.904053], + [10.692517, 59.902632], + [10.691911, 59.902705], + [10.687294, 59.901715], + [10.686957, 59.902824], + [10.687309, 59.90323], + [10.689902, 59.903918], + [10.693765, 59.90566], + [10.694209, 59.906718], + [10.696105, 59.90734], + [10.695788, 59.907558], + [10.694281, 59.907216], + [10.693907, 59.907558], + [10.693459, 59.907877], + [10.693087, 59.908858], + [10.690732, 59.909233], + [10.691793, 59.909689], + [10.692658, 59.910216], + [10.692771, 59.910641], + [10.693086, 59.910997], + [10.693085, 59.91143], + [10.69305, 59.911802], + [10.692947, 59.912254], + [10.692032, 59.913482], + [10.68968, 59.915085], + [10.687044, 59.915443], + [10.687544, 59.916644], + [10.687577, 59.917346] ] ] ] @@ -1767,538 +480,139 @@ "coordinates": [ [ [ - [ - 10.708611, - 59.925037 - ], - [ - 10.710421, - 59.926146 - ], - [ - 10.711554, - 59.926854 - ], - [ - 10.708529, - 59.927892 - ], - [ - 10.707201, - 59.92841 - ], - [ - 10.706745, - 59.928559 - ], - [ - 10.706106, - 59.928492 - ], - [ - 10.706014, - 59.928846 - ], - [ - 10.706405, - 59.929097 - ], - [ - 10.70664, - 59.92958 - ], - [ - 10.706775, - 59.929681 - ], - [ - 10.706859, - 59.929941 - ], - [ - 10.707147, - 59.930235 - ], - [ - 10.70715, - 59.930376 - ], - [ - 10.70715, - 59.930477 - ], - [ - 10.706916, - 59.930666 - ], - [ - 10.706978, - 59.930341 - ], - [ - 10.706758, - 59.930177 - ], - [ - 10.706167, - 59.93003 - ], - [ - 10.705945, - 59.930157 - ], - [ - 10.704796, - 59.930488 - ], - [ - 10.703563, - 59.930424 - ], - [ - 10.701887, - 59.930109 - ], - [ - 10.701477, - 59.930108 - ], - [ - 10.701197, - 59.93012 - ], - [ - 10.700728, - 59.930271 - ], - [ - 10.700423, - 59.930114 - ], - [ - 10.699743, - 59.929839 - ], - [ - 10.698705, - 59.929562 - ], - [ - 10.697002, - 59.929257 - ], - [ - 10.695299, - 59.929069 - ], - [ - 10.693864, - 59.9301 - ], - [ - 10.693765, - 59.929788 - ], - [ - 10.69312, - 59.929715 - ], - [ - 10.692991, - 59.929577 - ], - [ - 10.692781, - 59.929426 - ], - [ - 10.692649, - 59.929149 - ], - [ - 10.690892, - 59.928511 - ], - [ - 10.689455, - 59.928667 - ], - [ - 10.689256, - 59.928503 - ], - [ - 10.688056, - 59.928913 - ], - [ - 10.688308, - 59.928455 - ], - [ - 10.688322, - 59.927437 - ], - [ - 10.6882, - 59.92726 - ], - [ - 10.687977, - 59.927132 - ], - [ - 10.686372, - 59.926403 - ], - [ - 10.685361, - 59.925709 - ], - [ - 10.685413, - 59.925398 - ], - [ - 10.686845, - 59.924708 - ], - [ - 10.687428, - 59.924598 - ], - [ - 10.68836, - 59.924319 - ], - [ - 10.689365, - 59.92514 - ], - [ - 10.690181, - 59.924913 - ], - [ - 10.691551, - 59.926037 - ], - [ - 10.691175, - 59.926257 - ], - [ - 10.691406, - 59.926521 - ], - [ - 10.691672, - 59.926558 - ], - [ - 10.691904, - 59.92651 - ], - [ - 10.691996, - 59.926328 - ], - [ - 10.692174, - 59.926046 - ], - [ - 10.692962, - 59.925435 - ], - [ - 10.695119, - 59.925454 - ], - [ - 10.695092, - 59.926223 - ], - [ - 10.696203, - 59.927011 - ], - [ - 10.697195, - 59.927393 - ], - [ - 10.697659, - 59.927373 - ], - [ - 10.697755, - 59.927388 - ], - [ - 10.697895, - 59.927363 - ], - [ - 10.697938, - 59.927109 - ], - [ - 10.697925, - 59.926836 - ], - [ - 10.698022, - 59.926771 - ], - [ - 10.698009, - 59.926638 - ], - [ - 10.698007, - 59.926075 - ], - [ - 10.697944, - 59.925487 - ], - [ - 10.698123, - 59.925005 - ], - [ - 10.698141, - 59.924788 - ], - [ - 10.697858, - 59.924587 - ], - [ - 10.697884, - 59.924382 - ], - [ - 10.69796, - 59.924008 - ], - [ - 10.697985, - 59.923959 - ], - [ - 10.697985, - 59.923924 - ], - [ - 10.697971, - 59.923892 - ], - [ - 10.698013, - 59.923875 - ], - [ - 10.698029, - 59.923859 - ], - [ - 10.698038, - 59.923818 - ], - [ - 10.69804, - 59.923801 - ], - [ - 10.698029, - 59.92378 - ], - [ - 10.698014, - 59.923748 - ], - [ - 10.697866, - 59.92372 - ], - [ - 10.69693, - 59.923741 - ], - [ - 10.695022, - 59.923042 - ], - [ - 10.693212, - 59.922751 - ], - [ - 10.69208, - 59.922151 - ], - [ - 10.690058, - 59.921156 - ], - [ - 10.691843, - 59.920241 - ], - [ - 10.69467, - 59.921056 - ], - [ - 10.695619, - 59.921537 - ], - [ - 10.696359, - 59.922142 - ], - [ - 10.697861, - 59.923276 - ], - [ - 10.69825, - 59.923495 - ], - [ - 10.698502, - 59.923519 - ], - [ - 10.6986, - 59.92353 - ], - [ - 10.698673, - 59.923527 - ], - [ - 10.698737, - 59.923521 - ], - [ - 10.698789, - 59.92351 - ], - [ - 10.698868, - 59.92348 - ], - [ - 10.699029, - 59.923386 - ], - [ - 10.699408, - 59.923512 - ], - [ - 10.699998, - 59.923536 - ], - [ - 10.700497, - 59.923551 - ], - [ - 10.700976, - 59.923514 - ], - [ - 10.701528, - 59.923438 - ], - [ - 10.702418, - 59.923253 - ], - [ - 10.703044, - 59.923132 - ], - [ - 10.703605, - 59.923008 - ], - [ - 10.704098, - 59.922928 - ], - [ - 10.704186, - 59.922934 - ], - [ - 10.704307, - 59.922921 - ], - [ - 10.704602, - 59.922899 - ], - [ - 10.70489, - 59.922898 - ], - [ - 10.705659, - 59.923388 - ], - [ - 10.706335, - 59.923788 - ], - [ - 10.706632, - 59.92394 - ], - [ - 10.707189, - 59.924234 - ], - [ - 10.70738, - 59.924331 - ], - [ - 10.707741, - 59.924549 - ], - [ - 10.707929, - 59.924627 - ], - [ - 10.708104, - 59.924722 - ], - [ - 10.708288, - 59.924831 - ], - [ - 10.708416, - 59.924911 - ], - [ - 10.708509, - 59.924953 - ], - [ - 10.70854, - 59.92499 - ], - [ - 10.708611, - 59.925037 - ] + [10.708611, 59.925037], + [10.710421, 59.926146], + [10.711554, 59.926854], + [10.708529, 59.927892], + [10.707201, 59.92841], + [10.706745, 59.928559], + [10.706106, 59.928492], + [10.706014, 59.928846], + [10.706405, 59.929097], + [10.70664, 59.92958], + [10.706775, 59.929681], + [10.706859, 59.929941], + [10.707147, 59.930235], + [10.70715, 59.930376], + [10.70715, 59.930477], + [10.706916, 59.930666], + [10.706978, 59.930341], + [10.706758, 59.930177], + [10.706167, 59.93003], + [10.705945, 59.930157], + [10.704796, 59.930488], + [10.703563, 59.930424], + [10.701887, 59.930109], + [10.701477, 59.930108], + [10.701197, 59.93012], + [10.700728, 59.930271], + [10.700423, 59.930114], + [10.699743, 59.929839], + [10.698705, 59.929562], + [10.697002, 59.929257], + [10.695299, 59.929069], + [10.693864, 59.9301], + [10.693765, 59.929788], + [10.69312, 59.929715], + [10.692991, 59.929577], + [10.692781, 59.929426], + [10.692649, 59.929149], + [10.690892, 59.928511], + [10.689455, 59.928667], + [10.689256, 59.928503], + [10.688056, 59.928913], + [10.688308, 59.928455], + [10.688322, 59.927437], + [10.6882, 59.92726], + [10.687977, 59.927132], + [10.686372, 59.926403], + [10.685361, 59.925709], + [10.685413, 59.925398], + [10.686845, 59.924708], + [10.687428, 59.924598], + [10.68836, 59.924319], + [10.689365, 59.92514], + [10.690181, 59.924913], + [10.691551, 59.926037], + [10.691175, 59.926257], + [10.691406, 59.926521], + [10.691672, 59.926558], + [10.691904, 59.92651], + [10.691996, 59.926328], + [10.692174, 59.926046], + [10.692962, 59.925435], + [10.695119, 59.925454], + [10.695092, 59.926223], + [10.696203, 59.927011], + [10.697195, 59.927393], + [10.697659, 59.927373], + [10.697755, 59.927388], + [10.697895, 59.927363], + [10.697938, 59.927109], + [10.697925, 59.926836], + [10.698022, 59.926771], + [10.698009, 59.926638], + [10.698007, 59.926075], + [10.697944, 59.925487], + [10.698123, 59.925005], + [10.698141, 59.924788], + [10.697858, 59.924587], + [10.697884, 59.924382], + [10.69796, 59.924008], + [10.697985, 59.923959], + [10.697985, 59.923924], + [10.697971, 59.923892], + [10.698013, 59.923875], + [10.698029, 59.923859], + [10.698038, 59.923818], + [10.69804, 59.923801], + [10.698029, 59.92378], + [10.698014, 59.923748], + [10.697866, 59.92372], + [10.69693, 59.923741], + [10.695022, 59.923042], + [10.693212, 59.922751], + [10.69208, 59.922151], + [10.690058, 59.921156], + [10.691843, 59.920241], + [10.69467, 59.921056], + [10.695619, 59.921537], + [10.696359, 59.922142], + [10.697861, 59.923276], + [10.69825, 59.923495], + [10.698502, 59.923519], + [10.6986, 59.92353], + [10.698673, 59.923527], + [10.698737, 59.923521], + [10.698789, 59.92351], + [10.698868, 59.92348], + [10.699029, 59.923386], + [10.699408, 59.923512], + [10.699998, 59.923536], + [10.700497, 59.923551], + [10.700976, 59.923514], + [10.701528, 59.923438], + [10.702418, 59.923253], + [10.703044, 59.923132], + [10.703605, 59.923008], + [10.704098, 59.922928], + [10.704186, 59.922934], + [10.704307, 59.922921], + [10.704602, 59.922899], + [10.70489, 59.922898], + [10.705659, 59.923388], + [10.706335, 59.923788], + [10.706632, 59.92394], + [10.707189, 59.924234], + [10.70738, 59.924331], + [10.707741, 59.924549], + [10.707929, 59.924627], + [10.708104, 59.924722], + [10.708288, 59.924831], + [10.708416, 59.924911], + [10.708509, 59.924953], + [10.70854, 59.92499], + [10.708611, 59.925037] ] ] ] @@ -2307,4 +621,4 @@ ] } } -} \ No newline at end of file +} diff --git a/application/src/test/resources/gbfs/tieroslo/system_information.json b/application/src/test/resources/gbfs/tieroslo/system_information.json index e3227e3f8f0..b8d6e9eea50 100644 --- a/application/src/test/resources/gbfs/tieroslo/system_information.json +++ b/application/src/test/resources/gbfs/tieroslo/system_information.json @@ -19,4 +19,4 @@ } } } -} \ No newline at end of file +} diff --git a/application/src/test/resources/netex/nordic/build-config.json b/application/src/test/resources/netex/nordic/build-config.json index 4a8351d1c8b..e7b24ca138b 100644 --- a/application/src/test/resources/netex/nordic/build-config.json +++ b/application/src/test/resources/netex/nordic/build-config.json @@ -1,11 +1,11 @@ { "transitServiceStart": "2017-12-21", - "transitServiceEnd": "2018-01-31", - "netexDefaults" : { - "moduleFilePattern" : "netex_.*\\.zip", - "sharedFilePattern" : "_stops.xml", - "sharedGroupFilePattern" : "_(\\w{3})_shared_data.xml", - "groupFilePattern" : "(\\w{3})_.*\\.xml", + "transitServiceEnd": "2018-01-31", + "netexDefaults": { + "moduleFilePattern": "netex_.*\\.zip", + "sharedFilePattern": "_stops.xml", + "sharedGroupFilePattern": "_(\\w{3})_shared_data.xml", + "groupFilePattern": "(\\w{3})_.*\\.xml", "feedId": "EN" } } diff --git a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/alerts.json b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/alerts.json index 1683a37dbe9..80d8d57fdda 100644 --- a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/alerts.json +++ b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/alerts.json @@ -39,4 +39,4 @@ } ] } -} \ No newline at end of file +} diff --git a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/feedinfo.json b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/feedinfo.json index 3cf3bd06d66..f5ed39d1af1 100644 --- a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/feedinfo.json +++ b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/feedinfo.json @@ -1,18 +1,18 @@ { - "data" : { - "feeds" : [ + "data": { + "feeds": [ { - "agencies" : [ + "agencies": [ { - "name" : "speedtransit", - "url" : "www.otp-foo.bar" + "name": "speedtransit", + "url": "www.otp-foo.bar" } ], - "publisher" : { - "name" : "publisher", - "url" : "www.z.org" + "publisher": { + "name": "publisher", + "url": "www.z.org" } } ] } -} \ No newline at end of file +} diff --git a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/nearest.json b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/nearest.json index b6b5b7ee674..c430fdb6a30 100644 --- a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/nearest.json +++ b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/nearest.json @@ -1,31 +1,31 @@ { - "data" : { - "nearest" : { - "edges" : [ + "data": { + "nearest": { + "edges": [ { - "node" : { - "place" : { - "id" : "U3RvcDpGOkE", - "gtfsId" : "F:A", - "parentStation" : null + "node": { + "place": { + "id": "U3RvcDpGOkE", + "gtfsId": "F:A", + "parentStation": null } } }, { - "node" : { - "place" : { - "stationId" : "Network-1:FooStation" + "node": { + "place": { + "stationId": "Network-1:FooStation" } } }, { - "node" : { - "place" : { - "vehicleId" : "Network-1:free-floating-bicycle" + "node": { + "place": { + "vehicleId": "Network-1:free-floating-bicycle" } } } ] } } -} \ No newline at end of file +} diff --git a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/node-alert.json b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/node-alert.json index 8d4c96fb4a9..63c731a8945 100644 --- a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/node-alert.json +++ b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/node-alert.json @@ -7,4 +7,4 @@ "alertUrl": null } } -} \ No newline at end of file +} diff --git a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/patterns.json b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/patterns.json index 08bcc490e0f..73ee8b0495e 100644 --- a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/patterns.json +++ b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/patterns.json @@ -1,95 +1,95 @@ { - "data" : { - "patterns" : [ + "data": { + "patterns": [ { - "code" : "F:BUS", - "headsign" : "Trip Headsign", - "trips" : [ + "code": "F:BUS", + "headsign": "Trip Headsign", + "trips": [ { - "gtfsId" : "F:123", - "stoptimes" : [ + "gtfsId": "F:123", + "stoptimes": [ { - "stop" : { - "gtfsId" : "F:Stop_0", - "name" : "Stop_0" + "stop": { + "gtfsId": "F:Stop_0", + "name": "Stop_0" }, - "headsign" : "Stop headsign at stop 10", - "scheduledArrival" : 39600, - "scheduledDeparture" : 39600, - "stopPosition" : 10, - "stopPositionInPattern" : 0, - "realtimeState" : "SCHEDULED", - "pickupType" : "SCHEDULED", - "dropoffType" : "SCHEDULED" + "headsign": "Stop headsign at stop 10", + "scheduledArrival": 39600, + "scheduledDeparture": 39600, + "stopPosition": 10, + "stopPositionInPattern": 0, + "realtimeState": "SCHEDULED", + "pickupType": "SCHEDULED", + "dropoffType": "SCHEDULED" }, { - "stop" : { - "gtfsId" : "F:Stop_1", - "name" : "Stop_1" + "stop": { + "gtfsId": "F:Stop_1", + "name": "Stop_1" }, - "headsign" : "Stop headsign at stop 20", - "scheduledArrival" : 39900, - "scheduledDeparture" : 39900, - "stopPosition" : 20, - "stopPositionInPattern" : 1, - "realtimeState" : "SCHEDULED", - "pickupType" : "SCHEDULED", - "dropoffType" : "SCHEDULED" + "headsign": "Stop headsign at stop 20", + "scheduledArrival": 39900, + "scheduledDeparture": 39900, + "stopPosition": 20, + "stopPositionInPattern": 1, + "realtimeState": "SCHEDULED", + "pickupType": "SCHEDULED", + "dropoffType": "SCHEDULED" }, { - "stop" : { - "gtfsId" : "F:Stop_2", - "name" : "Stop_2" + "stop": { + "gtfsId": "F:Stop_2", + "name": "Stop_2" }, - "headsign" : "Stop headsign at stop 30", - "scheduledArrival" : 40200, - "scheduledDeparture" : 40200, - "stopPosition" : 30, - "stopPositionInPattern" : 2, - "realtimeState" : "SCHEDULED", - "pickupType" : "SCHEDULED", - "dropoffType" : "SCHEDULED" + "headsign": "Stop headsign at stop 30", + "scheduledArrival": 40200, + "scheduledDeparture": 40200, + "stopPosition": 30, + "stopPositionInPattern": 2, + "realtimeState": "SCHEDULED", + "pickupType": "SCHEDULED", + "dropoffType": "SCHEDULED" } ], - "occupancy" : { - "occupancyStatus" : "FEW_SEATS_AVAILABLE" + "occupancy": { + "occupancyStatus": "FEW_SEATS_AVAILABLE" } } ], - "vehiclePositions" : [ + "vehiclePositions": [ { - "vehicleId" : "F:vehicle-1", - "label" : null, - "lat" : null, - "lon" : null, - "stopRelationship" : null, - "speed" : null, - "heading" : null, - "lastUpdated" : 31556889864403199, - "trip" : { - "gtfsId" : "F:123" + "vehicleId": "F:vehicle-1", + "label": null, + "lat": null, + "lon": null, + "stopRelationship": null, + "speed": null, + "heading": null, + "lastUpdated": 31556889864403199, + "trip": { + "gtfsId": "F:123" } }, { - "vehicleId" : "F:vehicle-2", - "label" : "vehicle2", - "lat" : 60.0, - "lon" : 80.0, - "stopRelationship" : { - "status" : "IN_TRANSIT_TO", - "stop" : { - "gtfsId" : "F:Stop_0" + "vehicleId": "F:vehicle-2", + "label": "vehicle2", + "lat": 60.0, + "lon": 80.0, + "stopRelationship": { + "status": "IN_TRANSIT_TO", + "stop": { + "gtfsId": "F:Stop_0" } }, - "speed" : 10.2, - "heading" : 80.0, - "lastUpdated" : -31557014167219200, - "trip" : { - "gtfsId" : "F:123" + "speed": 10.2, + "heading": 80.0, + "lastUpdated": -31557014167219200, + "trip": { + "gtfsId": "F:123" } } ] } ] } -} \ No newline at end of file +} diff --git a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/plan.json b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/plan.json index 879c1503438..817754b79ca 100644 --- a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/plan.json +++ b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/plan.json @@ -1,69 +1,69 @@ { - "data" : { - "plan" : { - "itineraries" : [ + "data": { + "plan": { + "itineraries": [ { - "start" : "2020-02-02T11:00:00Z", - "end" : "2020-02-02T12:00:00Z", - "legs" : [ + "start": "2020-02-02T11:00:00Z", + "end": "2020-02-02T12:00:00Z", + "legs": [ { - "mode" : "WALK", - "start" : { - "scheduledTime" : "2020-02-02T11:00:00Z" + "mode": "WALK", + "start": { + "scheduledTime": "2020-02-02T11:00:00Z" }, - "end" : { - "scheduledTime" : "2020-02-02T11:00:20Z" + "end": { + "scheduledTime": "2020-02-02T11:00:20Z" }, - "from" : { - "name" : "A" + "from": { + "name": "A" }, - "to" : { - "name" : "B" + "to": { + "name": "B" } }, { - "mode" : "BUS", - "start" : { - "scheduledTime" : "2020-02-02T10:51:00Z" + "mode": "BUS", + "start": { + "scheduledTime": "2020-02-02T10:51:00Z" }, - "end" : { - "scheduledTime" : "2020-02-02T11:05:00Z" + "end": { + "scheduledTime": "2020-02-02T11:05:00Z" }, - "from" : { - "name" : "B" + "from": { + "name": "B" }, - "to" : { - "name" : "C" + "to": { + "name": "C" } }, { - "mode" : "RAIL", - "start" : { - "scheduledTime" : "2020-02-02T11:20:00Z" + "mode": "RAIL", + "start": { + "scheduledTime": "2020-02-02T11:20:00Z" }, - "end" : { - "scheduledTime" : "2020-02-02T11:40:00Z" + "end": { + "scheduledTime": "2020-02-02T11:40:00Z" }, - "from" : { - "name" : "C" + "from": { + "name": "C" }, - "to" : { - "name" : "D" + "to": { + "name": "D" } }, { - "mode" : "CAR", - "start" : { - "scheduledTime" : "2020-02-02T11:50:00Z" + "mode": "CAR", + "start": { + "scheduledTime": "2020-02-02T11:50:00Z" }, - "end" : { - "scheduledTime" : "2020-02-02T12:00:00Z" + "end": { + "scheduledTime": "2020-02-02T12:00:00Z" }, - "from" : { - "name" : "D" + "from": { + "name": "D" }, - "to" : { - "name" : "E" + "to": { + "name": "E" } } ] @@ -71,4 +71,4 @@ ] } } -} \ No newline at end of file +} diff --git a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/planConnection-extended.json b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/planConnection-extended.json index 07f613ebd7f..ab29f172b6f 100644 --- a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/planConnection-extended.json +++ b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/planConnection-extended.json @@ -1,359 +1,359 @@ { - "data" : { - "planConnection" : { - "searchDateTime" : "2023-01-27T21:08:35+01:00", - "routingErrors" : [ ], - "pageInfo" : { - "hasNextPage" : false, - "hasPreviousPage" : false, - "startCursor" : null, - "endCursor" : null, - "searchWindowUsed" : null + "data": { + "planConnection": { + "searchDateTime": "2023-01-27T21:08:35+01:00", + "routingErrors": [], + "pageInfo": { + "hasNextPage": false, + "hasPreviousPage": false, + "startCursor": null, + "endCursor": null, + "searchWindowUsed": null }, - "edges" : [ + "edges": [ { - "cursor" : "NoCursor", - "node" : { - "start" : "2020-02-02T11:00:00Z", - "end" : "2020-02-02T12:00:00Z", - "startTime" : 1580641200000, - "endTime" : 1580644800000, - "generalizedCost" : 4072, - "accessibilityScore" : 0.5, - "emissionsPerPerson" : { - "co2" : 123.0 + "cursor": "NoCursor", + "node": { + "start": "2020-02-02T11:00:00Z", + "end": "2020-02-02T12:00:00Z", + "startTime": 1580641200000, + "endTime": 1580644800000, + "generalizedCost": 4072, + "accessibilityScore": 0.5, + "emissionsPerPerson": { + "co2": 123.0 }, - "numberOfTransfers" : 1, - "walkDistance" : 28.0, - "walkTime" : 20, - "legs" : [ + "numberOfTransfers": 1, + "walkDistance": 28.0, + "walkTime": 20, + "legs": [ { - "mode" : "WALK", - "start" : { - "scheduledTime" : "2020-02-02T11:00:00Z", - "estimated" : null + "mode": "WALK", + "start": { + "scheduledTime": "2020-02-02T11:00:00Z", + "estimated": null }, - "end" : { - "scheduledTime" : "2020-02-02T11:00:20Z", - "estimated" : null + "end": { + "scheduledTime": "2020-02-02T11:00:20Z", + "estimated": null }, - "from" : { - "name" : "A", - "lat" : 5.0, - "lon" : 8.0, - "arrival" : { - "scheduledTime" : "2020-02-02T11:00:00Z", - "estimated" : null + "from": { + "name": "A", + "lat": 5.0, + "lon": 8.0, + "arrival": { + "scheduledTime": "2020-02-02T11:00:00Z", + "estimated": null }, - "departure" : { - "scheduledTime" : "2020-02-02T11:00:00Z", - "estimated" : null + "departure": { + "scheduledTime": "2020-02-02T11:00:00Z", + "estimated": null }, - "departureTime" : 1580641200000, - "arrivalTime" : 1580641200000 + "departureTime": 1580641200000, + "arrivalTime": 1580641200000 }, - "to" : { - "name" : "B", - "lat" : 6.0, - "lon" : 8.5, - "arrival" : { - "scheduledTime" : "2020-02-02T11:00:20Z", - "estimated" : null + "to": { + "name": "B", + "lat": 6.0, + "lon": 8.5, + "arrival": { + "scheduledTime": "2020-02-02T11:00:20Z", + "estimated": null }, - "departure" : { - "scheduledTime" : "2020-02-02T11:00:20Z", - "estimated" : null + "departure": { + "scheduledTime": "2020-02-02T11:00:20Z", + "estimated": null }, - "departureTime" : 1580641220000, - "arrivalTime" : 1580641220000 + "departureTime": 1580641220000, + "arrivalTime": 1580641220000 }, - "startTime" : 1580641200000, - "endTime" : 1580641220000, - "generalizedCost" : 40, - "headsign" : null, - "trip" : null, - "intermediatePlaces" : null, - "alerts" : [ ], - "rideHailingEstimate" : null, - "accessibilityScore" : null, - "id" : null, - "realtimeState" : null + "startTime": 1580641200000, + "endTime": 1580641220000, + "generalizedCost": 40, + "headsign": null, + "trip": null, + "intermediatePlaces": null, + "alerts": [], + "rideHailingEstimate": null, + "accessibilityScore": null, + "id": null, + "realtimeState": null }, { - "mode" : "BUS", - "start" : { - "scheduledTime" : "2020-02-02T10:51:00Z", - "estimated" : { - "time" : "2020-02-02T11:01:00Z", - "delay" : "PT10M" + "mode": "BUS", + "start": { + "scheduledTime": "2020-02-02T10:51:00Z", + "estimated": { + "time": "2020-02-02T11:01:00Z", + "delay": "PT10M" } }, - "end" : { - "scheduledTime" : "2020-02-02T11:05:00Z", - "estimated" : { - "time" : "2020-02-02T11:15:00Z", - "delay" : "PT10M" + "end": { + "scheduledTime": "2020-02-02T11:05:00Z", + "estimated": { + "time": "2020-02-02T11:15:00Z", + "delay": "PT10M" } }, - "from" : { - "name" : "B", - "lat" : 6.0, - "lon" : 8.5, - "arrival" : { - "scheduledTime" : "2020-02-02T10:51:00Z", - "estimated" : { - "delay" : "PT10M", - "time" : "2020-02-02T11:01:00Z" + "from": { + "name": "B", + "lat": 6.0, + "lon": 8.5, + "arrival": { + "scheduledTime": "2020-02-02T10:51:00Z", + "estimated": { + "delay": "PT10M", + "time": "2020-02-02T11:01:00Z" } }, - "departure" : { - "scheduledTime" : "2020-02-02T10:51:00Z", - "estimated" : { - "delay" : "PT10M", - "time" : "2020-02-02T11:01:00Z" + "departure": { + "scheduledTime": "2020-02-02T10:51:00Z", + "estimated": { + "delay": "PT10M", + "time": "2020-02-02T11:01:00Z" } }, - "departureTime" : 1580641260000, - "arrivalTime" : 1580641260000 + "departureTime": 1580641260000, + "arrivalTime": 1580641260000 }, - "to" : { - "name" : "C", - "lat" : 7.0, - "lon" : 9.0, - "arrival" : { - "scheduledTime" : "2020-02-02T11:05:00Z", - "estimated" : { - "delay" : "PT10M", - "time" : "2020-02-02T11:15:00Z" + "to": { + "name": "C", + "lat": 7.0, + "lon": 9.0, + "arrival": { + "scheduledTime": "2020-02-02T11:05:00Z", + "estimated": { + "delay": "PT10M", + "time": "2020-02-02T11:15:00Z" } }, - "departure" : { - "scheduledTime" : "2020-02-02T11:05:00Z", - "estimated" : { - "delay" : "PT10M", - "time" : "2020-02-02T11:15:00Z" + "departure": { + "scheduledTime": "2020-02-02T11:05:00Z", + "estimated": { + "delay": "PT10M", + "time": "2020-02-02T11:15:00Z" } }, - "departureTime" : 1580642100000, - "arrivalTime" : 1580642100000 + "departureTime": 1580642100000, + "arrivalTime": 1580642100000 }, - "startTime" : 1580641260000, - "endTime" : 1580642100000, - "generalizedCost" : 992, - "headsign" : "Headsign at boarding (stop index 5)", - "trip" : { - "tripHeadsign" : "Trip headsign 122" + "startTime": 1580641260000, + "endTime": 1580642100000, + "generalizedCost": 992, + "headsign": "Headsign at boarding (stop index 5)", + "trip": { + "tripHeadsign": "Trip headsign 122" }, - "intermediatePlaces" : [ + "intermediatePlaces": [ { - "arrival" : { - "scheduledTime" : "2020-02-02T11:01:00Z", - "estimated" : { - "time" : "2020-02-02T11:11:00Z", - "delay" : "PT10M" + "arrival": { + "scheduledTime": "2020-02-02T11:01:00Z", + "estimated": { + "time": "2020-02-02T11:11:00Z", + "delay": "PT10M" } }, - "departure" : { - "scheduledTime" : "2020-02-02T11:01:00Z", - "estimated" : { - "time" : "2020-02-02T11:11:00Z", - "delay" : "PT10M" + "departure": { + "scheduledTime": "2020-02-02T11:01:00Z", + "estimated": { + "time": "2020-02-02T11:11:00Z", + "delay": "PT10M" } }, - "stop" : { - "name" : "B" + "stop": { + "name": "B" } } ], - "alerts" : [ ], - "rideHailingEstimate" : null, - "accessibilityScore" : null, - "id" : "rO0ABXdBABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMABUY6MTIyAAoyMDIwLTAyLTAyAAAABQAAAAcAA0Y6QgADRjpDAAA=", - "realtimeState" : "UPDATED" + "alerts": [], + "rideHailingEstimate": null, + "accessibilityScore": null, + "id": "rO0ABXdBABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMABUY6MTIyAAoyMDIwLTAyLTAyAAAABQAAAAcAA0Y6QgADRjpDAAA=", + "realtimeState": "UPDATED" }, { - "mode" : "RAIL", - "start" : { - "scheduledTime" : "2020-02-02T11:20:00Z", - "estimated" : { - "time" : "2020-02-02T11:30:00Z", - "delay" : "PT10M" + "mode": "RAIL", + "start": { + "scheduledTime": "2020-02-02T11:20:00Z", + "estimated": { + "time": "2020-02-02T11:30:00Z", + "delay": "PT10M" } }, - "end" : { - "scheduledTime" : "2020-02-02T11:40:00Z", - "estimated" : { - "time" : "2020-02-02T11:50:00Z", - "delay" : "PT10M" + "end": { + "scheduledTime": "2020-02-02T11:40:00Z", + "estimated": { + "time": "2020-02-02T11:50:00Z", + "delay": "PT10M" } }, - "from" : { - "name" : "C", - "lat" : 7.0, - "lon" : 9.0, - "arrival" : { - "scheduledTime" : "2020-02-02T11:20:00Z", - "estimated" : { - "delay" : "PT10M", - "time" : "2020-02-02T11:30:00Z" + "from": { + "name": "C", + "lat": 7.0, + "lon": 9.0, + "arrival": { + "scheduledTime": "2020-02-02T11:20:00Z", + "estimated": { + "delay": "PT10M", + "time": "2020-02-02T11:30:00Z" } }, - "departure" : { - "scheduledTime" : "2020-02-02T11:20:00Z", - "estimated" : { - "delay" : "PT10M", - "time" : "2020-02-02T11:30:00Z" + "departure": { + "scheduledTime": "2020-02-02T11:20:00Z", + "estimated": { + "delay": "PT10M", + "time": "2020-02-02T11:30:00Z" } }, - "departureTime" : 1580643000000, - "arrivalTime" : 1580643000000 + "departureTime": 1580643000000, + "arrivalTime": 1580643000000 }, - "to" : { - "name" : "D", - "lat" : 8.0, - "lon" : 9.5, - "arrival" : { - "scheduledTime" : "2020-02-02T11:40:00Z", - "estimated" : { - "delay" : "PT10M", - "time" : "2020-02-02T11:50:00Z" + "to": { + "name": "D", + "lat": 8.0, + "lon": 9.5, + "arrival": { + "scheduledTime": "2020-02-02T11:40:00Z", + "estimated": { + "delay": "PT10M", + "time": "2020-02-02T11:50:00Z" } }, - "departure" : { - "scheduledTime" : "2020-02-02T11:40:00Z", - "estimated" : { - "delay" : "PT10M", - "time" : "2020-02-02T11:50:00Z" + "departure": { + "scheduledTime": "2020-02-02T11:40:00Z", + "estimated": { + "delay": "PT10M", + "time": "2020-02-02T11:50:00Z" } }, - "departureTime" : 1580644200000, - "arrivalTime" : 1580644200000 + "departureTime": 1580644200000, + "arrivalTime": 1580644200000 }, - "startTime" : 1580643000000, - "endTime" : 1580644200000, - "generalizedCost" : 2040, - "headsign" : "Headsign at boarding (stop index 5)", - "trip" : { - "tripHeadsign" : "Trip headsign 439" + "startTime": 1580643000000, + "endTime": 1580644200000, + "generalizedCost": 2040, + "headsign": "Headsign at boarding (stop index 5)", + "trip": { + "tripHeadsign": "Trip headsign 439" }, - "intermediatePlaces" : [ + "intermediatePlaces": [ { - "arrival" : { - "scheduledTime" : "2020-02-02T11:30:00Z", - "estimated" : { - "time" : "2020-02-02T11:40:00Z", - "delay" : "PT10M" + "arrival": { + "scheduledTime": "2020-02-02T11:30:00Z", + "estimated": { + "time": "2020-02-02T11:40:00Z", + "delay": "PT10M" } }, - "departure" : { - "scheduledTime" : "2020-02-02T11:30:00Z", - "estimated" : { - "time" : "2020-02-02T11:40:00Z", - "delay" : "PT10M" + "departure": { + "scheduledTime": "2020-02-02T11:30:00Z", + "estimated": { + "time": "2020-02-02T11:40:00Z", + "delay": "PT10M" } }, - "stop" : { - "name" : "C" + "stop": { + "name": "C" } } ], - "alerts" : [ + "alerts": [ { - "id" : "QWxlcnQ6Rjphbi1hbGVydA", - "alertHeaderText" : "A header", - "alertDescriptionText" : "A description", - "alertEffect" : "REDUCED_SERVICE", - "alertCause" : "MAINTENANCE", - "alertSeverityLevel" : "SEVERE", - "alertUrl" : "https://example.com", - "effectiveStartDate" : 1676459008, - "effectiveEndDate" : 1676545408, - "entities" : [ + "id": "QWxlcnQ6Rjphbi1hbGVydA", + "alertHeaderText": "A header", + "alertDescriptionText": "A description", + "alertEffect": "REDUCED_SERVICE", + "alertCause": "MAINTENANCE", + "alertSeverityLevel": "SEVERE", + "alertUrl": "https://example.com", + "effectiveStartDate": 1676459008, + "effectiveEndDate": 1676545408, + "entities": [ { - "name" : "A", - "gtfsId" : "F:A", - "lat" : 5.0, - "lon" : 8.0 + "name": "A", + "gtfsId": "F:A", + "lat": 5.0, + "lon": 8.0 } ] } ], - "rideHailingEstimate" : null, - "accessibilityScore" : null, - "id" : "rO0ABXdBABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMABUY6NDM5AAoyMDIwLTAyLTAyAAAABQAAAAcAA0Y6QwADRjpEAAA=", - "realtimeState" : "UPDATED" + "rideHailingEstimate": null, + "accessibilityScore": null, + "id": "rO0ABXdBABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMABUY6NDM5AAoyMDIwLTAyLTAyAAAABQAAAAcAA0Y6QwADRjpEAAA=", + "realtimeState": "UPDATED" }, { - "mode" : "CAR", - "start" : { - "scheduledTime" : "2020-02-02T11:50:00Z", - "estimated" : null + "mode": "CAR", + "start": { + "scheduledTime": "2020-02-02T11:50:00Z", + "estimated": null }, - "end" : { - "scheduledTime" : "2020-02-02T12:00:00Z", - "estimated" : null + "end": { + "scheduledTime": "2020-02-02T12:00:00Z", + "estimated": null }, - "from" : { - "name" : "D", - "lat" : 8.0, - "lon" : 9.5, - "arrival" : { - "scheduledTime" : "2020-02-02T11:50:00Z", - "estimated" : null + "from": { + "name": "D", + "lat": 8.0, + "lon": 9.5, + "arrival": { + "scheduledTime": "2020-02-02T11:50:00Z", + "estimated": null }, - "departure" : { - "scheduledTime" : "2020-02-02T11:50:00Z", - "estimated" : null + "departure": { + "scheduledTime": "2020-02-02T11:50:00Z", + "estimated": null }, - "departureTime" : 1580644200000, - "arrivalTime" : 1580644200000 + "departureTime": 1580644200000, + "arrivalTime": 1580644200000 }, - "to" : { - "name" : "E", - "lat" : 9.0, - "lon" : 10.0, - "arrival" : { - "scheduledTime" : "2020-02-02T12:00:00Z", - "estimated" : null + "to": { + "name": "E", + "lat": 9.0, + "lon": 10.0, + "arrival": { + "scheduledTime": "2020-02-02T12:00:00Z", + "estimated": null }, - "departure" : { - "scheduledTime" : "2020-02-02T12:00:00Z", - "estimated" : null + "departure": { + "scheduledTime": "2020-02-02T12:00:00Z", + "estimated": null }, - "departureTime" : 1580644800000, - "arrivalTime" : 1580644800000 + "departureTime": 1580644800000, + "arrivalTime": 1580644800000 }, - "startTime" : 1580644200000, - "endTime" : 1580644800000, - "generalizedCost" : 1000, - "headsign" : null, - "trip" : null, - "intermediatePlaces" : null, - "alerts" : [ ], - "rideHailingEstimate" : { - "provider" : { - "id" : "uber" + "startTime": 1580644200000, + "endTime": 1580644800000, + "generalizedCost": 1000, + "headsign": null, + "trip": null, + "intermediatePlaces": null, + "alerts": [], + "rideHailingEstimate": { + "provider": { + "id": "uber" }, - "productName" : "UberX", - "minPrice" : { - "currency" : { - "code" : "EUR", - "digits" : 2 + "productName": "UberX", + "minPrice": { + "currency": { + "code": "EUR", + "digits": 2 }, - "amount" : 10.0 + "amount": 10.0 }, - "maxPrice" : { - "currency" : { - "code" : "EUR", - "digits" : 2 + "maxPrice": { + "currency": { + "code": "EUR", + "digits": 2 }, - "amount" : 20.0 + "amount": 20.0 }, - "arrival" : "PT10M" + "arrival": "PT10M" }, - "accessibilityScore" : null, - "id" : null, - "realtimeState" : null + "accessibilityScore": null, + "id": null, + "realtimeState": null } ] } @@ -361,4 +361,4 @@ ] } } -} \ No newline at end of file +} diff --git a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/planConnection-fares.json b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/planConnection-fares.json index d56142820b5..748fc668e63 100644 --- a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/planConnection-fares.json +++ b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/planConnection-fares.json @@ -1,163 +1,163 @@ { - "data" : { - "planConnection" : { - "edges" : [ + "data": { + "planConnection": { + "edges": [ { - "node" : { - "legs" : [ + "node": { + "legs": [ { - "mode" : "WALK", - "from" : { - "name" : "A", - "lat" : 5.0, - "lon" : 8.0 + "mode": "WALK", + "from": { + "name": "A", + "lat": 5.0, + "lon": 8.0 }, - "to" : { - "name" : "B", - "lat" : 6.0, - "lon" : 8.5 + "to": { + "name": "B", + "lat": 6.0, + "lon": 8.5 }, - "generalizedCost" : 40, - "fareProducts" : [ ] + "generalizedCost": 40, + "fareProducts": [] }, { - "mode" : "BUS", - "from" : { - "name" : "B", - "lat" : 6.0, - "lon" : 8.5 + "mode": "BUS", + "from": { + "name": "B", + "lat": 6.0, + "lon": 8.5 }, - "to" : { - "name" : "C", - "lat" : 7.0, - "lon" : 9.0 + "to": { + "name": "C", + "lat": 7.0, + "lon": 9.0 }, - "generalizedCost" : 992, - "fareProducts" : [ + "generalizedCost": 992, + "fareProducts": [ { - "id" : "5d8f889c-42cb-3bcc-89d5-480b995c78c8", - "product" : { - "id" : "F:day-pass", - "name" : "day-pass", - "__typename" : "DefaultFareProduct", - "price" : { - "currency" : { - "digits" : 2, - "code" : "EUR" + "id": "5d8f889c-42cb-3bcc-89d5-480b995c78c8", + "product": { + "id": "F:day-pass", + "name": "day-pass", + "__typename": "DefaultFareProduct", + "price": { + "currency": { + "digits": 2, + "code": "EUR" }, - "amount" : 10.0 + "amount": 10.0 }, - "riderCategory" : { - "id" : "F:senior-citizens", - "name" : "Senior citizens" + "riderCategory": { + "id": "F:senior-citizens", + "name": "Senior citizens" }, - "medium" : { - "id" : "F:oyster", - "name" : "TfL Oyster Card" + "medium": { + "id": "F:oyster", + "name": "TfL Oyster Card" } } }, { - "id" : "09bb5f2b-6af9-3355-8b5d-5e93a27ce280", - "product" : { - "id" : "F:single-ticket", - "name" : "single-ticket", - "__typename" : "DefaultFareProduct", - "price" : { - "currency" : { - "digits" : 2, - "code" : "EUR" + "id": "09bb5f2b-6af9-3355-8b5d-5e93a27ce280", + "product": { + "id": "F:single-ticket", + "name": "single-ticket", + "__typename": "DefaultFareProduct", + "price": { + "currency": { + "digits": 2, + "code": "EUR" }, - "amount" : 10.0 + "amount": 10.0 }, - "riderCategory" : { - "id" : "F:senior-citizens", - "name" : "Senior citizens" + "riderCategory": { + "id": "F:senior-citizens", + "name": "Senior citizens" }, - "medium" : { - "id" : "F:oyster", - "name" : "TfL Oyster Card" + "medium": { + "id": "F:oyster", + "name": "TfL Oyster Card" } } } ] }, { - "mode" : "RAIL", - "from" : { - "name" : "C", - "lat" : 7.0, - "lon" : 9.0 + "mode": "RAIL", + "from": { + "name": "C", + "lat": 7.0, + "lon": 9.0 }, - "to" : { - "name" : "D", - "lat" : 8.0, - "lon" : 9.5 + "to": { + "name": "D", + "lat": 8.0, + "lon": 9.5 }, - "generalizedCost" : 2040, - "fareProducts" : [ + "generalizedCost": 2040, + "fareProducts": [ { - "id" : "5d8f889c-42cb-3bcc-89d5-480b995c78c8", - "product" : { - "id" : "F:day-pass", - "name" : "day-pass", - "__typename" : "DefaultFareProduct", - "price" : { - "currency" : { - "digits" : 2, - "code" : "EUR" + "id": "5d8f889c-42cb-3bcc-89d5-480b995c78c8", + "product": { + "id": "F:day-pass", + "name": "day-pass", + "__typename": "DefaultFareProduct", + "price": { + "currency": { + "digits": 2, + "code": "EUR" }, - "amount" : 10.0 + "amount": 10.0 }, - "riderCategory" : { - "id" : "F:senior-citizens", - "name" : "Senior citizens" + "riderCategory": { + "id": "F:senior-citizens", + "name": "Senior citizens" }, - "medium" : { - "id" : "F:oyster", - "name" : "TfL Oyster Card" + "medium": { + "id": "F:oyster", + "name": "TfL Oyster Card" } } }, { - "id" : "46190ddd-93b0-3136-adb7-a18394f8b0ef", - "product" : { - "id" : "F:single-ticket", - "name" : "single-ticket", - "__typename" : "DefaultFareProduct", - "price" : { - "currency" : { - "digits" : 2, - "code" : "EUR" + "id": "46190ddd-93b0-3136-adb7-a18394f8b0ef", + "product": { + "id": "F:single-ticket", + "name": "single-ticket", + "__typename": "DefaultFareProduct", + "price": { + "currency": { + "digits": 2, + "code": "EUR" }, - "amount" : 10.0 + "amount": 10.0 }, - "riderCategory" : { - "id" : "F:senior-citizens", - "name" : "Senior citizens" + "riderCategory": { + "id": "F:senior-citizens", + "name": "Senior citizens" }, - "medium" : { - "id" : "F:oyster", - "name" : "TfL Oyster Card" + "medium": { + "id": "F:oyster", + "name": "TfL Oyster Card" } } } ] }, { - "mode" : "CAR", - "from" : { - "name" : "D", - "lat" : 8.0, - "lon" : 9.5 + "mode": "CAR", + "from": { + "name": "D", + "lat": 8.0, + "lon": 9.5 }, - "to" : { - "name" : "E", - "lat" : 9.0, - "lon" : 10.0 + "to": { + "name": "E", + "lat": 9.0, + "lon": 10.0 }, - "generalizedCost" : 1000, - "fareProducts" : [ ] + "generalizedCost": 1000, + "fareProducts": [] } ] } @@ -165,4 +165,4 @@ ] } } -} \ No newline at end of file +} diff --git a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/planConnection-stop-positions.json b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/planConnection-stop-positions.json index dbf73734975..f197dcefe1c 100644 --- a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/planConnection-stop-positions.json +++ b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/planConnection-stop-positions.json @@ -1,89 +1,89 @@ { - "data" : { - "planConnection" : { - "edges" : [ + "data": { + "planConnection": { + "edges": [ { - "node" : { - "start" : "2020-02-02T11:00:00Z", - "end" : "2020-02-02T12:00:00Z", - "generalizedCost" : 4072, - "accessibilityScore" : 0.5, - "legs" : [ + "node": { + "start": "2020-02-02T11:00:00Z", + "end": "2020-02-02T12:00:00Z", + "generalizedCost": 4072, + "accessibilityScore": 0.5, + "legs": [ { - "mode" : "WALK", - "from" : { - "name" : "A", - "lat" : 5.0, - "lon" : 8.0, - "stopPosition" : null + "mode": "WALK", + "from": { + "name": "A", + "lat": 5.0, + "lon": 8.0, + "stopPosition": null }, - "to" : { - "name" : "B", - "lat" : 6.0, - "lon" : 8.5, - "stopPosition" : null + "to": { + "name": "B", + "lat": 6.0, + "lon": 8.5, + "stopPosition": null }, - "generalizedCost" : 40 + "generalizedCost": 40 }, { - "mode" : "BUS", - "from" : { - "name" : "B", - "lat" : 6.0, - "lon" : 8.5, - "stopPosition" : { - "__typename" : "PositionAtStop", - "position" : 0 + "mode": "BUS", + "from": { + "name": "B", + "lat": 6.0, + "lon": 8.5, + "stopPosition": { + "__typename": "PositionAtStop", + "position": 0 } }, - "to" : { - "name" : "C", - "lat" : 7.0, - "lon" : 9.0, - "stopPosition" : { - "__typename" : "PositionAtStop", - "position" : 0 + "to": { + "name": "C", + "lat": 7.0, + "lon": 9.0, + "stopPosition": { + "__typename": "PositionAtStop", + "position": 0 } }, - "generalizedCost" : 992 + "generalizedCost": 992 }, { - "mode" : "RAIL", - "from" : { - "name" : "C", - "lat" : 7.0, - "lon" : 9.0, - "stopPosition" : { - "__typename" : "PositionAtStop", - "position" : 0 + "mode": "RAIL", + "from": { + "name": "C", + "lat": 7.0, + "lon": 9.0, + "stopPosition": { + "__typename": "PositionAtStop", + "position": 0 } }, - "to" : { - "name" : "D", - "lat" : 8.0, - "lon" : 9.5, - "stopPosition" : { - "__typename" : "PositionAtStop", - "position" : 0 + "to": { + "name": "D", + "lat": 8.0, + "lon": 9.5, + "stopPosition": { + "__typename": "PositionAtStop", + "position": 0 } }, - "generalizedCost" : 2040 + "generalizedCost": 2040 }, { - "mode" : "CAR", - "from" : { - "name" : "D", - "lat" : 8.0, - "lon" : 9.5, - "stopPosition" : null + "mode": "CAR", + "from": { + "name": "D", + "lat": 8.0, + "lon": 9.5, + "stopPosition": null }, - "to" : { - "name" : "E", - "lat" : 9.0, - "lon" : 10.0, - "stopPosition" : null + "to": { + "name": "E", + "lat": 9.0, + "lon": 10.0, + "stopPosition": null }, - "generalizedCost" : 1000 + "generalizedCost": 1000 } ] } @@ -91,4 +91,4 @@ ] } } -} \ No newline at end of file +} diff --git a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/planConnection-tutorial.json b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/planConnection-tutorial.json index eff2b223eff..caafc57375d 100644 --- a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/planConnection-tutorial.json +++ b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/planConnection-tutorial.json @@ -1,127 +1,127 @@ { - "data" : { - "planConnection" : { - "edges" : [ + "data": { + "planConnection": { + "edges": [ { - "node" : { - "start" : "2020-02-02T11:00:00Z", - "end" : "2020-02-02T12:00:00Z", - "legs" : [ + "node": { + "start": "2020-02-02T11:00:00Z", + "end": "2020-02-02T12:00:00Z", + "legs": [ { - "mode" : "WALK", - "from" : { - "name" : "A", - "lat" : 5.0, - "lon" : 8.0, - "departure" : { - "scheduledTime" : "2020-02-02T11:00:00Z", - "estimated" : null + "mode": "WALK", + "from": { + "name": "A", + "lat": 5.0, + "lon": 8.0, + "departure": { + "scheduledTime": "2020-02-02T11:00:00Z", + "estimated": null } }, - "to" : { - "name" : "B", - "lat" : 6.0, - "lon" : 8.5, - "arrival" : { - "scheduledTime" : "2020-02-02T11:00:20Z", - "estimated" : null + "to": { + "name": "B", + "lat": 6.0, + "lon": 8.5, + "arrival": { + "scheduledTime": "2020-02-02T11:00:20Z", + "estimated": null } }, - "route" : null, - "legGeometry" : null + "route": null, + "legGeometry": null }, { - "mode" : "BUS", - "from" : { - "name" : "B", - "lat" : 6.0, - "lon" : 8.5, - "departure" : { - "scheduledTime" : "2020-02-02T10:51:00Z", - "estimated" : { - "time" : "2020-02-02T11:01:00Z", - "delay" : "PT10M" + "mode": "BUS", + "from": { + "name": "B", + "lat": 6.0, + "lon": 8.5, + "departure": { + "scheduledTime": "2020-02-02T10:51:00Z", + "estimated": { + "time": "2020-02-02T11:01:00Z", + "delay": "PT10M" } } }, - "to" : { - "name" : "C", - "lat" : 7.0, - "lon" : 9.0, - "arrival" : { - "scheduledTime" : "2020-02-02T11:05:00Z", - "estimated" : { - "time" : "2020-02-02T11:15:00Z", - "delay" : "PT10M" + "to": { + "name": "C", + "lat": 7.0, + "lon": 9.0, + "arrival": { + "scheduledTime": "2020-02-02T11:05:00Z", + "estimated": { + "time": "2020-02-02T11:15:00Z", + "delay": "PT10M" } } }, - "route" : { - "gtfsId" : "F:BUS", - "longName" : "Long name for BUS", - "shortName" : "RBUS" + "route": { + "gtfsId": "F:BUS", + "longName": "Long name for BUS", + "shortName": "RBUS" }, - "legGeometry" : { - "points" : "_{rc@_d{r@????_ibE_t`B" + "legGeometry": { + "points": "_{rc@_d{r@????_ibE_t`B" } }, { - "mode" : "RAIL", - "from" : { - "name" : "C", - "lat" : 7.0, - "lon" : 9.0, - "departure" : { - "scheduledTime" : "2020-02-02T11:20:00Z", - "estimated" : { - "time" : "2020-02-02T11:30:00Z", - "delay" : "PT10M" + "mode": "RAIL", + "from": { + "name": "C", + "lat": 7.0, + "lon": 9.0, + "departure": { + "scheduledTime": "2020-02-02T11:20:00Z", + "estimated": { + "time": "2020-02-02T11:30:00Z", + "delay": "PT10M" } } }, - "to" : { - "name" : "D", - "lat" : 8.0, - "lon" : 9.5, - "arrival" : { - "scheduledTime" : "2020-02-02T11:40:00Z", - "estimated" : { - "time" : "2020-02-02T11:50:00Z", - "delay" : "PT10M" + "to": { + "name": "D", + "lat": 8.0, + "lon": 9.5, + "arrival": { + "scheduledTime": "2020-02-02T11:40:00Z", + "estimated": { + "time": "2020-02-02T11:50:00Z", + "delay": "PT10M" } } }, - "route" : { - "gtfsId" : "F:2", - "longName" : null, - "shortName" : "R2" + "route": { + "gtfsId": "F:2", + "longName": null, + "shortName": "R2" }, - "legGeometry" : { - "points" : "_evi@_y|u@????_ibE_t`B" + "legGeometry": { + "points": "_evi@_y|u@????_ibE_t`B" } }, { - "mode" : "CAR", - "from" : { - "name" : "D", - "lat" : 8.0, - "lon" : 9.5, - "departure" : { - "scheduledTime" : "2020-02-02T11:50:00Z", - "estimated" : null + "mode": "CAR", + "from": { + "name": "D", + "lat": 8.0, + "lon": 9.5, + "departure": { + "scheduledTime": "2020-02-02T11:50:00Z", + "estimated": null } }, - "to" : { - "name" : "E", - "lat" : 9.0, - "lon" : 10.0, - "arrival" : { - "scheduledTime" : "2020-02-02T12:00:00Z", - "estimated" : null + "to": { + "name": "E", + "lat": 9.0, + "lon": 10.0, + "arrival": { + "scheduledTime": "2020-02-02T12:00:00Z", + "estimated": null } }, - "route" : null, - "legGeometry" : null + "route": null, + "legGeometry": null } ] } @@ -129,4 +129,4 @@ ] } } -} \ No newline at end of file +} diff --git a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/rental-vehicle.json b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/rental-vehicle.json index 9017fe77a93..bcff74d0413 100644 --- a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/rental-vehicle.json +++ b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/rental-vehicle.json @@ -1,20 +1,20 @@ { "data": { "rentalVehicle": { - "vehicleId":"Network-1:free-floating-bicycle", - "name":"free-floating-bicycle", - "allowPickupNow":true, - "lon":19.01, - "lat":47.52, - "rentalUris":null, - "operative":true, + "vehicleId": "Network-1:free-floating-bicycle", + "name": "free-floating-bicycle", + "allowPickupNow": true, + "lon": 19.01, + "lat": 47.52, + "rentalUris": null, + "operative": true, "vehicleType": { - "formFactor":"BICYCLE", - "propulsionType":"HUMAN" + "formFactor": "BICYCLE", + "propulsionType": "HUMAN" }, "rentalNetwork": { - "networkId":"Network-1", - "url":"https://foo.bar" + "networkId": "Network-1", + "url": "https://foo.bar" } } } diff --git a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/routes-extended.json b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/routes-extended.json index 8856972ce4e..be772736fc5 100644 --- a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/routes-extended.json +++ b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/routes-extended.json @@ -1,188 +1,188 @@ { - "data" : { - "routes" : [ + "data": { + "routes": [ { - "longName" : "Long name for CARPOOL", - "shortName" : "RCARPOOL", - "gtfsId" : "F:CARPOOL", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for CARPOOL", + "shortName": "RCARPOOL", + "gtfsId": "F:CARPOOL", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "CARPOOL", - "sortOrder" : 12, - "bikesAllowed" : "ALLOWED", - "patterns" : [ ] + "mode": "CARPOOL", + "sortOrder": 12, + "bikesAllowed": "ALLOWED", + "patterns": [] }, { - "longName" : "Long name for SUBWAY", - "shortName" : "RSUBWAY", - "gtfsId" : "F:SUBWAY", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for SUBWAY", + "shortName": "RSUBWAY", + "gtfsId": "F:SUBWAY", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "SUBWAY", - "sortOrder" : 2, - "bikesAllowed" : "NO_INFORMATION", - "patterns" : [ ] + "mode": "SUBWAY", + "sortOrder": 2, + "bikesAllowed": "NO_INFORMATION", + "patterns": [] }, { - "longName" : "Long name for BUS", - "shortName" : "RBUS", - "gtfsId" : "F:BUS", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for BUS", + "shortName": "RBUS", + "gtfsId": "F:BUS", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "BUS", - "sortOrder" : 3, - "bikesAllowed" : "ALLOWED", - "patterns" : [ ] + "mode": "BUS", + "sortOrder": 3, + "bikesAllowed": "ALLOWED", + "patterns": [] }, { - "longName" : "Long name for FERRY", - "shortName" : "RFERRY", - "gtfsId" : "F:FERRY", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for FERRY", + "shortName": "RFERRY", + "gtfsId": "F:FERRY", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "FERRY", - "sortOrder" : 5, - "bikesAllowed" : "NO_INFORMATION", - "patterns" : [ ] + "mode": "FERRY", + "sortOrder": 5, + "bikesAllowed": "NO_INFORMATION", + "patterns": [] }, { - "longName" : "Long name for COACH", - "shortName" : "RCOACH", - "gtfsId" : "F:COACH", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for COACH", + "shortName": "RCOACH", + "gtfsId": "F:COACH", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "COACH", - "sortOrder" : 1, - "bikesAllowed" : "NOT_ALLOWED", - "patterns" : [ ] + "mode": "COACH", + "sortOrder": 1, + "bikesAllowed": "NOT_ALLOWED", + "patterns": [] }, { - "longName" : "Long name for TRAM", - "shortName" : "RTRAM", - "gtfsId" : "F:TRAM", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for TRAM", + "shortName": "RTRAM", + "gtfsId": "F:TRAM", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "TRAM", - "sortOrder" : 4, - "bikesAllowed" : "NOT_ALLOWED", - "patterns" : [ ] + "mode": "TRAM", + "sortOrder": 4, + "bikesAllowed": "NOT_ALLOWED", + "patterns": [] }, { - "longName" : "Long name for CABLE_CAR", - "shortName" : "RCABLE_CAR", - "gtfsId" : "F:CABLE_CAR", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for CABLE_CAR", + "shortName": "RCABLE_CAR", + "gtfsId": "F:CABLE_CAR", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "CABLE_CAR", - "sortOrder" : 7, - "bikesAllowed" : "NOT_ALLOWED", - "patterns" : [ ] + "mode": "CABLE_CAR", + "sortOrder": 7, + "bikesAllowed": "NOT_ALLOWED", + "patterns": [] }, { - "longName" : "Long name for FUNICULAR", - "shortName" : "RFUNICULAR", - "gtfsId" : "F:FUNICULAR", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for FUNICULAR", + "shortName": "RFUNICULAR", + "gtfsId": "F:FUNICULAR", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "FUNICULAR", - "sortOrder" : 9, - "bikesAllowed" : "ALLOWED", - "patterns" : [ ] + "mode": "FUNICULAR", + "sortOrder": 9, + "bikesAllowed": "ALLOWED", + "patterns": [] }, { - "longName" : "Long name for RAIL", - "shortName" : "RRAIL", - "gtfsId" : "F:RAIL", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for RAIL", + "shortName": "RRAIL", + "gtfsId": "F:RAIL", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "RAIL", - "sortOrder" : null, - "bikesAllowed" : "ALLOWED", - "patterns" : [ ] + "mode": "RAIL", + "sortOrder": null, + "bikesAllowed": "ALLOWED", + "patterns": [] }, { - "longName" : "Long name for MONORAIL", - "shortName" : "RMONORAIL", - "gtfsId" : "F:MONORAIL", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for MONORAIL", + "shortName": "RMONORAIL", + "gtfsId": "F:MONORAIL", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "MONORAIL", - "sortOrder" : 11, - "bikesAllowed" : "NO_INFORMATION", - "patterns" : [ ] + "mode": "MONORAIL", + "sortOrder": 11, + "bikesAllowed": "NO_INFORMATION", + "patterns": [] }, { - "longName" : "Long name for GONDOLA", - "shortName" : "RGONDOLA", - "gtfsId" : "F:GONDOLA", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for GONDOLA", + "shortName": "RGONDOLA", + "gtfsId": "F:GONDOLA", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "GONDOLA", - "sortOrder" : 8, - "bikesAllowed" : "NO_INFORMATION", - "patterns" : [ ] + "mode": "GONDOLA", + "sortOrder": 8, + "bikesAllowed": "NO_INFORMATION", + "patterns": [] }, { - "longName" : "Long name for TROLLEYBUS", - "shortName" : "RTROLLEYBUS", - "gtfsId" : "F:TROLLEYBUS", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for TROLLEYBUS", + "shortName": "RTROLLEYBUS", + "gtfsId": "F:TROLLEYBUS", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "TROLLEYBUS", - "sortOrder" : 10, - "bikesAllowed" : "NOT_ALLOWED", - "patterns" : [ ] + "mode": "TROLLEYBUS", + "sortOrder": 10, + "bikesAllowed": "NOT_ALLOWED", + "patterns": [] }, { - "longName" : "Long name for AIRPLANE", - "shortName" : "RAIRPLANE", - "gtfsId" : "F:AIRPLANE", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for AIRPLANE", + "shortName": "RAIRPLANE", + "gtfsId": "F:AIRPLANE", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "AIRPLANE", - "sortOrder" : 6, - "bikesAllowed" : "ALLOWED", - "patterns" : [ ] + "mode": "AIRPLANE", + "sortOrder": 6, + "bikesAllowed": "ALLOWED", + "patterns": [] }, { - "longName" : "Long name for TAXI", - "shortName" : "RTAXI", - "gtfsId" : "F:TAXI", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for TAXI", + "shortName": "RTAXI", + "gtfsId": "F:TAXI", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "TAXI", - "sortOrder" : 13, - "bikesAllowed" : "NOT_ALLOWED", - "patterns" : [ ] + "mode": "TAXI", + "sortOrder": 13, + "bikesAllowed": "NOT_ALLOWED", + "patterns": [] } ] } -} \ No newline at end of file +} diff --git a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/routes-tutorial.json b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/routes-tutorial.json index e2bdb289c32..f775b2d9d8a 100644 --- a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/routes-tutorial.json +++ b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/routes-tutorial.json @@ -1,146 +1,146 @@ { - "data" : { - "routes" : [ + "data": { + "routes": [ { - "longName" : "Long name for CARPOOL", - "shortName" : "RCARPOOL", - "gtfsId" : "F:CARPOOL", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for CARPOOL", + "shortName": "RCARPOOL", + "gtfsId": "F:CARPOOL", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "CARPOOL" + "mode": "CARPOOL" }, { - "longName" : "Long name for SUBWAY", - "shortName" : "RSUBWAY", - "gtfsId" : "F:SUBWAY", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for SUBWAY", + "shortName": "RSUBWAY", + "gtfsId": "F:SUBWAY", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "SUBWAY" + "mode": "SUBWAY" }, { - "longName" : "Long name for BUS", - "shortName" : "RBUS", - "gtfsId" : "F:BUS", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for BUS", + "shortName": "RBUS", + "gtfsId": "F:BUS", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "BUS" + "mode": "BUS" }, { - "longName" : "Long name for FERRY", - "shortName" : "RFERRY", - "gtfsId" : "F:FERRY", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for FERRY", + "shortName": "RFERRY", + "gtfsId": "F:FERRY", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "FERRY" + "mode": "FERRY" }, { - "longName" : "Long name for COACH", - "shortName" : "RCOACH", - "gtfsId" : "F:COACH", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for COACH", + "shortName": "RCOACH", + "gtfsId": "F:COACH", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "COACH" + "mode": "COACH" }, { - "longName" : "Long name for TRAM", - "shortName" : "RTRAM", - "gtfsId" : "F:TRAM", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for TRAM", + "shortName": "RTRAM", + "gtfsId": "F:TRAM", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "TRAM" + "mode": "TRAM" }, { - "longName" : "Long name for CABLE_CAR", - "shortName" : "RCABLE_CAR", - "gtfsId" : "F:CABLE_CAR", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for CABLE_CAR", + "shortName": "RCABLE_CAR", + "gtfsId": "F:CABLE_CAR", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "CABLE_CAR" + "mode": "CABLE_CAR" }, { - "longName" : "Long name for FUNICULAR", - "shortName" : "RFUNICULAR", - "gtfsId" : "F:FUNICULAR", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for FUNICULAR", + "shortName": "RFUNICULAR", + "gtfsId": "F:FUNICULAR", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "FUNICULAR" + "mode": "FUNICULAR" }, { - "longName" : "Long name for RAIL", - "shortName" : "RRAIL", - "gtfsId" : "F:RAIL", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for RAIL", + "shortName": "RRAIL", + "gtfsId": "F:RAIL", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "RAIL" + "mode": "RAIL" }, { - "longName" : "Long name for MONORAIL", - "shortName" : "RMONORAIL", - "gtfsId" : "F:MONORAIL", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for MONORAIL", + "shortName": "RMONORAIL", + "gtfsId": "F:MONORAIL", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "MONORAIL" + "mode": "MONORAIL" }, { - "longName" : "Long name for GONDOLA", - "shortName" : "RGONDOLA", - "gtfsId" : "F:GONDOLA", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for GONDOLA", + "shortName": "RGONDOLA", + "gtfsId": "F:GONDOLA", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "GONDOLA" + "mode": "GONDOLA" }, { - "longName" : "Long name for TROLLEYBUS", - "shortName" : "RTROLLEYBUS", - "gtfsId" : "F:TROLLEYBUS", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for TROLLEYBUS", + "shortName": "RTROLLEYBUS", + "gtfsId": "F:TROLLEYBUS", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "TROLLEYBUS" + "mode": "TROLLEYBUS" }, { - "longName" : "Long name for AIRPLANE", - "shortName" : "RAIRPLANE", - "gtfsId" : "F:AIRPLANE", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for AIRPLANE", + "shortName": "RAIRPLANE", + "gtfsId": "F:AIRPLANE", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "AIRPLANE" + "mode": "AIRPLANE" }, { - "longName" : "Long name for TAXI", - "shortName" : "RTAXI", - "gtfsId" : "F:TAXI", - "agency" : { - "gtfsId" : "F:A1", - "name" : "Agency Test" + "longName": "Long name for TAXI", + "shortName": "RTAXI", + "gtfsId": "F:TAXI", + "agency": { + "gtfsId": "F:A1", + "name": "Agency Test" }, - "mode" : "TAXI" + "mode": "TAXI" } ] } -} \ No newline at end of file +} diff --git a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/stops.json b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/stops.json index 4e3d4c8a18c..b4d54806efe 100644 --- a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/stops.json +++ b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/stops.json @@ -1,126 +1,126 @@ { - "data" : { - "stops" : [ + "data": { + "stops": [ { - "gtfsId" : "F:A", - "lat" : 5.0, - "lon" : 8.0, - "name" : "A", - "vehicleMode" : "BUS", - "allRoutes" : [ + "gtfsId": "F:A", + "lat": 5.0, + "lon": 8.0, + "name": "A", + "vehicleMode": "BUS", + "allRoutes": [ { - "gtfsId" : "F:a-route", - "longName" : null, - "shortName" : "Ra-route" + "gtfsId": "F:a-route", + "longName": null, + "shortName": "Ra-route" } ], - "routesWithinRange" : [ ] + "routesWithinRange": [] }, { - "gtfsId" : "F:B", - "lat" : 6.0, - "lon" : 8.5, - "name" : "B", - "vehicleMode" : "BUS", - "allRoutes" : [ + "gtfsId": "F:B", + "lat": 6.0, + "lon": 8.5, + "name": "B", + "vehicleMode": "BUS", + "allRoutes": [ { - "gtfsId" : "F:a-route", - "longName" : null, - "shortName" : "Ra-route" + "gtfsId": "F:a-route", + "longName": null, + "shortName": "Ra-route" } ], - "routesWithinRange" : [ ] + "routesWithinRange": [] }, { - "gtfsId" : "F:C", - "lat" : 7.0, - "lon" : 9.0, - "name" : "C", - "vehicleMode" : "BUS", - "allRoutes" : [ + "gtfsId": "F:C", + "lat": 7.0, + "lon": 9.0, + "name": "C", + "vehicleMode": "BUS", + "allRoutes": [ { - "gtfsId" : "F:a-route", - "longName" : null, - "shortName" : "Ra-route" + "gtfsId": "F:a-route", + "longName": null, + "shortName": "Ra-route" } ], - "routesWithinRange" : [ ] + "routesWithinRange": [] }, { - "gtfsId" : "F:D", - "lat" : 8.0, - "lon" : 9.5, - "name" : "D", - "vehicleMode" : "BUS", - "allRoutes" : [ + "gtfsId": "F:D", + "lat": 8.0, + "lon": 9.5, + "name": "D", + "vehicleMode": "BUS", + "allRoutes": [ { - "gtfsId" : "F:a-route", - "longName" : null, - "shortName" : "Ra-route" + "gtfsId": "F:a-route", + "longName": null, + "shortName": "Ra-route" } ], - "routesWithinRange" : [ ] + "routesWithinRange": [] }, { - "gtfsId" : "F:E", - "lat" : 9.0, - "lon" : 10.0, - "name" : "E", - "vehicleMode" : "BUS", - "allRoutes" : [ + "gtfsId": "F:E", + "lat": 9.0, + "lon": 10.0, + "name": "E", + "vehicleMode": "BUS", + "allRoutes": [ { - "gtfsId" : "F:a-route", - "longName" : null, - "shortName" : "Ra-route" + "gtfsId": "F:a-route", + "longName": null, + "shortName": "Ra-route" } ], - "routesWithinRange" : [ ] + "routesWithinRange": [] }, { - "gtfsId" : "F:F", - "lat" : 9.0, - "lon" : 10.5, - "name" : "F", - "vehicleMode" : "BUS", - "allRoutes" : [ + "gtfsId": "F:F", + "lat": 9.0, + "lon": 10.5, + "name": "F", + "vehicleMode": "BUS", + "allRoutes": [ { - "gtfsId" : "F:a-route", - "longName" : null, - "shortName" : "Ra-route" + "gtfsId": "F:a-route", + "longName": null, + "shortName": "Ra-route" } ], - "routesWithinRange" : [ ] + "routesWithinRange": [] }, { - "gtfsId" : "F:G", - "lat" : 9.5, - "lon" : 11.0, - "name" : "G", - "vehicleMode" : "BUS", - "allRoutes" : [ + "gtfsId": "F:G", + "lat": 9.5, + "lon": 11.0, + "name": "G", + "vehicleMode": "BUS", + "allRoutes": [ { - "gtfsId" : "F:a-route", - "longName" : null, - "shortName" : "Ra-route" + "gtfsId": "F:a-route", + "longName": null, + "shortName": "Ra-route" } ], - "routesWithinRange" : [ ] + "routesWithinRange": [] }, { - "gtfsId" : "F:H", - "lat" : 10.0, - "lon" : 11.5, - "name" : "H", - "vehicleMode" : "BUS", - "allRoutes" : [ + "gtfsId": "F:H", + "lat": 10.0, + "lon": 11.5, + "name": "H", + "vehicleMode": "BUS", + "allRoutes": [ { - "gtfsId" : "F:a-route", - "longName" : null, - "shortName" : "Ra-route" + "gtfsId": "F:a-route", + "longName": null, + "shortName": "Ra-route" } ], - "routesWithinRange" : [ ] + "routesWithinRange": [] } ] } -} \ No newline at end of file +} diff --git a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-parking.json b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-parking.json index 196c00de6f4..549f0b29343 100644 --- a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-parking.json +++ b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-parking.json @@ -1,10 +1,10 @@ { - "data" : { - "vehicleParkings" : [ + "data": { + "vehicleParkings": [ { - "name" : "parking", - "vehicleParkingId" : "F:parking-1" + "name": "parking", + "vehicleParkingId": "F:parking-1" } ] } -} \ No newline at end of file +} diff --git a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-rental-station.json b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-rental-station.json index ad1ce76d9be..e7c1e52770f 100644 --- a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-rental-station.json +++ b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-rental-station.json @@ -1,61 +1,61 @@ { - "data" : { - "vehicleRentalStation" : { - "stationId" : "Network-1:FooStation", - "name" : "FooStation", - "vehiclesAvailable" : 10, - "availableVehicles" : { - "byType" : [ + "data": { + "vehicleRentalStation": { + "stationId": "Network-1:FooStation", + "name": "FooStation", + "vehiclesAvailable": 10, + "availableVehicles": { + "byType": [ { - "vehicleType" : { - "formFactor" : "BICYCLE", - "propulsionType" : "ELECTRIC" + "vehicleType": { + "formFactor": "BICYCLE", + "propulsionType": "ELECTRIC" }, - "count" : 5 + "count": 5 }, { - "vehicleType" : { - "formFactor" : "BICYCLE", - "propulsionType" : "HUMAN" + "vehicleType": { + "formFactor": "BICYCLE", + "propulsionType": "HUMAN" }, - "count" : 5 + "count": 5 } ], - "total" : 10 + "total": 10 }, - "spacesAvailable" : 10, - "availableSpaces" : { - "byType" : [ + "spacesAvailable": 10, + "availableSpaces": { + "byType": [ { - "vehicleType" : { - "formFactor" : "BICYCLE", - "propulsionType" : "ELECTRIC" + "vehicleType": { + "formFactor": "BICYCLE", + "propulsionType": "ELECTRIC" }, - "count" : 3 + "count": 3 }, { - "vehicleType" : { - "formFactor" : "BICYCLE", - "propulsionType" : "HUMAN" + "vehicleType": { + "formFactor": "BICYCLE", + "propulsionType": "HUMAN" }, - "count" : 7 + "count": 7 } ], - "total" : 10 + "total": 10 }, - "allowDropoff" : false, - "allowPickup" : false, - "allowDropoffNow" : false, - "allowPickupNow" : false, - "lon" : 18.99, - "lat" : 47.51, - "capacity" : null, - "allowOverloading" : false, - "rentalUris" : null, - "operative" : false, - "rentalNetwork" : { - "networkId" : "Network-1", - "url" : "https://foo.bar" + "allowDropoff": false, + "allowPickup": false, + "allowDropoffNow": false, + "allowPickupNow": false, + "lon": 18.99, + "lat": 47.51, + "capacity": null, + "allowOverloading": false, + "rentalUris": null, + "operative": false, + "rentalNetwork": { + "networkId": "Network-1", + "url": "https://foo.bar" } } } diff --git a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-rentals-bybbox.json b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-rentals-bybbox.json index 01422dd6580..d28e62f8d93 100644 --- a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-rentals-bybbox.json +++ b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-rentals-bybbox.json @@ -80,4 +80,4 @@ } ] } -} \ No newline at end of file +} diff --git a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/walk-steps.json b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/walk-steps.json index be584a875be..49908207d44 100644 --- a/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/walk-steps.json +++ b/application/src/test/resources/org/opentripplanner/apis/gtfs/expectations/walk-steps.json @@ -1,34 +1,34 @@ { - "data" : { - "planConnection" : { - "edges" : [ + "data": { + "planConnection": { + "edges": [ { - "node" : { - "legs" : [ + "node": { + "legs": [ { - "steps" : [ + "steps": [ { - "streetName" : "street", - "area" : false, - "relativeDirection" : "DEPART", - "absoluteDirection" : "NORTHEAST" + "streetName": "street", + "area": false, + "relativeDirection": "DEPART", + "absoluteDirection": "NORTHEAST" }, { - "streetName" : "elevator", - "area" : false, - "relativeDirection" : "ELEVATOR", - "absoluteDirection" : null + "streetName": "elevator", + "area": false, + "relativeDirection": "ELEVATOR", + "absoluteDirection": null } ] }, { - "steps" : [ ] + "steps": [] }, { - "steps" : [ ] + "steps": [] }, { - "steps" : [ ] + "steps": [] } ] } @@ -36,4 +36,4 @@ ] } } -} \ No newline at end of file +} diff --git a/application/src/test/resources/org/opentripplanner/apis/vectortiles/style.json b/application/src/test/resources/org/opentripplanner/apis/vectortiles/style.json index 2cf936a1e63..b08a225fde3 100644 --- a/application/src/test/resources/org/opentripplanner/apis/vectortiles/style.json +++ b/application/src/test/resources/org/opentripplanner/apis/vectortiles/style.json @@ -1,144 +1,83 @@ { - "name" : "OTP Debug Tiles", - "sources" : { - "background" : { - "id" : "background", - "tiles" : [ - "https://a.tile.openstreetmap.org/{z}/{x}/{y}.png" - ], - "maxzoom" : 19, - "tileSize" : 256, - "attribution" : "© OpenStreetMap Contributors", - "type" : "raster" + "name": "OTP Debug Tiles", + "sources": { + "background": { + "id": "background", + "tiles": ["https://a.tile.openstreetmap.org/{z}/{x}/{y}.png"], + "maxzoom": 19, + "tileSize": 256, + "attribution": "© OpenStreetMap Contributors", + "type": "raster" }, - "vectorSource" : { - "id" : "vectorSource", - "url" : "https://example.com", - "type" : "vector" + "vectorSource": { + "id": "vectorSource", + "url": "https://example.com", + "type": "vector" } }, - "layers" : [ + "layers": [ { - "id" : "background", - "type" : "raster", - "source" : "background", - "minzoom" : 0, - "metadata" : { - "group" : "Other" + "id": "background", + "type": "raster", + "source": "background", + "minzoom": 0, + "metadata": { + "group": "Other" } }, { - "id" : "wheelchair-accessible", - "source" : "vectorSource", - "source-layer" : "edges", - "type" : "line", - "minzoom" : 6, - "maxzoom" : 23, - "paint" : { - "line-color" : "#136b04", - "line-width" : [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 13, - 0.2, - 23, - 8.0 - ], - "line-offset" : [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 13, - 0.4, - 23, - 7.0 - ] - }, - "filter" : [ - "==", - "wheelchairAccessible", - true - ], - "layout" : { - "line-cap" : "round", - "visibility" : "none" - }, - "metadata" : { - "group" : "Wheelchair accessibility" + "id": "wheelchair-accessible", + "source": "vectorSource", + "source-layer": "edges", + "type": "line", + "minzoom": 6, + "maxzoom": 23, + "paint": { + "line-color": "#136b04", + "line-width": ["interpolate", ["linear"], ["zoom"], 13, 0.2, 23, 8.0], + "line-offset": ["interpolate", ["linear"], ["zoom"], 13, 0.4, 23, 7.0] + }, + "filter": ["==", "wheelchairAccessible", true], + "layout": { + "line-cap": "round", + "visibility": "none" + }, + "metadata": { + "group": "Wheelchair accessibility" } }, { - "id" : "wheelchair-inaccessible", - "source" : "vectorSource", - "source-layer" : "edges", - "type" : "line", - "minzoom" : 6, - "maxzoom" : 23, - "paint" : { - "line-color" : "#fc0f2a", - "line-width" : [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 13, - 0.2, - 23, - 8.0 - ], - "line-offset" : [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 13, - 0.4, - 23, - 7.0 - ] - }, - "filter" : [ - "==", - "wheelchairAccessible", - false - ], - "layout" : { - "line-cap" : "round", - "visibility" : "none" - }, - "metadata" : { - "group" : "Wheelchair accessibility" + "id": "wheelchair-inaccessible", + "source": "vectorSource", + "source-layer": "edges", + "type": "line", + "minzoom": 6, + "maxzoom": 23, + "paint": { + "line-color": "#fc0f2a", + "line-width": ["interpolate", ["linear"], ["zoom"], 13, 0.2, 23, 8.0], + "line-offset": ["interpolate", ["linear"], ["zoom"], 13, 0.4, 23, 7.0] + }, + "filter": ["==", "wheelchairAccessible", false], + "layout": { + "line-cap": "round", + "visibility": "none" + }, + "metadata": { + "group": "Wheelchair accessibility" } }, { - "id" : "no-thru-traffic PEDESTRIAN", - "source" : "vectorSource", - "source-layer" : "edges", - "type" : "line", - "minzoom" : 13, - "maxzoom" : 23, - "paint" : { - "line-color" : [ + "id": "no-thru-traffic PEDESTRIAN", + "source": "vectorSource", + "source-layer": "edges", + "type": "line", + "minzoom": 13, + "maxzoom": 23, + "paint": { + "line-color": [ "match", - [ - "get", - "noThruTraffic" - ], + ["get", "noThruTraffic"], "NONE", "#140d0e", "PEDESTRIAN", @@ -157,80 +96,33 @@ "#adb2b0", "#140d0e" ], - "line-width" : [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 13, - 0.2, - 23, - 8.0 - ], - "line-offset" : [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 13, - 0.4, - 23, - 7.0 - ] + "line-width": ["interpolate", ["linear"], ["zoom"], 13, 0.2, 23, 8.0], + "line-offset": ["interpolate", ["linear"], ["zoom"], 13, 0.4, 23, 7.0] }, - "filter" : [ + "filter": [ "any", - [ - "in", - "PEDESTRIAN", - [ - "string", - [ - "get", - "noThruTraffic" - ] - ] - ], - [ - "in", - "ALL", - [ - "string", - [ - "get", - "noThruTraffic" - ] - ] - ] + ["in", "PEDESTRIAN", ["string", ["get", "noThruTraffic"]]], + ["in", "ALL", ["string", ["get", "noThruTraffic"]]] ], - "layout" : { - "line-cap" : "butt", - "visibility" : "none" + "layout": { + "line-cap": "butt", + "visibility": "none" }, - "metadata" : { - "group" : "No-thru traffic" + "metadata": { + "group": "No-thru traffic" } }, { - "id" : "no-thru-traffic BICYCLE", - "source" : "vectorSource", - "source-layer" : "edges", - "type" : "line", - "minzoom" : 13, - "maxzoom" : 23, - "paint" : { - "line-color" : [ + "id": "no-thru-traffic BICYCLE", + "source": "vectorSource", + "source-layer": "edges", + "type": "line", + "minzoom": 13, + "maxzoom": 23, + "paint": { + "line-color": [ "match", - [ - "get", - "noThruTraffic" - ], + ["get", "noThruTraffic"], "NONE", "#140d0e", "PEDESTRIAN", @@ -249,80 +141,33 @@ "#adb2b0", "#140d0e" ], - "line-width" : [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 13, - 0.2, - 23, - 8.0 - ], - "line-offset" : [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 13, - 0.4, - 23, - 7.0 - ] + "line-width": ["interpolate", ["linear"], ["zoom"], 13, 0.2, 23, 8.0], + "line-offset": ["interpolate", ["linear"], ["zoom"], 13, 0.4, 23, 7.0] }, - "filter" : [ + "filter": [ "any", - [ - "in", - "BICYCLE", - [ - "string", - [ - "get", - "noThruTraffic" - ] - ] - ], - [ - "in", - "ALL", - [ - "string", - [ - "get", - "noThruTraffic" - ] - ] - ] + ["in", "BICYCLE", ["string", ["get", "noThruTraffic"]]], + ["in", "ALL", ["string", ["get", "noThruTraffic"]]] ], - "layout" : { - "line-cap" : "butt", - "visibility" : "none" + "layout": { + "line-cap": "butt", + "visibility": "none" }, - "metadata" : { - "group" : "No-thru traffic" + "metadata": { + "group": "No-thru traffic" } }, { - "id" : "no-thru-traffic CAR", - "source" : "vectorSource", - "source-layer" : "edges", - "type" : "line", - "minzoom" : 13, - "maxzoom" : 23, - "paint" : { - "line-color" : [ + "id": "no-thru-traffic CAR", + "source": "vectorSource", + "source-layer": "edges", + "type": "line", + "minzoom": 13, + "maxzoom": 23, + "paint": { + "line-color": [ "match", - [ - "get", - "noThruTraffic" - ], + ["get", "noThruTraffic"], "NONE", "#140d0e", "PEDESTRIAN", @@ -341,80 +186,36 @@ "#adb2b0", "#140d0e" ], - "line-width" : [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 13, - 0.2, - 23, - 8.0 - ], - "line-offset" : [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 13, - 0.4, - 23, - 7.0 - ] + "line-width": ["interpolate", ["linear"], ["zoom"], 13, 0.2, 23, 8.0], + "line-offset": ["interpolate", ["linear"], ["zoom"], 13, 0.4, 23, 7.0] }, - "filter" : [ + "filter": [ "any", - [ - "in", - "CAR", - [ - "string", - [ - "get", - "noThruTraffic" - ] - ] - ], - [ - "in", - "ALL", - [ - "string", - [ - "get", - "noThruTraffic" - ] - ] - ] + ["in", "CAR", ["string", ["get", "noThruTraffic"]]], + ["in", "ALL", ["string", ["get", "noThruTraffic"]]] ], - "layout" : { - "line-cap" : "butt", - "visibility" : "none" + "layout": { + "line-cap": "butt", + "visibility": "none" }, - "metadata" : { - "group" : "No-thru traffic" + "metadata": { + "group": "No-thru traffic" } }, { - "id" : "no-thru-traffic-text", - "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 - }, - "filter" : [ + "id": "no-thru-traffic-text", + "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 + }, + "filter": [ "in", "class", "StreetEdge", @@ -425,54 +226,34 @@ "TemporaryPartialStreetEdge", "TemporaryFreeEdge" ], - "layout" : { - "symbol-placement" : "line-center", - "symbol-spacing" : 1000, - "text-field" : "{noThruTraffic}", - "text-font" : [ - "KlokanTech Noto Sans Regular" - ], - "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" : { - "group" : "No-thru traffic" + "layout": { + "symbol-placement": "line-center", + "symbol-spacing": 1000, + "text-field": "{noThruTraffic}", + "text-font": ["KlokanTech Noto Sans Regular"], + "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": { + "group": "No-thru traffic" } }, { - "id" : "permission PEDESTRIAN", - "source" : "vectorSource", - "source-layer" : "edges", - "type" : "line", - "minzoom" : 13, - "maxzoom" : 23, - "paint" : { - "line-color" : [ + "id": "permission PEDESTRIAN", + "source": "vectorSource", + "source-layer": "edges", + "type": "line", + "minzoom": 13, + "maxzoom": 23, + "paint": { + "line-color": [ "match", - [ - "get", - "permission" - ], + ["get", "permission"], "NONE", "#140d0e", "PEDESTRIAN", @@ -491,80 +272,33 @@ "#adb2b0", "#140d0e" ], - "line-width" : [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 13, - 0.2, - 23, - 8.0 - ], - "line-offset" : [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 13, - 0.4, - 23, - 7.0 - ] + "line-width": ["interpolate", ["linear"], ["zoom"], 13, 0.2, 23, 8.0], + "line-offset": ["interpolate", ["linear"], ["zoom"], 13, 0.4, 23, 7.0] }, - "filter" : [ + "filter": [ "any", - [ - "in", - "PEDESTRIAN", - [ - "string", - [ - "get", - "permission" - ] - ] - ], - [ - "in", - "ALL", - [ - "string", - [ - "get", - "permission" - ] - ] - ] + ["in", "PEDESTRIAN", ["string", ["get", "permission"]]], + ["in", "ALL", ["string", ["get", "permission"]]] ], - "layout" : { - "line-cap" : "butt", - "visibility" : "none" + "layout": { + "line-cap": "butt", + "visibility": "none" }, - "metadata" : { - "group" : "Permissions" + "metadata": { + "group": "Permissions" } }, { - "id" : "permission BICYCLE", - "source" : "vectorSource", - "source-layer" : "edges", - "type" : "line", - "minzoom" : 13, - "maxzoom" : 23, - "paint" : { - "line-color" : [ + "id": "permission BICYCLE", + "source": "vectorSource", + "source-layer": "edges", + "type": "line", + "minzoom": 13, + "maxzoom": 23, + "paint": { + "line-color": [ "match", - [ - "get", - "permission" - ], + ["get", "permission"], "NONE", "#140d0e", "PEDESTRIAN", @@ -583,80 +317,33 @@ "#adb2b0", "#140d0e" ], - "line-width" : [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 13, - 0.2, - 23, - 8.0 - ], - "line-offset" : [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 13, - 0.4, - 23, - 7.0 - ] + "line-width": ["interpolate", ["linear"], ["zoom"], 13, 0.2, 23, 8.0], + "line-offset": ["interpolate", ["linear"], ["zoom"], 13, 0.4, 23, 7.0] }, - "filter" : [ + "filter": [ "any", - [ - "in", - "BICYCLE", - [ - "string", - [ - "get", - "permission" - ] - ] - ], - [ - "in", - "ALL", - [ - "string", - [ - "get", - "permission" - ] - ] - ] + ["in", "BICYCLE", ["string", ["get", "permission"]]], + ["in", "ALL", ["string", ["get", "permission"]]] ], - "layout" : { - "line-cap" : "butt", - "visibility" : "none" + "layout": { + "line-cap": "butt", + "visibility": "none" }, - "metadata" : { - "group" : "Permissions" + "metadata": { + "group": "Permissions" } }, { - "id" : "permission CAR", - "source" : "vectorSource", - "source-layer" : "edges", - "type" : "line", - "minzoom" : 13, - "maxzoom" : 23, - "paint" : { - "line-color" : [ + "id": "permission CAR", + "source": "vectorSource", + "source-layer": "edges", + "type": "line", + "minzoom": 13, + "maxzoom": 23, + "paint": { + "line-color": [ "match", - [ - "get", - "permission" - ], + ["get", "permission"], "NONE", "#140d0e", "PEDESTRIAN", @@ -675,80 +362,36 @@ "#adb2b0", "#140d0e" ], - "line-width" : [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 13, - 0.2, - 23, - 8.0 - ], - "line-offset" : [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 13, - 0.4, - 23, - 7.0 - ] + "line-width": ["interpolate", ["linear"], ["zoom"], 13, 0.2, 23, 8.0], + "line-offset": ["interpolate", ["linear"], ["zoom"], 13, 0.4, 23, 7.0] }, - "filter" : [ + "filter": [ "any", - [ - "in", - "CAR", - [ - "string", - [ - "get", - "permission" - ] - ] - ], - [ - "in", - "ALL", - [ - "string", - [ - "get", - "permission" - ] - ] - ] + ["in", "CAR", ["string", ["get", "permission"]]], + ["in", "ALL", ["string", ["get", "permission"]]] ], - "layout" : { - "line-cap" : "butt", - "visibility" : "none" + "layout": { + "line-cap": "butt", + "visibility": "none" }, - "metadata" : { - "group" : "Permissions" + "metadata": { + "group": "Permissions" } }, { - "id" : "permission-text", - "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 - }, - "filter" : [ + "id": "permission-text", + "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 + }, + "filter": [ "in", "class", "StreetEdge", @@ -759,77 +402,36 @@ "TemporaryPartialStreetEdge", "TemporaryFreeEdge" ], - "layout" : { - "symbol-placement" : "line-center", - "symbol-spacing" : 1000, - "text-field" : "{permission}", - "text-font" : [ - "KlokanTech Noto Sans Regular" - ], - "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" : { - "group" : "Permissions" + "layout": { + "symbol-placement": "line-center", + "symbol-spacing": 1000, + "text-field": "{permission}", + "text-font": ["KlokanTech Noto Sans Regular"], + "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": { + "group": "Permissions" } }, { - "id" : "edge", - "type" : "line", - "source" : "vectorSource", - "source-layer" : "edges", - "minzoom" : 6, - "maxzoom" : 23, - "paint" : { - "line-color" : "#f21d52", - "line-width" : [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 13, - 0.1, - 23, - 6.0 - ], - "line-offset" : [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 13, - 0.4, - 23, - 7.0 - ] - }, - "filter" : [ + "id": "edge", + "type": "line", + "source": "vectorSource", + "source-layer": "edges", + "minzoom": 6, + "maxzoom": 23, + "paint": { + "line-color": "#f21d52", + "line-width": ["interpolate", ["linear"], ["zoom"], 13, 0.1, 23, 6.0], + "line-offset": ["interpolate", ["linear"], ["zoom"], 13, 0.4, 23, 7.0] + }, + "filter": [ "in", "class", "StreetEdge", @@ -840,28 +442,28 @@ "TemporaryPartialStreetEdge", "TemporaryFreeEdge" ], - "layout" : { - "line-cap" : "round", - "visibility" : "none" + "layout": { + "line-cap": "round", + "visibility": "none" }, - "metadata" : { - "group" : "Edges" + "metadata": { + "group": "Edges" } }, { - "id" : "edge-name", - "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" : [ + "id": "edge-name", + "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", @@ -872,73 +474,35 @@ "TemporaryPartialStreetEdge", "TemporaryFreeEdge" ], - "layout" : { - "symbol-placement" : "line-center", - "symbol-spacing" : 1000, - "text-field" : "{name}", - "text-font" : [ - "KlokanTech Noto Sans Regular" - ], - "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" : { - "group" : "Edges" + "layout": { + "symbol-placement": "line-center", + "symbol-spacing": 1000, + "text-field": "{name}", + "text-font": ["KlokanTech Noto Sans Regular"], + "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": { + "group": "Edges" } }, { - "id" : "link", - "type" : "line", - "source" : "vectorSource", - "source-layer" : "edges", - "minzoom" : 13, - "maxzoom" : 23, - "paint" : { - "line-color" : "#22DD9E", - "line-width" : [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 13, - 0.2, - 23, - 8.0 - ], - "line-offset" : [ - "interpolate", - [ - "linear" - ], - [ - "zoom" - ], - 13, - 0.4, - 23, - 7.0 - ] - }, - "filter" : [ + "id": "link", + "type": "line", + "source": "vectorSource", + "source-layer": "edges", + "minzoom": 13, + "maxzoom": 23, + "paint": { + "line-color": "#22DD9E", + "line-width": ["interpolate", ["linear"], ["zoom"], 13, 0.2, 23, 8.0], + "line-offset": ["interpolate", ["linear"], ["zoom"], 13, 0.4, 23, 7.0] + }, + "filter": [ "in", "class", "StreetTransitStopLink", @@ -948,181 +512,153 @@ "StreetVehicleParkingLink", "StreetStationCentroidLink" ], - "layout" : { - "line-cap" : "round", - "visibility" : "none" + "layout": { + "line-cap": "round", + "visibility": "none" }, - "metadata" : { - "group" : "Edges" + "metadata": { + "group": "Edges" } }, { - "id" : "vertex", - "type" : "circle", - "source" : "vectorSource", - "source-layer" : "vertices", - "minzoom" : 15, - "maxzoom" : 23, - "paint" : { - "circle-stroke-color" : "#140d0e", - "circle-stroke-width" : [ + "id": "vertex", + "type": "circle", + "source": "vectorSource", + "source-layer": "vertices", + "minzoom": 15, + "maxzoom": 23, + "paint": { + "circle-stroke-color": "#140d0e", + "circle-stroke-width": [ "interpolate", - [ - "linear" - ], - [ - "zoom" - ], + ["linear"], + ["zoom"], 15, 0.2, 23, 3.0 ], - "circle-radius" : [ + "circle-radius": [ "interpolate", - [ - "linear" - ], - [ - "zoom" - ], + ["linear"], + ["zoom"], 15, 1.0, 23, 7.0 ], - "circle-color" : "#BC55F2" + "circle-color": "#BC55F2" }, - "layout" : { - "visibility" : "none" + "layout": { + "visibility": "none" }, - "metadata" : { - "group" : "Vertices" + "metadata": { + "group": "Vertices" } }, { - "id" : "parking-vertex", - "type" : "circle", - "source" : "vectorSource", - "source-layer" : "vertices", - "minzoom" : 13, - "maxzoom" : 23, - "paint" : { - "circle-stroke-color" : "#140d0e", - "circle-stroke-width" : [ + "id": "parking-vertex", + "type": "circle", + "source": "vectorSource", + "source-layer": "vertices", + "minzoom": 13, + "maxzoom": 23, + "paint": { + "circle-stroke-color": "#140d0e", + "circle-stroke-width": [ "interpolate", - [ - "linear" - ], - [ - "zoom" - ], + ["linear"], + ["zoom"], 15, 0.2, 23, 3.0 ], - "circle-radius" : [ + "circle-radius": [ "interpolate", - [ - "linear" - ], - [ - "zoom" - ], + ["linear"], + ["zoom"], 13, 1.4, 23, 10.0 ], - "circle-color" : "#136b04" + "circle-color": "#136b04" }, - "filter" : [ - "in", - "class", - "VehicleParkingEntranceVertex" - ], - "layout" : { - "visibility" : "none" + "filter": ["in", "class", "VehicleParkingEntranceVertex"], + "layout": { + "visibility": "none" }, - "metadata" : { - "group" : "Vertices" + "metadata": { + "group": "Vertices" } }, { - "id" : "area-stop", - "type" : "fill", - "source" : "vectorSource", - "source-layer" : "stops", - "minzoom" : 6, - "maxzoom" : 23, - "paint" : { - "fill-color" : "#22DD9E", - "fill-opacity" : 0.5, - "fill-outline-color" : "#140d0e" - }, - "metadata" : { - "group" : "Stops" + "id": "area-stop", + "type": "fill", + "source": "vectorSource", + "source-layer": "stops", + "minzoom": 6, + "maxzoom": 23, + "paint": { + "fill-color": "#22DD9E", + "fill-opacity": 0.5, + "fill-outline-color": "#140d0e" + }, + "metadata": { + "group": "Stops" } }, { - "id" : "group-stop", - "type" : "fill", - "source" : "vectorSource", - "source-layer" : "stops", - "minzoom" : 6, - "maxzoom" : 23, - "paint" : { - "fill-color" : "#22DD9E", - "fill-opacity" : 0.5, - "fill-outline-color" : "#140d0e" - }, - "metadata" : { - "group" : "Stops" + "id": "group-stop", + "type": "fill", + "source": "vectorSource", + "source-layer": "stops", + "minzoom": 6, + "maxzoom": 23, + "paint": { + "fill-color": "#22DD9E", + "fill-opacity": 0.5, + "fill-outline-color": "#140d0e" + }, + "metadata": { + "group": "Stops" } }, { - "id" : "regular-stop", - "type" : "circle", - "source" : "vectorSource", - "source-layer" : "stops", - "minzoom" : 10, - "maxzoom" : 23, - "paint" : { - "circle-stroke-color" : "#140d0e", - "circle-stroke-width" : [ + "id": "regular-stop", + "type": "circle", + "source": "vectorSource", + "source-layer": "stops", + "minzoom": 10, + "maxzoom": 23, + "paint": { + "circle-stroke-color": "#140d0e", + "circle-stroke-width": [ "interpolate", - [ - "linear" - ], - [ - "zoom" - ], + ["linear"], + ["zoom"], 11, 0.5, 23, 5.0 ], - "circle-radius" : [ + "circle-radius": [ "interpolate", - [ - "linear" - ], - [ - "zoom" - ], + ["linear"], + ["zoom"], 11, 0.5, 23, 10.0 ], - "circle-color" : "#fcf9fa" + "circle-color": "#fcf9fa" }, - "metadata" : { - "group" : "Stops" + "metadata": { + "group": "Stops" } } ], - "version" : 8, - "glyphs" : "https://cdn.jsdelivr.net/gh/klokantech/klokantech-gl-fonts@master/{fontstack}/{range}.pbf" -} \ No newline at end of file + "version": 8, + "glyphs": "https://cdn.jsdelivr.net/gh/klokantech/klokantech-gl-fonts@master/{fontstack}/{range}.pbf" +} diff --git a/application/src/test/resources/portland/build-config.json b/application/src/test/resources/portland/build-config.json index 910f54d7211..96cfdec93a7 100644 --- a/application/src/test/resources/portland/build-config.json +++ b/application/src/test/resources/portland/build-config.json @@ -3,4 +3,4 @@ "transitServiceEnd": "2010-03-01", "staticBikeParkAndRide": true, "staticParkAndRide": true -} \ No newline at end of file +} diff --git a/application/src/test/resources/portland/router-config.json b/application/src/test/resources/portland/router-config.json index 7a73a41bfdf..0967ef424bc 100644 --- a/application/src/test/resources/portland/router-config.json +++ b/application/src/test/resources/portland/router-config.json @@ -1,2 +1 @@ -{ -} \ No newline at end of file +{} diff --git a/application/src/test/resources/speedtest/speed-test-config.json b/application/src/test/resources/speedtest/speed-test-config.json index af5c0745ab0..ca8f9e02807 100644 --- a/application/src/test/resources/speedtest/speed-test-config.json +++ b/application/src/test/resources/speedtest/speed-test-config.json @@ -2,11 +2,11 @@ // Run all test-cases on the given date "testDate": "2009-12-17", "feedId": "1", - "ignoreStreetResults" : true, + "ignoreStreetResults": true, "routingDefaults": { - "itineraryFilters" : { + "itineraryFilters": { // We do not want the filter chain to remove itineraries "debug": "LIST_ALL" } } -} \ No newline at end of file +} diff --git a/application/src/test/resources/standalone/config/build-config.json b/application/src/test/resources/standalone/config/build-config.json index 63df4608944..11ea4a36b2e 100644 --- a/application/src/test/resources/standalone/config/build-config.json +++ b/application/src/test/resources/standalone/config/build-config.json @@ -1,65 +1,69 @@ { "transitServiceStart": "-P3M", - "transitServiceEnd": "P1Y", - "osmCacheDataInMem" : true, - "localFileNamePatterns" : { - "osm" : "(i?)\\.osm\\.pbf$", - "dem" : "(i?)\\.dem\\.tiff?$", - "gtfs" : "(?i)gtfs", - "netex" : "(?i)netex" + "transitServiceEnd": "P1Y", + "osmCacheDataInMem": true, + "localFileNamePatterns": { + "osm": "(i?)\\.osm\\.pbf$", + "dem": "(i?)\\.dem\\.tiff?$", + "gtfs": "(?i)gtfs", + "netex": "(?i)netex" }, "osmDefaults": { "timeZone": "Europe/Rome", "osmTagMapping": "default" }, - "osm": [{ - "source" : "gs://my-bucket/otp-work-dir/norway.osm.pbf", - "timeZone" : "Europe/Oslo", - "osmTagMapping" : "norway" - }], + "osm": [ + { + "source": "gs://my-bucket/otp-work-dir/norway.osm.pbf", + "timeZone": "Europe/Oslo", + "osmTagMapping": "norway" + } + ], "demDefaults": { - "elevationUnitMultiplier" : 1.0 + "elevationUnitMultiplier": 1.0 }, - "dem": [{ - "source" : "gs://my-bucket/otp-work-dir/norway.dem.tiff", - "elevationUnitMultiplier" : 2.5 - }], - "netexDefaults" : { - "feedId" : "EN", - "sharedFilePattern" : "_stops.xml", - "sharedGroupFilePattern" : "_(\\w{3})_shared_data.xml", - "groupFilePattern" : "(\\w{3})_.*\\.xml", - "ignoreFilePattern" : "(temp|tmp)", - "ferryIdsNotAllowedForBicycle" : ["RUT:B107", "RUT:B209"] + "dem": [ + { + "source": "gs://my-bucket/otp-work-dir/norway.dem.tiff", + "elevationUnitMultiplier": 2.5 + } + ], + "netexDefaults": { + "feedId": "EN", + "sharedFilePattern": "_stops.xml", + "sharedGroupFilePattern": "_(\\w{3})_shared_data.xml", + "groupFilePattern": "(\\w{3})_.*\\.xml", + "ignoreFilePattern": "(temp|tmp)", + "ferryIdsNotAllowedForBicycle": ["RUT:B107", "RUT:B209"] }, - "gtfsDefaults" : { - "stationTransferPreference" : "recommended", - "removeRepeatedStops" : true, + "gtfsDefaults": { + "stationTransferPreference": "recommended", + "removeRepeatedStops": true, "discardMinTransferTimes": false, "blockBasedInterlining": true, "maxInterlineDistance": 200 }, - "islandPruning" : { + "islandPruning": { "islandWithStopsMaxSize": 2, "islandWithoutStopsMaxSize": 10, "adaptivePruningFactor": 50.0, "adaptivePruningDistance": 250 }, - "transitFeeds" : [ + "transitFeeds": [ { - "type" : "gtfs", - "feedId" : "SE", - "source" : "https://skanetrafiken.se/download/sweden.gtfs.zip" + "type": "gtfs", + "feedId": "SE", + "source": "https://skanetrafiken.se/download/sweden.gtfs.zip" }, { - "type" : "netex", - "feedId" : "NO", - "source" : "gs://BUCKET/OTP_GCS_WORK_DIR/norway-netex.obj", - "sharedFilePattern" : "_stops.xml", - "sharedGroupFilePattern" : "_(\\w{3})_shared_data.xml", - "groupFilePattern" : "(\\w{3})_.*\\.xml", - "ignoreFilePattern" : "(temp|tmp)" + "type": "netex", + "feedId": "NO", + "source": "gs://BUCKET/OTP_GCS_WORK_DIR/norway-netex.obj", + "sharedFilePattern": "_stops.xml", + "sharedGroupFilePattern": "_(\\w{3})_shared_data.xml", + "groupFilePattern": "(\\w{3})_.*\\.xml", + "ignoreFilePattern": "(temp|tmp)" //"ferryIdsNotAllowedForBicycle" : ["RUT:B107", "RUT:B209"] } ], diff --git a/application/src/test/resources/standalone/config/netex-tutorial/build-config.json b/application/src/test/resources/standalone/config/netex-tutorial/build-config.json index 467580a73a3..5e2788aae5e 100644 --- a/application/src/test/resources/standalone/config/netex-tutorial/build-config.json +++ b/application/src/test/resources/standalone/config/netex-tutorial/build-config.json @@ -17,4 +17,4 @@ } ], "osmCacheDataInMem": true -} \ No newline at end of file +} diff --git a/application/src/test/resources/standalone/config/netex-tutorial/router-config.json b/application/src/test/resources/standalone/config/netex-tutorial/router-config.json index c8f21dd527a..46f36c8c453 100644 --- a/application/src/test/resources/standalone/config/netex-tutorial/router-config.json +++ b/application/src/test/resources/standalone/config/netex-tutorial/router-config.json @@ -16,4 +16,4 @@ "blockReadinessUntilInitialized": true } ] -} \ No newline at end of file +} diff --git a/application/src/test/resources/standalone/config/router-config.json b/application/src/test/resources/standalone/config/router-config.json index f1eac1cb41e..4b6cf30f45d 100644 --- a/application/src/test/resources/standalone/config/router-config.json +++ b/application/src/test/resources/standalone/config/router-config.json @@ -119,12 +119,8 @@ "geoidElevation": false, "maxJourneyDuration": "36h", "unpreferred": { - "agencies": [ - "HSL:123" - ], - "routes": [ - "HSL:456" - ] + "agencies": ["HSL:123"], + "routes": ["HSL:456"] }, "unpreferredCost": "10m + 2.0 x", "streetRoutingTimeout": "5s", @@ -320,9 +316,7 @@ "headers": { "Cache-Control": "max-age=604800" }, - "tags": [ - "source:parkapi" - ] + "tags": ["source:parkapi"] }, { "type": "vehicle-parking", @@ -362,9 +356,7 @@ "Header-Name": "Header-Value" }, "fuzzyTripMatching": false, - "features": [ - "position" - ] + "features": ["position"] }, // Siri-ET over HTTP { @@ -404,8 +396,8 @@ { "type": "siri-azure-et-updater", "topic": "some_topic", - "authenticationType": "SharedAccessKey", - "fullyQualifiedNamespace": "fully_qualified_namespace", + "authenticationType": "SharedAccessKey", + "fullyQualifiedNamespace": "fully_qualified_namespace", "servicebus-url": "service_bus_url", "feedId": "feed_id", "customMidnight": 4, @@ -454,4 +446,3 @@ } ] } - diff --git a/application/src/test/resources/standalone/config/sandbox/build-config-data-overlay.json b/application/src/test/resources/standalone/config/sandbox/build-config-data-overlay.json index 41aac831646..ec348022dff 100644 --- a/application/src/test/resources/standalone/config/sandbox/build-config-data-overlay.json +++ b/application/src/test/resources/standalone/config/sandbox/build-config-data-overlay.json @@ -1,5 +1,5 @@ { - "dataOverlay" : { + "dataOverlay": { "fileName": "graphs/data-file.nc4", "latitudeVariable": "lat", "longitudeVariable": "lon", @@ -30,4 +30,4 @@ } ] } -} \ No newline at end of file +} diff --git a/client/package-lock.json b/client/package-lock.json index e1e00b4e99d..bbed0b8e4fa 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -15,13 +15,13 @@ "graphql-request": "7.1.2", "maplibre-gl": "4.7.1", "react": "18.3.1", - "react-bootstrap": "2.10.5", + "react-bootstrap": "2.10.6", "react-dom": "18.3.1", "react-map-gl": "7.1.7" }, "devDependencies": { "@graphql-codegen/cli": "5.0.3", - "@graphql-codegen/client-preset": "4.5.0", + "@graphql-codegen/client-preset": "4.5.1", "@graphql-codegen/introspection": "4.0.3", "@parcel/watcher": "2.5.0", "@testing-library/react": "16.0.1", @@ -29,20 +29,20 @@ "@types/react-dom": "18.3.1", "@typescript-eslint/eslint-plugin": "7.18.0", "@typescript-eslint/parser": "7.18.0", - "@vitejs/plugin-react": "4.3.3", - "@vitest/coverage-v8": "2.1.5", + "@vitejs/plugin-react": "4.3.4", + "@vitest/coverage-v8": "2.1.8", "eslint": "8.57.1", "eslint-config-prettier": "9.1.0", "eslint-plugin-import": "2.31.0", "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.14", + "eslint-plugin-react-refresh": "0.4.16", "jsdom": "25.0.1", - "prettier": "3.3.3", - "typescript": "5.6.3", - "vite": "5.4.11", - "vitest": "2.1.5" + "prettier": "3.4.1", + "typescript": "5.7.2", + "vite": "6.0.2", + "vitest": "2.1.8" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -215,13 +215,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", - "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/highlight": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" }, "engines": { @@ -229,32 +229,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.8.tgz", - "integrity": "sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", + "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.8.tgz", - "integrity": "sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", "dev": true, - "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@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", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -270,13 +268,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz", - "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.25.7", + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -298,14 +296,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz", - "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.7", - "@babel/helper-validator-option": "^7.25.7", + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -374,30 +371,27 @@ } }, "node_modules/@babel/helper-module-imports": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "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==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dev": true, - "license": "MIT", "dependencies": { - "@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" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -419,11 +413,10 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz", - "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -485,151 +478,52 @@ } }, "node_modules/@babel/helper-string-parser": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", - "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "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.25.7", - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "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==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/parser": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz", - "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.25.8" + "@babel/types": "^7.26.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -1019,13 +913,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", + "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1035,13 +928,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-source": { - "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", + "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1097,9 +989,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", - "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -1109,32 +1001,30 @@ } }, "node_modules/@babel/template": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", - "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.25.7", - "@babel/parser": "^7.25.7", - "@babel/types": "^7.25.7" + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", - "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", "dev": true, - "license": "MIT", "dependencies": { - "@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", + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1143,15 +1033,13 @@ } }, "node_modules/@babel/types": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz", - "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.7", - "@babel/helper-validator-identifier": "^7.25.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1164,394 +1052,387 @@ "dev": true }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz", + "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==", "cpu": [ "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz", + "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz", + "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz", + "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", + "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz", + "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz", + "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz", + "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz", + "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz", + "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz", + "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==", "cpu": [ "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz", + "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==", "cpu": [ "loong64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz", + "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==", "cpu": [ "mips64el" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz", + "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==", "cpu": [ "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz", + "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==", "cpu": [ "riscv64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz", + "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==", "cpu": [ "s390x" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz", + "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz", + "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz", + "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz", + "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz", + "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz", + "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz", + "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==", "cpu": [ "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz", + "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@eslint-community/eslint-utils": { @@ -1742,21 +1623,21 @@ } }, "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==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/client-preset/-/client-preset-4.5.1.tgz", + "integrity": "sha512-UE2/Kz2eaxv35HIXFwlm2QwoUH77am6+qp54aeEWYq+T+WPwmIc6+YzqtGiT/VcaXgoOUSgidREGm9R6jKcf9g==", "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.11", + "@graphql-codegen/gql-tag-operations": "4.0.12", "@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-codegen/typed-document-node": "^5.0.12", + "@graphql-codegen/typescript": "^4.1.2", + "@graphql-codegen/typescript-operations": "^4.4.0", + "@graphql-codegen/visitor-plugin-common": "^5.6.0", "@graphql-tools/documents": "^1.0.0", "@graphql-tools/utils": "^10.0.0", "@graphql-typed-document-node/core": "3.2.0", @@ -1785,14 +1666,14 @@ } }, "node_modules/@graphql-codegen/gql-tag-operations": { - "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==", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-4.0.12.tgz", + "integrity": "sha512-v279i49FJ5dMmQXIGUgm6FtnnkxtJjVJWDNYh9JK4ppvOixdHp+PmEzW227DkLN6avhVxNnYdp/1gdRBwdWypw==", "dev": true, "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.1.0", - "@graphql-codegen/visitor-plugin-common": "5.5.0", + "@graphql-codegen/visitor-plugin-common": "5.6.0", "@graphql-tools/utils": "^10.0.0", "auto-bind": "~4.0.0", "tslib": "~2.6.0" @@ -1855,14 +1736,14 @@ } }, "node_modules/@graphql-codegen/typed-document-node": { - "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==", + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typed-document-node/-/typed-document-node-5.0.12.tgz", + "integrity": "sha512-Wsbc1AqC+MFp3maWPzrmmyHLuWCPB63qBBFLTKtO6KSsnn0KnLocBp475wkfBZnFISFvzwpJ0e6LV71gKfTofQ==", "dev": true, "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.1.0", - "@graphql-codegen/visitor-plugin-common": "5.5.0", + "@graphql-codegen/visitor-plugin-common": "5.6.0", "auto-bind": "~4.0.0", "change-case-all": "1.0.15", "tslib": "~2.6.0" @@ -1875,15 +1756,15 @@ } }, "node_modules/@graphql-codegen/typescript": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-4.1.1.tgz", - "integrity": "sha512-+o5LOT71K9hdO4lDVnRGkkET5RdlKvxlQGug8dZgRGrhE2/xoPBsKfLhg9AoJGYMauNZxKj3blABQxHOKEku6Q==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-4.1.2.tgz", + "integrity": "sha512-GhPgfxgWEkBrvKR2y77OThus3K8B6U3ESo68l7+sHH1XiL2WapK5DdClViblJWKQerJRjfJu8tcaxQ8Wpk6Ogw==", "dev": true, "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.1.0", "@graphql-codegen/schema-ast": "^4.0.2", - "@graphql-codegen/visitor-plugin-common": "5.5.0", + "@graphql-codegen/visitor-plugin-common": "5.6.0", "auto-bind": "~4.0.0", "tslib": "~2.6.0" }, @@ -1895,15 +1776,15 @@ } }, "node_modules/@graphql-codegen/typescript-operations": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-4.3.1.tgz", - "integrity": "sha512-yW5Iia6IK1VKiPm3oeukYMQN5pEBLwRlG8ZzQA9beeLQ8PskKyz6mjar6U7dJ2hc8pv/qT4R8kcJOQ2RloniAQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-4.4.0.tgz", + "integrity": "sha512-oVlos2ySx8xIbbe8r5ZI6mOpI+OTeP14RmS2MchBJ6DL+S9G16O6+9V3Y8V22fTnmBTZkTfAAaBv4HYhhDGWVA==", "dev": true, "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.1.0", - "@graphql-codegen/typescript": "^4.1.1", - "@graphql-codegen/visitor-plugin-common": "5.5.0", + "@graphql-codegen/typescript": "^4.1.2", + "@graphql-codegen/visitor-plugin-common": "5.6.0", "auto-bind": "~4.0.0", "tslib": "~2.6.0" }, @@ -1915,9 +1796,9 @@ } }, "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==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.6.0.tgz", + "integrity": "sha512-PowcVPJbUqMC9xTJ/ZRX1p/fsdMZREc+69CM1YY+AlFng2lL0zsdBskFJSRoviQk2Ch9IPhKGyHxlJCy9X22tg==", "dev": true, "license": "MIT", "dependencies": { @@ -3127,19 +3008,19 @@ } }, "node_modules/@restart/ui": { - "version": "1.6.9", - "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.6.9.tgz", - "integrity": "sha512-mUbygUsJcRurjZCt1f77gg4DpheD1D+Sc7J3JjAkysUj7t8m4EBJVOqWC9788Qtbc69cJ+HlJc6jBguKwS8Mcw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.9.1.tgz", + "integrity": "sha512-qghR21ynHiUrpcIkKCoKYB+3rJtezY5Y7ikrwradCL+7hZHdQ2Ozc5ffxtpmpahoAGgc31gyXaSx2sXXaThmqA==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.21.0", - "@popperjs/core": "^2.11.6", + "@babel/runtime": "^7.26.0", + "@popperjs/core": "^2.11.8", "@react-aria/ssr": "^3.5.0", - "@restart/hooks": "^0.4.9", - "@types/warning": "^3.0.0", + "@restart/hooks": "^0.5.0", + "@types/warning": "^3.0.3", "dequal": "^2.0.3", "dom-helpers": "^5.2.0", - "uncontrollable": "^8.0.1", + "uncontrollable": "^8.0.4", "warning": "^4.0.3" }, "peerDependencies": { @@ -3147,7 +3028,19 @@ "react-dom": ">=16.14.0" } }, - "node_modules/@restart/ui/node_modules/uncontrollable": { + "node_modules/@restart/ui/node_modules/@restart/hooks": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.5.0.tgz", + "integrity": "sha512-wS+h6IusJCPjTkmOOrRZxIPICD/mtFA3PRZviutoM23/b7akyDGfZF/WS+nIFk27u7JDhPE2+0GBdZxjSqHZkg==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.3" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@restart/ui/node_modules/uncontrollable": { "version": "8.0.4", "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-8.0.4.tgz", "integrity": "sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ==", @@ -3156,224 +3049,234 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz", - "integrity": "sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.4.tgz", + "integrity": "sha512-2Y3JT6f5MrQkICUyRVCw4oa0sutfAsgaSsb0Lmmy1Wi2y7X5vT9Euqw4gOsCyy0YfKURBg35nhUKZS4mDcfULw==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.2.tgz", - "integrity": "sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.27.4.tgz", + "integrity": "sha512-wzKRQXISyi9UdCVRqEd0H4cMpzvHYt1f/C3CoIjES6cG++RHKhrBj2+29nPF0IB5kpy9MS71vs07fvrNGAl/iA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.2.tgz", - "integrity": "sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.27.4.tgz", + "integrity": "sha512-PlNiRQapift4LNS8DPUHuDX/IdXiLjf8mc5vdEmUR0fF/pyy2qWwzdLjB+iZquGr8LuN4LnUoSEvKRwjSVYz3Q==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.2.tgz", - "integrity": "sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.4.tgz", + "integrity": "sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" ] }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.27.4.tgz", + "integrity": "sha512-NBI2/i2hT9Q+HySSHTBh52da7isru4aAAo6qC3I7QFVsuhxi2gM8t/EI9EVcILiHLj1vfi+VGGPaLOUENn7pmw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.27.4.tgz", + "integrity": "sha512-wYcC5ycW2zvqtDYrE7deary2P2UFmSh85PUpAx+dwTCO9uw3sgzD6Gv9n5X4vLaQKsrfTSZZ7Z7uynQozPVvWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.2.tgz", - "integrity": "sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.27.4.tgz", + "integrity": "sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.2.tgz", - "integrity": "sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.27.4.tgz", + "integrity": "sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.2.tgz", - "integrity": "sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.27.4.tgz", + "integrity": "sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.2.tgz", - "integrity": "sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.27.4.tgz", + "integrity": "sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.2.tgz", - "integrity": "sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.27.4.tgz", + "integrity": "sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==", "cpu": [ "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.2.tgz", - "integrity": "sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.27.4.tgz", + "integrity": "sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==", "cpu": [ "riscv64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.2.tgz", - "integrity": "sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.27.4.tgz", + "integrity": "sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==", "cpu": [ "s390x" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.2.tgz", - "integrity": "sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.27.4.tgz", + "integrity": "sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.2.tgz", - "integrity": "sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.27.4.tgz", + "integrity": "sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.2.tgz", - "integrity": "sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.27.4.tgz", + "integrity": "sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.2.tgz", - "integrity": "sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.27.4.tgz", + "integrity": "sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ==", "cpu": [ "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz", - "integrity": "sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.27.4.tgz", + "integrity": "sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -3491,9 +3394,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "dev": true }, "node_modules/@types/geojson": { @@ -3832,15 +3735,14 @@ "dev": true }, "node_modules/@vitejs/plugin-react": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.3.tgz", - "integrity": "sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz", + "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/core": "^7.25.2", - "@babel/plugin-transform-react-jsx-self": "^7.24.7", - "@babel/plugin-transform-react-jsx-source": "^7.24.7", + "@babel/core": "^7.26.0", + "@babel/plugin-transform-react-jsx-self": "^7.25.9", + "@babel/plugin-transform-react-jsx-source": "^7.25.9", "@types/babel__core": "^7.20.5", "react-refresh": "^0.14.2" }, @@ -3848,13 +3750,13 @@ "node": "^14.18.0 || >=16.0.0" }, "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0" + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" } }, "node_modules/@vitest/coverage-v8": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.5.tgz", - "integrity": "sha512-/RoopB7XGW7UEkUndRXF87A9CwkoZAJW01pj8/3pgmDVsjMH2IKy6H1A38po9tmUlwhSyYs0az82rbKd9Yaynw==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.8.tgz", + "integrity": "sha512-2Y7BPlKH18mAZYAW1tYByudlCYrQyl5RGvnnDYJKW5tCiO5qg3KSAy3XAxcxKz900a0ZXxWtKrMuZLe3lKBpJw==", "dev": true, "license": "MIT", "dependencies": { @@ -3875,8 +3777,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "2.1.5", - "vitest": "2.1.5" + "@vitest/browser": "2.1.8", + "vitest": "2.1.8" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -3885,14 +3787,14 @@ } }, "node_modules/@vitest/expect": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.5.tgz", - "integrity": "sha512-nZSBTW1XIdpZvEJyoP/Sy8fUg0b8od7ZpGDkTUcfJ7wz/VoZAFzFfLyxVxGFhUjJzhYqSbIpfMtl/+k/dpWa3Q==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.8.tgz", + "integrity": "sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.1.5", - "@vitest/utils": "2.1.5", + "@vitest/spy": "2.1.8", + "@vitest/utils": "2.1.8", "chai": "^5.1.2", "tinyrainbow": "^1.2.0" }, @@ -3900,37 +3802,10 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/mocker": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.5.tgz", - "integrity": "sha512-XYW6l3UuBmitWqSUXTNXcVBUCRytDogBsWuNXQijc00dtnU/9OqpXWp4OJroVrad/gLIomAq9aW8yWDBtMthhQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/spy": "2.1.5", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.12" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^5.0.0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } - } - }, "node_modules/@vitest/pretty-format": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.5.tgz", - "integrity": "sha512-4ZOwtk2bqG5Y6xRGHcveZVr+6txkH7M2e+nPFd6guSoN638v/1XQ0K06eOpi0ptVU/2tW/pIU4IoPotY/GZ9fw==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.8.tgz", + "integrity": "sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3941,13 +3816,13 @@ } }, "node_modules/@vitest/runner": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.5.tgz", - "integrity": "sha512-pKHKy3uaUdh7X6p1pxOkgkVAFW7r2I818vHDthYLvUyjRfkKOU6P45PztOch4DZarWQne+VOaIMwA/erSSpB9g==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.8.tgz", + "integrity": "sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "2.1.5", + "@vitest/utils": "2.1.8", "pathe": "^1.1.2" }, "funding": { @@ -3955,13 +3830,13 @@ } }, "node_modules/@vitest/snapshot": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.5.tgz", - "integrity": "sha512-zmYw47mhfdfnYbuhkQvkkzYroXUumrwWDGlMjpdUr4jBd3HZiV2w7CQHj+z7AAS4VOtWxI4Zt4bWt4/sKcoIjg==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.8.tgz", + "integrity": "sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.5", + "@vitest/pretty-format": "2.1.8", "magic-string": "^0.30.12", "pathe": "^1.1.2" }, @@ -3970,9 +3845,9 @@ } }, "node_modules/@vitest/spy": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.5.tgz", - "integrity": "sha512-aWZF3P0r3w6DiYTVskOYuhBc7EMc3jvn1TkBg8ttylFFRqNN2XGD7V5a4aQdk6QiUzZQ4klNBSpCLJgWNdIiNw==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.8.tgz", + "integrity": "sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg==", "dev": true, "license": "MIT", "dependencies": { @@ -3983,13 +3858,13 @@ } }, "node_modules/@vitest/utils": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.5.tgz", - "integrity": "sha512-yfj6Yrp0Vesw2cwJbP+cl04OC+IHFsuQsrsJBL9pyGeQXE56v1UAOQco+SR55Vf1nQzfV0QJg1Qum7AaWUwwYg==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.8.tgz", + "integrity": "sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.5", + "@vitest/pretty-format": "2.1.8", "loupe": "^3.1.2", "tinyrainbow": "^1.2.0" }, @@ -5562,42 +5437,42 @@ } }, "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", + "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" + "@esbuild/aix-ppc64": "0.24.0", + "@esbuild/android-arm": "0.24.0", + "@esbuild/android-arm64": "0.24.0", + "@esbuild/android-x64": "0.24.0", + "@esbuild/darwin-arm64": "0.24.0", + "@esbuild/darwin-x64": "0.24.0", + "@esbuild/freebsd-arm64": "0.24.0", + "@esbuild/freebsd-x64": "0.24.0", + "@esbuild/linux-arm": "0.24.0", + "@esbuild/linux-arm64": "0.24.0", + "@esbuild/linux-ia32": "0.24.0", + "@esbuild/linux-loong64": "0.24.0", + "@esbuild/linux-mips64el": "0.24.0", + "@esbuild/linux-ppc64": "0.24.0", + "@esbuild/linux-riscv64": "0.24.0", + "@esbuild/linux-s390x": "0.24.0", + "@esbuild/linux-x64": "0.24.0", + "@esbuild/netbsd-x64": "0.24.0", + "@esbuild/openbsd-arm64": "0.24.0", + "@esbuild/openbsd-x64": "0.24.0", + "@esbuild/sunos-x64": "0.24.0", + "@esbuild/win32-arm64": "0.24.0", + "@esbuild/win32-ia32": "0.24.0", + "@esbuild/win32-x64": "0.24.0" } }, "node_modules/escalade": { @@ -5929,13 +5804,13 @@ } }, "node_modules/eslint-plugin-react-refresh": { - "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==", + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.16.tgz", + "integrity": "sha512-slterMlxAhov/DZO8NScf6mEeMBBXodFUolijDvrtTxyezyLoTQaa73FyYus/VbTdftd8wBgBxPMRk3poleXNQ==", "dev": true, "license": "MIT", "peerDependencies": { - "eslint": ">=7" + "eslint": ">=8.40" } }, "node_modules/eslint-plugin-react/node_modules/brace-expansion": { @@ -6129,7 +6004,6 @@ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" } @@ -8399,9 +8273,9 @@ "dev": true }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "dev": true, "funding": [ { @@ -8965,11 +8839,10 @@ } }, "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", - "dev": true, - "license": "ISC" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true }, "node_modules/picomatch": { "version": "2.3.1", @@ -8993,9 +8866,9 @@ } }, "node_modules/postcss": { - "version": "8.4.47", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", - "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", "dev": true, "funding": [ { @@ -9011,10 +8884,9 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.1.0", + "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, "engines": { @@ -9036,9 +8908,9 @@ } }, "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.1.tgz", + "integrity": "sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg==", "dev": true, "license": "MIT", "bin": { @@ -9162,14 +9034,14 @@ } }, "node_modules/react-bootstrap": { - "version": "2.10.5", - "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.5.tgz", - "integrity": "sha512-XueAOEn64RRkZ0s6yzUTdpFtdUXs5L5491QU//8ZcODKJNDLt/r01tNyriZccjgRImH1REynUc9pqjiRMpDLWQ==", + "version": "2.10.6", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.6.tgz", + "integrity": "sha512-fNvKytSp0nHts1WRnRBJeBEt+I9/ZdrnhIjWOucEduRNvFRU1IXjZueDdWnBiqsTSJ7MckQJi9i/hxGolaRq+g==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.24.7", "@restart/hooks": "^0.4.9", - "@restart/ui": "^1.6.9", + "@restart/ui": "^1.9.0", "@types/react-transition-group": "^4.4.6", "classnames": "^2.3.2", "dom-helpers": "^5.2.1", @@ -9471,13 +9343,12 @@ } }, "node_modules/rollup": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.2.tgz", - "integrity": "sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==", + "version": "4.27.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.4.tgz", + "integrity": "sha512-RLKxqHEMjh/RGLsDxAEsaLO3mWgyoU6x9w6n1ikAzet4B3gI2/3yP6PWY2p9QzRTh6MfEIXB3MwsOY0Iv3vNrw==", "dev": true, - "license": "MIT", "dependencies": { - "@types/estree": "1.0.5" + "@types/estree": "1.0.6" }, "bin": { "rollup": "dist/bin/rollup" @@ -9487,22 +9358,24 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.21.2", - "@rollup/rollup-android-arm64": "4.21.2", - "@rollup/rollup-darwin-arm64": "4.21.2", - "@rollup/rollup-darwin-x64": "4.21.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.21.2", - "@rollup/rollup-linux-arm-musleabihf": "4.21.2", - "@rollup/rollup-linux-arm64-gnu": "4.21.2", - "@rollup/rollup-linux-arm64-musl": "4.21.2", - "@rollup/rollup-linux-powerpc64le-gnu": "4.21.2", - "@rollup/rollup-linux-riscv64-gnu": "4.21.2", - "@rollup/rollup-linux-s390x-gnu": "4.21.2", - "@rollup/rollup-linux-x64-gnu": "4.21.2", - "@rollup/rollup-linux-x64-musl": "4.21.2", - "@rollup/rollup-win32-arm64-msvc": "4.21.2", - "@rollup/rollup-win32-ia32-msvc": "4.21.2", - "@rollup/rollup-win32-x64-msvc": "4.21.2", + "@rollup/rollup-android-arm-eabi": "4.27.4", + "@rollup/rollup-android-arm64": "4.27.4", + "@rollup/rollup-darwin-arm64": "4.27.4", + "@rollup/rollup-darwin-x64": "4.27.4", + "@rollup/rollup-freebsd-arm64": "4.27.4", + "@rollup/rollup-freebsd-x64": "4.27.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.27.4", + "@rollup/rollup-linux-arm-musleabihf": "4.27.4", + "@rollup/rollup-linux-arm64-gnu": "4.27.4", + "@rollup/rollup-linux-arm64-musl": "4.27.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.27.4", + "@rollup/rollup-linux-riscv64-gnu": "4.27.4", + "@rollup/rollup-linux-s390x-gnu": "4.27.4", + "@rollup/rollup-linux-x64-gnu": "4.27.4", + "@rollup/rollup-linux-x64-musl": "4.27.4", + "@rollup/rollup-win32-arm64-msvc": "4.27.4", + "@rollup/rollup-win32-ia32-msvc": "4.27.4", + "@rollup/rollup-win32-x64-msvc": "4.27.4", "fsevents": "~2.3.2" } }, @@ -10322,15 +10195,6 @@ "node": ">=0.6.0" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -10522,9 +10386,9 @@ } }, "node_modules/typescript": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", - "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -10731,21 +10595,21 @@ } }, "node_modules/vite": { - "version": "5.4.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", - "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.2.tgz", + "integrity": "sha512-XdQ+VsY2tJpBsKGs0wf3U/+azx8BBpYRHFAyKm5VeEZNOJZRB63q7Sc8Iup3k0TrN3KO6QgyzFf+opSbfY1y0g==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" + "esbuild": "^0.24.0", + "postcss": "^8.4.49", + "rollup": "^4.23.0" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -10754,19 +10618,25 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", - "terser": "^5.4.0" + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" }, "peerDependenciesMeta": { "@types/node": { "optional": true }, + "jiti": { + "optional": true + }, "less": { "optional": true }, @@ -10787,13 +10657,19 @@ }, "terser": { "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true } } }, "node_modules/vite-node": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.5.tgz", - "integrity": "sha512-rd0QIgx74q4S1Rd56XIiL2cYEdyWn13cunYBIuqh9mpmQr7gGS0IxXoP8R6OaZtNQQLyXSWbd4rXKYUbhFpK5w==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.8.tgz", + "integrity": "sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==", "dev": true, "license": "MIT", "dependencies": { @@ -10813,114 +10689,1096 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/vitest": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.5.tgz", - "integrity": "sha512-P4ljsdpuzRTPI/kbND2sDZ4VmieerR2c9szEZpjc+98Z9ebvnXmM5+0tHEKqYZumXqlvnmfWsjeFOjXVriDG7A==", + "node_modules/vite-node/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/expect": "2.1.5", - "@vitest/mocker": "2.1.5", - "@vitest/pretty-format": "^2.1.5", - "@vitest/runner": "2.1.5", - "@vitest/snapshot": "2.1.5", - "@vitest/spy": "2.1.5", - "@vitest/utils": "2.1.5", - "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.8.0", - "tinybench": "^2.9.0", - "tinyexec": "^0.3.1", - "tinypool": "^1.0.1", - "tinyrainbow": "^1.2.0", - "vite": "^5.0.0", - "vite-node": "2.1.5", - "why-is-node-running": "^2.3.0" - }, - "bin": { - "vitest": "vitest.mjs" - }, + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.1.5", - "@vitest/ui": "2.1.5", - "happy-dom": "*", - "jsdom": "*" - }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "@vitest/browser": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - } - } - }, - "node_modules/vt-pbf": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", - "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", - "dependencies": { - "@mapbox/point-geometry": "0.1.0", - "@mapbox/vector-tile": "^1.3.1", - "pbf": "^3.2.1" + "node": ">=12" } }, - "node_modules/w3c-xmlserializer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", - "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "node_modules/vite-node/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "xml-name-validator": "^5.0.0" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=18" - } - }, - "node_modules/warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "dependencies": { - "loose-envify": "^1.0.0" + "node": ">=12" } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "node_modules/vite-node/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "defaults": "^1.0.3" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "node_modules/vite-node/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/vite-node/node_modules/vite": { + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", + "dev": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vitest": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.8.tgz", + "integrity": "sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "2.1.8", + "@vitest/mocker": "2.1.8", + "@vitest/pretty-format": "^2.1.8", + "@vitest/runner": "2.1.8", + "@vitest/snapshot": "2.1.8", + "@vitest/spy": "2.1.8", + "@vitest/utils": "2.1.8", + "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.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.1", + "tinypool": "^1.0.1", + "tinyrainbow": "^1.2.0", + "vite": "^5.0.0", + "vite-node": "2.1.8", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "2.1.8", + "@vitest/ui": "2.1.8", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@vitest/mocker": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.8.tgz", + "integrity": "sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "2.1.8", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.12" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/vitest/node_modules/vite": { + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vt-pbf": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", + "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", + "dependencies": { + "@mapbox/point-geometry": "0.1.0", + "@mapbox/vector-tile": "^1.3.1", + "pbf": "^3.2.1" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, "engines": { @@ -11183,9 +12041,9 @@ "dev": true }, "node_modules/yaml": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", - "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", + "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", "dev": true, "bin": { "yaml": "bin.mjs" diff --git a/client/package.json b/client/package.json index d511ba477bc..f930bcd67d5 100644 --- a/client/package.json +++ b/client/package.json @@ -24,13 +24,13 @@ "graphql-request": "7.1.2", "maplibre-gl": "4.7.1", "react": "18.3.1", - "react-bootstrap": "2.10.5", + "react-bootstrap": "2.10.6", "react-dom": "18.3.1", "react-map-gl": "7.1.7" }, "devDependencies": { "@graphql-codegen/cli": "5.0.3", - "@graphql-codegen/client-preset": "4.5.0", + "@graphql-codegen/client-preset": "4.5.1", "@graphql-codegen/introspection": "4.0.3", "@parcel/watcher": "2.5.0", "@testing-library/react": "16.0.1", @@ -38,19 +38,19 @@ "@types/react-dom": "18.3.1", "@typescript-eslint/eslint-plugin": "7.18.0", "@typescript-eslint/parser": "7.18.0", - "@vitejs/plugin-react": "4.3.3", - "@vitest/coverage-v8": "2.1.5", + "@vitejs/plugin-react": "4.3.4", + "@vitest/coverage-v8": "2.1.8", "eslint": "8.57.1", "eslint-config-prettier": "9.1.0", "eslint-plugin-import": "2.31.0", "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.14", + "eslint-plugin-react-refresh": "0.4.16", "jsdom": "25.0.1", - "prettier": "3.3.3", - "typescript": "5.6.3", - "vite": "5.4.11", - "vitest": "2.1.5" + "prettier": "3.4.1", + "typescript": "5.7.2", + "vite": "6.0.2", + "vitest": "2.1.8" } } diff --git a/client/src/components/ItineraryList/ItineraryLegDetails.tsx b/client/src/components/ItineraryList/ItineraryLegDetails.tsx index d23563331b5..65d790902a8 100644 --- a/client/src/components/ItineraryList/ItineraryLegDetails.tsx +++ b/client/src/components/ItineraryList/ItineraryLegDetails.tsx @@ -24,8 +24,11 @@ export function ItineraryLegDetails({ leg, isLast }: { leg: Leg; isLast: boolean {formatDistance(leg.distance)}, {formatDuration(leg.duration)} - -{' '} - + -

{leg.mode}{' '} {leg.line && ( diff --git a/doc/dev/decisionrecords/AnalysesAndDesign.md b/doc/dev/decisionrecords/AnalysesAndDesign.md new file mode 100644 index 00000000000..b6c585ba71f --- /dev/null +++ b/doc/dev/decisionrecords/AnalysesAndDesign.md @@ -0,0 +1,54 @@ +# Analysis and design + +We want to get better at design, so we want some documentation up front for large changes. If a +problem is complex, changes the core OTP model, and/or the API significantly, then the developer +requesting a change should be prepared to provide some design documentation. + +The analysis should be started and at least mapped out in an issue. The design can be documented +in the issue or the PR. + + +## Analysis & Design + +A discussion in a developer meeting is usually a good point to start. + +- Ask what is expected? +- Diagrams beat words in most cases, and help focus on the problem - not implementation details. + + +### Artifacts + +We usually do not require a long list of requirements and analyses documentation. But these +artifacts may help, but none of these are required. Ask in the developer meeting what to expect. + + - [ ] Summarise the discussion in the developer meeting in the issue or PR. + - [ ] List use-cases, one sentence per use-case is often enough. + - [ ] In/out matrix, list features you are NOT planning to implement. + - [ ] Draw diagrams + - [ ] **Domain model** — If the core model or APIs are significantly changed + - [ ] State diagram + - [ ] Collaboration diagram + +We recommend using [draw.io](https://www.drawio.com/). It is free and available as an Intellij +plugin (Diagrams.net), web application and desktop application. + + +## Domain model + +A domain model focusses on the language and the relationships. All implementation details can be left +out. Details which is not relevant for the problem you are solving can also be left out, focus on +the elements witch helps understand the problem. Use plain english and not tech to describe +the model. For example, only listing the field name, and not the type is ok if the type is obvious. + +Notation is not important, but try to follow the UML syntax below. You may use more advanced UML +syntax if you want, but keep in mind that you should be able to use the diagram to discuss the +problem with a non-developer. A product-owner or other person who knows the domain should with +a little help be able to understand the main parts of the drawing. + +When doing review, focus on the domain problem, not syntax — ask about things you do not understand. + + +### Domain model - notation cheat sheet + +![Domain Model Notation](../images/DomainModelNotation.svg) + diff --git a/doc/dev/decisionrecords/NamingConventions.md b/doc/dev/decisionrecords/NamingConventions.md index 16b37a799bf..2cd4ed6d0cf 100644 --- a/doc/dev/decisionrecords/NamingConventions.md +++ b/doc/dev/decisionrecords/NamingConventions.md @@ -42,11 +42,16 @@ Here is a list of common prefixes used and what to expect. | `findStop(Criteria criteria) : Optional` | Find one or zero stops; return `Optional`. | | `findStops(Criteria criteria) : List/Stream` | Find 0, 1, or many stops; return a Collection or Stream (List is preferred). | | `listStops() : List/Stream` | List ALL stops in context; return a Collection or Stream (List is preferred). | -| `withStop(Stop stop) : Builder` | Set Stop in builder, replacing existing value; return `this` builder. | | `initStop(Stop stop) : void` | Set property _once_; a second call throws an exception. | +| `createStop(String name, ...) : Stop` | Factory methods for creating objects should start with `create` prefix. | +| | See (Builder Conventions)[RecordsPOJOsBuilders.md#builder-conventions] for creating objects with builders. | | `addStop(Stop stop) : void/Builder` | Add a Stop to a collection of Stops. | | `addStops(Collection stops) : void/Builder` | Add set of Stops to existing set. | | `withBike(Consumer body) : Builder` | For nested builders, use lambdas. | +| `withStop(Stop stop) : Builder` | Set Stop in builder, replacing existing value; return `this` builder. | +| `of(FeedScopedId id) : Builder` | Create new builder instance from `Stop` class. | +| `copyOf() : Builder` | Initialize a new builder instance from `Stop` instance with identical values. | +| `build() : Stop` | Finish building stop with a builder. | These prefixes are also "allowed" but not preferred; they have some kind of negative "force" to them. @@ -72,3 +77,14 @@ trip = Trip.of(id).withName("The Express").build(); // Modify and existing stop stop = stop.copyOf().withPrivateCode("TEX").build(); ``` + +## Referencing Established OTP Terminology in Documentation + +Use emphasis ("_dated service journey_") in markdown documentation, in API, and configuration +documentation. In this kind of documentation we usually talk about the concept, not the implementing +class. Use CamleCase (eg. TripOnServiceDate) if you need to reference the class. + +Use hyphen ("dated-service-journey") in plain text and JavaDoc. In JavaDoc we also use +{@link TripOnServiceDate} the first time we mention a class. Note that sometimes we want to talk +about the concept (dated-service-journey) and sometimes we reference a class +({@link DatedServiceJourney}). \ No newline at end of file diff --git a/doc/dev/images/DomainModelNotation.svg b/doc/dev/images/DomainModelNotation.svg new file mode 100644 index 00000000000..836363f4372 --- /dev/null +++ b/doc/dev/images/DomainModelNotation.svg @@ -0,0 +1,4 @@ + + + +ServicecanceledTrips(...) : TripOnDateEntityfield : basic type / scalarA<<interface>>Baseid : IDEvent/Moment/IntervalValueObjectvalue : String
Colors
Colors
Types
Types
objectName : Type/Class<<interface>>Interface/abstract class
Relationship
Relation...
Afield : basic type / scalarB
b
b
?
?
AB
b
b
B
Inheritance
Inherita...
<< use >>
<< use >>
AB
Dependency
Dependen...
[ Bike only ]
[ Bike only ]
Amode : Mode[ GTFS only ]B
Constraint
Constrai...
  • We usually provide a class name only, but you can provide an object name and/or class. 
  • If something is an abstract class or an interface is a implementation detail. Use the <<interface>>` qualifier to tag interfaces.
We usually provide a class name only, but you can...
  • Relationship can be one way (arrow) or both-ways (no arrows).
  • Naming the relationship is optional.
  • Default cardinality is 1. Other values:
    • ? - optional
    • * - many
    • 2 - exact two
    • 3..n - three or more
  • A simple relationship is included as a field. A good indication when to use a field and not an arrow is when the type is a basic type(int, float, boolean, String), enumeration or ValueObject. PS! It is not wrong to use either, both forms are equivalent
Relationship can be one way (arrow) or both-ways (...
2..n
2..n
*
*
AB
a
a
b
b
  • If you are in doubt model things as relationships, do not use inheritance.
  • Interfaces exist:
    • if there is a reference to it - the named interface play a role.
    • if at least one shared operation/field/relationship exist.  
If you are in doubt model things as relationships,...
  • We draw dependencies when they are important and not part of a relationship. For example if we want to map out the details of a ValueObject.
  • The qualifier text << use >> is optonal.
We draw dependencies when they are important and n...
  • Use "[]" to add a constraint.
  • A constraint can be added to all arrows and types.
  • Be careful with constraints, they add a lot of noice to the diagram. It is sometimes better to just list tem in text.
Use "[]" to add a constraint.A constraint can be a...
A has a field b of type B.
A has a field b of type B.
A has a 2 or more b's of type B. B has many a's of type A.
A has a 2 or more b's of type B. B has many a's of type...
We use color for classify the a type by its life-cycle. A service is request or application scoped, an entity is sable - but may change, a ValueObject do not change, and a Event are temporary. A ValueObject can not reference a Entity, an Entity can not reference a Service and always pay close attention to the design of Events - they are hard to model.  
We use color for classify the a type by its life-cycle. A service is request or application scoped, an entity is sable - but may c...
A has a relationship b, if mode is Bike.
B only exist for GTFS imported elements.
A has a relationship b, if mode is Bike....
Text is not SVG - cannot display
\ No newline at end of file diff --git a/doc/user/Changelog.md b/doc/user/Changelog.md index 17a54ede4ae..f6f9a55fb77 100644 --- a/doc/user/Changelog.md +++ b/doc/user/Changelog.md @@ -54,6 +54,9 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Fix problem with relaxed-generalized-cost-at-destination [#6255](https://github.com/opentripplanner/OpenTripPlanner/pull/6255) - Reject SIRI-ET updates with empty StopPointRefs [#6266](https://github.com/opentripplanner/OpenTripPlanner/pull/6266) - Allow GTFS fuzzy trip matching even when trip descriptor has an id [#6250](https://github.com/opentripplanner/OpenTripPlanner/pull/6250) +- Make `motorroad=yes` car-only [#6288](https://github.com/opentripplanner/OpenTripPlanner/pull/6288) +- Add decision record for analysis and design documentation [#6281](https://github.com/opentripplanner/OpenTripPlanner/pull/6281) +- Switch GTFS flex `safe_duration_offset` back to seconds [#6298](https://github.com/opentripplanner/OpenTripPlanner/pull/6298) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.6.0 (2024-09-18) diff --git a/doc/user/osm/Finland.md b/doc/user/osm/Finland.md index 8a60b5f0b13..a5a0341bf94 100644 --- a/doc/user/osm/Finland.md +++ b/doc/user/osm/Finland.md @@ -41,7 +41,6 @@ Lower safety values make an OSM way more desirable and higher values less desira | `highway=trunk_link` | `ALL` | 2.06 | | | `highway=trunk` | `ALL` | 7.47 | | | `highway=trunk; tunnel=yes` | `CAR` | 7.47 | | -| `motorroad=yes` | `CAR` | 7.47 | | | `present(highway); informal=yes` | `NONE` | | | | `highway=service; access=private` | `NONE` | | | | `highway=trail` | `NONE` | | | @@ -105,6 +104,7 @@ Lower safety values make an OSM way more desirable and higher values less desira | `highway=motorway_link` | `CAR` | 2.06 | | | `highway=trunk` | `CAR` | 7.47 | | | `highway=motorway` | `CAR` | 8.0 | | +| `motorroad=yes` | `CAR` | | | | `present(highway); cycleway=lane` | `PEDESTRIAN_AND_BICYCLE` | 0.87 | | | `highway=service; cycleway=lane` | `ALL` | 0.77 | | | `highway=residential; cycleway=lane` | `ALL` | 0.77 | | diff --git a/doc/user/osm/Germany.md b/doc/user/osm/Germany.md index 922aa3af836..ee9e3982362 100644 --- a/doc/user/osm/Germany.md +++ b/doc/user/osm/Germany.md @@ -70,6 +70,7 @@ Lower safety values make an OSM way more desirable and higher values less desira | `highway=motorway_link` | `CAR` | 2.06 | | | `highway=trunk` | `CAR` | 7.47 | | | `highway=motorway` | `CAR` | 8.0 | | +| `motorroad=yes` | `CAR` | | | | `present(highway); cycleway=lane` | `PEDESTRIAN_AND_BICYCLE` | 0.87 | | | `highway=service; cycleway=lane` | `ALL` | 0.77 | | | `highway=residential; cycleway=lane` | `ALL` | 0.77 | | diff --git a/doc/user/osm/OsmTag.md b/doc/user/osm/OsmTag.md index 814420b791f..9456dbc9fa5 100644 --- a/doc/user/osm/OsmTag.md +++ b/doc/user/osm/OsmTag.md @@ -61,6 +61,7 @@ Lower safety values make an OSM way more desirable and higher values less desira | `highway=motorway_link` | `CAR` | 2.06 | | | `highway=trunk` | `CAR` | 7.47 | | | `highway=motorway` | `CAR` | 8.0 | | +| `motorroad=yes` | `CAR` | | | | `present(highway); cycleway=lane` | `PEDESTRIAN_AND_BICYCLE` | 0.87 | | | `highway=service; cycleway=lane` | `ALL` | 0.77 | | | `highway=residential; cycleway=lane` | `ALL` | 0.77 | | diff --git a/doc/user/osm/UK.md b/doc/user/osm/UK.md index 34c4d1c1778..f9d8678fd3c 100644 --- a/doc/user/osm/UK.md +++ b/doc/user/osm/UK.md @@ -77,6 +77,7 @@ Lower safety values make an OSM way more desirable and higher values less desira | `highway=motorway_link` | `CAR` | 2.06 | | | `highway=trunk` | `CAR` | 7.47 | | | `highway=motorway` | `CAR` | 8.0 | | +| `motorroad=yes` | `CAR` | | | | `present(highway); cycleway=lane` | `PEDESTRIAN_AND_BICYCLE` | 0.87 | | | `highway=service; cycleway=lane` | `ALL` | 0.77 | | | `highway=residential; cycleway=lane` | `ALL` | 0.77 | | diff --git a/pom.xml b/pom.xml index b520f3cad63..edc1ab5efd7 100644 --- a/pom.xml +++ b/pom.xml @@ -58,11 +58,11 @@ - 172 + 174 - 32.0 + 32.1 2.52 - 2.18.1 + 2.18.2 3.1.9 5.11.3 1.13.7 @@ -94,13 +94,24 @@ - application - gtfs-realtime-protobuf utils raptor + gtfs-realtime-protobuf + application + shaded-jar + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.6.0 + + + org.apache.maven.plugins @@ -143,6 +154,7 @@ ${basedir}/doc/javadoc javadoc + true @@ -285,6 +297,7 @@ src/main/java/**/*.java src/test/java/**/*.java + src/**/*.json src/test/resources/org/opentripplanner/apis/**/*.graphql diff --git a/raptor/pom.xml b/raptor/pom.xml index d2d93e36f9d..faf38e5f6b3 100644 --- a/raptor/pom.xml +++ b/raptor/pom.xml @@ -9,7 +9,7 @@ 2.7.0-SNAPSHOT - otp-raptor + raptor OpenTripPlanner - Raptor @@ -17,7 +17,7 @@ ${project.groupId} - otp-utils + utils ${project.version} diff --git a/renovate.json5 b/renovate.json5 index b46a098392a..a5838fb3ff0 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -145,8 +145,9 @@ { "description": "give some projects time to publish a changelog before opening the PR", "matchPackageNames": [ - "com.google.dagger:", - "com.fasterxml.jackson" + "com.google.dagger:{/,}**", + "com.fasterxml.jackson:{/,}**", + "com.fasterxml.jackson.datatype::{/,}**" ], "minimumReleaseAge": "1 week" }, diff --git a/shaded-jar/pom.xml b/shaded-jar/pom.xml new file mode 100644 index 00000000000..5709ef8245f --- /dev/null +++ b/shaded-jar/pom.xml @@ -0,0 +1,120 @@ + + + 4.0.0 + + org.opentripplanner + otp-root + 2.7.0-SNAPSHOT + + shaded-jar + pom + OpenTripPlanner - Shaded Jar + + + skip + false + + + + + + ${project.groupId} + application + ${project.version} + + + + + + + + + + org.apache.maven.plugins + maven-shade-plugin + + + ${project.build.directory}/otp-${project.version}-shaded.jar + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + ${skipShadeJar} + + true + + false + + + + + + + org.opentripplanner.standalone.OTPMain + + Java Advanced Imaging Image I/O + Tools + + 1.1 + Sun Microsystems, Inc. + com.sun.media.imageio + 1.1 + Sun Microsystems, Inc. + + com.sun.media.imageio + + + + + + + build-shaded-jar + shade + + + + + + diff --git a/utils/pom.xml b/utils/pom.xml index 7a223488dd0..2e70554a678 100644 --- a/utils/pom.xml +++ b/utils/pom.xml @@ -9,7 +9,7 @@ 2.7.0-SNAPSHOT - otp-utils + utils OpenTripPlanner - Utils