StoryLanes.java

  1. package org.jbehave.core.model;

  2. import java.util.ArrayList;
  3. import java.util.Collections;
  4. import java.util.Comparator;
  5. import java.util.List;

  6. import org.jbehave.core.io.StoryNameResolver;

  7. /**
  8.  * Represents a <a href="http://en.wikipedia.org/wiki/Swim_lane">Swim Lane</a>
  9.  * view of {@link StoryMaps}.
  10.  */
  11. public class StoryLanes {

  12.     private final StoryMaps storyMaps;
  13.     private final StoryNameResolver nameResolver;

  14.     public StoryLanes(StoryMaps storyMaps, StoryNameResolver nameResolver) {
  15.         this.storyMaps = storyMaps;
  16.         this.nameResolver = nameResolver;
  17.     }

  18.     public List<Story> getStories() {
  19.         List<Story> stories = new ArrayList<>(laneStories("")); // returns all stories
  20.         Collections.sort(stories, new Comparator<Story>() {
  21.             @Override
  22.             public int compare(Story o1, Story o2) {
  23.                 return o1.getName().compareTo(o2.getName());
  24.             }
  25.         });
  26.         return stories;
  27.     }

  28.     public List<String> getLanes() {
  29.         List<String> lanes = storyMaps.getMetaFilters();
  30.         lanes.remove(""); // don't want to display all stories again
  31.         Collections.sort(lanes);
  32.         return lanes;
  33.     }

  34.     public boolean inLane(String lane, Story story) {
  35.         for (Story laneStory : laneStories(lane)) {
  36.             if (laneStory.getPath().equals(story.getPath())) {
  37.                 return true;
  38.             }
  39.         }
  40.         return false;
  41.     }

  42.     private List<Story> laneStories(String lane) {
  43.         StoryMap storyMap = storyMaps.getMap(lane);
  44.         List<Story> stories = new ArrayList<>();
  45.         if (storyMap == null) {
  46.             for (StoryMap map : storyMaps.getMaps()) {
  47.                 stories.addAll(map.getStories());
  48.             }
  49.         } else {
  50.             stories.addAll(storyMap.getStories());            
  51.         }
  52.         nameStories(stories);
  53.         return stories;
  54.     }

  55.     private void nameStories(List<Story> stories) {
  56.         for (Story story : stories) {
  57.             story.namedAs(nameResolver.resolveName(story.getPath()));
  58.         }
  59.        
  60.     }

  61. }