1 package org.apidesign.openfixed;
4 import java.util.concurrent.CopyOnWriteArrayList;
5 import java.util.concurrent.Executor;
6 import java.util.concurrent.Executors;
7 import org.apidesign.openfixed.Calculator.EventSupport;
11 * @author Jaroslav Tulach <jtulach@netbeans.org>
13 final class AsyncEventSupport implements EventSupport {
14 private final List<ModificationListener> listeners = new CopyOnWriteArrayList<ModificationListener>();
19 public void add(ModificationListener l) {
24 public void remove(ModificationListener l) {
28 // BEGIN: openfixed.asynch
29 private static final Executor EXEC = Executors.newSingleThreadExecutor();
31 public void fireModificationEvent(ModificationEvent ev) {
32 EXEC.execute(new Deliverable(
33 ev, listeners.toArray(new ModificationListener[0])
37 private static class Deliverable implements Runnable {
38 final ModificationEvent ev;
39 final ModificationListener[] listeners;
42 ModificationEvent ev, ModificationListener[] listeners
45 this.listeners = listeners;
50 for (ModificationListener l : listeners) {
55 // END: openfixed.asynch