package org.jbehave.core.model; import java.util.Arrays; import java.util.List; import java.util.Properties; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import static java.util.Collections.unmodifiableList; public class Story { private final String path; private final Description description; private final Narrative narrative; private final Meta meta; private final GivenStories givenStories; private final Lifecycle lifecycle; private final List<Scenario> scenarios; private String name; public Story() { this(Arrays.<Scenario>asList()); } public Story(String path) { this(path, Description.EMPTY, Narrative.EMPTY, Arrays.<Scenario>asList()); } public Story(List<Scenario> scenarios) { this(Description.EMPTY, Narrative.EMPTY, scenarios); } public Story(Description description, Narrative narrative, List<Scenario> scenarios) { this((String)null, description, narrative, scenarios); } public Story(String path, Description description, Narrative narrative, List<Scenario> scenarios) { this(path, description, Meta.EMPTY, narrative, scenarios); } public Story(String path, Description description, Meta meta, Narrative narrative, List<Scenario> scenarios) { this(path, description, meta, narrative, GivenStories.EMPTY, scenarios); } public Story(String path, Description description, Meta meta, Narrative narrative, GivenStories givenStories, List<Scenario> scenarios) { this(path, description, meta, narrative, givenStories, Lifecycle.EMPTY, scenarios); } public Story(String path, Description description, Meta meta, Narrative narrative, GivenStories givenStories, Lifecycle lifecycle, List<Scenario> scenarios) { this.path = (path != null ? path : ""); this.description = description; this.narrative = narrative; this.meta = meta; this.givenStories = givenStories; this.lifecycle = lifecycle; this.scenarios = scenarios; } public String getPath() { return path; } public Description getDescription() { return description; } public Narrative getNarrative() { return narrative; } public Meta asMeta(String prefix){ Properties p = new Properties(); p.setProperty(prefix+"path", path); p.setProperty(prefix+"description", description.asString()); p.setProperty(prefix+"narrative", narrative.toString()); return new Meta(p); } public Meta getMeta() { return meta; } public GivenStories getGivenStories(){ return givenStories; } public Lifecycle getLifecycle(){ return lifecycle; } public List<Scenario> getScenarios() { return unmodifiableList(scenarios); } public String getName() { return (name != null ? name : path); } public void namedAs(String name) { this.name = name; } @Override public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); } }