Skip to content

Commit ef42331

Browse files
committed
Refactor to only allow one coordinate outside of raptor
1 parent 6f35f3f commit ef42331

File tree

11 files changed

+43
-38
lines changed

11 files changed

+43
-38
lines changed

application/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/ViaLocationMapper.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ private static ViaLocation mapViaLocation(Map<String, Map<String, Object>> via)
4242
(String) visit.get(FIELD_LABEL),
4343
(Duration) visit.get(FIELD_MINIMUM_WAIT_TIME),
4444
mapStopLocationIds((List<String>) visit.get(FIELD_STOP_LOCATION_IDS)),
45-
List.of()
45+
null
4646
);
4747
} else {
4848
throw new IllegalArgumentException("ViaLocation must define either pass-through or visit.");

application/src/main/java/org/opentripplanner/apis/transmodel/mapping/TripViaLocationMapper.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,12 @@ private static List<FeedScopedId> mapStopLocationIds(Map<String, Object> map) {
7575
return c == null ? List.of() : c.stream().map(TransitIdMapper::mapIDToDomain).toList();
7676
}
7777

78-
private static List<WgsCoordinate> mapCoordinate(Map<String, Object> map) {
79-
return CoordinateInputType.mapToWgsCoordinate(ViaLocationInputType.FIELD_COORDINATE, map)
80-
.map(List::of)
81-
.orElseGet(List::of);
78+
@Nullable
79+
private static WgsCoordinate mapCoordinate(Map<String, Object> map) {
80+
return CoordinateInputType.mapToWgsCoordinate(
81+
ViaLocationInputType.FIELD_COORDINATE,
82+
map
83+
).orElse(null);
8284
}
8385

8486
/**

application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/RaptorRequestMapper.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -245,11 +245,11 @@ private RaptorViaLocation mapViaLocation(ViaLocation input) {
245245
builder.addViaStop(stopIndex);
246246
viaStops.add(stopIndex);
247247
}
248-
for (var coordinate : input.coordinates()) {
248+
if (input.coordinate().isPresent()) {
249249
var viaTransfers = viaTransferResolver.createViaTransfers(
250250
request,
251251
input.label(),
252-
coordinate
252+
input.coordinate().get()
253253
);
254254
for (var it : viaTransfers) {
255255
// If via-stop and via-transfers are used together then walking from a stop

application/src/main/java/org/opentripplanner/routing/api/request/via/ViaLocation.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.time.Duration;
44
import java.util.List;
5+
import java.util.Optional;
56
import javax.annotation.Nullable;
67
import org.opentripplanner.framework.geometry.WgsCoordinate;
78
import org.opentripplanner.transit.model.framework.FeedScopedId;
@@ -47,10 +48,10 @@ default Duration minimumWaitTime() {
4748
List<FeedScopedId> stopLocationIds();
4849

4950
/**
50-
* A list of coordinates used together with the {@code stopLocationIds} as the via location.
51-
* This is optional, an empty list is returned if no coordinates are available.
51+
* A coordinate used together with the {@code stopLocationIds} as the via location.
52+
* This is optional.
5253
*/
53-
default List<WgsCoordinate> coordinates() {
54-
return List.of();
54+
default Optional<WgsCoordinate> coordinate() {
55+
return Optional.empty();
5556
}
5657
}

application/src/main/java/org/opentripplanner/routing/api/request/via/VisitViaLocation.java

+13-9
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.time.Duration;
44
import java.util.List;
55
import java.util.Objects;
6+
import java.util.Optional;
67
import javax.annotation.Nullable;
78
import org.opentripplanner.framework.geometry.WgsCoordinate;
89
import org.opentripplanner.transit.model.framework.FeedScopedId;
@@ -19,24 +20,27 @@ public class VisitViaLocation extends AbstractViaLocation {
1920

2021
private static final Duration MINIMUM_WAIT_TIME_MAX_LIMIT = Duration.ofHours(24);
2122

23+
@Nullable
2224
private final Duration minimumWaitTime;
23-
private final List<WgsCoordinate> coordinates;
25+
26+
@Nullable
27+
private final WgsCoordinate coordinate;
2428

2529
public VisitViaLocation(
2630
@Nullable String label,
2731
@Nullable Duration minimumWaitTime,
2832
List<FeedScopedId> stopLocationIds,
29-
List<WgsCoordinate> coordinates
33+
@Nullable WgsCoordinate coordinate
3034
) {
3135
super(label, stopLocationIds);
3236
this.minimumWaitTime = DurationUtils.requireNonNegative(
3337
minimumWaitTime == null ? Duration.ZERO : minimumWaitTime,
3438
MINIMUM_WAIT_TIME_MAX_LIMIT,
3539
"minimumWaitTime"
3640
);
37-
this.coordinates = List.copyOf(coordinates);
41+
this.coordinate = coordinate;
3842

39-
if (stopLocationIds().isEmpty() && coordinates().isEmpty()) {
43+
if (stopLocationIds().isEmpty() && coordinate().isEmpty()) {
4044
throw new IllegalArgumentException(
4145
"A via location must have at least one stop location or a coordinate." +
4246
(label == null ? "" : " Label: " + label)
@@ -60,8 +64,8 @@ public boolean isPassThroughLocation() {
6064
}
6165

6266
@Override
63-
public List<WgsCoordinate> coordinates() {
64-
return coordinates;
67+
public Optional<WgsCoordinate> coordinate() {
68+
return Optional.ofNullable(coordinate);
6569
}
6670

6771
@Override
@@ -70,7 +74,7 @@ public String toString() {
7074
.addObj("label", label())
7175
.addDuration("minimumWaitTime", minimumWaitTime, Duration.ZERO)
7276
.addCol("stopLocationIds", stopLocationIds())
73-
.addObj("coordinates", coordinates)
77+
.addObj("coordinate", coordinate)
7478
.toString();
7579
}
7680

@@ -88,12 +92,12 @@ public boolean equals(Object o) {
8892
VisitViaLocation that = (VisitViaLocation) o;
8993
return (
9094
Objects.equals(minimumWaitTime, that.minimumWaitTime) &&
91-
Objects.equals(coordinates, that.coordinates)
95+
Objects.equals(coordinate, that.coordinate)
9296
);
9397
}
9498

9599
@Override
96100
public int hashCode() {
97-
return Objects.hash(super.hashCode(), minimumWaitTime, coordinates);
101+
return Objects.hash(super.hashCode(), minimumWaitTime, coordinate);
98102
}
99103
}

application/src/test/java/org/opentripplanner/apis/gtfs/mapping/routerequest/ViaLocationMapperTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ void mapToVisitViaLocations() {
4545
assertEquals(EXPECTED_IDS_AS_STRING, via.stopLocationIds().toString());
4646
assertFalse(via.isPassThroughLocation());
4747
assertEquals(
48-
"[VisitViaLocation{label: TestLabel, minimumWaitTime: 5m, stopLocationIds: [F:ID1, F:ID2], coordinates: []}]",
48+
"[VisitViaLocation{label: TestLabel, minimumWaitTime: 5m, stopLocationIds: [F:ID1, F:ID2]}]",
4949
result.toString()
5050
);
5151
}

application/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripViaLocationMapperTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ void testMapToVisitViaLocations() {
5454
assertEquals(EXPECTED_IDS_AS_STRING, via.stopLocationIds().toString());
5555
assertFalse(via.isPassThroughLocation());
5656
assertEquals(
57-
"[VisitViaLocation{label: TestLabel, minimumWaitTime: 5m, stopLocationIds: [F:ID1, F:ID2], coordinates: []}]",
57+
"[VisitViaLocation{label: TestLabel, minimumWaitTime: 5m, stopLocationIds: [F:ID1, F:ID2]}]",
5858
result.toString()
5959
);
6060
}

application/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/RaptorRequestMapperTest.java

+3-5
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class RaptorRequestMapperTest {
4747
"Via A",
4848
null,
4949
List.of(STOP_A.getId()),
50-
List.of()
50+
null
5151
);
5252
private static final int VIA_FROM_STOP_INDEX = 47;
5353
private static final int VIA_TO_STOP_INDEX = 123;
@@ -100,7 +100,7 @@ void testViaLocation() {
100100
var minWaitTime = Duration.ofMinutes(13);
101101

102102
req.setViaLocations(
103-
List.of(new VisitViaLocation("Via A", minWaitTime, List.of(STOP_A.getId()), List.of()))
103+
List.of(new VisitViaLocation("Via A", minWaitTime, List.of(STOP_A.getId()), null))
104104
);
105105

106106
var result = map(req);
@@ -133,9 +133,7 @@ void testViaCoordinate() {
133133
Duration minimumWaitTime = Duration.ofMinutes(10);
134134

135135
req.setViaLocations(
136-
List.of(
137-
new VisitViaLocation("Via coordinate", minimumWaitTime, List.of(), List.of(VIA_COORDINATE))
138-
)
136+
List.of(new VisitViaLocation("Via coordinate", minimumWaitTime, List.of(), VIA_COORDINATE))
139137
);
140138

141139
var result = map(req);

application/src/test/java/org/opentripplanner/routing/api/request/via/PassThroughViaLocationTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ void stopLocationIds() {
4040

4141
@Test
4242
void coordinates() {
43-
assertEquals("[]", subject.coordinates().toString());
43+
assertTrue(subject.coordinate().isEmpty());
4444
}
4545

4646
@Test

application/src/test/java/org/opentripplanner/routing/api/request/via/VisitViaLocationTest.java

+9-9
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class VisitViaLocationTest {
2121
LABEL,
2222
MINIMUM_WAIT_TIME,
2323
List.of(ID),
24-
List.of(WgsCoordinate.GREENWICH)
24+
WgsCoordinate.GREENWICH
2525
);
2626

2727
@Test
@@ -46,13 +46,13 @@ void stopLocationIds() {
4646

4747
@Test
4848
void coordinates() {
49-
assertEquals("[" + WgsCoordinate.GREENWICH + "]", subject.coordinates().toString());
49+
assertEquals(WgsCoordinate.GREENWICH, subject.coordinate().get());
5050
}
5151

5252
@Test
5353
void testToString() {
5454
assertEquals(
55-
"VisitViaLocation{label: AName, minimumWaitTime: 5m, stopLocationIds: [F:1], coordinates: [(51.48, 0.0)]}",
55+
"VisitViaLocation{label: AName, minimumWaitTime: 5m, stopLocationIds: [F:1], coordinate: (51.48, 0.0)}",
5656
subject.toString()
5757
);
5858
}
@@ -62,15 +62,15 @@ void testEqAndHashCode() {
6262
var l = subject.label();
6363
var mwt = subject.minimumWaitTime();
6464
var ids = subject.stopLocationIds();
65-
var cs = subject.coordinates();
65+
var cs = subject.coordinate();
6666

6767
AssertEqualsAndHashCode.verify(subject)
68-
.sameAs(new VisitViaLocation(l, mwt, ids, cs))
68+
.sameAs(new VisitViaLocation(l, mwt, ids, cs.orElse(null)))
6969
.differentFrom(
70-
new VisitViaLocation("other", mwt, ids, cs),
71-
new VisitViaLocation(l, Duration.ZERO, ids, cs),
72-
new VisitViaLocation(l, mwt, List.of(), cs),
73-
new VisitViaLocation(l, mwt, ids, List.of())
70+
new VisitViaLocation("other", mwt, ids, cs.orElse(null)),
71+
new VisitViaLocation(l, Duration.ZERO, ids, cs.orElse(null)),
72+
new VisitViaLocation(l, mwt, List.of(), cs.orElse(null)),
73+
new VisitViaLocation(l, mwt, ids, null)
7474
);
7575
}
7676
}

application/src/test/java/org/opentripplanner/routing/core/RouteRequestTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ void allowTransferOptimization() {
156156
assertTrue(request.allowTransferOptimization());
157157

158158
request.setViaLocations(
159-
List.of(new VisitViaLocation("VIA", null, List.of(new FeedScopedId("F", "1")), List.of()))
159+
List.of(new VisitViaLocation("VIA", null, List.of(new FeedScopedId("F", "1")), null))
160160
);
161161
assertFalse(request.allowTransferOptimization());
162162
}

0 commit comments

Comments
 (0)