LoadFromClasspath.java
package org.jbehave.core.io;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* Loads story resources from classpath
*/
public class LoadFromClasspath implements StoryLoader {
private final Charset charset;
protected final ClassLoader classLoader;
/**
* Uses default encoding UTF-8.
* @see #LoadFromClasspath(Charset)
*/
public LoadFromClasspath() {
this(StandardCharsets.UTF_8);
}
/**
* Uses encoding provided.
* @param charset the Charset
* @see #LoadFromClasspath(ClassLoader,Charset)
*/
public LoadFromClasspath(Charset charset) {
this(Thread.currentThread().getContextClassLoader(), charset);
}
/**
* Uses a class to get the ClassLoader
* @param loadFromClass the Class to get the ClassLoader from
* @see #LoadFromClasspath(ClassLoader)
*/
public LoadFromClasspath(Class<?> loadFromClass) {
this(loadFromClass.getClassLoader());
}
/**
* Uses default encoding UTF-8
* @param classLoader the ClassLoader
*/
public LoadFromClasspath(ClassLoader classLoader) {
this(classLoader, StandardCharsets.UTF_8);
}
/**
* Uses classloader and encoding provided.
* @param classLoader the ClassLoader
* @param charset the Charset
*/
public LoadFromClasspath(ClassLoader classLoader, Charset charset) {
this.classLoader = classLoader;
this.charset = charset;
}
@Override
public String loadResourceAsText(String resourcePath) {
try (InputStream stream = resourceAsStream(resourcePath)) {
return IOUtils.toString(stream, charset);
} catch (IOException e) {
throw new InvalidStoryResource(resourcePath, e);
}
}
@Override
public String loadStoryAsText(String storyPath) {
return loadResourceAsText(storyPath);
}
protected InputStream resourceAsStream(String resourcePath) {
InputStream stream = classLoader.getResourceAsStream(resourcePath);
if (stream == null) {
throw new StoryResourceNotFound(resourcePath, classLoader);
}
return stream;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}
}