Skip to content

Commit 47ed737

Browse files
committed
feat: introduce GeofencingEnforcement strategy pattern for zone-type-specific routing decisions
Replace the 220-line StreetEdge geofencing if-chain with a three-layer architecture using the Strategy pattern: - Layer 0: Zone state tracking (StateEditor.updateGeofencingZones, from commit 3) - Layer 1: Network commitment for generic arriveBy states - Layer 2: GeofencingEnforcement strategy per zone type New enforcement implementations: - RestrictedZoneEnforcement: no-drop-off and no-traversal zones (fork, block, drop) - BusinessAreaEnforcement: inverted logic (exit = restrict) - DeferredForkHandler: backState zone exit detection for deferred renting branches The traversal skeleton iterates paired boundary extensions on fromv, delegates to the appropriate enforcement via GeofencingEnforcement.forZone(), and handles network commitment for generic states separately. Delete old per-edge geofencing system: RentalRestrictionExtension, GeofencingZoneExtension, NoRestriction, CompositeRentalRestrictionExtension, BusinessAreaBorder, and all associated Vertex/State/StreetEdge methods.
1 parent 7d18de8 commit 47ed737

44 files changed

Lines changed: 2732 additions & 1595 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

application/src/main/java/org/opentripplanner/routing/impl/GraphPathFinder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import org.opentripplanner.routing.error.PathNotFoundException;
1414
import org.opentripplanner.routing.linking.LinkingContext;
1515
import org.opentripplanner.service.vehiclerental.model.GeofencingZone;
16-
import org.opentripplanner.service.vehiclerental.street.GeofencingZoneIndex;
16+
import org.opentripplanner.service.vehiclerental.street.geofencing.GeofencingZoneIndex;
1717
import org.opentripplanner.street.model.StreetConstants;
1818
import org.opentripplanner.street.model.edge.ExtensionRequestContext;
1919
import org.opentripplanner.street.model.path.StreetPath;

application/src/main/java/org/opentripplanner/updater/vehicle_rental/VehicleRentalUpdater.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,15 @@
1616
import org.opentripplanner.service.vehiclerental.VehicleRentalRepository;
1717
import org.opentripplanner.service.vehiclerental.model.GeofencingZone;
1818
import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace;
19-
import org.opentripplanner.service.vehiclerental.street.GeofencingZoneApplier;
20-
import org.opentripplanner.service.vehiclerental.street.GeofencingZoneIndex;
19+
import org.opentripplanner.service.vehiclerental.street.geofencing.GeofencingZoneApplier;
20+
import org.opentripplanner.service.vehiclerental.street.geofencing.GeofencingZoneIndex;
2121
import org.opentripplanner.service.vehiclerental.street.StreetVehicleRentalLink;
2222
import org.opentripplanner.service.vehiclerental.street.VehicleRentalEdge;
2323
import org.opentripplanner.service.vehiclerental.street.VehicleRentalPlaceVertex;
2424
import org.opentripplanner.street.Scope;
2525
import org.opentripplanner.street.linking.DisposableEdgeCollection;
2626
import org.opentripplanner.street.linking.LinkingDirection;
2727
import org.opentripplanner.street.linking.VertexLinker;
28-
import org.opentripplanner.street.model.edge.StreetEdge;
2928
import org.opentripplanner.street.model.vertex.Vertex;
3029
import org.opentripplanner.street.search.TraverseMode;
3130
import org.opentripplanner.street.search.TraverseModeSet;
@@ -56,7 +55,6 @@ public class VehicleRentalUpdater extends PollingGraphUpdater {
5655
private final VehicleRentalDataSource source;
5756
private final String nameForLogging;
5857

59-
private Map<StreetEdge, String> latestBusinessAreaEdges = Map.of();
6058
private Set<Vertex> latestBoundaryVertices = Set.of();
6159
private GeofencingZoneIndex latestZoneIndex;
6260
private Set<GeofencingZone> latestAppliedGeofencingZones = Set.of();
@@ -224,7 +222,6 @@ public void run(RealTimeUpdateContext context) {
224222
LOG.info("Computing geofencing zones for {}", nameForLogging);
225223
var start = System.currentTimeMillis();
226224

227-
latestBusinessAreaEdges.forEach(StreetEdge::removeBusinessAreaBorderNetwork);
228225
latestBoundaryVertices.forEach(vertex ->
229226
vertex.removeGeofencingBoundariesForZones(latestAppliedGeofencingZones)
230227
);
@@ -235,7 +232,6 @@ public void run(RealTimeUpdateContext context) {
235232
// included so split vertices on those edges get boundary extensions.
236233
var applier = new GeofencingZoneApplier(env -> graph.findEdges(env, Scope.REQUEST), true);
237234
var result = applier.applyGeofencingZones(geofencingZones);
238-
latestBusinessAreaEdges = result.businessAreaEdges();
239235
latestBoundaryVertices = result.boundaryVertices();
240236
latestZoneIndex = result.zoneIndex();
241237
latestAppliedGeofencingZones = geofencingZones;
@@ -246,10 +242,9 @@ public void run(RealTimeUpdateContext context) {
246242
var end = System.currentTimeMillis();
247243
var millis = Duration.ofMillis(end - start);
248244
LOG.info(
249-
"Geofencing zones computation took {}. {} boundary vertices, {} business area edges. For {}",
245+
"Geofencing zones computation took {}. {} boundary vertices. For {}",
250246
DurationUtils.durationToStr(millis),
251247
latestBoundaryVertices.size(),
252-
latestBusinessAreaEdges.size(),
253248
nameForLogging
254249
);
255250
}

street/src/main/java/org/opentripplanner/service/vehiclerental/street/BusinessAreaBorder.java

Lines changed: 0 additions & 81 deletions
This file was deleted.

street/src/main/java/org/opentripplanner/service/vehiclerental/street/CompositeRentalRestrictionExtension.java

Lines changed: 0 additions & 113 deletions
This file was deleted.

street/src/main/java/org/opentripplanner/service/vehiclerental/street/GeofencingBoundaryExtension.java

Lines changed: 0 additions & 13 deletions
This file was deleted.

street/src/main/java/org/opentripplanner/service/vehiclerental/street/GeofencingZoneExtension.java

Lines changed: 0 additions & 94 deletions
This file was deleted.

0 commit comments

Comments
 (0)