1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/samples/openfixed/src/org/apidesign/openfixed/AsyncEventSupport.java Sun Mar 20 18:52:47 2011 +0100
1.3 @@ -0,0 +1,50 @@
1.4 +package org.apidesign.openfixed;
1.5 +
1.6 +import java.util.List;
1.7 +import java.util.concurrent.CopyOnWriteArrayList;
1.8 +import java.util.concurrent.Executor;
1.9 +import java.util.concurrent.Executors;
1.10 +
1.11 +/**
1.12 + *
1.13 + * @author Jaroslav Tulach <jtulach@netbeans.org>
1.14 + */
1.15 +final class AsyncEventSupport implements EventSupport {
1.16 + private final List<ModificationListener> listeners = new CopyOnWriteArrayList<ModificationListener>();
1.17 + private static final Executor EXEC = Executors.newSingleThreadExecutor();
1.18 +
1.19 + AsyncEventSupport() {
1.20 + }
1.21 +
1.22 + @Override
1.23 + public void fireModificationEvent(ModificationEvent ev) {
1.24 + EXEC.execute(new Deliverable(ev, listeners.toArray(new ModificationListener[0])));
1.25 + }
1.26 +
1.27 + @Override
1.28 + public void add(ModificationListener l) {
1.29 + listeners.add(l);
1.30 + }
1.31 +
1.32 + @Override
1.33 + public void remove(ModificationListener l) {
1.34 + listeners.remove(l);
1.35 + }
1.36 +
1.37 + private static class Deliverable implements Runnable {
1.38 + final ModificationEvent ev;
1.39 + final ModificationListener[] listeners;
1.40 +
1.41 + public Deliverable(ModificationEvent ev, ModificationListener[] listeners) {
1.42 + this.ev = ev;
1.43 + this.listeners = listeners;
1.44 + }
1.45 +
1.46 + @Override
1.47 + public void run() {
1.48 + for (ModificationListener l : listeners) {
1.49 + l.modification(ev);
1.50 + }
1.51 + }
1.52 + }
1.53 +}