eventQueue.wait();
} catch (InterruptedException e) {
}
} else {
Event event = eventQueue.poll();
Logger.info(Controller.this, "Dispatching " + event
+ " (" + eventQueue.size() + " event"
+ (eventQueue.size() == 1 ? "" : "s")
+ " left).");
synchronized (eventObservers) {
if (eventObservers
.containsKey(event.getClass())
&& !eventObservers
.get(event.getClass())
.isEmpty()) {
/*
* This conversion to array prevents
* ConcurrentModificationExceptions if one
* of the events triggers the deregistration
* of an observer.
*/
EventObserver[] observers = eventObservers
.get(event.getClass()).toArray(
new EventObserver[0]);
for (EventObserver observer : observers) {
observer.inform(event);
}
} else {
Logger.warning(Controller.this, "No one "
+ "observes "
+ event.getClass().getSimpleName()
+ "s!");
dispatchEvent(new OutputTextEvent(
"No one observes "
+ event.getClass()
.getSimpleName()
+ "s!", Formatter
.getWarningFormat()));
}
}