package jp.co.nri.rid.search;

import java.util.Hashtable;
import jp.co.nri.rid.xml.elementBooster;

/**
 * elementBooster オブジェクトのハッシュテーブルを保持するクラス<BR>
 * キー: element の File アトリビュート
 * 値: elementBooster オブジェクト
 */
class SPElementHash extends Hashtable {
    /** SCCS ID */
    private static final String SCCSID = "@(#)SPElementHash.java";

    /** RCS ID */
    private static final String RCSID =
	"$Id: SPElementHash.java,v 1.3 2003-07-15 19:36:44+09 nsmr Exp $";


    /**
     * コンストラクタ<BR>
     * elementBooster の配列を受けとり、存在する要素だけを Hashtable に格納する
     * @param elements elementBooster を格納した配列
     */
    SPElementHash(elementBooster[] elements) {
        this(elements, false);
    } /* コンストラクタ */


    /**
     * コンストラクタ<BR>
     * elementBooster の配列を受けとり、存在する要素だけを Hashtable に格納する
     * @param elements elementBooster を格納した配列
     * @param toLower ハッシュのキーに利用するファイル名を、小文字に変換したものにするフラグ
     */
    SPElementHash(elementBooster[] elements, boolean toLower) {
	super();

	if (elements == null) {
	    return;
	}
	if (elements.length == 0) {
	    return;
	}
	for (int i = 0; i < elements.length; i++) {
	    String attr = elements[i].attribute("Exist");

	    /* 存在するエレメントのみ抽出し、他は捨てる */
	    if (attr == null) {
		continue;
	    }
	    if (!attr.equals("true")){
		continue;
	    } 
		
	    attr = elements[i].attribute("File");
	    if (attr == null) {
		continue;
	    }

            if (toLower) {
                put(attr.toLowerCase(), elements[i]);
            } else {
                put(attr, elements[i]);
            }
	}
    } /* コンストラクタ */


    /**
     * ハッシュテーブルに格納されている elementBooster
     * オブジェクトを返す。
     * @param key element の "File" アトリビュート
     * @return 該当のアトリビュートを持つ elementBooster
     */
    elementBooster get(String key){
        return get(key, false);
    }


    /**
     * ハッシュテーブルに格納されている elementBooster
     * オブジェクトを返す。
     * @param key element の "File" アトリビュート
     * @param toLower key を小文字に変換して Hash を探索するフラグ
     * @return 該当のアトリビュートを持つ elementBooster
     */
    elementBooster get(String key, boolean toLower){
	Object value;
        if (toLower) {
            value = super.get(key.toLowerCase());
        } else {
            value = super.get(key);
        }

	if (value == null) {
	    return null;
	}
	if (value instanceof elementBooster) {
	    return (elementBooster)value;
	}
	return null;
    }
} /* class SPElementHash */
