package org.itscool.weber.mapping;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * ActionMappingクラスはアプリケーション起動時に初期設定ファイルからリクエストURI
 * に対応するアクション情報を読み込み、保持するクラスです。<BR>
 * 一つのActionMappingインスタンスは初期設定ファイル中の一つのaction要素
 * に対応します。<BR>
 * <BR>
 *【設定ファイルの設定情報とActionMappingクラスのプロパティに対応する項目】<BR>
 * path ： このマッピングを使用する際のリクエストURIパターン<BR>
 * type ： このマッピングで使用されるActionクラス名<BR>
 * fowards ： このアクションが呼ばれたときに制御を渡すリクエストURIパス<BR>
 * validate ： このアクションが呼ばれたときのフォームチェックを行うクラスを指定する<BR>
 *<BR>
 * ActionMappingクラスはActionConfigReaderクラスによって生成されます。<BR>
 * 実際にはActionConfigReaderで初期化ファイルがロードされ、ActionMappingsクラス
 * を生成します。<BR>
 * ActionMappngsクラスにはActionMappingクラスのインスタンスがツリー形式で形成さ
 * れます。<BR>
 *
 * @author KANO
 * @since jdk1.4.1
 * @version 1.00A 2004/11/1
*/
public class ActionMapping{
    /**
     * アクションの論理名（サブミット時のメソッド名）
     */
	private String path;
	/**
	 * アクションの物理名（パッケージ名を含めたアクションクラス名）
	 */
    private String type;
    /**
     * フォームオブジェクトのクラス名（パッケージ名を含めたクラス名）
     */
    private String name;
    /**
     * 遷移先情報のリスト
     */
    private HashMap forwards = null;
    /**
     * 権限情報のリスト
     */
    private HashMap roles =null;
    /**
     * 入力チェックリスト
     */
    private List validates=null;
    
    /**
     * アクションマッピングを初期化します
     * @param path アクションを呼び出すためのリクエストURI
     * @param type このアクションに関連付けられたActionクラス名
     */
    public ActionMapping(String path, String type, String name){
        this.path = path;
        this.type = type;
        this.name = name;
    }
    
    /**
     * このアクションが呼ばれるリクエストURIを取得します
     * @return このアクションが呼ばれるリクエストURI
     */
    public String getPath(){
        return path;
    }
    
    /**
     * このアクションを呼び出すためのリクエストURIをセットします
     * @param path このアクションを呼び出すためのリクエストURI
     */
    public void setPath(String path){
        this.path = path;
    }
    
    /**
     * このアクションにくくりつけられているActionクラス名を取得します
     * @return このアクションにくくりつけられているActionクラス名
     */
    public String getType(){
        return type;
    }
    
    /**
     * このアクションにくくりつけられているActionクラス名をセットします
     * @param type このアクションにくくりつけられているActionクラス名
     */
    public void setType(String type){
        this.type = type;
    }
    
    /**
     * フォワード情報を追加します
     * @param name フォワードの論理名
     * @param forward フォワード先のJSPのパス
     */
    public void addForward(String name, String forward){
        if( forwards == null){
            forwards = new HashMap();
        }
        forwards.put(name, forward);
    }
    
    /**
     * このアクションから遷移可能なフォワードリストを取得します<BR>
     * フォワード情報が定義されていない場合はNULLを返します
     * @return フォワード情報のリストを返します
     */
    public HashMap getForwards(){
        return forwards;
    }
	
    /**
     * このアクションから遷移するフォワード情報を取得します<BR>
     * フォワード情報が定義されていない場合はNULLを返します
     * @param name フォワードにくくりつけられている論理名
     * @return フォワード先のJSPのパス
     */
    public String getForward(String name){
        return (String)forwards.get(name);
    }
    
    /**
     * 権限情報を追加します 
     * @param name ロール名
     */
    public void addRole(String name){
        if( roles == null ){
            roles = new HashMap();
        }
        roles.put( name, name);
    }

    /**
     * 入力チェック情報を追加します 
     * @param validate 入力チェック情報
     */
    public void addValidate(ValidationMapping validate){
        if( validates == null ){
        	validates = new ArrayList();
        }
        validates.add(validate);
    }
    
    public List getValidates(){
    	return validates;
    }
    
    /**
     * 権限情報を取得します<BR>
     * 権限情報が無い場合はNULLを返します
     * @return hashMap このアクションを許可する権限リストを返します
     */
    public HashMap getRoles(){
        return roles;
    }
    
	/**
     * アクションの論理名を返します
	 * @return アクションの論理名
	 */
	public String getName() {
		return name;
	}

}
