package sk.stuba.fiit.perconik.core.persistence.data;
import java.util.Set;
import sk.stuba.fiit.perconik.core.Listener;
import sk.stuba.fiit.perconik.core.Listeners;
import static com.google.common.collect.Sets.newHashSet;
/**
* Standard listener registration with lively updated registration status.
*
* @author Pavol Zbell
* @since 1.0
*/
public final class LiveListenerRegistration extends AbstractListenerRegistration {
private final Class<? extends Listener> type;
private final Listener listener;
private LiveListenerRegistration(final Class<? extends Listener> type, final Listener listener) {
this.type = type;
this.listener = listener;
}
static LiveListenerRegistration construct(final Class<? extends Listener> type, final Listener listener) {
Utilities.checkListenerClass(type);
Utilities.checkListenerImplementation(type, listener);
return copy(type, listener);
}
static LiveListenerRegistration copy(final Class<? extends Listener> type, final Listener listener) {
return new LiveListenerRegistration(type, listener);
}
public static LiveListenerRegistration of(final Listener listener) {
return construct(listener.getClass(), listener);
}
public static Set<LiveListenerRegistration> snapshot() {
Set<LiveListenerRegistration> data = newHashSet();
for (Listener listener: Listeners.registrations().values()) {
data.add(of(listener));
}
return data;
}
public ListenerPersistenceData toPersistenceData() {
return ListenerPersistenceData.copy(this.isRegistered(), this.type, Utilities.serializableOrNull(this.listener));
}
public Listener getListener() {
return this.listener;
}
public Class<? extends Listener> getListenerClass() {
return this.type;
}
}