package jp.ossc.petstore.peer.impl;

import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.DynaActionForm;

import jp.ossc.petstore.dto.BaseDTO;
import jp.ossc.petstore.dto.peerdto.LoginPeerDTO;
import jp.ossc.petstore.dto.functiondto.CustomerFunctionDTO;
import jp.ossc.petstore.function.ICustomerFunction;
import jp.ossc.petstore.peer.IPeer;
import jp.ossc.petstore.peer.impl.BasePeer;
import jp.ossc.petstore.OpenstandiaConst;

/**
 * ログインpeerクラス
 * @author ossc
 * @version $Revision: 1.2 $
 */
public class LoginPeer extends BasePeer implements IPeer {

    /**
     * ログインファンクション
     */
    private ICustomerFunction customerFunction;
    
    /**
     * ログインファンクション設定
     * @param function ログインファンクション
     */
    public void setCustomerFunction(ICustomerFunction function) {
        this.customerFunction = function;
    }

    /**
     * ログイン業務処理実行。<br>
     * 入力パラメータ「ユーザＩＤ」「パスワード」をもとに顧客情報を取得する。<br>
     * 顧客情報が取得できなかった場合はエラーメッセージを設定する。
     * @param dto DTOオブジェクト
     */
	public void execute(BaseDTO dto) {
		
		// DTOをキャスト
		LoginPeerDTO loginPeerDTO = (LoginPeerDTO)dto;
		
		// ActionFormを取得
		DynaActionForm dynaActionForm = (DynaActionForm)loginPeerDTO.getActionForm();
		
		// CustomerFunctionDTOの生成
		CustomerFunctionDTO customerFunctionDTO = new CustomerFunctionDTO();
		customerFunctionDTO.setUserId((String)dynaActionForm.get("user_id"));
		customerFunctionDTO.setPassword((String)dynaActionForm.get("password"));
		
		// ユーザ認証実行
		customerFunction.executeUserAuthentication(customerFunctionDTO);
		
		// ステータスチェック
		if (customerFunctionDTO.getStatus() == OpenstandiaConst.ENV_STATUS_DATA_NOT_FOUND) {
			
			// ステータスを設定
			loginPeerDTO.setStatus(customerFunctionDTO.getStatus());
			
			// エラーメッセージを設定
			ActionMessage msg = new ActionMessage("errors.login");
			ActionMessages msgs = new ActionMessages();
			msgs.add("Login", msg);
			loginPeerDTO.setActionMessages(msgs);
		}
		
		// 顧客情報を設定
		loginPeerDTO.setCustomer(customerFunctionDTO.getCustomer());
		
	}

}
