/*
̃t@C̒ǵANTT I[v\[XCZX@o[W 1.0iu{
_vƂj̓Kp󂯂܂B
{_炵ȂÃt@CgpĂ͂Ȃ܂B
{_̃Rs[́Âtqkł܂B
yzzTCgURLz http://www.oss.ecl.ntt.co.jp/lms/

{_ɊÂЕz\tgEFÁÂ܂܁Âَ͖
ނ̕ۏ؂ȂŁAЕz܂B{_ɊÂyѐ𗥂
̕ɂẮA{_QƂĂB

uIWiR[hv́A NTT Cyber Space Laboratories Code łB 
uIWiR[hv́uJҁv́A{dMdbЂłB  
{dMdbЂɂn삳ꂽ́ACopyright (C) 2004 
{dMdb łB
SĂ̌ۂ܂B 
uRgr[^vF_____________________________________ 


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
yzzTCgURLz 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) ______________________________________.
*/

//
//	i󋵈ꗗ[Uf[^XgANX
//			ύX
//				2004/01/08 VK쐬    M.Asada
//
package jp.co.ntt.lms.lo.WBT.IndividualLog;

// Java API
import java.util.Vector;

import jp.co.ntt.lms.Common.RDF.RDFNode;

/**
 * i󋵈ꗗ[Ũf[^XgA<BR>
 * 
 * @author M.Asada
 * @version 0.0.0.1 2004/01/08
 */
public class IndividualLogUserProgressStatusStoreData extends IndividualLogStoreData {

	/** LOID */
	private String mstrLOID;
	
	/** UserID */
	private String mstrUserID;
	
	/** LoType */
	private String mstrLoType;
	
	/** ލ\ */
	private RDFNode mobjNode;

	/**@SQL擾f[^i[̈@*/
	private String mstrWrkData[ ][ ];
	
	/** i󋵈ꗗ[Uf[^iSj*/
	private Vector mvecStoreData;
	
	
	/**
	 * RXgN^
	 * @param LOID
	 * @param UserID
	 * @param LoType
	 * @param objNode
	 **/
	public IndividualLogUserProgressStatusStoreData(String strLOID,String strUserID,String strLoType,RDFNode objNode ) {
		this.mstrLOID = strLOID;
		this.mstrUserID = strUserID;
		this.mstrLoType = strLoType;
		this.mobjNode = objNode;
	}

	/**
	 * i󋵈ꗗ[Uf[^IuWFNg쐬
	 * @return Aُ
	 **/
	public boolean makeStoreData() {
	
		try{
			//SQL𔭍săe[uf[^擾(RecordSet)
			makeResultSql();
			
			//f[^݂ꍇ
				//RecordSetf[^Obj
				setStoreData();

				//IndividualLogStoreDataɍ쐬ꗗ\ObjZbg
				setStoreDataObj(mvecStoreData);

			return true;

		}catch(Exception e){
			return false;
		}
	}
	
	/**
	 * SQL𔭍sADBf[^擾
	 **/
	private void makeResultSql() throws Exception{
	
		Vector vecParam = new Vector();		//i[̈
		
		// ALOID擾B
		String strRealLoID = new IndividualLogStoreData().getRealLoID(mstrLOID);

		//SQL쐬
		//Zbg
		vecParam.addElement(strRealLoID);
		vecParam.addElement(mstrUserID);

		//SQLs
		mstrWrkData = execute( mstrLoType, SQLID_PROGRESS_USER,  vecParam);

	}

