in prototype/dispatch/order-dispatcher/src/main/java/com/aws/proto/dispatching/domain/planningentity/v1/PlanningVisit.java [270:300]
private int chainLength() {
if (previousVisitOrDriver == null) {
throw new IllegalStateException("This method must not be called when the previousTripOrVehicle is not initialized yet.");
}
VisitOrDriver current = this;
int chainLength = 0;
// D <- V1 <- [V2] <- V3 <- V4 <- null
// V4.previousVisitOrDriver == V3 --->
// ...
// V1.previousTripOrVehicle == D ---> V1.getPlanningVehicle == V1.previousTripOrVehicle
// count following visits (until next == null)
while (current.getNextPlanningVisit() != null) {
current = current.getNextPlanningVisit();
chainLength++;
}
// reset current pointer to this
current = this;
// count previous visits (until prev == driver)
while (current != null && current.getPlanningDriver() != current) {
// --> typeof(prev) == PlanningVisit
current = ((PlanningVisit) current).previousVisitOrDriver;
chainLength++;
}
return chainLength;
}