package weber_4_0_sample.org.itscool.ajax;

import org.itscool.commons.document.BeanToXmlDocument;
import org.itscool.commons.util.InputCheckUtil;
import org.itscool.weber.action.Action;
import org.itscool.weber.action.ActionBucket;
import org.itscool.weber.controller.Globals;
import org.w3c.dom.Document;

/**
 * サンプル1の場合は検索結果をテキストで返していたが
 * 本サンプルでは、XMLを返している。
 */
public class AjaxSample2Action extends Action {
    /**
     * 入力チェックを行います。<br>
     * 入力内容が不正な場合は、エラーオブジェクト（AjaxError)を生成し、
     * そのオブジェクトからXMLに変換した結果をクライアントに返します
     * @param bucket ActionBucketインスタンス
     * @return 入力成功時はGlobals.RET_SUCCESSを返します。
     * 入力エラーの場合はGlobals.RET_NOFORWARDを返します
     * （XmlHttpRequestで非同期通信、同期通信を行う場合は画面遷移は行いません)
     */
    public String doValidate(ActionBucket bucket) throws Exception{
        String emp_no = (String)getParameter("empNo");
        if( !InputCheckUtil.checkDigit(emp_no) ){
            AjaxError error = new AjaxError();
            error.setMessage("数値を入力してください");
            
            //オブジェクトをXMLにマッピングします
            BeanToXmlDocument beanToXml = new BeanToXmlDocument("errorList");
            beanToXml.addElement(error, "error");
            bucket.printXml(beanToXml);
            
            //XML変換後のデバッグ
            System.out.println(beanToXml.parseText("utf-8"));
            
            return Globals.RET_NOFORWARD;
        }
        
        return Globals.RET_SUCCESS;
    }
    
    /**
     * アクションを実行し、結果をXMLで出力します。<br>
     * このアクションの実行結果はGlobals.RET_NOFORWARDを返巣必要があります。<br>
     * XmlHttpRequestで非同期通信、同期通信を行う場合は、RequestDispatcher.forwardで
     * 画面を飛ばすと、XmlHttpRequestが画面の表示内容を受け取ってしまうため、
     * 結果がうまく表示されません。<br>
     * 又、bucket.printXml系のメソッドを実行すると、出力内容が確定し待っているため、
     * RequestDispatcher.forwardを呼び出すと、ServletExceptionがスローされます。
     * @param bucket ActionBucketインスタンス
     * @return Globals.RET_NOFORWARDを返します
     */
    public String doExecute(ActionBucket bucket)throws Exception{
        //クライアントからの入力パラメータをオブジェクトで取得します
        Ajax bean = (Ajax)bucket.getForm();
        String emp_no = bean.getEmpNo();
        String emp_name = "該当なし";
        
        if( emp_no.equals("0000")){
            emp_name="太郎";
        }else if( emp_no.equals("0001")){
            emp_name="加納";
        }else if( emp_no.equals("0002")){
            emp_name="hanako";
        }
        bean.setEmpName(emp_name);
        
        //オブジェクトをXMLにマッピングします
        BeanToXmlDocument beanToXml = new BeanToXmlDocument("result");
        beanToXml.addElement(bean, "bean");
        bucket.printXml(beanToXml);
        
        //XML変換後のデバッグ
        System.out.println(beanToXml.parseText("utf-8"));

        return Globals.RET_NOFORWARD;
    }
}
