package org.itscool.weber.action;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.HashMap;
import org.itscool.commons.document.BeanToXmlDocument;
import org.itscool.commons.request.GeneralForm;
import org.w3c.dom.Document;


/**
 * Action.execute()引数ラップインターフェース
 * file name : ActionBucket.java <BR>
 * @author KANO
 * @since jdk1.4.1
 * @version 1.00A 2004/11/1
 */
public interface ActionBucket {
    
    /**
     * サーブレットコンテキストからRealPathを取得します
     * @param path 相対パス
     * @return サーブレットコンテキストからのRealPathを返します
     */
    public String getRealPath(String path);
    
    /**
     * クエリー文字列を取得します
     * @return クエリー文字列
     */
    public String getQueryString();
    
    /**
     * パラメータで指定されたテキストを出力します
     * @param buff テキスト情報
     */
    public void print(String buff) throws IOException;
    
    /**
     * パラメータで指定されたXMLドキュメントを出力します
     * @param document XMLドキュメント
     * @throws Exception
     */
    public void printXml(Document document) throws Exception;
    
    /**
     * パラメータで指定されたBeanToXMLドキュメントを出力します
     * @param beanToXml BeanToXMLドキュメント
     * @throws Exception
     */
    public void printXml(BeanToXmlDocument beanToXml) throws Exception;
    
    
    /**
     * パラメータで指定されたオブジェクトをXMLで出力します<br>
     * オブジェクトbeanの要素名は"bean"がセットされます。<br>
     * 以下はcustomerオブジェクトをXMLに変換する例です。<br>
     * <p>
     * printXml( customer, "customer_list" );
     * </p>
     * <br>
     * <pre>
     * &lt;?xml version="1.0" encoding="Weberのエンコード"?&gt;
     * &lt;customer_list&gt;
     *    &lt;bean&gt;
     *        &lt;customerのメンバ1&gt;
     *        &lt;customerのメンバ2&gt;
     *        &lt;customerのメンバ3&gt;
     *    &lt;/bean&gt;
     * &lt;/customer_list&gt;
     * </pre>
     * @param bean オブジェクト
     * @param rootName オブジェクトのルート要素
     * @throws Exception
     */
    public void printXml(Object bean, String rootName) throws Exception;
    
    /**
     * パラメータで指定されたInputStreamデータを出力します
     * @param is InputStreamデータ
     * @throws Exception
     */
    public void print(InputStream is, String resourceName) throws IOException;
    
    /**
     * 権限情報リストを取得します
     * @return roles 権限情報リスト
     */
    public HashMap getRoles();
    /**
     * 権限情報リストをセットします
     * @param roles 権限情報リスト
     */
    public void setRoles(HashMap roles);
    
    
    public void putRole(String roleName);
    
    /**
     * フォームオブジェクトを取得します
     * @return フォームオブジェクト
     */
    public Object getForm();
    
    /**
     * フォームオブジェクトをセットします
     * @param object フォームオブジェクト
     */
    public void setForm(Object object);
    
    /**
     * リクエストスコープにオブジェクトをセットします
     * @param key パラメータのキー
     * @param val パラメータ
     */
    public void setAttribute(String key, Object val);
    
    /**
     * リクエストスコープからオブジェクトを取得します
     * @param key パラメータのキー
     * @return リクエストパラメータ
     */
    public Object getAttribute(String key);
    
    /**
     * セッションスコープにオブジェクトをセットします
     * @param key パラメータのキー
     * @param val パラメータ
     */
    public void setAttributeFromSession(String key, Object val);
    
    /**
     * セッションスコープからオブジェクトを取得します
     * @param key パラメータのキー
     * @return リクエストパラメータ
     */
    public Object getAttributeFromSession(String key);
    
    /**
     * アプリケーションスコープにオブジェクトをセットします
     * @param key パラメータのキー
     * @param val パラメータ
     */
    public void setAttributeFromContext(String key, Object val);
    
    /**
     * アプリケーションスコープからオブジェクトを取得します
     * @param key パラメータのキー
     * @return リクエストパラメータ
     */
    public Object getAttributeFromContext(String key);
    
    /**
     * リクエストスコープからオブジェクトを取得します
     * @param key パラメータのキー
     */
    public void removeAttribute(String key);
    
    /**
     * セッションスコープからオブジェクトを取得します
     * @param key パラメータのキー
     */
    public void removeAttributeFromSession(String key);
    
    /**
     * アプリケーションスコープからオブジェクトを取得します
     * @param key パラメータのキー
     */
    public void removeAttributeFromContext(String key);
    
    /**
     * フォームエラー時の再入力処理
     * リクエストパラメータの値を再セットしなおす
     * @param generalForm フォームインスタンス
     */
    public void setRetryInputParam(GeneralForm generalForm);
    
}
