Skip to content

Commit

Permalink
Issue #1.
Browse files Browse the repository at this point in the history
  • Loading branch information
highsource committed Jul 12, 2015
1 parent db24718 commit ac6941f
Show file tree
Hide file tree
Showing 14 changed files with 238 additions and 117 deletions.
24 changes: 17 additions & 7 deletions core/src/main/java/org/hisrc/gtfs/graph/builder/GraphBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,25 @@
import org.hisrc.gtfs.graph.model.edge.TransitionEdge;
import org.hisrc.gtfs.graph.model.vertex.TemporalVertex;
import org.onebusaway.gtfs.model.Stop;
import org.onebusaway.gtfs.model.StopTime;
import org.onebusaway.gtfs.model.Trip;

public interface GraphBuilder {

public TemporalVertex findPreviousTripStopDepartureVertex(StopTime stopTime);

public TemporalVertex addParentStationVertex(Stop stop, int time);
public TemporalVertex addTripStopArrivalVertex(StopTime stopTime);

public TemporalVertex addTripStopDepartureVertex(StopTime stopTime);

public TemporalVertex addArrivalVertex(final Stop stop,
final int arrivalTime);
public TemporalVertex addStopTimeVertex(Stop stop, int time);

public TemporalVertex addDepartureVertex(final Stop stop,
final int departureTime);
public TemporalVertex addParentStationVertex(Stop stop, int time);

public TransitionEdge addArrivalDepartureEdge(TemporalVertex arrivalVertex,
public TransitionEdge addStayEdge(TemporalVertex arrivalVertex,
TemporalVertex departureVertex, int cost);

public TransitionEdge addDepartureArrivalEdge(TemporalVertex arrivalVertex,
public TransitionEdge addRideEdge(TemporalVertex arrivalVertex,
TemporalVertex departureVertex, int cost);

public TransitionEdge addParentChildEdge(TemporalVertex parentVertex,
Expand All @@ -26,4 +30,10 @@ public TransitionEdge addParentChildEdge(TemporalVertex parentVertex,
public TransitionEdge addChildParentEdge(TemporalVertex childVertex,
TemporalVertex parentVertex);

public TransitionEdge addUnboardEdge(TemporalVertex arrivalVertex,
TemporalVertex arrivalStopTimeVertex);

public TransitionEdge addBoardEdge(TemporalVertex departureStopTimeVertex,
TemporalVertex departureVertex);

}
Original file line number Diff line number Diff line change
@@ -1,24 +1,34 @@
package org.hisrc.gtfs.graph.builder.jgrapht;

import java.util.HashSet;
import java.util.Set;

import org.hisrc.gtfs.graph.builder.GraphBuilder;
import org.hisrc.gtfs.graph.model.edge.ArrivalDepartureEdge;
import org.hisrc.gtfs.graph.model.edge.BoardEdge;
import org.hisrc.gtfs.graph.model.edge.ChildParentEdge;
import org.hisrc.gtfs.graph.model.edge.DepartureArrivalEdge;
import org.hisrc.gtfs.graph.model.edge.ParentChildEdge;
import org.hisrc.gtfs.graph.model.edge.RideEdge;
import org.hisrc.gtfs.graph.model.edge.StayEdge;
import org.hisrc.gtfs.graph.model.edge.TransitionEdge;
import org.hisrc.gtfs.graph.model.vertex.ArrivalVertex;
import org.hisrc.gtfs.graph.model.vertex.DepartureVertex;
import org.hisrc.gtfs.graph.model.edge.UnboardEdge;
import org.hisrc.gtfs.graph.model.vertex.ParentStationVertex;
import org.hisrc.gtfs.graph.model.vertex.StopTimeVertex;
import org.hisrc.gtfs.graph.model.vertex.TemporalVertex;
import org.hisrc.gtfs.graph.model.vertex.TripStopArrivalVertex;
import org.hisrc.gtfs.graph.model.vertex.TripStopDepartureVertex;
import org.jgrapht.DirectedGraph;
import org.jgrapht.EdgeFactory;
import org.jgrapht.graph.DirectedMultigraph;
import org.onebusaway.gtfs.model.Stop;
import org.onebusaway.gtfs.model.StopTime;
import org.onebusaway.gtfs.model.Trip;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class JGraphTGraphBuilder implements GraphBuilder {

private Logger logger = LoggerFactory.getLogger(JGraphTGraphBuilder.class);

private DirectedGraph<TemporalVertex, TransitionEdge> graph = new DirectedMultigraph<TemporalVertex, TransitionEdge>(
new EdgeFactory<TemporalVertex, TransitionEdge>() {
@Override
Expand All @@ -28,32 +38,73 @@ public TransitionEdge createEdge(TemporalVertex start,
}
});

private Logger logger = LoggerFactory.getLogger(JGraphTGraphBuilder.class);

public TemporalVertex addParentStationVertex(Stop stop, int time) {
final ParentStationVertex vertex = new ParentStationVertex(stop, time);
graph.addVertex(vertex);
return vertex;
}

public TemporalVertex addArrivalVertex(final Stop stop,
final int arrivalTime) {
final TemporalVertex arrivalNode = new ArrivalVertex(stop, arrivalTime);
graph.addVertex(arrivalNode);
return arrivalNode;
@Override
public TemporalVertex addTripStopArrivalVertex(StopTime stopTime) {
final TemporalVertex vertex = new TripStopArrivalVertex(
stopTime.getTrip(), stopTime.getStop(),
stopTime.getArrivalTime());
graph.addVertex(vertex);
return vertex;
}

private Trip lastTrip = null;
private TemporalVertex lastTripStopDepartureVertex = null;
private int lastStopSequence = -1;

@Override
public TemporalVertex addTripStopDepartureVertex(StopTime stopTime) {
final TemporalVertex vertex = new TripStopDepartureVertex(
stopTime.getTrip(), stopTime.getStop(),
stopTime.getDepartureTime());
graph.addVertex(vertex);

lastTrip = stopTime.getTrip();
lastTripStopDepartureVertex = vertex;
lastStopSequence = stopTime.getStopSequence();
return vertex;
}

private Set<Trip> processedTrips = new HashSet<Trip>();

@Override
public TemporalVertex findPreviousTripStopDepartureVertex(StopTime stopTime) {
final Trip trip = stopTime.getTrip();
final int stopSequence = stopTime.getStopSequence();
final TemporalVertex previousDepartureNode;
if (trip == lastTrip) {
if (stopSequence <= lastStopSequence) {
throw new IllegalStateException(
"Stop sequence must be greater than the last stop sequence.");
} else {
previousDepartureNode = lastTripStopDepartureVertex;
}
} else {
if (processedTrips.contains(trip)) {
throw new IllegalStateException(
"Trip was already processed and now appears again.");
} else {
processedTrips.add(lastTrip);
previousDepartureNode = null;
}
}
return previousDepartureNode;
}

public TemporalVertex addDepartureVertex(final Stop stop,
final int departureTime) {
final TemporalVertex departureNode = new DepartureVertex(stop,
departureTime);
graph.addVertex(departureNode);
return departureNode;
@Override
public TemporalVertex addStopTimeVertex(Stop stop, int time) {
final TemporalVertex vertex = new StopTimeVertex(stop, time);
graph.addVertex(vertex);
return vertex;
}

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

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

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

public TransitionEdge addArrivalDepartureEdge(
final TemporalVertex arrivalVertex,
public TransitionEdge addStayEdge(final TemporalVertex arrivalVertex,
final TemporalVertex departureVertex, int cost) {
// logger.info("Adding [" + arrivalNode + "-" + departureNode + "]");
final TransitionEdge edge = new ArrivalDepartureEdge(cost);
final TransitionEdge edge = new StayEdge(cost);
graph.addEdge(arrivalVertex, departureVertex, edge);
return edge;
}

public TransitionEdge addDepartureArrivalEdge(
final TemporalVertex departureVertex,
public TransitionEdge addRideEdge(final TemporalVertex departureVertex,
final TemporalVertex arrivalVertex, final int cost) {
final TransitionEdge edge = new DepartureArrivalEdge(cost);
final TransitionEdge edge = new RideEdge(cost);
graph.addEdge(departureVertex, arrivalVertex, edge);
return edge;
}

@Override
public TransitionEdge addBoardEdge(TemporalVertex departureStopTimeVertex,
TemporalVertex departureVertex) {
final TransitionEdge edge = new BoardEdge();
graph.addEdge(departureStopTimeVertex, departureVertex, edge);
return edge;
}

@Override
public TransitionEdge addUnboardEdge(TemporalVertex arrivalVertex,
TemporalVertex arrivalStopTimeVertex) {
final TransitionEdge edge = new UnboardEdge();
graph.addEdge(arrivalVertex, arrivalStopTimeVertex, edge);
return edge;
}

}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package org.hisrc.gtfs.graph.model.edge;

public class BoardEdge extends TransitionEdge {

public BoardEdge() {
super(0);
}
}

This file was deleted.

10 changes: 10 additions & 0 deletions core/src/main/java/org/hisrc/gtfs/graph/model/edge/RideEdge.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package org.hisrc.gtfs.graph.model.edge;


public class RideEdge extends TransitionEdge {

public RideEdge(int cost) {
super(cost);
}

}
10 changes: 10 additions & 0 deletions core/src/main/java/org/hisrc/gtfs/graph/model/edge/StayEdge.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package org.hisrc.gtfs.graph.model.edge;


public class StayEdge extends TransitionEdge {

public StayEdge(int cost) {
super(cost);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.hisrc.gtfs.graph.model.edge;

public class UnboardEdge extends TransitionEdge {

public UnboardEdge() {
super(0);
}

}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

import org.onebusaway.gtfs.model.Stop;

public class ArrivalVertex extends TemporalVertex {
public class StopTimeVertex extends TemporalVertex {

public ArrivalVertex(Stop stop, int time) {
public StopTimeVertex(Stop stop, int time) {
super(stop, time);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.hisrc.gtfs.graph.model.vertex;

import org.apache.commons.lang3.Validate;
import org.onebusaway.gtfs.model.Stop;
import org.onebusaway.gtfs.model.Trip;

public class TripStopArrivalVertex extends TemporalVertex {

private final Trip trip;

public TripStopArrivalVertex(Trip trip, Stop stop, int time) {
super(stop, time);
this.trip = trip;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.hisrc.gtfs.graph.model.vertex;

import org.onebusaway.gtfs.model.Stop;
import org.onebusaway.gtfs.model.Trip;

public class TripStopDepartureVertex extends TemporalVertex {
private final Trip trip;

public TripStopDepartureVertex(Trip trip, Stop stop, int time) {
super(stop, time);
this.trip = trip;
}

}
Loading

0 comments on commit ac6941f

Please sign in to comment.