	/**
	 * DB擾f[^ҏWA\AUɃf[^ObjɊi[
	 */
	private void setStoreData(){
		int intRowCnt;									//isj
		String strNodeUID = new String();				//ڎ擾UID
		String strUID = new String();					//DB擾UID
		String strStoreUID = new String();				//XgAUID
		String strStoreStudyStartDateNew = new String();//XgAwKJn
		String strStoreStudyStartDateOld = new String();//XgAŏIANZX
		int intStoreUIDCount;							//XgAANZX
		String strStoreTotalLearnTime;					//XgAݐϊwK
		String strStoreMaxScore = new String();			//XgA链_iŐVj
		String strStoreRawScore = new String();			//XgA链_iōj
		String strStoreComplete = new String();			//XgA銮AU
		String strStorePass = new String();				//XgA鍇iAU
		String strStoreAURow = new String();			//XgAAU_ROW
		String strStoreSectionRow = new String();		//XgASECTION_ROW

		//isj
		intRowCnt = mstrWrkData.length;
		
		//ލ\ꗗ쐬
		createRDFStoreData(mobjNode);

		//XgAf[^쐬
		mvecStoreData = new Vector();

		//caʂPO݂ȂꍇAނ`t̋f[^XgA쐬
		if(intRowCnt == 0){
			createEmptyStoreData();
			return;
		}

		//`tɃ[v
		for(int i = 0; i < getRDFMaxRow(); i++){
			
			//ZNV
			if(getRDFType(i).equals(IndividualLogRDFNode.STATUS_S)){
				//ZNVROW(index)ێ
				strStoreSectionRow = new Integer(i).toString();
				continue;
			}

			//ڎUID
			strNodeUID = getRDFAUID(i);

			//AUPʂ̃f[^ێ̈揉
			strStoreUID = "";
			strStoreStudyStartDateNew = "";
			strStoreStudyStartDateOld = "";
			intStoreUIDCount = 0;
			strStoreTotalLearnTime = "";
			strStoreMaxScore = "";
			strStoreRawScore = "";
			strStoreComplete = "0";
			strStorePass = "0";
			strStoreAURow = "";

			//ڎAUŁASQL擾f[^
			int j;
			for(j = 0; j < intRowCnt; j++){							//ڎRowLoop
				//UID擾
				strUID = mstrWrkData[ j ][ PROGRESS_REC_UID_COL ];

				//UIDڎƓɂȂ܂Ői߂(xvĂȂ)
				if(!strNodeUID.equals(strUID) && intStoreUIDCount == 0){
					continue;
				}

				//xUIDvĂUIDقȂꍇ
				if(!strNodeUID.equals(strUID) && intStoreUIDCount > 0){
					//Wv
					Vector vecAuStoreData = setAuStoreData(strStoreUID,
															strStoreStudyStartDateNew,
															strStoreStudyStartDateOld,
															intStoreUIDCount,
															strStoreTotalLearnTime,
															strStoreMaxScore,
															strStoreRawScore,
															strStoreComplete,
															strStorePass,
															strStoreAURow,
															strStoreSectionRow);
					//f[^XgAsǉ
					mvecStoreData.addElement( vecAuStoreData );
					intStoreUIDCount = 0;
					break;
				}

				//vUID
				intStoreUIDCount++;

				//߂Ĉv
				if(intStoreUIDCount == 1){
					//UIDێ
					strStoreUID = strUID;
					//wKJnێ
					strStoreStudyStartDateNew = mstrWrkData[ j ][ PROGRESS_REC_STUDYDATE_COL ];
					//_iōjێ
					strStoreRawScore = mstrWrkData[ j ][ PROGRESS_REC_MAXSCORE_COL ];
					//AU Rawێ
					strStoreAURow = new Integer(i).toString();
				}
				//_iōjێ
				if(!mstrWrkData[ j ][ PROGRESS_REC_MAXSCORE_COL ].equals("")){
					if(strStoreRawScore.equals("")){
						strStoreRawScore = mstrWrkData[ j ][ PROGRESS_REC_MAXSCORE_COL ];
					}else{
						if(new Float(strStoreRawScore).floatValue() < 
							new Float(mstrWrkData[ j ][ PROGRESS_REC_MAXSCORE_COL ]).floatValue()){
							strStoreRawScore = mstrWrkData[ j ][ PROGRESS_REC_MAXSCORE_COL ];
						}
					}
				}
				//ݐϊwK
				if(!mstrWrkData[ j ][ PROGRESS_REC_TIME_COL ].equals("")){
					strStoreTotalLearnTime = sumTotal(strStoreTotalLearnTime,mstrWrkData[ j ][ PROGRESS_REC_TIME_COL ]);
				}
				//ŏIANZXێ
				strStoreStudyStartDateOld = mstrWrkData[ j ][ PROGRESS_REC_STUDYDATE_COL ];
				//_iŐVj
				if(!mstrWrkData[ j ][ PROGRESS_REC_RAWSCORE_COL ].equals("")){
					strStoreMaxScore = mstrWrkData[ j ][ PROGRESS_REC_RAWSCORE_COL ];
				}
				//ێ
				if(judgeCompletedResult(mstrWrkData[ j ][ PROGRESS_REC_LESSONSTATUS_COL ])){
					strStoreComplete = DEF_AU_COMPLETE;
				}
				//iێ
				if(judgePassResult(mstrWrkData[ j ][ PROGRESS_REC_LESSONSTATUS_COL ])){
					strStorePass = DEF_AU_PASS;
				}
			}
			if(intStoreUIDCount > 0 ){
				//Wv
				Vector vecAuStoreData = setAuStoreData(strStoreUID,
														strStoreStudyStartDateNew,
														strStoreStudyStartDateOld,
														intStoreUIDCount,
														strStoreTotalLearnTime,
														strStoreMaxScore,
														strStoreRawScore,
														strStoreComplete,
														strStorePass,
														strStoreAURow,
														strStoreSectionRow);
				//f[^XgAsǉ
				mvecStoreData.addElement( vecAuStoreData );
			}
			//ލ\̂`tcaʂƂP}b`Ȃꍇ
			//XgAf[^\z
			else if(intStoreUIDCount == 0 && j == intRowCnt){
				//AUPʂ̃f[^ێ̈揉
				strStoreStudyStartDateNew = "";
				strStoreStudyStartDateOld = "";
				intStoreUIDCount = -1;
				strStoreTotalLearnTime = "";
				strStoreMaxScore = "";
				strStoreRawScore = "";
				strStoreComplete = "0";
				strStorePass = "0";
				strStoreAURow = new Integer(i).toString();
				//Wv
				Vector vecAuStoreData = setAuStoreData(strNodeUID,
														strStoreStudyStartDateNew,
														strStoreStudyStartDateOld,
														intStoreUIDCount,
														strStoreTotalLearnTime,
														strStoreMaxScore,
														strStoreRawScore,
														strStoreComplete,
														strStorePass,
														strStoreAURow,
														strStoreSectionRow);
				//f[^XgAsǉ
				mvecStoreData.addElement( vecAuStoreData );
			}
		}
	}

