/**
 * @(#)ExtensionFilter.java
 * Copyright 2001 Nomura Research Institute, LTD. All rights reserved.
 * @author  Intelligent Technology Inc.
 * @version 1.00 2001/10/01-2002/03/26
 */
package	jp.co.nri.rid.table.editor.filter;

import	java.io.*;
import	java.util.*;

/**
 * Extension Filter。拡張子でファイルを抽出するフィルタ。
 */
public class ExtensionFilter extends Vector implements FilenameFilter{
	public boolean hit = true;
	
	public ExtensionFilter(){}
	/**
	 * @param	extensions	拡張子配列。
	 * @since	1.00
	 */
	public ExtensionFilter(String[] extensions){
		if(null==extensions)	return;
		
		int mx = extensions.length;
		for(int i=0;i<mx;i++)	add(extensions[i]);
	}
	
	/**
	 * 拡張子を追加登録する。
	 * @param	o	o.toString().toLowerCase()を登録する。
	 * @since	1.00
	 */
	public boolean add(Object o){ return super.add("."+o.toString().toLowerCase()); }
	
	/**
	 * FilenameFilter実装
	 * @since	1.00
	 */
	public boolean accept(File dir ,String name){
		File file = new File(dir ,name);
		if(!file.isFile())	return false;
		if(0>=size())	return hit;
		return hit(name);
/*
		for(Enumeration enum = elements(); enum.hasMoreElements();){
			if(name.endsWith(enum.nextElement().toString()))	return hit;
		}
		
		return !hit;
*/
	}
	
	/**
	 * ファイル名を直接指定してチェックする。
	 * @param	name	ファイル名。
	 * @return	登録されている拡張子ならhitに設定されている値(true/false)をそのまま返す。登録されていなければ!hitを返す。
	 * @since	1.00
	 */
	public boolean hit(String name){
		String lower = name.toLowerCase();
		for(Enumeration enum = elements(); enum.hasMoreElements();){
			if(lower.endsWith((String)enum.nextElement()))	return hit;
		}
		
		return !hit;
	}
}
