package sk.stuba.fiit.perconik.core.debug.resources;
import java.util.Collection;
import java.util.Set;
import sk.stuba.fiit.perconik.core.Listener;
import sk.stuba.fiit.perconik.core.debug.AbstractDebugResource;
import sk.stuba.fiit.perconik.core.debug.DebugListener;
import sk.stuba.fiit.perconik.core.debug.annotations.DebugImplementation;
import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Sets.newConcurrentHashSet;
@DebugImplementation
public final class DebugListenerPool extends AbstractDebugResource<DebugListener> {
private static final DebugListenerPool instance = new DebugListenerPool();
private final Set<DebugListener> pool = newConcurrentHashSet();
private DebugListenerPool() {}
public static DebugListenerPool getInstance() {
return instance;
}
public void register(final DebugListener listener) {
this.pool.add(listener);
}
public void unregister(final DebugListener listener) {
this.pool.remove(listener);
}
public <U extends Listener> Collection<U> registered(final Class<U> type) {
Collection<U> result = newArrayList();
for (DebugListener listener: this.pool) {
if (type.isInstance(listener)) {
result.add(type.cast(listener));
}
}
return result;
}
public boolean registered(final Listener listener) {
return this.pool.contains(listener);
}
}