package org.jbehave.core.reporters;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.jbehave.core.model.*;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import static java.util.Arrays.asList;
/**
* Reporter which collects other {@link StoryReporter}s and delegates all
* invocations to the collected reporters.
*
* @author Mirko FriedenHagen
*/
public class DelegatingStoryReporter implements StoryReporter {
private final Collection<StoryReporter> delegates;
/**
* Creates DelegatingStoryReporter with a given collections of delegates
*
* @param delegates the ScenarioReporters to delegate to
*/
public DelegatingStoryReporter(Collection<StoryReporter> delegates) {
this.delegates = delegates;
}
/**
* Creates DelegatingStoryReporter with a given varargs of delegates
*
* @param delegates the StoryReporters to delegate to
*/
public DelegatingStoryReporter(StoryReporter... delegates) {
this(asList(delegates));
}
@Override
public void afterScenario() {
for (StoryReporter reporter : delegates) {
reporter.afterScenario();
}
}
@Override
public void afterStory(boolean givenStory) {
for (StoryReporter reporter : delegates) {
reporter.afterStory(givenStory);
}
}
@Override
public void beforeScenario(String scenarioTitle) {
for (StoryReporter reporter : delegates) {
reporter.beforeScenario(scenarioTitle);
}
}
@Override
public void scenarioMeta(Meta meta) {
for (StoryReporter reporter : delegates) {
reporter.scenarioMeta(meta);
}
}
@Override
public void beforeStory(Story story, boolean givenStory) {
for (StoryReporter reporter : delegates) {
reporter.beforeStory(story, givenStory);
}
}
@Override
public void narrative(final Narrative narrative) {
for (StoryReporter reporter : delegates) {
reporter.narrative(narrative);
}
}
@Override
public void lifecyle(Lifecycle lifecycle) {
for (StoryReporter reporter : delegates) {
reporter.lifecyle(lifecycle);
}
}
@Override
public void beforeExamples(List<String> steps, ExamplesTable table) {
for (StoryReporter reporter : delegates) {
reporter.beforeExamples(steps, table);
}
}
@Override
public void example(Map<String, String> tableRow) {
for (StoryReporter reporter : delegates) {
reporter.example(tableRow);
}
}
@Override
public void afterExamples() {
for (StoryReporter reporter : delegates) {
reporter.afterExamples();
}
}
@Override
public void failed(String step, Throwable cause) {
for (StoryReporter reporter : delegates) {
reporter.failed(step, cause);
}
}
@Override
public void failedOutcomes(String step, OutcomesTable table) {
for (StoryReporter reporter : delegates) {
reporter.failedOutcomes(step, table);
}
}
@Override
public void givenStories(GivenStories givenStories) {
for (StoryReporter reporter : delegates) {
reporter.givenStories(givenStories);
}
}
@Override
public void givenStories(List<String> storyPaths) {
for (StoryReporter reporter : delegates) {
reporter.givenStories(storyPaths);
}
}
@Override
public void beforeStep(String step) {
for (StoryReporter reporter : delegates) {
reporter.beforeStep(step);
}
}
@Override
public void ignorable(String step) {
for (StoryReporter reporter : delegates) {
reporter.ignorable(step);
}
}
@Override
public void comment(String step) {
for (StoryReporter reporter : delegates) {
reporter.comment(step);
}
}
@Override
public void notPerformed(String step) {
for (StoryReporter reporter : delegates) {
reporter.notPerformed(step);
}
}
@Override
public void pending(String step) {
for (StoryReporter reporter : delegates) {
reporter.pending(step);
}
}
@Override
public void successful(String step) {
for (StoryReporter reporter : delegates) {
reporter.successful(step);
}
}
@Override
public void scenarioNotAllowed(Scenario scenario, String filter) {
for (StoryReporter reporter : delegates) {
reporter.scenarioNotAllowed(scenario, filter);
}
}
@Override
public void storyNotAllowed(Story story, String filter) {
for (StoryReporter reporter : delegates) {
reporter.storyNotAllowed(story, filter);
}
}
@Override
public void dryRun() {
for (StoryReporter reporter : delegates) {
reporter.dryRun();
}
}
@Override
public void pendingMethods(List<String> methods) {
for (StoryReporter reporter : delegates) {
reporter.pendingMethods(methods);
}
}
@Override
public void restarted(String step, Throwable cause) {
for (StoryReporter reporter : delegates) {
reporter.restarted(step, cause);
}
}
@Override
public void restartedStory(Story story, Throwable cause) {
for (StoryReporter reporter : delegates) {
reporter.restartedStory(story, cause);
}
}
@Override
public void storyCancelled(Story story, StoryDuration storyDuration) {
for (StoryReporter reporter : delegates) {
reporter.storyCancelled(story, storyDuration);
}
}
public Collection<StoryReporter> getDelegates() {
return delegates;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}
}