package jp.ossc.petstore.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import jp.ossc.petstore.OpenstandiaConst;
import jp.ossc.petstore.peer.IPeer;
import jp.ossc.petstore.dto.peerdto.ShowCategoryPeerDTO;

/**
 * カテゴリ表示アクション
 * @author ossc
 * @version $Revision: 1.2 $
 */
public class ShowCategoryAction extends BaseAction {

	/**
	 * カテゴリ表示Peer
	 */
	private IPeer showCategoryPeer;

	/**
	 * カテゴリ表示Peer設定
	 * @param showCategoryPeer カテゴリ表示Peer
	 */
	public void setShowCategoryPeer(IPeer showCategoryPeer) {
		this.showCategoryPeer = showCategoryPeer;
	}

	/**
	 * カテゴリ表示アクション実行<br>
	 * カテゴリ表示業務処理を呼び出し、実行結果に応じて遷移先を決定する。
	 * <ul>
	 * <li>正常終了した場合、リクエストにカテゴリ情報リストを格納し「success」に遷移する。
	 * <li>正常終了以外の場合、エラーメッセージを保存し「failure」に遷移する。
	 * </ul>
	 * @param mapping ActionMapping
	 * @param form ActionForm
	 * @param request HTTPリクエスト
	 * @param response HTTPレスポンス
	 * @return 画面遷移先
	 * @throws Exception Action実行時エラー
	 */
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		// DTO生成
		ShowCategoryPeerDTO dto = new ShowCategoryPeerDTO();
		dto.setActionForm(form);
		
		// カテゴリ表示業務処理実行
		showCategoryPeer.execute(dto);
		
		// ステータスチェック
		if (dto.getStatus() != OpenstandiaConst.ENV_STATUS_NORMAL_END) {
			saveMessages(request, dto.getActionMessages());
			return mapping.findForward(OpenstandiaConst.ENV_FORWARD_FAILURE);
		}
		
		// リクエスト情報にカテゴリ情報リストを設定
		request.setAttribute(OpenstandiaConst.ENV_REQ_ATRBT_CATEGORIES, dto.getCategoryList());
		
		return mapping.findForward(OpenstandiaConst.ENV_FORWARD_SUCCESS);
	}
}
