/*
このファイルの中身は、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) ______________________________________.
*/

//
//	Scorm個別ログ共通ストアデータクラスクラス
//		変更履歴
//			2004.09.14 新規作成 A.Shimoma
//

package jp.co.ntt.lms.xms.logsumup.scorm;

import java.util.Vector;
import jp.co.ntt.lms.lo.LoTopClient;
import jp.co.ntt.lms.xmo.Environment;
import jp.co.ntt.lms.xmo.XMOException;
import jp.co.ntt.lms.xmo.Lo.LoClient;

/**
 * Scorm個別ログ共通ストアデータクラス <BR>
 * Scorm個別ログの業務系ストアデータクラスの継承元 <BR>
 *
 * @author A.Shimoma
 */
public class IndividualLogStoreData implements IndividualLogPropertyDef {

	/**
	 * セッションより取り出された教材構造
	 */
	protected ScormItemList currentScormNode;

	/**
	 * ストアデータ
	 */
	private Vector mvecStoreData;


	/**
	 * コンストラクタ
	 */
	public IndividualLogStoreData() {

		mvecStoreData = new Vector();
	}

	/**
	 * ストアデータにデータをセットする
	 *
	 * @param vecDataObj セットするデータオブジェクト
	 */
	public void setStoreDataObj( Vector vecDataObj ) {

		this.mvecStoreData = vecDataObj;
	}

	/**
	 * ストアデータのMAX件数(行)を取得
	 *
	 * @return int ストアデータの件数
	 */
	public int getMaxData() {

		int maxData = 0;
		if ( mvecStoreData != null ) {
			maxData = mvecStoreData.size();
		}
		return maxData;
	}

	/**
	 * ストアデータの指定されたインデックスの要素を返却 <BR>
	 *
	 * @param intIndex 指定インデックス
	 * @return Vector ストアデータの１行分を返却
	 */
	public Vector getStoreData( int intIndex ) {

		Vector vecRet = new Vector();
		if ( mvecStoreData != null ) {
			vecRet = ( Vector ) mvecStoreData.get( intIndex );
		} else {
			vecRet = null;
		}
		return vecRet;
	}

	/**
	 * 指定されたSQLを発行してデータを取得する <BR>
	 *
	 * @param strLoType 教材TYPE
	 * @param strSqlId SQLのID
	 * @param vecPara SQLに挿入する条件
	 * @return String[][] 取得したレコード
	 */
	public String[][] execute( String strLoType, String strSqlId, Vector vecPara ) {

		String[][] objResult = null;
		try {
			// クライアントオブジェクト生成
			Environment objEnv = new Environment();
			String strServerName = objEnv.getLoServerName();
			LoTopClient objLoTop = new LoTopClient( strServerName, strLoType );
			// 検索条件の設定
			for ( int i = 0; i < vecPara.size(); i++ ) {
				objLoTop.addLoLogCondition( ( String ) vecPara.elementAt( i ) );
			}
			//個別ログデータの取得
			if ( !objLoTop.getIndividualLog( strSqlId ) ) {
				return objResult;
			}
			//検索結果
			objResult = objLoTop.getIndividualLogResult();
		} catch ( Exception e ) {
			return objResult;
		}
		return objResult;
	}

	/**
	 * 成績判定
	 * Scorm_Interaction.Learner_Responseの
	 * 左1文字に"C"or"c"or1以上の数字が入っていたら正解とする
	 *
	 * @param strParamResult DBから取得したresult（回答の結果）
	 * @return 正解：DEF_CORREC、不正解：DEF_NO_ANSWER、未回答：DEF_WRONG
	 */
	public String judgeResult( String strParamResult ) {

		String strResult;

		try {
			Double.parseDouble(strParamResult);
			// resultがDecimal値の場合
			strResult = strParamResult;
		} catch ( NumberFormatException e ) {
			// resultがDecimal値以外の場合
			strResult = "0";
		}

		if ( strParamResult.equals( "" ) ) {
			// 未回答
			return DEF_NO_ANSWER;
		} else if ( !strResult.equals( "0" ) ) {
			// resultがDecimal値の場合、result数値を返却します。
			return strParamResult;
		} else if ( strParamResult.substring( 0, 1 ).equalsIgnoreCase( "C" ) ) {
			// 正解
			return DEF_CORREC;
		} else {
			// 不正解
			return DEF_WRONG;
		}
	}

	/**
	 * 完了判定 左1文字に"C"or"c" または"P"or"p"が入っていたら完了とする
	 *
	 * @param strParamResult DBから取得したLesson_Status
	 * @return boolean true=完了,false=以外
	 */
	public boolean judgeCompletedResult( String strParamResult ) {

		if ( strParamResult.equals( "" ) ) {
			return false;
		} else if ( strParamResult.substring( 0, 1 ).equalsIgnoreCase( "C" )
					|| judgePassResult( strParamResult ) ) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 合格判定 左1文字に"P"or"p"が入っていたら完了とする
	 *
	 * @param strParamResult DBから取得したLesson_Status
	 * @return boolean true=合格,false=以外
	 */
	private boolean judgePassResult( String strParamResult ) {

		if ( strParamResult.equals( "" ) ) {
			return false;
		} else if ( strParamResult.substring( 0, 1 ).equalsIgnoreCase( "P" ) ) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * リアルLOID取得メソッド。 <BR>
	 * 指定されたLOIDよりリアルLOIDを取得します。
	 *
	 * @param strLoID LOID
	 * @return strRealLoID リアルLOID
	 * @throws Exception
	 */
	public String getRealLoID( String strLoID ) throws Exception {

		String strRealLoID = null;
		LoClient objLo = new LoClient();
		if ( objLo.getRealLOIDFromLOID( strLoID ) ) {
			strRealLoID = objLo.getRealLOIDResult();
		} else {
			//検索がうまくいかなかった
			new XMOException( objLo.getMessageData() );
		}
		objLo = null;
		return strRealLoID;
	}
}
