package org.radargun.service;
import java.util.concurrent.CopyOnWriteArraySet;
import org.radargun.traits.CacheListeners;
public abstract class AbstractInfinispanListeners implements CacheListeners {
protected abstract GenericListener getOrCreateListener(String cacheName, boolean sync);
protected abstract GenericListener getListenerOrThrow(String cacheName, boolean sync);
protected abstract void removeListener(String cacheName, boolean sync);
@Override
public void addCreatedListener(String cacheName, CreatedListener listener, boolean sync) {
getOrCreateListener(cacheName, sync).add(listener);
}
@Override
public void addUpdatedListener(String cacheName, UpdatedListener listener, boolean sync) {
getOrCreateListener(cacheName, sync).add(listener);
}
@Override
public void addRemovedListener(String cacheName, RemovedListener listener, boolean sync) {
getOrCreateListener(cacheName, sync).add(listener);
}
@Override
public void addEvictedListener(String cacheName, EvictedListener listener, boolean sync) {
getOrCreateListener(cacheName, sync).add(listener);
}
@Override
public void addExpiredListener(String cacheName, ExpiredListener listener, boolean sync) {
getOrCreateListener(cacheName, sync).add(listener);
}
@Override
public void removeCreatedListener(String cacheName, CreatedListener listener, boolean sync) {
getListenerOrThrow(cacheName, sync).remove(listener);
removeListener(cacheName, sync);
}
@Override
public void removeUpdatedListener(String cacheName, UpdatedListener listener, boolean sync) {
getListenerOrThrow(cacheName, sync).remove(listener);
removeListener(cacheName, sync);
}
@Override
public void removeRemovedListener(String cacheName, RemovedListener listener, boolean sync) {
getListenerOrThrow(cacheName, sync).remove(listener);
removeListener(cacheName, sync);
}
@Override
public void removeEvictedListener(String cacheName, EvictedListener listener, boolean sync) {
getListenerOrThrow(cacheName, sync).remove(listener);
removeListener(cacheName, sync);
}
@Override
public void removeExpiredListener(String cacheName, ExpiredListener listener, boolean sync) {
getListenerOrThrow(cacheName, sync).remove(listener);
removeListener(cacheName, sync);
}
public static class GenericListener {
CopyOnWriteArraySet<CreatedListener> created = new CopyOnWriteArraySet<CreatedListener>();
CopyOnWriteArraySet<UpdatedListener> updated = new CopyOnWriteArraySet<UpdatedListener>();
CopyOnWriteArraySet<RemovedListener> removed = new CopyOnWriteArraySet<RemovedListener>();
CopyOnWriteArraySet<EvictedListener> evicted = new CopyOnWriteArraySet<EvictedListener>();
CopyOnWriteArraySet<ExpiredListener> expired = new CopyOnWriteArraySet<ExpiredListener>();
public void add(CreatedListener listener) {
created.add(listener);
}
public void add(UpdatedListener listener) {
updated.add(listener);
}
public void add(RemovedListener listener) {
removed.add(listener);
}
public void add(EvictedListener listener) {
evicted.add(listener);
}
public void add(ExpiredListener listener) {
expired.add(listener);
}
public void remove(CreatedListener listener) {
created.remove(listener);
}
public void remove(UpdatedListener listener) {
updated.remove(listener);
}
public void remove(RemovedListener listener) {
removed.remove(listener);
}
public void remove(EvictedListener listener) {
evicted.remove(listener);
}
public void remove(ExpiredListener listener) {
expired.remove(listener);
}
public boolean isEmpty() {
return created.isEmpty() && updated.isEmpty() &&
removed.isEmpty() && evicted.isEmpty() &&
expired.isEmpty();
}
}
}