
import java.io.IOException;
import java.nio.file.DirectoryIteratorException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.concurrent.BlockingQueue;

// enumerise sve fajlove u direktorijumu i njegovim poddirektorijumima

public class FileEnumerationTask implements Runnable {

	public static final Path DUMMY = Paths.get("");

	private BlockingQueue<Path> queue;
	private Path startingDirectory;

	// konstruise FileEnumerationTask
	public FileEnumerationTask(BlockingQueue<Path> queue, Path startingDirectory) {
		this.queue = queue;
		this.startingDirectory = startingDirectory;
	}

	@Override
	public void run() {
		try {
			enumerate(startingDirectory);
			queue.put(DUMMY);
		} catch (InterruptedException e) {
		}
	}

	// Rekurzivno enumerise sve fajlove
	public void enumerate(Path directory) throws InterruptedException {
		try (DirectoryStream<Path> stream = Files.newDirectoryStream(directory)) {
			for (Path file : stream) {
				if (Files.isDirectory(file))
					enumerate(file);
				else
					queue.put(file);
			}
		} catch (IOException | DirectoryIteratorException x) {
			System.err.println(x);
		}
	}
}
