git.net

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[ALL] Where should an OrderedObservable live in Commons?


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