diff --git a/enabler/src/de/schildbach/pte/dto/Trip.java b/enabler/src/de/schildbach/pte/dto/Trip.java index 601074bd..8922633a 100644 --- a/enabler/src/de/schildbach/pte/dto/Trip.java +++ b/enabler/src/de/schildbach/pte/dto/Trip.java @@ -184,6 +184,27 @@ public final class Trip implements Serializable return true; } + /** If an individual leg overlaps, try to adjust so that it doesn't. */ + public void adjustUntravelableIndividualLegs() + { + final int numLegs = legs.size(); + if (numLegs < 1) + return; + + for (int i = 1; i < numLegs; i++) + { + final Trip.Leg leg = legs.get(i); + + if (leg instanceof Trip.Individual) + { + final Trip.Leg previous = legs.get(i - 1); + + if (leg.getDepartureTime().before(previous.getArrivalTime())) + legs.set(i, ((Trip.Individual) leg).movedClone(previous.getArrivalTime())); + } + } + } + public Set products() { final Set products = EnumSet.noneOf(Product.class); @@ -431,6 +452,12 @@ public final class Trip implements Serializable this.distance = distance; } + public Individual movedClone(final Date departureTime) + { + final Date arrivalTime = new Date(departureTime.getTime() + this.arrivalTime.getTime() - this.departureTime.getTime()); + return new Trip.Individual(this.type, this.departure, departureTime, this.arrival, arrivalTime, this.path, this.distance); + } + @Override public Date getDepartureTime() {