Skip to content

Commit fe612b8

Browse files
committed
wip: refactoring wip
1 parent f1e354b commit fe612b8

File tree

10 files changed

+59
-43
lines changed

10 files changed

+59
-43
lines changed
Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
package org.opentripplanner.routing.impl;
22

3-
import java.util.Optional;
43
import org.opentripplanner.street.search.state.State;
54

65
public class BatteryValidator {
76

87
public static boolean wouldBatteryRunOut(Object current) {
9-
double drivenBatteryMeters =
10-
((org.opentripplanner.street.search.state.State) current).drivenBatteryMeters;
11-
Optional<Double> currentRangeMeters = ((State) current).currentRangeMeters;
12-
if (currentRangeMeters.isEmpty()) {
8+
State state = (State) current;
9+
double traversedBatteryMeters = state.traversedBatteryMeters;
10+
double currentRangeMeters = state.currentRangeMeters;
11+
if (currentRangeMeters == Double.POSITIVE_INFINITY) {
1312
return false;
1413
}
15-
return currentRangeMeters.get() < drivenBatteryMeters;
14+
return currentRangeMeters < traversedBatteryMeters;
1615
}
1716
}

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

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.Set;
88
import javax.annotation.Nullable;
99
import org.opentripplanner.astar.model.GraphPath;
10+
import org.opentripplanner.astar.spi.SkipEdgeStrategy;
1011
import org.opentripplanner.astar.spi.TraverseVisitor;
1112
import org.opentripplanner.astar.strategy.BatteryDistanceSkipEdgeStrategy;
1213
import org.opentripplanner.astar.strategy.ComposingSkipEdgeStrategy;
@@ -90,12 +91,7 @@ public List<GraphPath<State, Edge, Vertex>> getPaths(
9091
.of()
9192
.setHeuristic(new EuclideanRemainingWeightHeuristic(maxCarSpeed))
9293
.setSkipEdgeStrategy(
93-
new ComposingSkipEdgeStrategy<>(
94-
new DurationSkipEdgeStrategy(
95-
preferences.maxDirectDuration().valueOf(request.journey().direct().mode())
96-
),
97-
new BatteryDistanceSkipEdgeStrategy(BatteryValidator::wouldBatteryRunOut)
98-
)
94+
getSkipEdgeStrategy(request, preferences)
9995
)
10096
// FORCING the dominance function to weight only
10197
.setDominanceFunction(new DominanceFunctions.MinimumWeight())
@@ -124,6 +120,24 @@ public List<GraphPath<State, Edge, Vertex>> getPaths(
124120
return paths;
125121
}
126122

123+
/**
124+
* chooses which SkipEdge Strategies to use, based on if the Mode includes rental
125+
* @return a ComposingSkipEdgeStrategy if mode includes rental, else selects the DurationSkipStrategy
126+
*/
127+
private static SkipEdgeStrategy getSkipEdgeStrategy(RouteRequest request, StreetPreferences preferences) {
128+
if(request.journey().direct().mode().includesRenting()){
129+
return new ComposingSkipEdgeStrategy<>(
130+
new DurationSkipEdgeStrategy(
131+
preferences.maxDirectDuration().valueOf(request.journey().direct().mode())
132+
),
133+
new BatteryDistanceSkipEdgeStrategy(BatteryValidator::wouldBatteryRunOut)
134+
);
135+
}
136+
return new DurationSkipEdgeStrategy(
137+
preferences.maxDirectDuration().valueOf(request.journey().direct().mode())
138+
);
139+
}
140+
127141
/**
128142
* Try to find N paths through the Graph
129143
*/

src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalPlace.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,4 +101,6 @@ default boolean networkIsNotAllowed(VehicleRentalPreferences preferences) {
101101

102102
return !preferences.allowedNetworks().contains(getNetwork());
103103
}
104+
105+
double getCurrentRangeMeters();
104106
}

src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalStation.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,11 @@ public VehicleRentalSystem getVehicleRentalSystem() {
177177
return system;
178178
}
179179

180+
@Override
181+
public double getCurrentRangeMeters() {
182+
return Double.POSITIVE_INFINITY;
183+
}
184+
180185
@Override
181186
public String toString() {
182187
return String.format(

src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalVehicle.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,8 @@ public VehicleRentalSystem getVehicleRentalSystem() {
135135
return system;
136136
}
137137

138-
public Optional<Double> getCurrentRangeMeters() {
139-
return Optional.ofNullable(currentRangeMeters);
138+
@Override
139+
public double getCurrentRangeMeters() {
140+
return currentRangeMeters;
140141
}
141142
}

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -212,10 +212,7 @@ private static Set<RentalFormFactor> allowedModes(StreetMode streetMode) {
212212
};
213213
}
214214

215-
public Optional<Double> getCurrentRangeMeters() {
216-
if (vertex.getStation() instanceof VehicleRentalVehicle) {
217-
return ((VehicleRentalVehicle) vertex.getStation()).getCurrentRangeMeters();
218-
}
219-
return Optional.empty();
215+
public double getCurrentRangeMeters() {
216+
return vertex.getStation().getCurrentRangeMeters();
220217
}
221218
}

src/main/java/org/opentripplanner/street/model/edge/StreetEdge.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1183,8 +1183,8 @@ private StateEditor doTraverse(State s0, TraverseMode traverseMode, boolean walk
11831183
s1.incrementWalkDistance(getDistanceWithElevation());
11841184
}
11851185

1186-
if (traverseMode.isCyclingIsh() && s1.isVehicleRentable()) {
1187-
s1.incrementDrivenBatteryMeters(getDistanceWithElevation());
1186+
if (s1.isRentingVehicle()) {
1187+
s1.incrementTraversedBatteryMeters(getDistanceWithElevation());
11881188
}
11891189

11901190
if (costExtension != null) {

src/main/java/org/opentripplanner/street/search/state/State.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import java.util.ArrayList;
77
import java.util.Collection;
88
import java.util.Objects;
9-
import java.util.Optional;
109
import java.util.Set;
1110
import java.util.stream.Stream;
1211
import javax.annotation.Nonnull;
@@ -54,10 +53,11 @@ public class State implements AStarState<State, Edge, Vertex>, Cloneable {
5453
public double walkDistance;
5554

5655
// how far a sharing vehicle powered by battery has driven
57-
public double drivenBatteryMeters;
56+
public double traversedBatteryMeters;
5857

5958
//the available battery distance of a currently selected sharing vehicle
60-
public Optional<Double> currentRangeMeters;
59+
//setting a magic value of 0.0 to make sure
60+
public double currentRangeMeters;
6161

6262
/* CONSTRUCTORS */
6363

@@ -89,8 +89,8 @@ public State(
8989
vertex.rentalRestrictions().noDropOffNetworks();
9090
}
9191
this.walkDistance = 0;
92-
this.drivenBatteryMeters = 0;
93-
this.currentRangeMeters = Optional.empty();
92+
this.traversedBatteryMeters = 0;
93+
this.currentRangeMeters = Double.POSITIVE_INFINITY;
9494
this.time = startTime.getEpochSecond();
9595
}
9696

@@ -369,7 +369,7 @@ public State reverse() {
369369
editor.incrementTimeInSeconds(orig.getAbsTimeDeltaSeconds());
370370
editor.incrementWeight(orig.getWeightDelta());
371371
editor.incrementWalkDistance(orig.getWalkDistanceDelta());
372-
editor.incrementDrivenBatteryMeters(orig.getBatteryDistanceDelta());
372+
editor.incrementTraversedBatteryMeters(orig.getBatteryDistanceDelta());
373373
editor.setCurrentRangeMeters(orig.getCurrentRangeMeters());
374374

375375
// propagate the modes through to the reversed edge
@@ -516,17 +516,17 @@ private double getWalkDistanceDelta() {
516516

517517
private double getBatteryDistanceDelta() {
518518
if (backState != null) {
519-
return Math.abs(this.drivenBatteryMeters - backState.drivenBatteryMeters);
519+
return Math.abs(this.traversedBatteryMeters - backState.traversedBatteryMeters);
520520
} else {
521521
return 0.0;
522522
}
523523
}
524524

525-
private Optional<Double> getCurrentRangeMeters() {
525+
private double getCurrentRangeMeters() {
526526
if (backState != null) {
527527
return backState.currentRangeMeters;
528528
} else {
529-
return Optional.empty();
529+
return 0;
530530
}
531531
}
532532

src/main/java/org/opentripplanner/street/search/state/StateEditor.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.opentripplanner.street.search.state;
22

3-
import java.util.Optional;
43
import java.util.Set;
54
import javax.annotation.Nonnull;
65
import javax.annotation.Nullable;
@@ -197,16 +196,16 @@ public void incrementWalkDistance(double length) {
197196
child.walkDistance += length;
198197
}
199198

200-
public void incrementDrivenBatteryMeters(double length) {
199+
public void incrementTraversedBatteryMeters(double length) {
201200
if (length < 0) {
202201
LOG.warn("A state's battery distance is being incremented by a negative amount.");
203202
defectiveTraversal = true;
204203
return;
205204
}
206-
child.drivenBatteryMeters += length;
205+
child.traversedBatteryMeters += length;
207206
}
208207

209-
public void setCurrentRangeMeters(Optional<Double> currentRangeMeters) {
208+
public void setCurrentRangeMeters(double currentRangeMeters) {
210209
child.currentRangeMeters = currentRangeMeters;
211210
}
212211

@@ -404,7 +403,7 @@ private void cloneStateDataAsNeeded() {
404403
child.stateData.clone();
405404
}
406405

407-
public boolean isVehicleRentable() {
406+
public boolean isRentingVehicle() {
408407
return child.isRentingVehicle();
409408
}
410409
}

src/test/java/org/opentripplanner/astar/strategy/BatteryDistanceSkipEdgeStrategyTest.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import static org.junit.jupiter.api.Assertions.assertFalse;
44
import static org.junit.jupiter.api.Assertions.assertTrue;
55

6-
import java.util.Optional;
76
import org.junit.jupiter.api.Test;
87
import org.opentripplanner.routing.algorithm.GraphRoutingTest;
98
import org.opentripplanner.routing.impl.BatteryValidator;
@@ -20,7 +19,7 @@ public class BatteryDistanceSkipEdgeStrategyTest extends GraphRoutingTest {
2019
void batteryIsNotEnough() {
2120
var state = getState(100.0);
2221

23-
state.currentRangeMeters = Optional.of(0.0);
22+
state.currentRangeMeters = 0.0;
2423

2524
var strategy = new BatteryDistanceSkipEdgeStrategy(BatteryValidator::wouldBatteryRunOut);
2625

@@ -34,7 +33,7 @@ void batteryIsNotEnough() {
3433
@Test
3534
void batteryIsEnough() {
3635
var state = getState(100.0);
37-
state.currentRangeMeters = Optional.of(4000.0);
36+
state.currentRangeMeters = 4000.0;
3837

3938
var strategy = new BatteryDistanceSkipEdgeStrategy(BatteryValidator::wouldBatteryRunOut);
4039
assertFalse(strategy.shouldSkipEdge(state, null));
@@ -48,7 +47,7 @@ void batteryIsEnough() {
4847
void batteryDiesAtFinalLocation() {
4948
var state = getState(100.0);
5049

51-
state.currentRangeMeters = Optional.of(100.0);
50+
state.currentRangeMeters = 100.0;
5251

5352
var strategy = new BatteryDistanceSkipEdgeStrategy(BatteryValidator::wouldBatteryRunOut);
5453
assertFalse(strategy.shouldSkipEdge(state, null));
@@ -61,7 +60,7 @@ void batteryDiesAtFinalLocation() {
6160
@Test
6261
void noDrivenMeters() {
6362
var state = getState(0.0);
64-
state.currentRangeMeters = Optional.of(100.0);
63+
state.currentRangeMeters = 100.0;
6564

6665
var strategy = new BatteryDistanceSkipEdgeStrategy(BatteryValidator::wouldBatteryRunOut);
6766
assertFalse(strategy.shouldSkipEdge(state, null));
@@ -74,15 +73,15 @@ void noDrivenMeters() {
7473
@Test
7574
void batteryHasNoValue() {
7675
var state = TestStateBuilder.ofScooterRental().build();
77-
state.currentRangeMeters = Optional.empty();
76+
state.currentRangeMeters = Double.POSITIVE_INFINITY;
7877

7978
var strategy = new BatteryDistanceSkipEdgeStrategy(BatteryValidator::wouldBatteryRunOut);
8079
assertFalse(strategy.shouldSkipEdge(state, null));
8180
}
8281

83-
private static State getState(double drivenBatteryMeters) {
82+
private static State getState(double traversedBatteryMeters) {
8483
var state = TestStateBuilder.ofScooterRental().build();
85-
state.drivenBatteryMeters = drivenBatteryMeters;
84+
state.traversedBatteryMeters = traversedBatteryMeters;
8685
return state;
8786
}
8887
}

0 commit comments

Comments
 (0)