|
|
@@ -18,20 +18,20 @@ public class GraphTraversalServiceImpl implements GraphTraversalService {
|
|
18
|
18
|
this.random = new Random();
|
|
19
|
19
|
}
|
|
20
|
20
|
|
|
21
|
|
- public List<TransitPath> findShortestPath(final String originUnLocode,
|
|
22
|
|
- final String destinationUnLocode,
|
|
|
21
|
+ public List<TransitPath> findShortestPath(final String originNode,
|
|
|
22
|
+ final String destinationNode,
|
|
23
|
23
|
final Properties limitations) {
|
|
24
|
24
|
Date date = nextDate(new Date());
|
|
25
|
25
|
|
|
26
|
|
- List<String> allVertices = dao.listLocations();
|
|
27
|
|
- allVertices.remove(originUnLocode);
|
|
28
|
|
- allVertices.remove(destinationUnLocode);
|
|
|
26
|
+ List<String> allVertices = dao.listAllNodes();
|
|
|
27
|
+ allVertices.remove(originNode);
|
|
|
28
|
+ allVertices.remove(destinationNode);
|
|
29
|
29
|
|
|
30
|
30
|
final int candidateCount = getRandomNumberOfCandidates();
|
|
31
|
31
|
final List<TransitPath> candidates = new ArrayList<TransitPath>(candidateCount);
|
|
32
|
32
|
|
|
33
|
33
|
for (int i = 0; i < candidateCount; i++) {
|
|
34
|
|
- allVertices = getRandomChunkOfLocations(allVertices);
|
|
|
34
|
+ allVertices = getRandomChunkOfNodes(allVertices);
|
|
35
|
35
|
final List<TransitEdge> transitEdges = new ArrayList<TransitEdge>(allVertices.size() - 1);
|
|
36
|
36
|
final String firstLegTo = allVertices.get(0);
|
|
37
|
37
|
|
|
|
@@ -40,8 +40,8 @@ public class GraphTraversalServiceImpl implements GraphTraversalService {
|
|
40
|
40
|
date = nextDate(toDate);
|
|
41
|
41
|
|
|
42
|
42
|
transitEdges.add(new TransitEdge(
|
|
43
|
|
- dao.getVoyageNumber(originUnLocode, firstLegTo),
|
|
44
|
|
- originUnLocode, firstLegTo, fromDate, toDate));
|
|
|
43
|
+ dao.getTransitEdge(originNode, firstLegTo),
|
|
|
44
|
+ originNode, firstLegTo, fromDate, toDate));
|
|
45
|
45
|
|
|
46
|
46
|
for (int j = 0; j < allVertices.size() - 1; j++) {
|
|
47
|
47
|
final String curr = allVertices.get(j);
|
|
|
@@ -49,15 +49,15 @@ public class GraphTraversalServiceImpl implements GraphTraversalService {
|
|
49
|
49
|
fromDate = nextDate(date);
|
|
50
|
50
|
toDate = nextDate(fromDate);
|
|
51
|
51
|
date = nextDate(toDate);
|
|
52
|
|
- transitEdges.add(new TransitEdge(dao.getVoyageNumber(curr, next), curr, next, fromDate, toDate));
|
|
|
52
|
+ transitEdges.add(new TransitEdge(dao.getTransitEdge(curr, next), curr, next, fromDate, toDate));
|
|
53
|
53
|
}
|
|
54
|
54
|
|
|
55
|
55
|
final String lastLegFrom = allVertices.get(allVertices.size() - 1);
|
|
56
|
56
|
fromDate = nextDate(date);
|
|
57
|
57
|
toDate = nextDate(fromDate);
|
|
58
|
58
|
transitEdges.add(new TransitEdge(
|
|
59
|
|
- dao.getVoyageNumber(lastLegFrom, destinationUnLocode),
|
|
60
|
|
- lastLegFrom, destinationUnLocode, fromDate, toDate));
|
|
|
59
|
+ dao.getTransitEdge(lastLegFrom, destinationNode),
|
|
|
60
|
+ lastLegFrom, destinationNode, fromDate, toDate));
|
|
61
|
61
|
|
|
62
|
62
|
candidates.add(new TransitPath(transitEdges));
|
|
63
|
63
|
}
|
|
|
@@ -73,11 +73,11 @@ public class GraphTraversalServiceImpl implements GraphTraversalService {
|
|
73
|
73
|
return 3 + random.nextInt(3);
|
|
74
|
74
|
}
|
|
75
|
75
|
|
|
76
|
|
- private List<String> getRandomChunkOfLocations(List<String> allLocations) {
|
|
77
|
|
- Collections.shuffle(allLocations);
|
|
78
|
|
- final int total = allLocations.size();
|
|
|
76
|
+ private List<String> getRandomChunkOfNodes(List<String> allNodes) {
|
|
|
77
|
+ Collections.shuffle(allNodes);
|
|
|
78
|
+ final int total = allNodes.size();
|
|
79
|
79
|
final int chunk = total > 4 ? 1 + new Random().nextInt(5) : total;
|
|
80
|
|
- return allLocations.subList(0, chunk);
|
|
|
80
|
+ return allNodes.subList(0, chunk);
|
|
81
|
81
|
}
|
|
82
|
82
|
|
|
83
|
83
|
}
|