package jp.co.nri.rid.search;

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

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

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

    /**
     * コンストラクタ<BR>
     * elementBooster の配列を受けとり、そえぞれの要素を SPElementStatus
     * オブジェクトにして Hashtable に格納する
     * @param elements elementBooster を格納した配列
     */
    SPElementStatusHash(elementBooster[] elements) {
        this(elements, false);
    } /* コンストラクタ */


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

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

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

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


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


    /**
     * ハッシュテーブルに格納されている ElementStatus
     * オブジェクトを返す。
     * @param key element の "File" アトリビュート
     * @param toLower key を小文字に変換して Hash を探索するフラグ
     * @return 該当のキーの ElementStatus
     */
    SPElementStatus 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 SPElementStatus) {
	    return (SPElementStatus)value;
	}
	return null;
    }
} /* class SPElementStatusHash */
