package sk.stuba.fiit.perconik.core.debug.services.listeners; import java.util.Collection; import com.google.common.collect.SetMultimap; import sk.stuba.fiit.perconik.core.Listener; import sk.stuba.fiit.perconik.core.Resource; import sk.stuba.fiit.perconik.core.debug.Debug; import sk.stuba.fiit.perconik.core.debug.DebugListeners; import sk.stuba.fiit.perconik.core.debug.DebugNameableProxy; import sk.stuba.fiit.perconik.core.debug.runtime.DebugConsole; import sk.stuba.fiit.perconik.core.services.listeners.ListenerManager; import static com.google.common.base.Preconditions.checkNotNull; public final class DebugListenerManagerProxy extends DebugNameableProxy implements DebugListenerManager { private final ListenerManager manager; private DebugListenerManagerProxy(final ListenerManager manager, final DebugConsole console) { super(console); this.manager = checkNotNull(manager); } public static DebugListenerManagerProxy wrap(final ListenerManager manager) { return wrap(manager, Debug.getDefaultConsole()); } public static DebugListenerManagerProxy wrap(final ListenerManager manager, final DebugConsole console) { if (manager instanceof DebugListenerManagerProxy) { return (DebugListenerManagerProxy) manager; } return new DebugListenerManagerProxy(manager, console); } public static ListenerManager unwrap(final ListenerManager manager) { if (manager instanceof DebugListenerManagerProxy) { return ((DebugListenerManagerProxy) manager).delegate(); } return manager; } @Override public ListenerManager delegate() { return this.manager; } public <L extends Listener> void register(final L listener) { this.print("Registering listener %s", DebugListeners.toString(listener)); this.tab(); this.delegate().register(listener); this.untab(); } public <L extends Listener> void unregister(final L listener) { this.print("Unregistering listener %s", DebugListeners.toString(listener)); this.tab(); this.delegate().unregister(listener); this.untab(); } public <L extends Listener> void unregisterAll(final Class<L> type) { this.print("Unregistering all listeners assignable to listener type %s", DebugListeners.toString(type)); this.tab(); this.delegate().unregisterAll(type); this.untab(); } public SetMultimap<Resource<?>, Listener> registrations() { return this.delegate().registrations(); } public <L extends Listener> Collection<L> registered(final Class<L> type) { return this.delegate().registered(type); } public boolean registered(final Listener listener) { return this.delegate().registered(listener); } }