/*  OpenOlap viewer
 *  パッケージ名：openolap.viewer
 *  ファイル：RequestHelper.java
 *  説明：クライアントからのリクエストと処理を紐付けるクラスです。
 *
 *  作成日: 2004/01/05
 */

package openolap.viewer.controller;

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

/**
 *  クラス：RegistSelecterInfoCommand
 *  説明：クライアントからのリクエストと処理を紐付けるクラスです。
 */
public class RequestHelper {

	// ********** インスタンス変数 **********

	/** HttpServletRequestオブジェクト */
	HttpServletRequest request = null;

	/** HttpServletResponseオブジェクト */
	HttpServletResponse response = null;

	/** ServletConfigオブジェクト */
	ServletConfig config = null;

	// ********** コンストラクタ **********

	/**
	 * クライアントからのリクエストと処理を紐付けるオブジェクトを生成します。
	 */
	public RequestHelper (HttpServletRequest request, HttpServletResponse response, ServletConfig config) {
		this.request = request;
		this.response = response;
		this.config = config;
	}

	// ********** メソッド **********

	/**
	 * 設定の登録完了を意味し、Spreadの再表示を行うページを戻す。
	 * @return リクエストに対応する処理を実行するオブジェクト。
	 */
	public Command getCommand() {

		Command command = null;
		String action = this.request.getParameter("action");

		// ログイン済みかをチェック
		if ( request.getSession().getAttribute("user") == null) {
			if (!action.equals("login")) {
				return new InvalidateSessionCommand();
			}
		}


		if (action != null){

			// レポート初期表示
			if (action.equals("displayNewReport")) {		//レポート初期表示
				command = new DisplayNewReportCommand();
			} else if (action.equals("getReportHeader")) {	//レポートオブジェクト生成およびヘッダ部生成
				command = new GetReportHeaderCommand();
			} else if(action.equals("loadClientInitAct")){	//レポート情報取得コマンドを取得
				command = new LoadClientInitActCommand();
			} else if (action.equals("getReportInfo")){	//レポート情報(レポート、軸、軸メンバ)
				command = new GetReportInfoCommand();
			} else if (action.equals("renewHtmlAct")) {	//HTMLのBODY部を更新する
				command = new RenewHtmlActCommand();

			// 色設定
			} else if (action.equals("loadColorAct")){		//色設定コマンドを取得
				command = new LoadColorActCommand();
			} else if (action.equals("getColorInfo")){		//色設定情報を取得
				command = new GetColorInfoCommand(); 

			// レポートへのデータ表示
			} else if (action.equals("loadDataAct")) {		//レポートへのデータ挿入コマンドを取得
															//(初期表示、スライス、ドリルダウン)
				command = new LoadDataActCommand();
			} else if (action.equals("getDataInfo")) {		//レポートのデータの集合を取得
				command = new GetDataInfoCommand();

			// セレクタ
			} else if (action.equals("displaySelecter")) {			//セレクター フレームを表示
				command = new DisplaySelecterCommand();
			} else if (action.equals("displaySelecterHeader")){	//セレクター ヘッダー部を表示
				command = new DisplaySelecterHeaderCommand();
			} else if (action.equals("displaySelecterBody")){		//セレクター ボディー部を表示
				command = new DisplaySelecterBodyCommand();
			} else if (action.equals("getAxisMemberInfoByAxisID")) {// 軸メンバ情報XMLを取得
				command = new GetAxisMemberInfoByAxisIDCommand();				
			} else if (action.equals("registClientReportStatus")){	//クライアント側のレポート情報をサーバー側のモデルに反映（永続化はしない）
				command = new RegistSelecterInfoCommand();
			} else if (action.equals("searchDimensionMember")){	//次元メンバ検索(セレクタ)
				command = new SearchDimensionMemberCommand();

			// レポート保存
			} else if (action.equals("saveClientReportStatus")){	//クライアント側のレポート情報を永続化
				command = new SaveClientReportStatusCommand();

			// ログイン
			} else if (action.equals("login")) {
				command = new LoginCommand();
			
			// ログアウト
			} else if (action.equals("logout")) {	// ログアウト処理を実行
				command = new LogoutCommand();

			// エクスポート
			} else if (action.equals("exportReport")) {
				command = new ExportReportCommand();
			}
			
		}

		return command;
	}


	/**
	 * クライアントから送信されたリクエストをあらわすオブジェクトを求める。
	 * @return リクエストをあらわすオブジェクト
	 */
	public HttpServletRequest getRequest() {
		return request;
	}

	/**
	 * クライアントへ返信するリクエストをあらわすオブジェクトを求める。
	 * @return レスポンスをあらわすオブジェクト。
	 */
	public HttpServletResponse getResponse() {
		return response;
	}

	/**
	 * Servletの設定をあらわすオブジェクトを戻す。
	 * @return Servletの設定をあらわすオブジェクト
	 */
	public ServletConfig getConfig() {
		return config;
	}

}
