package com.informagen;


import java.io.FilenameFilter;
import java.io.File;

import java.util.Vector;
import java.util.Enumeration;

import com.apple.mrj.MRJOSType;
import com.apple.mrj.MRJFileUtils;



public class FilterByMacOSType implements FilenameFilter {

	private static final MRJOSType WILDCARD = new MRJOSType("****");

	private static final int CREATOR = 0;
	private static final int TYPE = 1;
	
	final Vector theSignatures = new Vector();

	public static boolean isMacintosh() {
		return System.getProperty("os.name").equalsIgnoreCase("Mac OS");
	}

    public boolean accept(File dir, String name) {
    		

		MRJOSType creator = null;
		MRJOSType type = null;
		
		File fullPath = new File(dir, name);
				
		try {
			creator = MRJFileUtils.getFileCreator(fullPath);
			type    = MRJFileUtils.getFileType(fullPath);
		} catch (java.io.IOException ioe) {
			return false;
		}

		
		// Test each file signature
		
		Enumeration e = theSignatures.elements();
		MRJOSType[] aSignature = null;
		
		while (e.hasMoreElements()) {
		
			aSignature = (MRJOSType[])e.nextElement();
						
			// Test file type only
			if (aSignature[CREATOR].equals(WILDCARD) && type.equals(aSignature[TYPE]))
				return true;
				
			// Test creator only
			if (creator.equals(aSignature[CREATOR]) && aSignature[TYPE].equals(WILDCARD))
				return true;
				
			// Test both creator and file type				
			if (creator.equals(aSignature[CREATOR]) && type.equals(aSignature[TYPE]))
				return true;
		}

		
		return false;
	}


	public void addSignature(String inCreator, String inType) {
	
		MRJOSType[] aSignature = new MRJOSType[2];
		
		aSignature[CREATOR] = new MRJOSType(inCreator);
		aSignature[TYPE] = new MRJOSType(inType);
		
		theSignatures.addElement(aSignature);
	
	}


}