author | Jaroslav Tulach <jtulach@netbeans.org> |
Sun, 20 Mar 2011 18:52:47 +0100 | |
changeset 374 | 35da2d439e3d |
child 375 | 3abae898011d |
permissions | -rw-r--r-- |
jtulach@374 | 1 |
package org.apidesign.openfixed; |
jtulach@374 | 2 |
|
jtulach@374 | 3 |
import java.util.List; |
jtulach@374 | 4 |
import java.util.concurrent.CopyOnWriteArrayList; |
jtulach@374 | 5 |
import java.util.concurrent.Executor; |
jtulach@374 | 6 |
import java.util.concurrent.Executors; |
jtulach@374 | 7 |
|
jtulach@374 | 8 |
/** |
jtulach@374 | 9 |
* |
jtulach@374 | 10 |
* @author Jaroslav Tulach <jtulach@netbeans.org> |
jtulach@374 | 11 |
*/ |
jtulach@374 | 12 |
final class AsyncEventSupport implements EventSupport { |
jtulach@374 | 13 |
private final List<ModificationListener> listeners = new CopyOnWriteArrayList<ModificationListener>(); |
jtulach@374 | 14 |
private static final Executor EXEC = Executors.newSingleThreadExecutor(); |
jtulach@374 | 15 |
|
jtulach@374 | 16 |
AsyncEventSupport() { |
jtulach@374 | 17 |
} |
jtulach@374 | 18 |
|
jtulach@374 | 19 |
@Override |
jtulach@374 | 20 |
public void fireModificationEvent(ModificationEvent ev) { |
jtulach@374 | 21 |
EXEC.execute(new Deliverable(ev, listeners.toArray(new ModificationListener[0]))); |
jtulach@374 | 22 |
} |
jtulach@374 | 23 |
|
jtulach@374 | 24 |
@Override |
jtulach@374 | 25 |
public void add(ModificationListener l) { |
jtulach@374 | 26 |
listeners.add(l); |
jtulach@374 | 27 |
} |
jtulach@374 | 28 |
|
jtulach@374 | 29 |
@Override |
jtulach@374 | 30 |
public void remove(ModificationListener l) { |
jtulach@374 | 31 |
listeners.remove(l); |
jtulach@374 | 32 |
} |
jtulach@374 | 33 |
|
jtulach@374 | 34 |
private static class Deliverable implements Runnable { |
jtulach@374 | 35 |
final ModificationEvent ev; |
jtulach@374 | 36 |
final ModificationListener[] listeners; |
jtulach@374 | 37 |
|
jtulach@374 | 38 |
public Deliverable(ModificationEvent ev, ModificationListener[] listeners) { |
jtulach@374 | 39 |
this.ev = ev; |
jtulach@374 | 40 |
this.listeners = listeners; |
jtulach@374 | 41 |
} |
jtulach@374 | 42 |
|
jtulach@374 | 43 |
@Override |
jtulach@374 | 44 |
public void run() { |
jtulach@374 | 45 |
for (ModificationListener l : listeners) { |
jtulach@374 | 46 |
l.modification(ev); |
jtulach@374 | 47 |
} |
jtulach@374 | 48 |
} |
jtulach@374 | 49 |
} |
jtulach@374 | 50 |
} |