protected void updateArrivalTime(ScoreDirector scoreDirector, Customer sourceCustomer) {

    logger.trace(
        "--------------------------------------------------------------------------------");
    logger.trace(
        "----------------updateArrivalTime (customer) begins-----------------------------");
    logger.trace(
        "--------------------------------------------------------------------------------");

    Integer previousDepartureTime = calculatePreviousDepartureTime(sourceCustomer);
    Integer arrivalTime = calculateArrivalTime(sourceCustomer, previousDepartureTime);

    Customer nextCustomer = sourceCustomer;

    logger.trace("sourceCustomer: " + sourceCustomer);
    logger.trace("sourceCustomer.getVehicleRecursive(): " + sourceCustomer.getVehicleRecursive());
    logger.trace(
        "sourceCustomer.getVehicleRecursive().getNextCustomer(): "
            + sourceCustomer.getVehicleRecursive().getNextCustomer());
    logger.trace("calculated departureTime : " + previousDepartureTime);
    logger.trace("sourceCustomer.getArrivalTime() : " + sourceCustomer.getArrivalTime());
    logger.trace("calculated arrivalTime : " + arrivalTime);

    // actualiza solo si es necesario (while se ejecuta solo una vez en las correcciones de los
    // punteros)
    while ((nextCustomer != null)
        && (ObjectUtils.notEqual(nextCustomer.getArrivalTime(), arrivalTime))) {

      logger.trace("while() shadowCustomer: " + nextCustomer);
      scoreDirector.beforeVariableChanged(nextCustomer, "arrivalTime");
      nextCustomer.setArrivalTime(arrivalTime);
      scoreDirector.afterVariableChanged(nextCustomer, "arrivalTime");
      previousDepartureTime = nextCustomer.getDepartureTime();
      nextCustomer = nextCustomer.getNextCustomer();
      arrivalTime = calculateArrivalTime(nextCustomer, previousDepartureTime);
    }

    logger.trace(
        "--------------------------------------------------------------------------------");
    logger.trace(
        "----------------updateArrivalTime (customer) ends-------------------------------");
    logger.trace(
        "--------------------------------------------------------------------------------");
  }