package mandelbrot.ocamljava_maven_plugin.util;
import java.io.File;
import java.util.Set;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.logging.Log;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Multimap;
public class FileGatherer {
private final AbstractMojo mojo;
public FileGatherer(final AbstractMojo abstractMojo) {
this.mojo = Preconditions.checkNotNull(abstractMojo);
}
public Multimap<String, String> gatherFiles(final File root, final Set<String> extensions) {
final ImmutableMultimap.Builder<String, String> files = ImmutableMultimap
.builder();
if (root.isFile() && isAllowedExtension(root, extensions)) {
files.put(org.codehaus.plexus.util.FileUtils.getExtension(root
.getName()), root.getPath());
return files.build();
}
if (!root.isDirectory() || root.listFiles() == null)
return files.build();
for (final File file : root.listFiles()) {
if (file.isDirectory()) {
getLog().info("scanning directory: " + file);
files.putAll(gatherFiles(file, extensions));
} else {
if (isAllowedExtension(file, extensions)) {
getLog().info("adding ocaml source file: " + file);
files.put(org.codehaus.plexus.util.FileUtils
.getExtension(file.getName()), file.getPath());
}
}
}
return files.build();
}
private Log getLog() {
return mojo.getLog();
}
private boolean isAllowedExtension(final File file, final Set<String> extensions) {
final String extension = org.codehaus.plexus.util.FileUtils.getExtension(file.getPath());
if (extension == null)
return false;
return extensions.contains(extension.toLowerCase());
}
}