package org.lobid.lodmill;
import java.io.File;
import org.culturegraph.mf.exceptions.MetafactureException;
import org.culturegraph.mf.framework.DefaultObjectPipe;
import org.culturegraph.mf.framework.ObjectReceiver;
import org.culturegraph.mf.framework.annotations.Description;
import org.culturegraph.mf.framework.annotations.In;
import org.culturegraph.mf.framework.annotations.Out;
import org.slf4j.LoggerFactory;
/**
* Reads a directory and emits all filenames found.
*
* @author Markus Michael Geipel, Pascal Christoph
*/
@In(String.class)
@Out(String.class)
@Description("Reads a directory and emits all filenames found.")
public final class DirReader
extends DefaultObjectPipe<String, ObjectReceiver<String>> {
private boolean recursive;
/**
* Set to 'true' if directories should be recursively processed. Default is
* 'false' and thus only files residing directly in the directory will be
* processed.
*
* @param recursive boolean, default is 'false'
*/
public void setRecursive(final boolean recursive) {
this.recursive = recursive;
}
@Override
public void process(final String dir) {
final File file = new File(dir);
if (file.isDirectory()) {
dir(file);
} else {
try {
getReceiver().process(dir);
} catch (MetafactureException e) {
LoggerFactory.getLogger(DirReader.class)
.error("Problems with file '" + file + "'", e);
getReceiver().resetStream();
}
}
}
private void dir(final File dir) {
final File[] files = dir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
if (recursive) {
dir(file);
}
} else {
process(file.getAbsolutePath());
}
}
}
}