1 package org.apidesign.openfixed;
4 import java.util.concurrent.CopyOnWriteArrayList;
5 import java.util.concurrent.Executor;
6 import java.util.concurrent.Executors;
10 * @author Jaroslav Tulach <jtulach@netbeans.org>
12 final class PendingEventSupport implements EventSupport, Runnable {
13 private final List<ModificationListener> listeners = new CopyOnWriteArrayList<ModificationListener>();
14 private final List<Deliverable> deliverables = new CopyOnWriteArrayList<Deliverable>();
15 private static final Executor EXEC = Executors.newSingleThreadExecutor();
17 PendingEventSupport() {
21 public void fireModificationEvent(ModificationEvent ev) {
22 synchronized (deliverables) {
23 final Deliverable d = new Deliverable(ev, listeners.toArray(new ModificationListener[0]));
30 public void add(ModificationListener l) {
35 public void remove(ModificationListener l) {
41 Deliverable[] pending;
42 synchronized (deliverables) {
43 if (deliverables.isEmpty()) {
46 pending = deliverables.toArray(new Deliverable[0]);
49 // BEGIN: openfixed.pendingCount
50 int pendingCount = pending.length;
51 for (Deliverable d : pending) {
52 d.ev.pending = --pendingCount;
53 for (ModificationListener l : d.listeners) {
57 // END: openfixed.pendingCount
60 private static class Deliverable {
61 final ModificationEvent ev;
62 final ModificationListener[] listeners;
64 public Deliverable(ModificationEvent ev, ModificationListener[] listeners) {
66 this.listeners = listeners;