package org.itscool.commons.request;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * パラメータを保持する基本クラスです
 *
 * @author 加納
 *
 */
public class GeneralForm {
    /**
     * パラメータ保持用オブジェクト
     */
    HashMap paramMap = new HashMap();
    
    /**
     * パラメータを追加します
     * @param key パラメータ特定キー
     * @param param パラメータ
     */
    public void addParameter(Object key, Object param){
        paramMap.put(key, param);
    }
    
    /**
     * パラメータを削除します
     * @param key パラメータ特定キー
     */
    public void removeParameter(Object key){
        paramMap.remove(key);
    }
    
    /**
     * パラメータのキー一覧をSetインスタンスで取得します
     * @return パラメータのキー一覧
     */
    public Set keySet(){
        return paramMap.keySet();
    }
    
    /**
     * パラメータを取得します
     * @param key パラメータを特定する論理名称
     * @return パラメータ
     */
    public Object getParameter(String key){
        return paramMap.get(key);
    }
    
    /**
     * パラメータの一覧をMapインスタンスで取得します
     * @return パラメータの一覧
     */
    public Map getParameters(){
        return paramMap;
    }
    
    /**
     * パラメータを文字列で取得します
     * @param key パラメータ得定キー
     * @return パラメータを文字列で返します
     */
    public String getString(String key){
        String param = (String)getParameter(key);
        return param;
    }
    
    /**
     * パラメータを整数値で取得します
     * @param key パラメータ特定キー
     * @return パラメータを整数値で返します
     */
    public int getInt(String key){
        int intParam = Integer.parseInt(getString(key));
        
        return intParam;
    }
    
    /**
     * パラメータをロング値で取得します
     * @param key パラメータ特定キー
     * @return パラメータをロング値で返します
     */
    public long getLong(String key){
        long longParam = Long.parseLong(getString(key));
        
        return longParam;
    }
    
    /**
     * パラメータをdouble値で取得します
     * @param key パラメータ特定キー
     * @return パラメータをdouble値で返します
     */
    public double getDouble(String key){
        double intParam = Double.parseDouble(getString(key));
        
        return intParam;
    }
    
    /**
     * パラメータ特定キーで指定されたパラメータがjava.util.Listインターフェース
     * を実装しているか判定します
     * @param key パラメータ特定キー
     * @return このパラメータがList型にキャスト可能な場合はtrueを返します
     */
    public boolean isList(String key){
        Object param = getParameter(key);
        
        if( param instanceof List){
            return true;
        }else{
            return false;
        }
    }
    
}
