package com.doesthatevencompile.utils;

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;



public class FileUtil {
	private String fullpath;
	private FileFilter filter;
	private List queue = Collections.synchronizedList(new ArrayList());
	private ArrayList listeners = new ArrayList();

	public FileUtil(String fullpath,  SearchableItemListener listener,FileFilter filter) {
		super();
		this.fullpath = fullpath;
		this.filter = filter;
		listeners.add(listener);
	}
	public FileUtil(String fullpath, FileFilter filter) {
		super();
		this.fullpath = fullpath;
		this.filter = filter;
	}
	public void addSearchableItemListener(SearchableItemListener l){
		listeners.add(l);
	}

	public  void findFiles() {

		int numFound = 0;
		File root = new File(fullpath);

		File[] files = root.listFiles(filter);
		if (files == null || files.length == 0) {
			return;
		}
		queue.addAll(Arrays.asList(files));
		for (int j = 0; j < queue.size(); j++) {
			File child = queue.get(j);
			if (child.isDirectory()) {
				files = child.listFiles(filter);
				if (files != null) {
					queue.addAll(Arrays.asList(files));
				}
			} else { // child is file
				for(SearchableItemListener l: listeners){
					l.supportedFileFound(child);
				}
				numFound++;
			}
		}
		for(SearchableItemListener l: listeners){
			l.searchFinished(numFound, root);
		}

	}
}