AncestorDelegatingResolver.java

  1. package org.jbehave.core.io;

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

  6. import org.apache.commons.lang3.StringUtils;

  7. public class AncestorDelegatingResolver implements StoryNameResolver {

  8.     private static final String SEPARATOR = "/";
  9.     private static final String SPACE = " ";
  10.    
  11.     private final int ancestors;
  12.     private final StoryNameResolver delegate;

  13.     public AncestorDelegatingResolver() {
  14.         this(1);
  15.     }

  16.     public AncestorDelegatingResolver(int ancestors) {
  17.         this(ancestors, new UnderscoredToCapitalized());
  18.     }

  19.     public AncestorDelegatingResolver(int ancestors, StoryNameResolver delegate) {
  20.         this.ancestors = ancestors;
  21.         this.delegate = delegate;
  22.     }

  23.     @Override
  24.     public String resolveName(String path) {
  25.         List<String> reversed = Arrays.asList(path.split(SEPARATOR));
  26.         Collections.reverse(reversed);
  27.         List<String> names = new ArrayList<>();
  28.         for (int i = 0; i < ancestors + 1; i++) {
  29.             names.add(0, delegate.resolveName(reversed.get(i)));
  30.         }
  31.         return StringUtils.join(names,SPACE);
  32.     }
  33. }