/*
このファイルの中身は、NTT オープンソースライセンス　バージョン 1.0（「本
契約」という）の適用を受けます。
本契約を遵守しない限り、このファイルを使用してはなりません。
本契約のコピーは、次のＵＲＬから入手できます。
【配布サイトのURL】 http://www.oss.ecl.ntt.co.jp/lms/

本契約に基づき頒布されるソフトウェアは、現状のまま、明示又は黙示のあらゆ
る種類の保証なしで、頒布されます。本契約に基づく権利及び制限を律する特定
の文言については、本契約を参照してください。

「オリジナルコード」は、 NTT Cyber Space Laboratories Code です。 
「オリジナルコード」の「初期開発者」は、日本電信電話株式会社です。  
日本電信電話株式会社により創作された部分は、Copyright (C) 2004 
日本電信電話株式会社 です。
全ての権利が留保されます。 
「コントリビュータ」：_____________________________________ 


The contents of this file are subject to the NTT Opensource License
Version 1.0 (the License); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
【配布サイトのURL】 http://www.oss.ecl.ntt.co.jp/lms/

Software distributed under the License is distributed on an AS IS
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.

The Original Code is NTT Cyber Space Laboratories Code .

The Initial Developer of the Original Code is NIPPON TELEGRAPH AND 
TELEPHONE CORPORATION.
Portions created by the NIPPON TELEGRAPH AND TELEPHONE CORPORATION 
are Copyright (C) 2004 NIPPON TELEGRAPH AND TELEPHONE CORPORATION. 
All Rights Reserved.

Contributor(s) ______________________________________.
*/

//
//	ExecuteParameters
//	変更履歴
//		2004.02.01	新規作成
//

package jp.co.ntt.lms.lo.scorm.engine;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Iterator;

import jp.co.ntt.lms.xms.framework.XmsException;
import jp.co.ntt.lms.xms.framework.XmsRequest;

/**
 *	ExecuteParameters クラス<br>
 *	学習開始時の起動パラメータを保持するItemクラス<br>
 */
public class ExecuteParameters {
	/** 学習開始コマンド */
	private String startCommand;

	/** ユーザID */
	private String userID;

	/** LOID */
	private String LOID;

	/** ManifestID */
	private String manifestID;

	/** 教材外部ID */
	private String foreignLOID;

	/** ユーザ名 */
	private String userName;

	/** 教材構造及び中断情報を取得する為のサーブレットへのURL */
	private String studyInfoURL;

	/** 学習セッションカウント */
	private String studySessionCount;

	/** 起動回数 */
	private String launchCount;

	/** 中断情報送信先URL */
	private String endLearnServletURL;

	/** XMSⅡ側開始日付 */
	private String studyStartDate;

	/**
	 * デフォルトコンストラクタ
	 */
	public ExecuteParameters() {}

	/**
	 * 初期化処理
	 *
	 * @param	req	HttpServletRequestを指定する
	 */
	public void initialize(XmsRequest req) throws XmsException {
		startCommand = null;
		studySessionCount = null;
		launchCount = null;
		LOID = null;
		manifestID = null;
		foreignLOID = null;
		userID = null;
		userName = null;
		studyInfoURL = null;
		endLearnServletURL = null;
		studyStartDate = null;

		Iterator iterator = req.getParmaterNames().iterator();

		while (iterator.hasNext()) {
			String parameter = (String)iterator.next();

			if (parameter.equals("COMD")) {
				startCommand = req.getParameter(parameter);
			}
			else if (parameter.equals("USERID")) {
				userID = req.getParameter(parameter);
			}
			else if (parameter.equals("LOID")) {
				LOID = req.getParameter(parameter);
			}
			else if (parameter.equals("ManifestID")) {
				manifestID = req.getParameter(parameter);
			}
			else if (parameter.equals("ForeignLOID")) {
				foreignLOID = req.getParameter(parameter);
			}
			else if (parameter.equals("StudentName")) {
				userName = req.getParameter(parameter);
			}
			else if (parameter.equals("StudyInfoURL")) {
				studyInfoURL = req.getParameter(parameter);
			}
			else if (parameter.equals("StudySession")) {
				studySessionCount = req.getParameter(parameter);
			}
			else if (parameter.equals("LoginSession")) {
				launchCount = req.getParameter(parameter);
			}
			else if (parameter.equals("EndURL")) {
				endLearnServletURL = req.getParameter(parameter);
			}
			else if (parameter.equals("study_start_date")) {
				studyStartDate = req.getParameter(parameter);
			}
		}
	}

