Adjust untravelable individual legs.

This commit is contained in:
Andreas Schildbach 2015-11-06 19:34:35 +01:00
parent e60eabaa92
commit affb7ef0ba

View file

@ -184,6 +184,27 @@ public final class Trip implements Serializable
return true; 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<Product> products() public Set<Product> products()
{ {
final Set<Product> products = EnumSet.noneOf(Product.class); final Set<Product> products = EnumSet.noneOf(Product.class);
@ -431,6 +452,12 @@ public final class Trip implements Serializable
this.distance = distance; 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 @Override
public Date getDepartureTime() public Date getDepartureTime()
{ {