	/**
	 * ލ\`t̋f[^XgA쐬
	 */
	private void createEmptyStoreData(){
		int intRowCnt;									//isj
		String strNodeUID = new String();				//ڎ擾UID
		String strStoreStudyStartDateNew = new String();//XgAwKJn
		String strStoreStudyStartDateOld = new String();//XgAŏIANZX
		int intStoreUIDCount;							//XgAANZX
		String strStoreTotalLearnTime;					//XgAݐϊwK
		String strStoreMaxScore = new String();			//XgA链_iŐVj
		String strStoreRawScore = new String();			//XgA链_iōj
		String strStoreComplete = new String();			//XgA銮AU
		String strStorePass = new String();				//XgA鍇iAU
		String strStoreAURow = new String();			//XgAAU_ROW
		String strStoreSectionRow = new String();		//XgASECTION_ROW

		//ލ\[v
		for(int i = 0; i < getRDFMaxRow(); i++){

			//AUPʂ̃f[^ێ̈揉
			strStoreStudyStartDateNew = "";
			strStoreStudyStartDateOld = "";
			intStoreUIDCount = -1;
			strStoreTotalLearnTime = "";
			strStoreMaxScore = "";
			strStoreRawScore = "";
			strStoreComplete = "0";
			strStorePass = "0";
			strStoreAURow = new Integer(i).toString();

			//ZNV
			if(getRDFType(i).equals(IndividualLogRDFNode.STATUS_S)){
				//ZNVROW(index)ێ
				strStoreSectionRow = new Integer(i).toString();
				continue;
			}

			//ލ\UID擾
			strNodeUID = getRDFAUID(i);

			//Wv
			Vector vecAuStoreData = setAuStoreData(strNodeUID,
													strStoreStudyStartDateNew,
													strStoreStudyStartDateOld,
													intStoreUIDCount,
													strStoreTotalLearnTime,
													strStoreMaxScore,
													strStoreRawScore,
													strStoreComplete,
													strStorePass,
													strStoreAURow,
													strStoreSectionRow);
			//f[^XgAsǉ
			mvecStoreData.addElement( vecAuStoreData );
		}
	}

	/**
	 * wKAUPʏWv
	 * @param String strStoreUID UID
	 * @param String strStoreStudyStartDateNew wKJn
	 * @param String strStoreStudyStartDateOld ŏIANZX
	 * @param int intStoreUIDCount ANZX
	 * @param String strStoreTotalLearnTime ݐϊwK
	 * @param String strStoreMaxScore _iŐVj
	 * @param String strStoreRawScore _iōj
	 * @param String strStoreComplete AU
	 * @param String strStorePass iAU
	 * @param String strStoreAURow AU_ROW
	 * @param String strStoreSectionRow SECTION_ROW
	 * @return Vector Wv
	 */
	private Vector setAuStoreData(String strStoreUID,
									String strStoreStudyStartDateNew,
									String strStoreStudyStartDateOld,
									int intStoreUIDCount,
									String strStoreTotalLearnTime,
									String strStoreMaxScore,
									String strStoreRawScore,
									String strStoreComplete,
									String strStorePass,
									String strStoreAURow,
									String strStoreSectionRow){

		Vector vecAuWrk = new Vector();
		//UID
		vecAuWrk.addElement(strStoreUID);
		//wKJn
		vecAuWrk.addElement(strStoreStudyStartDateNew);
		//ŏIANZX
		vecAuWrk.addElement(strStoreStudyStartDateOld);
		//ANZX
		if(intStoreUIDCount == -1){
			vecAuWrk.addElement("");
		}else{
			vecAuWrk.addElement(new Integer(intStoreUIDCount).toString());
		}
		//ݐϊwK
		vecAuWrk.addElement(convertSecToHour(strStoreTotalLearnTime));
		//_iŐVj
		vecAuWrk.addElement(strStoreMaxScore);
		//_iōj
		vecAuWrk.addElement(strStoreRawScore);
		//AU
		vecAuWrk.addElement(strStoreComplete);
		//iAU
		vecAuWrk.addElement(strStorePass);
		//AU_ROW
		vecAuWrk.addElement(strStoreAURow);
		//SECTION_ROW
		vecAuWrk.addElement(strStoreSectionRow);

		return vecAuWrk;
	}

}
