package org.jbehave.examples.core.stories;
import java.util.LinkedList;
import java.util.List;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.jbehave.core.annotations.Given;
import org.jbehave.core.annotations.Named;
import org.jbehave.core.annotations.Then;
import org.jbehave.core.annotations.When;
import org.jbehave.core.steps.InjectableStepsFactory;
import org.jbehave.core.steps.InstanceStepsFactory;
import org.jbehave.examples.core.CoreStory;
import static java.util.Arrays.asList;
public class NamedAnnotations extends CoreStory {
private static final String NOT_SUPPORTED = "notSupported";
private static final String SUPPORTED = "supported";
private List<SimpleMessage> messages = new LinkedList<SimpleMessage>();
@Override
public InjectableStepsFactory stepsFactory() {
return new InstanceStepsFactory(configuration(), this);
}
@Given("a message with <actionSupportability> action and <eventTypeSupportability> event")
public void given(@Named("actionSupportability") String actionSupportability,
@Named("eventTypeSupportability") String eventTypeSupportability,
@Named("supportedActions") String supportedActions,
@Named("supportedEventTypes") String supportedEventTypes,
@Named("notSupportedActions") String notSupportedActions,
@Named("notSupportedEventTypes") String notSupportedEventTypes) {
List<String> actions = new LinkedList<String>();
if (actionSupportability.equals(SUPPORTED)) {
actions.addAll(asList(supportedActions.split(",")));
} else if (actionSupportability.equals(NOT_SUPPORTED)) {
actions.addAll(asList(notSupportedActions.split(",")));
} else {
throw new IllegalStateException("wrong action supportability parameter: " + actionSupportability);
}
List<String> eventTypes = new LinkedList<String>();
if (eventTypeSupportability.equals(SUPPORTED)) {
eventTypes.addAll(asList(supportedEventTypes.split(",")));
} else if (eventTypeSupportability.equals(NOT_SUPPORTED)) {
eventTypes.addAll(asList(notSupportedEventTypes.split(",")));
} else {
throw new IllegalStateException("wrong evenType supportability parameter: " + eventTypeSupportability);
}
for (String givenAction : actions) {
for (String givenEventType : eventTypes) {
SimpleMessage message = new SimpleMessageBuilder().withAction(givenAction)
.withEventType(givenEventType).build();
messages.add(message);
}
}
}
@When("it is received")
public void when() {
for (SimpleMessage message : messages) {
System.out.println("Message [" + message + "] received");
}
}
@Then("message is consumed without error")
public void then() {
for (SimpleMessage message : messages) {
System.out.println("Message [" + message + "] consumed");
}
}
public static class SimpleMessage {
private String action;
private String evenType;
public SimpleMessage(String action, String eventType) {
this.action = action;
this.evenType = eventType;
}
@Override
public String toString() {
return new ToStringBuilder(this).append("action", action).append("eventType", evenType).toString();
}
}
public static class SimpleMessageBuilder {
private String action;
private String eventType;
public SimpleMessageBuilder withAction(String action) {
this.action = action;
return this;
}
public SimpleMessageBuilder withEventType(String eventType) {
this.eventType = eventType;
return this;
}
public SimpleMessage build() {
return new SimpleMessage(action, eventType);
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SIMPLE_STYLE);
}
}
}