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.OpenstandiaConst;
import jp.ossc.petstore.function.IProductFunction;
import jp.ossc.petstore.peer.IPeer;
import jp.ossc.petstore.peer.impl.BasePeer;
import jp.ossc.petstore.dto.BaseDTO;
import jp.ossc.petstore.dto.functiondto.ProductFunctionDTO;
import jp.ossc.petstore.dto.peerdto.InsertCartPeerDTO;

/**
 * カート投入peerクラス
 * @author ossc
 * @version $Revision: 1.2 $
 */
public class InsertCartPeer extends BasePeer implements IPeer {

	/**
	 * 商品ファンクション
	 */
	private IProductFunction productFunction;
	
	/**
	 * 商品ファンクション設定
	 * @param productFunction 商品ファンクション
	 */
	public void setProductFunction(IProductFunction productFunction) {
		this.productFunction = productFunction;
	}

	/**
	 * カート投入業務処理実行<br>
     * 入力パラメータ「商品ＩＤ」をもとに商品情報を取得する。<br>
     * 商品情報が取得できなかった場合はエラーメッセージを設定する。
	 * @param dto DTOオブジェクト
	 */
	public void execute(BaseDTO dto) {

		// DTOキャスト
		InsertCartPeerDTO insertCartPeerDTO = (InsertCartPeerDTO)dto;
		
		// ActionForm取得
		DynaActionForm dynaActionForm = (DynaActionForm)insertCartPeerDTO.getActionForm();

		// 商品ＩＤ取得
		String productId = (String)dynaActionForm.get("product_id");
		
		// ProductFunctionDTO生成
		ProductFunctionDTO productFunctionDTO = new ProductFunctionDTO();
		productFunctionDTO.setProductId(productId);
		
		// 商品情報取得
		productFunction.getProduct(productFunctionDTO);

		// ステータスチェック
		if (productFunctionDTO.getStatus() == OpenstandiaConst.ENV_STATUS_DATA_NOT_FOUND) {
			
			// ステータスを設定
			insertCartPeerDTO.setStatus(productFunctionDTO.getStatus());
			
			// エラーメッセージを設定
			ActionMessage msg = new ActionMessage("errors.product.product_not_exist", productId);
			ActionMessages msgs = new ActionMessages();
			msgs.add("InsertCart", msg);
			insertCartPeerDTO.setActionMessages(msgs);
		}

		// 商品情報設定
		insertCartPeerDTO.setProduct(productFunctionDTO.getProduct());
		
	}

}
