Story.java

  1. package org.jbehave.core.model;

  2. import static java.util.Collections.unmodifiableList;
  3. import static org.apache.commons.lang3.StringUtils.EMPTY;

  4. import java.io.File;
  5. import java.util.Arrays;
  6. import java.util.List;
  7. import java.util.Properties;
  8. import java.util.UUID;

  9. import org.apache.commons.lang3.builder.ToStringBuilder;
  10. import org.apache.commons.lang3.builder.ToStringStyle;

  11. public class Story {

  12.     private final String id = UUID.randomUUID().toString();
  13.     private final String path;
  14.     private final Description description;
  15.     private final Narrative narrative;
  16.     private final Meta meta;
  17.     private final GivenStories givenStories;
  18.     private final Lifecycle lifecycle;
  19.     private final List<Scenario> scenarios;
  20.     private String name;

  21.     public Story() {
  22.         this(Arrays.<Scenario>asList());
  23.     }

  24.     public Story(String path) {
  25.         this(path, null, null, Arrays.<Scenario>asList());
  26.     }

  27.     public Story(String path, List<Scenario> scenarios) {
  28.         this(path, null, null,null, scenarios);
  29.     }

  30.     public Story(List<Scenario> scenarios) {
  31.         this(null, null, scenarios);
  32.     }

  33.     public Story(Description description, Narrative narrative, List<Scenario> scenarios) {
  34.         this(null, description, narrative, scenarios);
  35.     }

  36.     public Story(String path, Description description, Narrative narrative, List<Scenario> scenarios) {
  37.         this(path, description, null, narrative, scenarios);
  38.     }

  39.     public Story(String path, Description description, Meta meta, Narrative narrative, List<Scenario> scenarios) {
  40.         this(path, description, meta, narrative, null, scenarios);
  41.     }

  42.     public Story(String path, Description description, Meta meta, Narrative narrative, GivenStories givenStories,
  43.             List<Scenario> scenarios) {
  44.         this(path, description, meta, narrative, givenStories, null, scenarios);
  45.     }

  46.     public Story(String path, Description description, Meta meta, Narrative narrative, GivenStories givenStories,
  47.             Lifecycle lifecycle, List<Scenario> scenarios) {
  48.         this.path = path;
  49.         if (path != null) {
  50.             this.name = new File(path).getName();
  51.         }
  52.         this.description = description;
  53.         this.narrative = narrative;
  54.         this.meta = meta;
  55.         this.givenStories = givenStories;
  56.         this.lifecycle = lifecycle;
  57.         this.scenarios = scenarios;
  58.     }

  59.     public Story(Story story, String path, Lifecycle lifecycle) {
  60.         this(path, story.description, story.meta, story.narrative, story.givenStories, lifecycle, story.scenarios);
  61.     }

  62.     public String getPath() {
  63.         if (path == null) {
  64.             return EMPTY;
  65.         }
  66.         return path;
  67.     }

  68.     public boolean hasDescription() {
  69.         return description != null;
  70.     }

  71.     public Description getDescription() {
  72.         if (!hasDescription()) {
  73.             return Description.EMPTY;
  74.         }
  75.         return description;
  76.     }

  77.     public boolean hasNarrative() {
  78.         return narrative != null;
  79.     }

  80.     public Narrative getNarrative() {
  81.         if (!hasNarrative()) {
  82.             return Narrative.EMPTY;
  83.         }
  84.         return narrative;
  85.     }

  86.     public boolean hasMeta() {
  87.         return meta != null;
  88.     }

  89.     public Meta getMeta() {
  90.         if (!hasMeta()) {
  91.             return Meta.EMPTY;
  92.         }
  93.         return meta;
  94.     }

  95.     public Meta asMeta(String prefix) {
  96.         Properties p = new Properties();
  97.         p.setProperty(prefix + "path", getPath());
  98.         p.setProperty(prefix + "description", getDescription().asString());
  99.         p.setProperty(prefix + "narrative", getNarrative().toString());
  100.         return new Meta(p);
  101.     }

  102.     public boolean hasGivenStories() {
  103.         return givenStories != null;
  104.     }

  105.     public GivenStories getGivenStories() {
  106.         if (!hasGivenStories()) {
  107.             return GivenStories.EMPTY;
  108.         }
  109.         return givenStories;
  110.     }

  111.     public boolean hasLifecycle() {
  112.         return lifecycle != null;
  113.     }

  114.     public Lifecycle getLifecycle() {
  115.         if (!hasLifecycle()) {
  116.             return Lifecycle.EMPTY;
  117.         }
  118.         return lifecycle;
  119.     }
  120.    
  121.     public List<Scenario> getScenarios() {
  122.         return unmodifiableList(scenarios);
  123.     }

  124.     public String getName() {
  125.         return (name != null ? name : getPath());
  126.     }

  127.     public String getId() {
  128.         return id;
  129.     }

  130.     public void namedAs(String name) {
  131.         this.name = name;
  132.     }

  133.     public Story cloneWithScenarios(List<Scenario> scenarios) {
  134.         Story story = new Story(path, description, meta, narrative, givenStories, lifecycle, scenarios);
  135.         story.namedAs(name);
  136.         return story;
  137.     }

  138.     @Override
  139.     public String toString() {
  140.         return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
  141.     }

  142. }