AncestorDelegatingResolver.java
package org.jbehave.core.io;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
public class AncestorDelegatingResolver implements StoryNameResolver {
private static final String SEPARATOR = "/";
private static final String SPACE = " ";
private final int ancestors;
private final StoryNameResolver delegate;
public AncestorDelegatingResolver() {
this(1);
}
public AncestorDelegatingResolver(int ancestors) {
this(ancestors, new UnderscoredToCapitalized());
}
public AncestorDelegatingResolver(int ancestors, StoryNameResolver delegate) {
this.ancestors = ancestors;
this.delegate = delegate;
}
@Override
public String resolveName(String path) {
List<String> reversed = Arrays.asList(path.split(SEPARATOR));
Collections.reverse(reversed);
List<String> names = new ArrayList<>();
for (int i = 0; i < ancestors + 1; i++) {
names.add(0, delegate.resolveName(reversed.get(i)));
}
return StringUtils.join(names,SPACE);
}
}