1212import org .opentripplanner .raptor .api .model .GeneralizedCostRelaxFunction ;
1313import org .opentripplanner .raptor .api .model .RaptorAccessEgress ;
1414import org .opentripplanner .raptor .api .model .RaptorConstants ;
15+ import org .opentripplanner .raptor .api .model .RaptorTripSchedule ;
1516import org .opentripplanner .raptor .api .model .RelaxFunction ;
1617import org .opentripplanner .raptor .api .request .DebugRequestBuilder ;
1718import org .opentripplanner .raptor .api .request .Optimization ;
2829import org .opentripplanner .routing .api .request .framework .CostLinearFunction ;
2930import org .opentripplanner .transit .model .site .StopLocation ;
3031
31- public class RaptorRequestMapper {
32+ public class RaptorRequestMapper < T extends RaptorTripSchedule > {
3233
3334 private final RouteRequest request ;
3435 private final Collection <? extends RaptorAccessEgress > accessPaths ;
@@ -56,7 +57,7 @@ private RaptorRequestMapper(
5657 this .meterRegistry = meterRegistry ;
5758 }
5859
59- public static RaptorRequest <TripSchedule > mapRequest (
60+ public static < T extends RaptorTripSchedule > RaptorRequest <T > mapRequest (
6061 RouteRequest request ,
6162 ZonedDateTime transitSearchTimeZero ,
6263 boolean isMultiThreaded ,
@@ -65,7 +66,7 @@ public static RaptorRequest<TripSchedule> mapRequest(
6566 Duration searchWindowAccessSlack ,
6667 MeterRegistry meterRegistry
6768 ) {
68- return new RaptorRequestMapper (
69+ return new RaptorRequestMapper < T > (
6970 request ,
7071 isMultiThreaded ,
7172 accessPaths ,
@@ -77,8 +78,8 @@ public static RaptorRequest<TripSchedule> mapRequest(
7778 .doMap ();
7879 }
7980
80- private RaptorRequest <TripSchedule > doMap () {
81- var builder = new RaptorRequestBuilder <TripSchedule >();
81+ private RaptorRequest <T > doMap () {
82+ var builder = new RaptorRequestBuilder <T >();
8283 var searchParams = builder .searchParams ();
8384
8485 var preferences = request .preferences ();
@@ -119,12 +120,14 @@ private RaptorRequest<TripSchedule> doMap() {
119120 builder .withMultiCriteria (mcBuilder -> {
120121 var pt = preferences .transit ();
121122 var r = pt .raptor ();
122- if (!pt .relaxTransitGroupPriority ().isNormal ()) {
123- mcBuilder .withTransitPriorityCalculator (TransitGroupPriority32n .priorityCalculator ());
124- mcBuilder .withRelaxC1 (mapRelaxCost (pt .relaxTransitGroupPriority ()));
125- } else {
123+
124+ // Note! If a pass-through-point exists, then the transit-group-priority feature is disabled
125+ if (!request .getPassThroughPoints ().isEmpty ()) {
126126 mcBuilder .withPassThroughPoints (mapPassThroughPoints ());
127127 r .relaxGeneralizedCostAtDestination ().ifPresent (mcBuilder ::withRelaxCostAtDestination );
128+ } else if (!pt .relaxTransitGroupPriority ().isNormal ()) {
129+ mcBuilder .withTransitPriorityCalculator (TransitGroupPriority32n .priorityCalculator ());
130+ mcBuilder .withRelaxC1 (mapRelaxCost (pt .relaxTransitGroupPriority ()));
128131 }
129132 });
130133
@@ -174,13 +177,15 @@ private RaptorRequest<TripSchedule> doMap() {
174177 }
175178
176179 // Add this last, it depends on generating an alias from the set values
177- builder .performanceTimers (
178- new PerformanceTimersForRaptor (
179- builder .generateAlias (),
180- preferences .system ().tags (),
181- meterRegistry
182- )
183- );
180+ if (meterRegistry != null ) {
181+ builder .performanceTimers (
182+ new PerformanceTimersForRaptor (
183+ builder .generateAlias (),
184+ preferences .system ().tags (),
185+ meterRegistry
186+ )
187+ );
188+ }
184189
185190 return builder .build ();
186191 }
0 commit comments