author | Jaroslav Tulach <jaroslav.tulach@apidesign.org> |
Thu, 30 Oct 2014 21:30:10 +0100 | |
changeset 409 | 40cabcdcd2be |
parent 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@395 | 7 |
import org.apidesign.openfixed.Calculator.EventSupport; |
jtulach@374 | 8 |
|
jtulach@374 | 9 |
/** |
jtulach@374 | 10 |
* |
jtulach@374 | 11 |
* @author Jaroslav Tulach <jtulach@netbeans.org> |
jtulach@374 | 12 |
*/ |
jtulach@374 | 13 |
final class AsyncEventSupport implements EventSupport { |
jtulach@374 | 14 |
private final List<ModificationListener> listeners = new CopyOnWriteArrayList<ModificationListener>(); |
jtulach@374 | 15 |
|
jtulach@374 | 16 |
AsyncEventSupport() { |
jtulach@374 | 17 |
} |
jtulach@374 | 18 |
@Override |
jtulach@374 | 19 |
public void add(ModificationListener l) { |
jtulach@374 | 20 |
listeners.add(l); |
jtulach@374 | 21 |
} |
jtulach@374 | 22 |
|
jtulach@374 | 23 |
@Override |
jtulach@374 | 24 |
public void remove(ModificationListener l) { |
jtulach@374 | 25 |
listeners.remove(l); |
jtulach@374 | 26 |
} |
jtulach@375 | 27 |
|
jtulach@375 | 28 |
// BEGIN: openfixed.asynch |
jtulach@375 | 29 |
private static final Executor EXEC = Executors.newSingleThreadExecutor(); |
jtulach@375 | 30 |
@Override |
jtulach@375 | 31 |
public void fireModificationEvent(ModificationEvent ev) { |
jtulach@375 | 32 |
EXEC.execute(new Deliverable( |
jtulach@375 | 33 |
ev, listeners.toArray(new ModificationListener[0]) |
jtulach@375 | 34 |
)); |
jtulach@375 | 35 |
} |
jtulach@374 | 36 |
|
jtulach@374 | 37 |
private static class Deliverable implements Runnable { |
jtulach@374 | 38 |
final ModificationEvent ev; |
jtulach@374 | 39 |
final ModificationListener[] listeners; |
jtulach@374 | 40 |
|
jtulach@375 | 41 |
public Deliverable( |
jtulach@375 | 42 |
ModificationEvent ev, ModificationListener[] listeners |
jtulach@375 | 43 |
) { |
jtulach@374 | 44 |
this.ev = ev; |
jtulach@374 | 45 |
this.listeners = listeners; |
jtulach@374 | 46 |
} |
jtulach@374 | 47 |
|
jtulach@374 | 48 |
@Override |
jtulach@374 | 49 |
public void run() { |
jtulach@374 | 50 |
for (ModificationListener l : listeners) { |
jtulach@374 | 51 |
l.modification(ev); |
jtulach@374 | 52 |
} |
jtulach@374 | 53 |
} |
jtulach@374 | 54 |
} |
jtulach@375 | 55 |
// END: openfixed.asynch |
jtulach@374 | 56 |
} |