package org.sef4j.core.helpers.ioeventchain;
import java.util.Collection;
import org.sef4j.core.api.EventSender;
import org.sef4j.core.api.ioeventchain.OutputEventChain;
import org.sef4j.core.helpers.senders.DelegateEventSender;
/**
* helper class for using OutputEventChain dependency
* (= delegate OutputEventChain + handle )
*
* @param <T>
*/
public class OutputEventChainDependency<T> {
private OutputEventChain<T> delegate;
private OutputEventChain.SenderHandle<T> senderHandle;
private DelegateEventSender<T> innerEventSender = new DelegateEventSender<T>(null);
// ------------------------------------------------------------------------
public OutputEventChainDependency(OutputEventChain<T> delegate) {
this.delegate = delegate;
}
// ------------------------------------------------------------------------
public EventSender<T> getInnerEventSender() {
return innerEventSender;
}
public boolean isStarted() {
return senderHandle != null && delegate.isStarted();
}
public void start() {
if (senderHandle == null) {
senderHandle = delegate.registerSender();
innerEventSender.setEventListener(senderHandle);
}
}
public void stop() {
if (senderHandle != null) {
delegate.unregisterSender(senderHandle);
senderHandle = null;
innerEventSender.setEventListener(null);
}
}
// ------------------------------------------------------------------------
public static <T> boolean areAllStarted(Collection<OutputEventChainDependency<T>> ls) {
boolean res = true;
for(OutputEventChainDependency<T> e : ls) {
if (!e.isStarted()) {
res = false;
break;
}
}
return res;
}
public static <T> void startAll(Collection<OutputEventChainDependency<T>> ls) {
for(OutputEventChainDependency<T> e : ls) {
e.start();
}
}
public static <T> void stopAll(Collection<OutputEventChainDependency<T>> ls) {
for(OutputEventChainDependency<T> e : ls) {
e.stop();
}
}
}