/*
* Copyright (C) 2007 Reto Schuettel, Robin Stocker
*
* IFS Institute for Software, HSR Rapperswil, Switzerland
*
*/
package org.python.pydev.refactoring.utils;
import java.io.File;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DirectoryTraverser implements Iterable<String> {
private Pattern filter;
private File baseDirectory;
public DirectoryTraverser(File baseDirectory, Pattern filter) {
this.filter = filter;
this.baseDirectory = baseDirectory;
File directory = baseDirectory;
if (!directory.exists()) {
throw new RuntimeException("Given directory doesn't exist");
}
if (!directory.isDirectory()) {
throw new RuntimeException("Specified path is not a directory");
}
}
public List<String> getAllFiles() {
LinkedList<String> files = new LinkedList<String>();
traverse("", files);
return files;
}
public Iterator<String> iterator() {
return getAllFiles().iterator();
}
private void traverse(String relDir, List<String> files) {
File currentDir = new File(baseDirectory, relDir);
String[] list = currentDir.list();
if (list != null) {
for (String entryName : list) {
File absEntry = new File(currentDir, entryName);
String relPath;
/* add current relative dir if necessary */
if (relDir.length() != 0) {
relPath = relDir + entryName;
} else {
relPath = entryName;
}
if (absEntry.isDirectory()) {
traverse(relPath + File.separator, files);
} else {
Matcher matcher = filter.matcher(absEntry.getAbsolutePath());
if (matcher.matches()) {
files.add(relPath);
}
}
}
}
}
}