Coverage Report - org.jbehave.core.embedder.StoryMapper
 
Classes in this File Line Coverage Branch Coverage Complexity
StoryMapper
92%
26/28
75%
9/12
2
 
 1  
 package org.jbehave.core.embedder;
 2  
 
 3  
 import java.util.ArrayList;
 4  
 import java.util.HashMap;
 5  
 import java.util.HashSet;
 6  
 import java.util.List;
 7  
 import java.util.Map;
 8  
 import java.util.Set;
 9  
 
 10  
 import org.jbehave.core.io.StoryNameResolver;
 11  
 import org.jbehave.core.io.UnderscoredToCapitalized;
 12  
 import org.jbehave.core.model.Meta;
 13  
 import org.jbehave.core.model.Scenario;
 14  
 import org.jbehave.core.model.Story;
 15  
 import org.jbehave.core.model.StoryMap;
 16  
 
 17  
 /**
 18  
  * Maps {@link Story}s by a {@link MetaFilter}.
 19  
  * 
 20  
  * @author Mauro Talevi
 21  
  */
 22  1
 public class StoryMapper {
 23  
 
 24  1
     private Map<String, Set<Story>> map = new HashMap<String, Set<Story>>();
 25  1
     private StoryNameResolver nameResolver = new UnderscoredToCapitalized();
 26  
 
 27  
     /**
 28  
      * Maps a story if it is allowed by the meta filter
 29  
      * 
 30  
      * @param story
 31  
      *            the Story
 32  
      * @param metaFilter
 33  
      *            the meta filter
 34  
      */
 35  
     public void map(Story story, MetaFilter metaFilter) {
 36  2
         if (metaFilter.allow(story.getMeta())) {
 37  1
             boolean allowed = false;
 38  1
             for (Scenario scenario : story.getScenarios()) {
 39  
                 // scenario also inherits meta from story
 40  1
                 Meta inherited = scenario.getMeta().inheritFrom(story.getMeta());
 41  1
                 if (metaFilter.allow(inherited)) {
 42  1
                     allowed = true;
 43  1
                     break;
 44  
                 }
 45  0
             }
 46  1
             if (allowed) {
 47  
                 // TODO move naming to view generator
 48  1
                 story.namedAs(nameResolver.resolveName(story.getPath()));
 49  1
                 add(metaFilter.asString(), story);
 50  
             }
 51  
         }
 52  2
     }
 53  
 
 54  
     public StoryMap getStoryMap(String filter) {
 55  1
         return new StoryMap(filter, storiesFor(filter));
 56  
     }
 57  
 
 58  
     public List<StoryMap> getStoryMaps() {
 59  1
         List<StoryMap> maps = new ArrayList<StoryMap>();
 60  1
         for (String filter : map.keySet()) {
 61  1
             maps.add(getStoryMap(filter));
 62  
         }
 63  1
         return maps;
 64  
     }
 65  
 
 66  
     private void add(String filter, Story story) {
 67  1
         storiesFor(filter).add(story);
 68  1
     }
 69  
 
 70  
     private Set<Story> storiesFor(String filter) {
 71  2
         Set<Story> stories = map.get(filter);
 72  2
         if (stories == null) {
 73  1
             stories = new HashSet<Story>();
 74  1
             map.put(filter, stories);
 75  
         }
 76  2
         return stories;
 77  
     }
 78  
 
 79  
     @Override
 80  
     public String toString() {
 81  0
         return this.getClass().getSimpleName();
 82  
     }
 83  
 
 84  
 }