package org.easyb.listener;
import org.easyb.BehaviorStep;
import org.easyb.domain.Behavior;
import org.easyb.result.ReportingTag;
import org.easyb.result.Result;
import java.util.List;
public class BroadcastListener implements ExecutionListener {
private final List<ExecutionListener> listeners;
private ResultsCollector resultsCollector;
private FailureDetector failureDetected;
public BroadcastListener() {
this.listeners = ListenerFactory.getActiveList();
resultsCollector = new ResultsCollector();
failureDetected = new FailureDetector();
listeners.add(resultsCollector);
listeners.add(failureDetected);
listeners.add(new ConsoleReporterListener());
}
public ResultsCollector getResultsCollector() {
return resultsCollector;
}
/**
* allows us to get a specific listener from this list
*
* @param clazz - the class of the listener
* @return null if not found or the found listener
*/
public ExecutionListener getTypedListener(Class clazz) {
for (ExecutionListener el : listeners) {
if (el.getClass() == clazz) {
return el;
}
}
return null;
}
public void startBehavior(Behavior behavior) {
for (ExecutionListener listener : listeners) {
listener.startBehavior(behavior);
}
}
public void stopBehavior(BehaviorStep step, Behavior behavior) {
for (ExecutionListener listener : listeners) {
listener.stopBehavior(step, behavior);
}
}
public void tag(ReportingTag tag) {
for (ExecutionListener listener : listeners) {
listener.tag(tag);
}
}
public void startStep(BehaviorStep step) {
for (ExecutionListener listener : listeners) {
listener.startStep(step);
}
}
public void describeStep(String description) {
for (ExecutionListener listener : listeners) {
listener.describeStep(description);
}
}
public void completeTesting() {
for (ExecutionListener listener : listeners) {
listener.completeTesting();
}
}
public void stopStep() {
for (ExecutionListener listener : listeners) {
listener.stopStep();
}
}
public void gotResult(Result result) {
for (ExecutionListener listener : listeners) {
listener.gotResult(result);
}
}
}