@Override
  public synchronized int onEventExternalRequest(
      ArrayList<ElevatorController> elevators, Request extRequest) {
    // count total number of elevator requests
    int sum = 0;
    for (ElevatorController e : elevators) sum += e.getExternal().size();

    if (sum < 10) return stoch.onEventExternalRequest(elevators, extRequest);
    else if (sum < 30) return closest.onEventExternalRequest(elevators, extRequest);

    return queue.onEventExternalRequest(elevators, extRequest);
  }
 @Override
 public int onEventInternalRequest(ElevatorController ECL, ArrayList<Integer> internalRequests) {
   boolean exists = false;
   for (Integer intRequest : internalRequests) {
     int request = intRequest.intValue();
     exists = false;
     for (Integer eleQueue : ECL.getQueue()) {
       if (eleQueue.intValue() == request) {
         exists = true;
         break;
       }
     }
     if (exists) continue;
     else ECL.getQueue().add(request);
   }
   return 0;
 }