Skip to content

Commit e1216dc

Browse files
refactor: extract interfaces for TransferService and TransferRepository
1 parent 031fc3f commit e1216dc

File tree

17 files changed

+197
-140
lines changed

17 files changed

+197
-140
lines changed

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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,23 +48,25 @@ public class RaptorTransitDataMapper {
4848

4949
private final TransitService transitService;
5050
private final SiteRepository siteRepository;
51-
private final TransferRepository transferService;
51+
private final TransferRepository transferRepository;
5252

5353
private RaptorTransitDataMapper(
5454
TimetableRepository timetableRepository,
55-
TransferRepository transferService
55+
TransferRepository transferRepository
5656
) {
5757
this.transitService = new DefaultTransitService(timetableRepository);
5858
this.siteRepository = timetableRepository.getSiteRepository();
59-
this.transferService = transferService;
59+
this.transferRepository = transferRepository;
6060
}
6161

6262
public static RaptorTransitData map(
6363
TransitTuningParameters tuningParameters,
6464
TimetableRepository timetableRepository,
65-
TransferRepository transferService
65+
TransferRepository transferRepository
6666
) {
67-
return new RaptorTransitDataMapper(timetableRepository, transferService).map(tuningParameters);
67+
return new RaptorTransitDataMapper(timetableRepository, transferRepository).map(
68+
tuningParameters
69+
);
6870
}
6971

7072
private RaptorTransitData map(TransitTuningParameters tuningParameters) {
@@ -78,7 +80,7 @@ private RaptorTransitData map(TransitTuningParameters tuningParameters) {
7880

7981
tripPatternsByStopByDate = mapTripPatterns(allTripPatterns);
8082

81-
transfersByStopIndex = mapTransfers(siteRepository, transferService);
83+
transfersByStopIndex = mapTransfers(siteRepository, transferRepository);
8284

8385
TransferIndexGenerator transferIndexGenerator = null;
8486
if (OTPFeature.TransferConstraints.isOn()) {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class TransfersMapper {
1616
*/
1717
static List<List<Transfer>> mapTransfers(
1818
SiteRepository siteRepository,
19-
TransferRepository transferService
19+
TransferRepository transferRepository
2020
) {
2121
List<List<Transfer>> transfersByStopIndex = new ArrayList<>();
2222

@@ -29,7 +29,7 @@ static List<List<Transfer>> mapTransfers(
2929

3030
ArrayList<Transfer> list = new ArrayList<>();
3131

32-
for (PathTransfer pathTransfer : transferService.getTransfersByStop(stop)) {
32+
for (PathTransfer pathTransfer : transferRepository.getTransfersByStop(stop)) {
3333
if (pathTransfer.to instanceof RegularStop) {
3434
int toStopIndex = pathTransfer.to.getIndex();
3535
Transfer newTransfer;

application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplication.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ private void initEllipsoidToGeoidDifference() {
233233
*/
234234
public static void createRaptorTransitData(
235235
TimetableRepository timetableRepository,
236-
TransferRepository transferService,
236+
TransferRepository transferRepository,
237237
TransitTuningParameters tuningParameters
238238
) {
239239
if (!timetableRepository.hasTransit() || !timetableRepository.isIndexed()) {
@@ -243,7 +243,7 @@ public static void createRaptorTransitData(
243243
}
244244
LOG.info("Creating transit layer for Raptor routing.");
245245
timetableRepository.setRaptorTransitData(
246-
RaptorTransitDataMapper.map(tuningParameters, timetableRepository, transferService)
246+
RaptorTransitDataMapper.map(tuningParameters, timetableRepository, transferRepository)
247247
);
248248
timetableRepository.setRealtimeRaptorTransitData(
249249
new RaptorTransitData(timetableRepository.getRaptorTransitData())

application/src/main/java/org/opentripplanner/standalone/configure/ConstructApplicationFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
import org.opentripplanner.street.StreetRepository;
5757
import org.opentripplanner.street.service.StreetLimitationParametersServiceModule;
5858
import org.opentripplanner.transfer.TransferRepository;
59-
import org.opentripplanner.transfer.TransferServiceModule;
59+
import org.opentripplanner.transfer.configure.TransferServiceModule;
6060
import org.opentripplanner.transit.configure.TransitModule;
6161
import org.opentripplanner.transit.service.TimetableRepository;
6262
import org.opentripplanner.transit.service.TransitService;

application/src/main/java/org/opentripplanner/standalone/configure/LoadApplicationFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
import org.opentripplanner.street.StreetRepository;
3030
import org.opentripplanner.street.configure.StreetRepositoryModule;
3131
import org.opentripplanner.transfer.TransferRepository;
32-
import org.opentripplanner.transfer.TransferRepositoryModule;
32+
import org.opentripplanner.transfer.configure.TransferRepositoryModule;
3333
import org.opentripplanner.transit.service.TimetableRepository;
3434

3535
/**
Lines changed: 15 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,32 @@
11
package org.opentripplanner.transfer;
22

3-
import com.google.common.collect.HashMultimap;
43
import com.google.common.collect.Multimap;
54
import java.io.Serializable;
65
import java.util.Collection;
7-
import java.util.Collections;
86
import java.util.List;
97
import org.opentripplanner.model.PathTransfer;
108
import org.opentripplanner.routing.api.request.StreetMode;
119
import org.opentripplanner.transit.model.site.StopLocation;
12-
import org.slf4j.Logger;
13-
import org.slf4j.LoggerFactory;
1410

15-
public class TransferRepository implements Serializable {
11+
/**
12+
* This repository holds all transfers that are calculated between different stops for different
13+
* modes. It is populated during the graph build process and saved into the serialized graph object.
14+
* It should only be accessed directly during graph building, not during OTP server runtime. Use the
15+
* {@link TransferService} instead, once transfer updates are implemented it will handle mutability
16+
* correctly.
17+
*/
18+
public interface TransferRepository extends Serializable {
19+
Collection<PathTransfer> getTransfersByStop(StopLocation stop);
1620

17-
// ToDo: I would prefer if this was package private, but right now the graph builder needs to
18-
// write in here
21+
List<PathTransfer> findTransfers(StreetMode mode);
1922

20-
private static final Logger LOG = LoggerFactory.getLogger(TransferRepository.class);
23+
Collection<PathTransfer> getAllPathTransfers();
2124

22-
private final Multimap<StopLocation, PathTransfer> transfersByStop = HashMultimap.create();
25+
void addAllTransfersByStops(Multimap<StopLocation, PathTransfer> transfersByStop);
2326

24-
private transient TransferIndex index;
27+
void index();
2528

26-
public TransferRepository() {
27-
LOG.info("Initializing TransferRepository");
28-
}
29+
Collection<PathTransfer> getTransfersToStop(StopLocation stopLocation);
2930

30-
public Collection<PathTransfer> getTransfersByStop(StopLocation stop) {
31-
return transfersByStop.get(stop);
32-
}
33-
34-
/** Pre-generated transfers between all stops filtered based on the modes in the PathTransfer. */
35-
public List<PathTransfer> findTransfers(StreetMode mode) {
36-
return transfersByStop
37-
.values()
38-
.stream()
39-
.filter(pathTransfer -> pathTransfer.getModes().contains(mode))
40-
.toList();
41-
}
42-
43-
public Collection<PathTransfer> getAllPathTransfers() {
44-
return transfersByStop.values();
45-
}
46-
47-
public void addAllTransfersByStops(Multimap<StopLocation, PathTransfer> transfersByStop) {
48-
// invalidateIndex();
49-
this.transfersByStop.putAll(transfersByStop);
50-
}
51-
52-
public void index() {
53-
if (index == null) {
54-
index = new TransferIndex(this);
55-
}
56-
}
57-
58-
public Collection<PathTransfer> getTransfersToStop(StopLocation stopLocation) {
59-
if (index == null) {
60-
return Collections.emptyList();
61-
}
62-
return index.getTransfersToStop(stopLocation);
63-
}
64-
65-
public Collection<PathTransfer> getTransfersFromStop(StopLocation stopLocation) {
66-
if (index == null) {
67-
return Collections.emptyList();
68-
}
69-
return index.getTransfersFromStop(stopLocation);
70-
}
31+
Collection<PathTransfer> getTransfersFromStop(StopLocation stopLocation);
7132
}

application/src/main/java/org/opentripplanner/transfer/TransferRepositoryModule.java

Lines changed: 0 additions & 15 deletions
This file was deleted.
Lines changed: 7 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,19 @@
11
package org.opentripplanner.transfer;
22

33
import java.util.Collection;
4-
import java.util.List;
54
import org.opentripplanner.model.PathTransfer;
6-
import org.opentripplanner.routing.api.request.StreetMode;
75
import org.opentripplanner.transit.model.site.StopLocation;
8-
import org.slf4j.Logger;
9-
import org.slf4j.LoggerFactory;
106

117
/**
12-
* This class provides read access to transfers. Maybe this will be a TransferSnapshot or similar
13-
* once we implement the concurrency management for updates
8+
* Access transfers during OTP server runtime. It provides a frozen view of all these elements at a
9+
* point in time, which is not affected by ongoing transfer updates, allowing results to remain
10+
* stable over the course of a request.
1411
*/
15-
public class TransferService {
12+
public interface TransferService {
1613

17-
private static final Logger LOG = LoggerFactory.getLogger(TransferService.class);
14+
Collection<PathTransfer> getTransfersByStop(StopLocation stop);
1815

19-
private final TransferRepository transferRepository;
16+
Collection<PathTransfer> getTransfersFromStop(StopLocation stopLocation);
2017

21-
public TransferService(TransferRepository transferRepository) {
22-
this.transferRepository = transferRepository;
23-
LOG.info("Initializing TransferService");
24-
}
25-
26-
public Collection<PathTransfer> getTransfersByStop(StopLocation stop) {
27-
return transferRepository.getTransfersByStop(stop);
28-
}
29-
30-
/** Pre-generated transfers between all stops filtered based on the modes in the PathTransfer. */
31-
public List<PathTransfer> findTransfers(StreetMode mode) {
32-
return transferRepository.findTransfers(mode);
33-
}
34-
35-
public Collection<PathTransfer> getAllPathTransfers() {
36-
return transferRepository.getAllPathTransfers();
37-
}
38-
39-
public Collection<PathTransfer> getTransfersToStop(StopLocation stopLocation) {
40-
return transferRepository.getTransfersToStop(stopLocation);
41-
}
42-
43-
public Collection<PathTransfer> getTransfersFromStop(StopLocation stopLocation) {
44-
return transferRepository.getTransfersFromStop(stopLocation);
45-
}
18+
Collection<PathTransfer> getTransfersToStop(StopLocation stopLocation);
4619
}

application/src/main/java/org/opentripplanner/transfer/TransferServiceModule.java

Lines changed: 0 additions & 15 deletions
This file was deleted.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.opentripplanner.transfer.configure;
2+
3+
import dagger.Module;
4+
import dagger.Provides;
5+
import jakarta.inject.Singleton;
6+
import org.opentripplanner.transfer.TransferRepository;
7+
import org.opentripplanner.transfer.internal.DefaultTransferRepository;
8+
9+
@Module
10+
public class TransferRepositoryModule {
11+
12+
@Provides
13+
@Singleton
14+
public TransferRepository provideTransferRepository() {
15+
return new DefaultTransferRepository();
16+
}
17+
}

0 commit comments

Comments
 (0)