/**
 * Copyright (C) 2006-2007  NTT DATA CORPORATION
 * 
 * Version: 1.0.0 2007/04/01
 *  
 */
package net.cellcomputing.himawari.library.types;

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

/**
 * 
 * MS-DOS形式のワイルドカードを利用するファイルフィルタ
 * 
 * @author NTT DATA Corporation
 */
strictfp class GlobFileFilter implements FilenameFilter{
	
	private String regex;
	
	/**
	 * 引数なしではインスタンス化できない
	 */
	protected GlobFileFilter() {
	}
	
	/**
	 * MSDOS形式のワイルドカードを指定してインスタンス化
	 * @param cregex	MSDOS形式のワイルドカード
	 */
	public GlobFileFilter( String cregex ){
		regex = replaseRegex( cregex );
	}
	
	/**
	 * MSDOS形式のワイルドカードによってファイルをフィルタする
	 * @see java.io.FilenameFilter#accept(java.io.File, java.lang.String)
	 */
	public boolean accept(File dir, String name) {
		
		return name.matches( regex );
	}
	
	/**
	 * MSDOS形式のワイルドカードをjavaの正規表現に置換する
	 * 
	 * @param wildcard	MSDOS形式のワイルドカード
	 * @return	置換されたjavaの正規表現
	 */
	private String replaseRegex( String wildcard ){
		
//		return wildcard.replaceAll("\\.","\\\\.").replaceAll("\\*",".*").replaceAll("\\?",".");
		return wildcard.replaceAll("\\.","\\\\.").replaceAll("\\*",".*").replaceAll("\\?",".?");
	}
}