	/**
	 * URLパラメータ作成処理
	 *
	 * @param	encoding	エンコーディングを指定する。
	 * @return	URLエンコードされた文字列を返却する
	 */
	public StringBuffer URLEncode(String encoding) throws UnsupportedEncodingException {
		StringBuffer sb = new StringBuffer();

		sb.append("COMD=");
		if (startCommand != null) {
			sb.append(URLEncoder.encode(startCommand, encoding));
		}

		sb.append("&USERID=");
		if (userID != null) {
			sb.append(URLEncoder.encode(userID, encoding));
		}

		sb.append("&LOID=");
		if (LOID != null) {
			sb.append(URLEncoder.encode(LOID, encoding));
		}

		sb.append("&ManifestID=");
		if (manifestID != null) {
			sb.append(URLEncoder.encode(manifestID, encoding));
		}

		sb.append("&ForeignLOID=");
		if (foreignLOID != null) {
			sb.append(URLEncoder.encode(foreignLOID, encoding));
		}

		sb.append("&StudentName=");
		if (userName != null) {
			sb.append(URLEncoder.encode(userName, encoding));
		}

		sb.append("&StudyInfoURL=");
		if (studyInfoURL != null) {
			sb.append(URLEncoder.encode(studyInfoURL, encoding));
		}

		sb.append("&StudySession=");
		if (studySessionCount != null) {
			sb.append(URLEncoder.encode(studySessionCount, encoding));
		}

		sb.append("&LoginSession=");
		if (launchCount != null) {
			sb.append(URLEncoder.encode(launchCount, encoding));
		}

		sb.append("&EndURL=");
		if (endLearnServletURL != null) {
			sb.append(URLEncoder.encode(endLearnServletURL, encoding));
		}

		sb.append("&study_start_date=");
		if (studyStartDate != null) {
			sb.append(URLEncoder.encode(studyStartDate, encoding));
		}

		return sb;
	}

	/**
	 * EndLearnServlet用のURLパラメータ作成処理
	 *
	 * @param	encoding	エンコーディングを指定する。
	 * @return	URLエンコードされた文字列を返却する
	 */
	public StringBuffer makeEndLearnServletURLParameters(String encoding)
		throws UnsupportedEncodingException {

		StringBuffer sb = new StringBuffer();

		sb.append("USERID=");
		if (userID != null) {
			sb.append(URLEncoder.encode(userID, encoding));
		}

		sb.append("&LOID=");
		if (LOID != null) {
			sb.append(URLEncoder.encode(LOID, encoding));
		}

		sb.append("&ManifestID=");
		if (manifestID != null) {
			sb.append(URLEncoder.encode(manifestID, encoding));
		}

		sb.append("&StudySession=");
		if (studySessionCount != null) {
			sb.append(URLEncoder.encode(studySessionCount, encoding));
		}

		sb.append("&LoginSession=");
		if (launchCount != null) {
			sb.append(URLEncoder.encode(launchCount, encoding));
		}

		sb.append("&study_start_date=");
		if (studyStartDate != null) {
			sb.append(URLEncoder.encode(studyStartDate, encoding));
		}

		return sb;
	}

