11package org .hisrc .gtfs .graph .builder .jgrapht ;
22
3+ import java .util .HashSet ;
4+ import java .util .Set ;
5+
36import org .hisrc .gtfs .graph .builder .GraphBuilder ;
4- import org .hisrc .gtfs .graph .model .edge .ArrivalDepartureEdge ;
7+ import org .hisrc .gtfs .graph .model .edge .BoardEdge ;
58import org .hisrc .gtfs .graph .model .edge .ChildParentEdge ;
6- import org .hisrc .gtfs .graph .model .edge .DepartureArrivalEdge ;
79import 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 ;
812import 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 ;
1114import org .hisrc .gtfs .graph .model .vertex .ParentStationVertex ;
15+ import org .hisrc .gtfs .graph .model .vertex .StopTimeVertex ;
1216import 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 ;
1319import org .jgrapht .DirectedGraph ;
1420import org .jgrapht .EdgeFactory ;
1521import org .jgrapht .graph .DirectedMultigraph ;
1622import org .onebusaway .gtfs .model .Stop ;
23+ import org .onebusaway .gtfs .model .StopTime ;
24+ import org .onebusaway .gtfs .model .Trip ;
1725import org .slf4j .Logger ;
1826import org .slf4j .LoggerFactory ;
1927
2028public 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}
0 commit comments