package org.sef4j.core.helpers.ioeventchain;
import java.util.Collection;
import org.sef4j.core.api.EventSender;
import org.sef4j.core.api.ioeventchain.InputEventChain;
/**
* helper class for using InputEventChain dependency
* (= delegate InputEventChain + listener + listenerHandle )
*
* @param <T>
*/
public class InputEventChainDependency<T> {
private InputEventChain<T> delegate;
private InputEventChain.ListenerHandle<T> listenerHandle;
private EventSender<T> delegateListener;
// ------------------------------------------------------------------------
public InputEventChainDependency(InputEventChain<T> delegate, EventSender<T> delegateListener) {
this.delegate = delegate;
this.delegateListener = delegateListener;
}
// ------------------------------------------------------------------------
public boolean isStarted() {
return listenerHandle != null && delegate.isStarted();
}
public void startListener() {
if (listenerHandle == null) {
listenerHandle = delegate.registerEventListener(delegateListener);
}
}
public void stopListener() {
if (listenerHandle != null) {
delegate.unregisterEventListener(listenerHandle);
listenerHandle = null;
}
}
// ------------------------------------------------------------------------
public static <T> boolean areAllStarted(Collection<InputEventChainDependency<T>> ls) {
boolean res = true;
for(InputEventChainDependency<T> e : ls) {
if (!e.isStarted()) {
res = false;
break;
}
}
return res;
}
public static <T> void startListenerAll(Collection<InputEventChainDependency<T>> ls) {
for(InputEventChainDependency<T> e : ls) {
e.startListener();
}
}
public static <T> void stopListenerAll(Collection<InputEventChainDependency<T>> ls) {
for(InputEventChainDependency<T> e : ls) {
e.stopListener();
}
}
}