Skip to content

Commit ac6941f

Browse files
committed
Issue #1.
1 parent db24718 commit ac6941f

File tree

14 files changed

+238
-117
lines changed

14 files changed

+238
-117
lines changed

core/src/main/java/org/hisrc/gtfs/graph/builder/GraphBuilder.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,25 @@
33
import org.hisrc.gtfs.graph.model.edge.TransitionEdge;
44
import org.hisrc.gtfs.graph.model.vertex.TemporalVertex;
55
import org.onebusaway.gtfs.model.Stop;
6+
import org.onebusaway.gtfs.model.StopTime;
7+
import org.onebusaway.gtfs.model.Trip;
68

79
public interface GraphBuilder {
10+
11+
public TemporalVertex findPreviousTripStopDepartureVertex(StopTime stopTime);
812

9-
public TemporalVertex addParentStationVertex(Stop stop, int time);
13+
public TemporalVertex addTripStopArrivalVertex(StopTime stopTime);
14+
15+
public TemporalVertex addTripStopDepartureVertex(StopTime stopTime);
1016

11-
public TemporalVertex addArrivalVertex(final Stop stop,
12-
final int arrivalTime);
17+
public TemporalVertex addStopTimeVertex(Stop stop, int time);
1318

14-
public TemporalVertex addDepartureVertex(final Stop stop,
15-
final int departureTime);
19+
public TemporalVertex addParentStationVertex(Stop stop, int time);
1620

17-
public TransitionEdge addArrivalDepartureEdge(TemporalVertex arrivalVertex,
21+
public TransitionEdge addStayEdge(TemporalVertex arrivalVertex,
1822
TemporalVertex departureVertex, int cost);
1923

20-
public TransitionEdge addDepartureArrivalEdge(TemporalVertex arrivalVertex,
24+
public TransitionEdge addRideEdge(TemporalVertex arrivalVertex,
2125
TemporalVertex departureVertex, int cost);
2226

2327
public TransitionEdge addParentChildEdge(TemporalVertex parentVertex,
@@ -26,4 +30,10 @@ public TransitionEdge addParentChildEdge(TemporalVertex parentVertex,
2630
public TransitionEdge addChildParentEdge(TemporalVertex childVertex,
2731
TemporalVertex parentVertex);
2832

33+
public TransitionEdge addUnboardEdge(TemporalVertex arrivalVertex,
34+
TemporalVertex arrivalStopTimeVertex);
35+
36+
public TransitionEdge addBoardEdge(TemporalVertex departureStopTimeVertex,
37+
TemporalVertex departureVertex);
38+
2939
}
Lines changed: 90 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,34 @@
11
package org.hisrc.gtfs.graph.builder.jgrapht;
22

3+
import java.util.HashSet;
4+
import java.util.Set;
5+
36
import org.hisrc.gtfs.graph.builder.GraphBuilder;
4-
import org.hisrc.gtfs.graph.model.edge.ArrivalDepartureEdge;
7+
import org.hisrc.gtfs.graph.model.edge.BoardEdge;
58
import org.hisrc.gtfs.graph.model.edge.ChildParentEdge;
6-
import org.hisrc.gtfs.graph.model.edge.DepartureArrivalEdge;
79
import org.hisrc.gtfs.graph.model.edge.ParentChildEdge;
10+
import org.hisrc.gtfs.graph.model.edge.RideEdge;
11+
import org.hisrc.gtfs.graph.model.edge.StayEdge;
812
import org.hisrc.gtfs.graph.model.edge.TransitionEdge;
9-
import org.hisrc.gtfs.graph.model.vertex.ArrivalVertex;
10-
import org.hisrc.gtfs.graph.model.vertex.DepartureVertex;
13+
import org.hisrc.gtfs.graph.model.edge.UnboardEdge;
1114
import org.hisrc.gtfs.graph.model.vertex.ParentStationVertex;
15+
import org.hisrc.gtfs.graph.model.vertex.StopTimeVertex;
1216
import org.hisrc.gtfs.graph.model.vertex.TemporalVertex;
17+
import org.hisrc.gtfs.graph.model.vertex.TripStopArrivalVertex;
18+
import org.hisrc.gtfs.graph.model.vertex.TripStopDepartureVertex;
1319
import org.jgrapht.DirectedGraph;
1420
import org.jgrapht.EdgeFactory;
1521
import org.jgrapht.graph.DirectedMultigraph;
1622
import org.onebusaway.gtfs.model.Stop;
23+
import org.onebusaway.gtfs.model.StopTime;
24+
import org.onebusaway.gtfs.model.Trip;
1725
import org.slf4j.Logger;
1826
import org.slf4j.LoggerFactory;
1927

2028
public class JGraphTGraphBuilder implements GraphBuilder {
2129

30+
private Logger logger = LoggerFactory.getLogger(JGraphTGraphBuilder.class);
31+
2232
private DirectedGraph<TemporalVertex, TransitionEdge> graph = new DirectedMultigraph<TemporalVertex, TransitionEdge>(
2333
new EdgeFactory<TemporalVertex, TransitionEdge>() {
2434
@Override
@@ -28,32 +38,73 @@ public TransitionEdge createEdge(TemporalVertex start,
2838
}
2939
});
3040

31-
private Logger logger = LoggerFactory.getLogger(JGraphTGraphBuilder.class);
32-
3341
public TemporalVertex addParentStationVertex(Stop stop, int time) {
3442
final ParentStationVertex vertex = new ParentStationVertex(stop, time);
3543
graph.addVertex(vertex);
3644
return vertex;
3745
}
3846

39-
public TemporalVertex addArrivalVertex(final Stop stop,
40-
final int arrivalTime) {
41-
final TemporalVertex arrivalNode = new ArrivalVertex(stop, arrivalTime);
42-
graph.addVertex(arrivalNode);
43-
return arrivalNode;
47+
@Override
48+
public TemporalVertex addTripStopArrivalVertex(StopTime stopTime) {
49+
final TemporalVertex vertex = new TripStopArrivalVertex(
50+
stopTime.getTrip(), stopTime.getStop(),
51+
stopTime.getArrivalTime());
52+
graph.addVertex(vertex);
53+
return vertex;
54+
}
55+
56+
private Trip lastTrip = null;
57+
private TemporalVertex lastTripStopDepartureVertex = null;
58+
private int lastStopSequence = -1;
59+
60+
@Override
61+
public TemporalVertex addTripStopDepartureVertex(StopTime stopTime) {
62+
final TemporalVertex vertex = new TripStopDepartureVertex(
63+
stopTime.getTrip(), stopTime.getStop(),
64+
stopTime.getDepartureTime());
65+
graph.addVertex(vertex);
66+
67+
lastTrip = stopTime.getTrip();
68+
lastTripStopDepartureVertex = vertex;
69+
lastStopSequence = stopTime.getStopSequence();
70+
return vertex;
71+
}
72+
73+
private Set<Trip> processedTrips = new HashSet<Trip>();
74+
75+
@Override
76+
public TemporalVertex findPreviousTripStopDepartureVertex(StopTime stopTime) {
77+
final Trip trip = stopTime.getTrip();
78+
final int stopSequence = stopTime.getStopSequence();
79+
final TemporalVertex previousDepartureNode;
80+
if (trip == lastTrip) {
81+
if (stopSequence <= lastStopSequence) {
82+
throw new IllegalStateException(
83+
"Stop sequence must be greater than the last stop sequence.");
84+
} else {
85+
previousDepartureNode = lastTripStopDepartureVertex;
86+
}
87+
} else {
88+
if (processedTrips.contains(trip)) {
89+
throw new IllegalStateException(
90+
"Trip was already processed and now appears again.");
91+
} else {
92+
processedTrips.add(lastTrip);
93+
previousDepartureNode = null;
94+
}
95+
}
96+
return previousDepartureNode;
4497
}
4598

46-
public TemporalVertex addDepartureVertex(final Stop stop,
47-
final int departureTime) {
48-
final TemporalVertex departureNode = new DepartureVertex(stop,
49-
departureTime);
50-
graph.addVertex(departureNode);
51-
return departureNode;
99+
@Override
100+
public TemporalVertex addStopTimeVertex(Stop stop, int time) {
101+
final TemporalVertex vertex = new StopTimeVertex(stop, time);
102+
graph.addVertex(vertex);
103+
return vertex;
52104
}
53105

54106
public TransitionEdge addParentChildEdge(final TemporalVertex childVertex,
55107
final TemporalVertex parentVertex) {
56-
// logger.info("Adding [" + parentVertex + "-pc->" + childVertex + "]");
57108
final ParentChildEdge edge = new ParentChildEdge();
58109
graph.addEdge(parentVertex, childVertex, edge);
59110

@@ -62,26 +113,39 @@ public TransitionEdge addParentChildEdge(final TemporalVertex childVertex,
62113

63114
public TransitionEdge addChildParentEdge(final TemporalVertex childVertex,
64115
final TemporalVertex parentVertex) {
65-
// logger.info("Adding [" + childVertex + "-cp->" + parentVertex + "]");
66116
ChildParentEdge edge = new ChildParentEdge();
67117
graph.addEdge(childVertex, parentVertex, edge);
68118
return edge;
69119
}
70120

71-
public TransitionEdge addArrivalDepartureEdge(
72-
final TemporalVertex arrivalVertex,
121+
public TransitionEdge addStayEdge(final TemporalVertex arrivalVertex,
73122
final TemporalVertex departureVertex, int cost) {
74-
// logger.info("Adding [" + arrivalNode + "-" + departureNode + "]");
75-
final TransitionEdge edge = new ArrivalDepartureEdge(cost);
123+
final TransitionEdge edge = new StayEdge(cost);
76124
graph.addEdge(arrivalVertex, departureVertex, edge);
77125
return edge;
78126
}
79127

80-
public TransitionEdge addDepartureArrivalEdge(
81-
final TemporalVertex departureVertex,
128+
public TransitionEdge addRideEdge(final TemporalVertex departureVertex,
82129
final TemporalVertex arrivalVertex, final int cost) {
83-
final TransitionEdge edge = new DepartureArrivalEdge(cost);
130+
final TransitionEdge edge = new RideEdge(cost);
84131
graph.addEdge(departureVertex, arrivalVertex, edge);
85132
return edge;
86133
}
134+
135+
@Override
136+
public TransitionEdge addBoardEdge(TemporalVertex departureStopTimeVertex,
137+
TemporalVertex departureVertex) {
138+
final TransitionEdge edge = new BoardEdge();
139+
graph.addEdge(departureStopTimeVertex, departureVertex, edge);
140+
return edge;
141+
}
142+
143+
@Override
144+
public TransitionEdge addUnboardEdge(TemporalVertex arrivalVertex,
145+
TemporalVertex arrivalStopTimeVertex) {
146+
final TransitionEdge edge = new UnboardEdge();
147+
graph.addEdge(arrivalVertex, arrivalStopTimeVertex, edge);
148+
return edge;
149+
}
150+
87151
}

core/src/main/java/org/hisrc/gtfs/graph/model/edge/ArrivalDepartureEdge.java

Lines changed: 0 additions & 10 deletions
This file was deleted.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package org.hisrc.gtfs.graph.model.edge;
2+
3+
public class BoardEdge extends TransitionEdge {
4+
5+
public BoardEdge() {
6+
super(0);
7+
}
8+
}

core/src/main/java/org/hisrc/gtfs/graph/model/edge/DepartureArrivalEdge.java

Lines changed: 0 additions & 10 deletions
This file was deleted.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.hisrc.gtfs.graph.model.edge;
2+
3+
4+
public class RideEdge extends TransitionEdge {
5+
6+
public RideEdge(int cost) {
7+
super(cost);
8+
}
9+
10+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.hisrc.gtfs.graph.model.edge;
2+
3+
4+
public class StayEdge extends TransitionEdge {
5+
6+
public StayEdge(int cost) {
7+
super(cost);
8+
}
9+
10+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.hisrc.gtfs.graph.model.edge;
2+
3+
public class UnboardEdge extends TransitionEdge {
4+
5+
public UnboardEdge() {
6+
super(0);
7+
}
8+
9+
}

core/src/main/java/org/hisrc/gtfs/graph/model/vertex/DepartureVertex.java

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

core/src/main/java/org/hisrc/gtfs/graph/model/vertex/ArrivalVertex.java renamed to core/src/main/java/org/hisrc/gtfs/graph/model/vertex/StopTimeVertex.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
import org.onebusaway.gtfs.model.Stop;
44

5-
public class ArrivalVertex extends TemporalVertex {
5+
public class StopTimeVertex extends TemporalVertex {
66

7-
public ArrivalVertex(Stop stop, int time) {
7+
public StopTimeVertex(Stop stop, int time) {
88
super(stop, time);
99
}
1010

0 commit comments

Comments
 (0)