for (int seatnum = 0; seatnum < booked_seats; seatnum++) {
CustomerId customer_id = null;
Integer airport_customer_cnt = profile.getCustomerIdCount(depart_airport_id);
boolean local_customer = airport_customer_cnt != null && (flight_customer_ids.size() < airport_customer_cnt.intValue());
int tries = 2000;
ReturnFlight return_flight = null;
while (tries > 0) {
return_flight = null;
// Always book returning customers first
if (returning_customers.isEmpty() == false) {
return_flight = CollectionUtil.pop(returning_customers);
customer_id = return_flight.getCustomerId();
}
// New Outbound Reservation
// Prefer to use a customer based out of the local airport
else if (local_customer) {
customer_id = profile.getRandomCustomerId(depart_airport_id);
}
// New Outbound Reservation
// We'll take anybody!
else {
customer_id = profile.getRandomCustomerId();
}
if (flight_customer_ids.contains(customer_id) == false) break;
tries--;
} // WHILE
assert(tries > 0) : String.format("Safety check! [local=%s]", local_customer);
// If this is return flight, then there's nothing extra that we need to do
if (return_flight != null) {
if (LOG.isTraceEnabled()) LOG.trace("Booked return flight: " + return_flight + " [remaining=" + returning_customers.size() + "]");
// If it's a new outbound flight, then we will randomly decide when this customer will return (if at all)
} else {
if (rng.nextInt(100) < SEATSConstants.PROB_SINGLE_FLIGHT_RESERVATION) {
// Do nothing for now...
// Create a ReturnFlight object to record that this customer needs a flight
// back to their original depart airport
} else {
int return_days = rand_returns.nextInt();
return_flight = new ReturnFlight(customer_id, depart_airport_id, depart_time, return_days);
this.airport_returns.get(arrive_airport_id).add(return_flight);
}
}
assert(customer_id != null) : "Null customer id on " + flight_id;
assert(flight_customer_ids.contains(customer_id) == false) : flight_id + " already contains " + customer_id;