package com.github.linsolas.casperjsrunner;
import static com.github.linsolas.casperjsrunner.LogUtils.getLogger;
import static java.util.Arrays.asList;
import org.codehaus.plexus.util.DirectoryScanner;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class DefaultScriptsFinder implements ScriptsFinder {
private File baseDir;
private String specific;
private List<String> includes;
private List<String> excludes;
public DefaultScriptsFinder(File baseDir, String specific, List<String> includes, List<String> excludes) {
if (includes == null || includes.isEmpty()) {
throw new IllegalArgumentException("Include patterns to search must be defined !");
}
if (excludes == null) {
throw new IllegalArgumentException("Excludes patterns must not be null !");
}
this.baseDir = baseDir;
this.specific = specific;
this.includes = includes;
this.excludes = excludes;
}
@Override
public Collection<String> findScripts() {
getLogger().info("Looking for scripts in " + baseDir + "...");
DirectoryScanner scanner = new DirectoryScanner();
scanner.setCaseSensitive(false);
scanner.setBasedir(baseDir);
if (specific != null && !specific.isEmpty()) {
List<String> temp = new ArrayList<String>();
if (specific.endsWith(".js") || specific.endsWith(".coffee")) {
temp.add("**/"+specific);
} else {
temp.add("**/"+specific+".js");
temp.add("**/"+specific+".coffee");
}
scanner.setIncludes(temp.toArray(new String[temp.size()]));
} else {
scanner.setIncludes(includes.toArray(new String[includes.size()]));
scanner.setExcludes(excludes.toArray(new String[excludes.size()]));
}
scanner.scan();
List<String> result = asList(scanner.getIncludedFiles());
if (result.isEmpty()) {
getLogger().warn("No files found in directory " + baseDir + " matching criterias");
}
return result;
}
}