AbstractStoryPathResolver.java

  1. package org.jbehave.core.io;

  2. import org.jbehave.core.Embeddable;

  3. public abstract class AbstractStoryPathResolver implements
  4.         StoryPathResolver {

  5.     static final String DOT_REGEX = "\\.";
  6.     static final String SLASH = "/";
  7.     static final String EMPTY = "";
  8.     static final String DEFAULT_EXTENSION = ".story";

  9.     private final String extension;

  10.     protected AbstractStoryPathResolver(String extension) {
  11.         this.extension = extension;
  12.     }

  13.     @Override
  14.     public String resolve(Class<? extends Embeddable> embeddableClass) {
  15.         return formatPath(resolveDirectory(embeddableClass), resolveName(embeddableClass), extension);
  16.     }

  17.     private String formatPath(String directory, String name,
  18.             String extension) {
  19.         StringBuilder sb = new StringBuilder();
  20.         if (directory.length() > 0) {
  21.             sb.append(directory).append(SLASH);
  22.         }
  23.         sb.append(name);
  24.         if (extension.length() > 0) {
  25.             sb.append(extension);
  26.         }
  27.         return sb.toString();
  28.     }

  29.     protected String resolveDirectory(
  30.             Class<? extends Embeddable> embeddableClass) {
  31.         Package scenarioPackage = embeddableClass.getPackage();
  32.         if (scenarioPackage != null) {
  33.             return scenarioPackage.getName().replaceAll(DOT_REGEX, SLASH);
  34.         }
  35.         return EMPTY;
  36.     }

  37.     protected abstract String resolveName(
  38.             Class<? extends Embeddable> embeddableClass);

  39. }