Does anyone have any thoughts on where an OrderedObservable should live in
Commons if at all?
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.function.Consumer;
public class OrderedObservable<L> {
private final ReadWriteLock readWriteLock = new
ReentrantReadWriteLock(true);
protected final Lock readLock = readWriteLock.readLock();
protected final Lock writeLock = readWriteLock.writeLock();
private final List<L> listeners = new ArrayList<>();
public void clearListeners() {
listeners.clear();
}
public void notifyListeners(final Consumer<? super L> algorithm) {
this.readLock.lock();
try {
this.listeners.forEach(algorithm);
} finally {
this.readLock.unlock();
}
}
public L register(final L listener) {
this.writeLock.lock();
try {
this.listeners.add(listener);
} finally {
this.writeLock.unlock();
}
return listener;
}
public void unregister(final L listener) {
this.writeLock.lock();
try {
this.listeners.remove(listener);
} finally {
this.writeLock.unlock();
}
}
}
Thank you,
Gary