package jp.ossc.petstore.peer.impl;

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

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.ICategoryFanction;
import jp.ossc.petstore.function.IProductFunction;
import jp.ossc.petstore.dto.peerdto.ShowProductDefaultPeerDTO;
import jp.ossc.petstore.dto.functiondto.CategoryFunctionDTO;
import jp.ossc.petstore.dto.functiondto.ProductFunctionDTO;

/**
 * 商品一覧デフォルト表示peerクラス
 * @author ossc
 * @version $Revision: 1.2 $
 */
public class ShowProductDefaultPeer extends BasePeer implements IPeer {

	/**
	 * カテゴリファンクション
	 */
	private ICategoryFanction categoryFunction;
	
	/**
	 * カテゴリファンクション設定
	 * @param categoryFunction カテゴリファンクション
	 */
	public void setCategoryFunction(ICategoryFanction categoryFunction) {
		this.categoryFunction = categoryFunction;
	}

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

	/**
	 * 商品一覧デフォルト表示業務処理実行<br>
	 * 最小のカテゴリＩＤを取得する。<br>
	 * カテゴリＩＤが取得できなかった場合、エラーメッセージを設定し処理を終了する。<br>
	 * 取得したカテゴリＩＤをもとに商品情報リストを取得する。<br>
	 * 商品情報リストが取得できなかった場合、エラーメッセージを設定し処理を終了する。<br>
	 * @param dto DTOオブジェクト
	 */
	public void execute(BaseDTO dto) {
		
		// DTOキャスト
		ShowProductDefaultPeerDTO showProductDefaultPeerDTO = (ShowProductDefaultPeerDTO)dto;
		
		// CategoryFunctionDTO生成
		CategoryFunctionDTO categoryFunctionDTO = new CategoryFunctionDTO();

		// 最小カテゴリＩＤ取得
		categoryFunction.getMinCategoryId(categoryFunctionDTO);
		
		// ステータスチェック
		if (categoryFunctionDTO.getStatus() == OpenstandiaConst.ENV_STATUS_DATA_NOT_FOUND) {
			
			// ステータス設定
			showProductDefaultPeerDTO.setStatus(categoryFunctionDTO.getStatus());
			
			// エラーメッセージ設定
			ActionMessage msg = new ActionMessage("errors.category_not_exist");
			ActionMessages msgs = new ActionMessages();
			msgs.add("ShowProductDefault", msg);
			showProductDefaultPeerDTO.setActionMessages(msgs);

			return;
		}
		
		// 最小カテゴリＩＤ
		String categoryId = categoryFunctionDTO.getCategoryId();
		
		// ProductFunctionDTO生成
		ProductFunctionDTO productFunctionDTO = new ProductFunctionDTO();
		productFunctionDTO.setCategoryId(categoryId);
		
		// 商品情報一覧取得
		productFunction.getProductList(productFunctionDTO);
		
		// ステータスチェック
		if (productFunctionDTO.getStatus() == OpenstandiaConst.ENV_STATUS_DATA_NOT_FOUND) {
			
			// ステータスを設定
			showProductDefaultPeerDTO.setStatus(productFunctionDTO.getStatus());
			
			// エラーメッセージを設定
			ActionMessage msg = new ActionMessage("errors.category.product_not_exist", categoryId);
			ActionMessages msgs = new ActionMessages();
			msgs.add("ShowProductDefault", msg);
			showProductDefaultPeerDTO.setActionMessages(msgs);

			return;
		}

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

}