	/**
	 * 学習開始コマンドを取得する
	 *
	 * @return 学習開始コマンド
	 */
	public String getStartCommand() {
		return startCommand;
	}

	/**
	 * 学習開始コマンドを設定する
	 *
	 * @param string	学習開始コマンド
	 */
	public void setStartCommand(String string) {
		startCommand = string;
	}

	/**
	 * ユーザIDを取得する
	 *
	 * @return ユーザID
	 */
	public String getUserID() {
		return userID;
	}

	/**
	 * ユーザIDを設定する
	 *
	 * @param string	ユーザID
	 */
	public void setUserID(String string) {
		userID = string;
	}

	/**
	 * LOIDを取得する
	 *
	 * @return LOID
	 */
	public String getLOID() {
		return LOID;
	}

	/**
	 * LOIDを設定する
	 *
	 * @param string	LOID
	 */
	public void setLOID(String string) {
		LOID = string;
	}

	/**
	 * ManifestIDを取得する
	 *
	 * @return ManifestID
	 */
	public String getManifestID() {
		return manifestID;
	}

	/**
	 * ManifestIDを設定する
	 *
	 * @param string	ManifestID
	 */
	public void setManifestID(String string) {
		manifestID = string;
	}

	/**
	 * 外部教材IDを取得する
	 *
	 * @return 外部教材ID
	 */
	public String getForeignLOID() {
		return foreignLOID;
	}

	/**
	 * 外部教材IDを設定する
	 *
	 * @param string	外部教材ID
	 */
	public void setForeignLOID(String string) {
		foreignLOID = string;
	}

	/**
	 * ユーザ名を取得する
	 *
	 * @return ユーザ名
	 */
	public String getUserName() {
		return userName;
	}

	/**
	 * ユーザ名を設定する
	 *
	 * @param string	ユーザ名
	 */
	public void setUserName(String string) {
		userName = string;
	}

	/**
	 * 教材構造及び中断情報を取得する為のサーブレットへのURLを取得する
	 *
	 * @return 教材構造及び中断情報を取得する為のサーブレットへのURL
	 */
	public String getStudyInfoURL() {
		return studyInfoURL;
	}

	/**
	 * 教材構造及び中断情報を取得する為のサーブレットへのURLを設定する
	 *
	 * @param string	教材構造及び中断情報を取得する為のサーブレットへのURL
	 */
	public void setStudyInfoURL(String string) {
		studyInfoURL = string;
	}

	/**
	 * 学習セッションカウントを取得する
	 *
	 * @return 学習セッションカウント
	 */
	public String getStudySessionCount() {
		return studySessionCount;
	}

	/**
	 * 学習セッションカウントを設定する
	 *
	 * @param string	学習セッションカウント
	 */
	public void setStudySessionCount(String string) {
		studySessionCount = string;
	}

	/**
	 * 起動回数を取得する
	 *
	 * @return 起動回数
	 */
	public String getLaunchCount() {
		return launchCount;
	}

	/**
	 * 起動回数を設定する
	 *
	 * @param string	起動回数
	 */
	public void setLaunchCount(String string) {
		launchCount = string;
	}

	/**
	 * EndLearnServletへのURLを取得する
	 *
	 * @return EndLearnServletへのURLを取得する
	 */
	public String getEndLearnServletURL() {
		return endLearnServletURL;
	}

	/**
	 * EndLearnServletへのURLを設定する
	 *
	 * @param string	EndLearnServletへのURL
	 */
	public void setEndLearnServletURL(String string) {
		endLearnServletURL = string;
	}

	/**
	 * XMSⅡの開始日付を取得する
	 *
	 * @return XMSⅡの開始日付を取得する
	 */
	public String getStudyStartDate() {
		return studyStartDate;
	}

	/**
	 * XMSⅡの開始日付を設定する
	 *
	 * @param string XMSⅡの開始日付
	 */
	public void setStudyStartDate(String string) {
		studyStartDate = string;
	}
}
