diff -r 000000000000 -r 35da2d439e3d samples/openfixed/src/org/apidesign/openfixed/AsyncEventSupport.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/openfixed/src/org/apidesign/openfixed/AsyncEventSupport.java Sun Mar 20 18:52:47 2011 +0100 @@ -0,0 +1,50 @@ +package org.apidesign.openfixed; + +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; + +/** + * + * @author Jaroslav Tulach + */ +final class AsyncEventSupport implements EventSupport { + private final List listeners = new CopyOnWriteArrayList(); + private static final Executor EXEC = Executors.newSingleThreadExecutor(); + + AsyncEventSupport() { + } + + @Override + public void fireModificationEvent(ModificationEvent ev) { + EXEC.execute(new Deliverable(ev, listeners.toArray(new ModificationListener[0]))); + } + + @Override + public void add(ModificationListener l) { + listeners.add(l); + } + + @Override + public void remove(ModificationListener l) { + listeners.remove(l); + } + + private static class Deliverable implements Runnable { + final ModificationEvent ev; + final ModificationListener[] listeners; + + public Deliverable(ModificationEvent ev, ModificationListener[] listeners) { + this.ev = ev; + this.listeners = listeners; + } + + @Override + public void run() { + for (ModificationListener l : listeners) { + l.modification(ev); + } + } + } +}