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

//
//	AICCCoreレコードクラス
//			変更履歴
//				2004.01.08	新規作成	中山 雅文
//
package jp.co.ntt.lms.lo.WBT.Aicc;

import java.util.*;

/**
 * AiccCore情報をDBに格納する為の情報を保持するクラスです。
 */
public class AiccCoreRecord extends AiccBaseRecord {

	/** レッスンステータス */
	private String mLessonStatus = "";

	/** 得点 */
	private String mRawScore = "";

	/** 最高得点 */
	private String mMaxScore = "";

	/** 最低得点 */
	private String mMinScore = "";

	/** 滞在時間 */
	private String mStayTime = "";

	/** レッスンロケーション */
	private String mLessonLocation = "";

	/** 終了状況 */
	private String mExist = "";

	/**
	/**
	 * レッスンステータスを設定します。
	 * @param String レッスンステータス
	 */
	public void setLessonStatus(String strLessonStatus ) {
		mLessonStatus = strLessonStatus;
	}
	/**
	 * レッスンステータスを返却します。
	 * @return レッスンステータス
	 */
	public String getLessonStatus() {
		return mLessonStatus;
	}
	/**
	 * 得点を設定します。<BR>
	 * 以下の形式でカンマ区切りで格納されます。<BR>
	 * <PRE>
	 *   得点,最高得点,最低得点
	 * </PRE>
	 * @param String 得点
	 */
	public void setScore(String strScore) {
		StringTokenizer strToken = new StringTokenizer(strScore, ",");
		try {
			int i = 0;
			while( strToken.hasMoreElements() ) {
				String strTemp = strToken.nextToken();
				switch(i) {
					case 0:
						setRawScore( strTemp );
						break;
					case 1:
						setMaxScore( strTemp );
						break;
					case 2:
						setMinScore( strTemp );
						break;
				}
				i++;
			}
		}
		catch( java.util.NoSuchElementException ne ) {
		}
	}

	/**
	 * 得点を設定します。
	 * @param String 得点
	 */
	public void setRawScore(String strScore ){
		mRawScore = strScore;
	}
	/**
	 * 得点を返却します。
	 * @return 得点
	 */
	public String getRawScore(){
		return mRawScore;
	}
	/**
	 * 得点を設定します。
	 * @param String 得点
	 */
	public void setMaxScore(String strScore ){
		mMaxScore = strScore;
	}
	/**
	 * 得点を返却します。
	 * @return 得点
	 */
	public String getMaxScore(){
		return mMaxScore;
	}
	/**
	 * 得点を設定します。
	 * @param String 得点
	 */
	public void setMinScore(String strScore ){
		mMinScore = strScore;
	}
	/**
	 * 得点を返却します。
	 * @return 得点
	 */
	public String getMinScore(){
		return mMinScore;
	}
	/**
	 * 滞在時間を設定します。
	 * @param String 滞在時間
	 */
	public void setStayTime(String strStayTime ){
		mStayTime = checkTime(strStayTime);
	}
	/**
	 * 滞在時間を返却します。
	 * @return 滞在時間
	 */
	public String getStayTime(){
		return mStayTime;
	}
	/**
	 * レッスンロケーションを設定します。
	 * @param String レッスンロケーション
	 */
	public void setLessonLocation(String strLessonLocation ){
		mLessonLocation = strLessonLocation;
	}
	/**
	 * レッスンロケーションを返却します。
	 * @return レッスンロケーション
	 */
	public String getLessonLocation(){
		return mLessonLocation;
	}
	/**
	 * 終了状態を設定します。
	 * @param String 終了状態
	 */
	public void setExist(String strExist ){
		mExist = strExist;
	}
	/**
	 * 終了状態を返却します。
	 * @return 終了状態
	 */
	public String getExist(){
		return mExist;
	}

	/**
	 * 累積滞在時間が規格[00(00):00:00(.00)]に合っているかどうかをチェックします。
	 * @param strTime
	 * @return
	 */
	private String checkTime(String strTime) {
		StringTokenizer strToken = new StringTokenizer(strTime, ":");
		try {
			int c = 0;
			int chkFlg = 0;
			boolean rslt = true;
			StringBuffer sbTime = new StringBuffer();

			while( strToken.hasMoreElements() && rslt) {
				String strTemp = strToken.nextToken();
				switch(c) {
					//時間部分のフォーマットチェック
					case 0:
						//桁数は2桁または4桁かどうか
						if((strTemp.length() == 2) || (strTemp.length() == 4)){
							sbTime.append( strTemp.substring(0,strTemp.length()) );
						}else{
							rslt = false;
						}
						break;
					//分部分のフォーマットチェック
					case 1:
						//桁数は2桁かどうか
						if(strTemp.length() == 2){
							sbTime.append( strTemp.substring(0,strTemp.length()) );
						}else{
							rslt = false;
						}
						break;

					//秒部分のフォーマットチェック
					case 2:
						//桁数は2桁かどうか
						if (strTemp.length() == 2){
							sbTime.append( strTemp.substring(0,strTemp.length()) );
						}
						//ミリ秒部分もある場合
						else if(strTemp.length() > 2){
							sbTime.append( strTemp.substring(0,2) );
							//ミリ秒部分のフォーマットチェック
							if(!((strTemp.substring(2,3)).equals("."))){
								rslt = false;
								break;
							}
							//小数点以下は0〜2桁
							if (strTemp.length() < 6){
								sbTime.append( strTemp.substring(3,strTemp.length()) );
							}else{
								rslt = false;
								break;
							}
						}else{
							rslt = false;
							break;
						}
						break;

					default:
						rslt = false;
						break;
				}
				c++;
			}
			//文字数チェックがOKであれば数字チェック
			if(rslt){
				rslt = checkNum(sbTime.toString(),0,sbTime.length());
				//数字チェックがNGの場合はダミーデータをセット
				if( !rslt ){
					strTime = "0000:00:00";
				}
			}
			//文字数チェックがNGの場合はダミーデータをセット
			else{
				strTime = "0000:00:00";
			}
		}
		catch( Exception ex ) {
		}
		return strTime;
	}
	
	/**
	 * 数値チェックをします。
	 * @param strCheck
	 * @param チェック開始位置
	 * @param チェック終了位置
	 * @return　正常：true　異常：false
	 */
	private boolean checkNum(String strCheck , int in , int len){
		for(int i=in; i < len; i++){
			char chk=strCheck.charAt(i);
			if((chk < '0') || (chk > '9')){
				return false;
			}
		}
		return true;
	}
}

