package org.itscool.commons.bean;


import org.itscool.commons.collection.KeyLinkedList;

/**
 * BeanInfoMappingクラスはアプリケーション起動時に初期設定ファイルから
 * オブジェクトの生成情報を読み込み、保持するクラスです。<BR>
 * 一つのBeanInfoMappingインスタンスは初期設定ファイル中の一つのbean要素
 * に対応します。<BR>
 * <BR>
 *【設定ファイルの設定情報とBeanInfoMappingクラスのプロパティに対応する項目】<BR>
 * id   ： Beanの論理名<BR>
 * type ： Beanの物理名<BR>
 * singleton ： このBeanがシングルトンの場合はtrueをセットします。<BR>
 * ※ 生成されるBeanにpublic statci Bean名 getInstance()メソッドが定義されている
 * 必要があります
 *<BR>
 *
 * @author KANO
 * @since jdk1.4.1
 * @version 1.00A 2005/08/20
 */
public class BeanInfoMapping{
    private String id;
    private String type;
    private String value;
    private boolean singleton;
    private KeyLinkedList properties = null;
    
    /**
     * BeanInfoMappingsを初期化します
     * @param id Beanの論理名
     * @param type Beanの物理名
     */
    public BeanInfoMapping(String id, String type ){
        this.id = id;
        this.type = type;
        this.singleton = false;
    }
    
    /**
     * Beanの論理名を取得します
     * @return Beanの論理名
     */
    public String getId(){
        return id;
    }
    
    /**
     * Beanの論理名をセットします
     * @param id Beanの論理名
     */
    public void setId(String id){
        this.id = id;
    }
    
    /**
     * Beanの物理名を取得します
     * @return Beanの物理名
     */
    public String getType(){
        return type;
    }
    
    /**
     * Beanの物理名をセットします
     * @param type Beanの物理名
     */
    public void setType(String type){
        this.type = type;
    }
    
    /**
     * Beanのプロパティ情報を追加します
     * @param name Beanのプロパティ名
     * @param property プロパティ情報
     */
    public void addProperty(String name, BeanPropertyInfo property){
        if( properties == null){
            properties = new KeyLinkedList();
        }
        properties.put(name, property);
    }
    
    /**
     * このBeanを保有するプロパティのリストを取得します
     * @return プロパティ情報のリストを返します
     */
    public KeyLinkedList getProperties(){
        return properties;
    }
    
    /**
     * プロパティ名で指定されたプロパティ情報を取得します
     * @param name プロパティ名
     * @return プロパティ情報
     */
    public BeanPropertyInfo getProperty(String name){
        return (BeanPropertyInfo)properties.get(name);
    }
    
    /**
     * シングルトンモードを取得します
     * @return シングルトンモード
     */
    public boolean getSingleton() {
        return singleton;
    }
    
    /**
     * シングルトンモードをセットします
     * @param singleton シングルトンモード
     */
    public void setSingleton(boolean singleton) {
        this.singleton = singleton;
    }
    
    /**
     * オブジェクトの初期値を取得します
     * @return オブジェクトの初期値
     */
    public String getValue() {
        return value;
    }
    
    /**
     * オブジェクトの初期値をセットします
     * @param value オブジェクトの初期値
     */
    public void setValue(String value) {
        this.value = value;
    }
}
