import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;
import javax.swing.JFileChooser;

public class UniqueTester {
    private static JFileChooser ourChooser = new JFileChooser(".");
    private static Stopwatch myStopwatch = new Stopwatch();
    
	public static void test(UniqueCounter uc,
	                          String[] list){
	
	    myStopwatch.start();
	    int count = uc.uniqueCount(list);
        myStopwatch.stop();
        System.out.print(count+" unique words in ");
        System.out.println(myStopwatch.time() + " seconds");            	
	}
	
	public static int wordCount(Scanner s){
		int a = 0;
		while (s.hasNext()){
			a++;
			s.next();
		}
		return a;
	}
	
	public static void main(String[] args) throws FileNotFoundException{
	    
	    int retval = ourChooser.showOpenDialog(null);

	    if (retval == JFileChooser.APPROVE_OPTION){
			File f = ourChooser.getSelectedFile();	
			Scanner s = new Scanner(f);
			ArrayList<String> list = new ArrayList<String>();
			
			while (s.hasNext()){
				list.add(s.next());
			}
			
			System.out.println("read # words = "+list.size());
			String[] array = (String[]) list.toArray(new String[0]);
			String[] copy1 = (String[]) array.clone();
			String[] copy2 = (String[]) array.clone();
			
			UniqueCounter uc1 = new SlowUniqueCounter();
			UniqueCounter uc2 = new SortingUniqueCounter();
			UniqueCounter uc3 = new SetUniqueCounter();
			
			System.out.print("reading "+f.getName());
			System.out.println(" # words = "+array.length);
			test(uc1,array);
			test(uc2,copy1);
			test(uc3,copy2);
	    }
	    else {
	        System.out.println("operation cancelled");   
	    }
	    System.exit(0);
	}
}
