ExportFromFilesystem.java
package org.jbehave.core.io.rest.filesystem;
import static org.jbehave.core.io.rest.filesystem.FilesystemUtils.asFile;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import org.apache.commons.io.FileUtils;
import org.jbehave.core.io.rest.Resource;
import org.jbehave.core.io.rest.ResourceExporter;
import org.jbehave.core.io.rest.ResourceIndexer;
import org.jbehave.core.io.rest.ResourceUploader;
/**
* <p>Implementation that reads from filesystem the resources and uploads them.</p>
*
* <p>An include pattern of the resources may be provided.</p>
*
* <p>The exporter requires an instance of a {@link ResourceIndexer} and of a {@link ResourceUploader}.</p>
*/
public class ExportFromFilesystem implements ResourceExporter {
private final ResourceIndexer indexer;
private final ResourceUploader uploader;
private final String sourcePath;
private final String sourceExt;
private String syntax;
private String includes;
public ExportFromFilesystem(ResourceIndexer indexer,
ResourceUploader uploader, String sourcePath, String sourceExt,
String syntax, String includes) {
this.indexer = indexer;
this.uploader = uploader;
this.sourcePath = sourcePath;
this.sourceExt = sourceExt;
this.syntax = syntax;
this.includes = includes;
}
@Override
public void exportResources(String rootURI) {
Map<String, Resource> index = indexer.indexResources(rootURI,
sourcePath, syntax, includes);
readResources(index, sourcePath, sourceExt);
uploadResources(index);
}
private void uploadResources(Map<String, Resource> index) {
for (String name : index.keySet()) {
Resource resource = index.get(name);
uploader.uploadResource(resource);
}
}
private void readResources(Map<String, Resource> index, String sourcePath,
String sourceExt) {
for (String name : index.keySet()) {
Resource resource = index.get(name);
readResource(resource, asFile(resource, sourcePath, sourceExt));
}
}
private void readResource(Resource resource, File file) {
if (file.isDirectory() || !file.exists()) {
return;
}
try {
String text = FileUtils.readFileToString(file, StandardCharsets.UTF_8);
resource.setContent(text);
} catch (IOException e) {
throw new RuntimeException("Failed to read resource " + resource
+ " from file " + file, e);
}
}
}