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

/**
 * 商品一覧表示peerクラス
 * @author ossc
 * @version $Revision: 1.2 $
 */
public class ShowProductPeer 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キャスト
		ShowProductPeerDTO showProductPeerDTO = (ShowProductPeerDTO)dto;
		
		// ActionForm取得
		DynaActionForm dynaActionForm = (DynaActionForm)showProductPeerDTO.getActionForm();
		
		// カテゴリＩＤ取得
		String categoryId = (String)dynaActionForm.get("category_id");
		
		// ProductFunctionDTO生成
		ProductFunctionDTO productFunctionDTO = new ProductFunctionDTO();
		productFunctionDTO.setCategoryId(categoryId);
		
		// 商品情報一覧取得
		productFunction.getProductList(productFunctionDTO);
		
		// ステータスチェック
		if (productFunctionDTO.getStatus() == OpenstandiaConst.ENV_STATUS_DATA_NOT_FOUND) {
			
			// ステータスを設定
			showProductPeerDTO.setStatus(productFunctionDTO.getStatus());
			
			// エラーメッセージを設定
			ActionMessage msg = new ActionMessage("errors.category.product_not_exist", categoryId);
			ActionMessages msgs = new ActionMessages();
			msgs.add("ShowProduct", msg);
			showProductPeerDTO.setActionMessages(msgs);

		}
		
		// 商品情報一覧設定
		showProductPeerDTO.setProductList(productFunctionDTO.getProductList());
	}

}
