/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//SCORMʃO@K񓚏(O[vP)
//
//		ύX
//			2005.01.31  VK쐬  OGA
//
//	@\
//
//̉ʂ͉K񓚏󋵉(O[vP)\܂
//
///////////////////////////////////////////
//
// p[^擾
// 	ELoID		LoID		// K{
// 	EuserId	[U[ID	// K{
// 	ELoType	Lo^Cv	// K{
// 	EUID		UID			// K{
///////////////////////////////////////////
/*
 * 쐬: 2005/02/15
 *
 * TODO ̐ꂽt@C̃ev[gύXɂ͎փWv:
 * EBhE - ݒ - Java - R[hEX^C - R[hEev[g
 */
package jp.co.ntt.lms.xmf.actions.lo.scorm.individuallog;

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

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import java.text.DecimalFormat;
import java.util.Map;
import java.util.Vector;
import jp.co.ntt.lms.xms.logsumup.scorm.*;
import jp.co.ntt.lms.xmf.actions.lo.scorm.individuallog.inc.*;
import jp.co.ntt.lms.xmo.Lo.LoClient;
import jp.co.ntt.lms.xmf.tools.xmo.Com.ComFunction;


/**
 * @author Administrator
 * 
 * TODO ̐ꂽ^Rg̃ev[gύXɂ͎փWv: EBhE - ݒ - Java - R[hEX^C -
 * R[hEev[g
 */
public class GroupReplyStatusAction extends Action {

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		IndividualLogComFunc_inc IndividualLogComFunc_inc = new IndividualLogComFunc_inc();
		IndividualLogCommon_inc IndividualLogCommon_inc = new IndividualLogCommon_inc();
		
		String strLoID_o         = request.getParameter( IndividualLogCommon_inc.STR_LOID_o );          // LoID
		String strUserID_o       = request.getParameter( IndividualLogCommon_inc.STR_USERID_o );        // [U[ID
		String strLoType_o       = request.getParameter( IndividualLogCommon_inc.STR_LOTYPE_o );        // Lo^Cv
		String strUID_o          = request.getParameter( IndividualLogCommon_inc.STR_UID_o );           // UID

		// ލ\擾
		ScormDocument scormDocument = (ScormDocument) request.getSession()
				.getAttribute(strLoID_o);
		ScormItemList itemList = new ScormItemList(scormDocument, strUID_o);
		// 擾ލ\IDL[A^CglƂnbVݒ肵܂B
		IndividualLogComFunc_inc.setScoInfo(itemList);

		////////////////////////
		// f[^̎擾
		////////////////////////
		IndividualLogReplyStatusStoreData objStoreData = new IndividualLogReplyStatusStoreData(
				strLoID_o, strUserID_o, strLoType_o, itemList);

		if (objStoreData.makeStoreData() != true) {
			request.setAttribute("message", IndividualLogCommon_inc.MSG_MAKE_STOREDATA_o);
			request.setAttribute("detail", "");
			request.setAttribute("close", "on");

			return mapping.findForward("error");
		}

		// f[^Ȃꍇ
		if (objStoreData.getMaxData() == 0) {
			request.setAttribute("message", IndividualLogCommon_inc.MSG_DATA_ZERO_o);
			request.setAttribute("detail", "");
			request.setAttribute("close", "on");

			return mapping.findForward("error");
		}

		Vector vecStoreData = objStoreData.getStoreData(0);

		// 萔(AUPʂɈقȂ)
		int intCol;
		intCol = objStoreData.getInteractionIDMAX((String) vecStoreData
				.get(IndividualLogCommon_inc.DEF_GR_AU_ID_o));

		// őJvZ
		int MaxColumn = 5 + intCol * 2;

		/////////////////////////////////////////////
		// wK҂ƖKɂĕ\܂Ƃ߂
		/////////////////////////////////////////////

		// AU_ID擾
		String strAU = " ";
		// wKҖ擾
		String strSTUDENT = " ";
		// ZbVt擾
		String strSESSIONT_ID = " ";

		// AU PʂInteraction_IDƐ擾
		// ROWSPAN߂
		// JE^
		int count1[];
		int count2[];
		int count3[];
		count1 = new int[objStoreData.getMaxData()];
		count2 = new int[objStoreData.getMaxData()];
		count3 = new int[objStoreData.getMaxData()];

		int intNum1;
		int intNum2;
		int intMaxQuestion = 0;
		intMaxQuestion = objStoreData.getInteractionIDMAX((String) vecStoreData
				.get(IndividualLogCommon_inc.DEF_GR_AU_ID_o));

		Vector vecCorrectResponse;
		Vector vecQuestion;

		// _̏
		DecimalFormat objFormat = new DecimalFormat(
				IndividualLogCommon_inc.DEF_SCORE_FORMAT);
		int intRet;

		// wK҂ƃZbVtZbg
		// wKғ
		count1[0] = 1;
		// ZbVID
		count2[0] = 1;
		// 񓚉
		count3[0] = 1;
		intNum1 = 1;
		intNum2 = 1;

		// wK҂ƓZbVtJEg
		for (int i = 0; i < objStoreData.getMaxData(); i++) {

			// vf擾
			vecStoreData = (Vector) objStoreData.getStoreData(i);
			// \̂ȂŁAő擾
			intCol = objStoreData.getInteractionIDMAX((String) vecStoreData
					.get(IndividualLogCommon_inc.DEF_GR_AU_ID_o));
			if (intCol > intMaxQuestion) {
				intMaxQuestion = intCol;
			}

			// OAUƈvȂꍇ
			if (!(strAU.equals((String) vecStoreData
					.get(IndividualLogCommon_inc.DEF_GR_AU_ID_o)))) {
				// قȂAUłROWSPANvZȂ߁AZbg
				count1[i] = 1;
				intNum1 = i;
				count2[i] = 1;
				intNum2 = i;
				count3[i] = 1;
				// ۑAUύX
				strAU = (String) vecStoreData
						.get(IndividualLogCommon_inc.DEF_GR_AU_ID_o);
				strSTUDENT = (String) vecStoreData
						.get(IndividualLogCommon_inc.DEF_GR_STUDY_NAME_o);
				strSESSIONT_ID = (String) vecStoreData
						.get(IndividualLogCommon_inc.DEF_GR_SESSION_ID_o);
				continue;
			}

			// O̊wK҂ƈvꍇ
			if (strSTUDENT.equals((String) vecStoreData
					.get(IndividualLogCommon_inc.DEF_GR_STUDY_NAME_o))) {
				// ROWSPAN̐lZB
				count1[intNum1] = count1[intNum1] + 1;
				count1[i] = 0;

				// ÕZbVIDƈvꍇ
				if (strSESSIONT_ID.equals((String) vecStoreData
						.get(IndividualLogCommon_inc.DEF_GR_SESSION_ID_o))) {
					count2[intNum2] = count2[intNum2] + 1;
					count2[i] = 0;
					count3[i] = count3[i - 1] + 1;
				} else {
					// ÕZbVtƈvȂꍇ
					count2[i] = 1;
					intNum2 = i;
					count3[i] = 1;
					strSESSIONT_ID = (String) vecStoreData
							.get(IndividualLogCommon_inc.DEF_GR_SESSION_ID_o);
				}
			} else {
				// O̊wK҂ƈvȂꍇ
				count1[i] = 1;
				count2[i] = 1;
				count3[i] = 1;
				intNum1 = i;
				intNum2 = i;
				strSTUDENT = (String) vecStoreData
						.get(IndividualLogCommon_inc.DEF_GR_STUDY_NAME_o);
				strSESSIONT_ID = (String) vecStoreData
						.get(IndividualLogCommon_inc.DEF_GR_SESSION_ID_o);

			}
		}

		// ő萔
		String strInterID[];
		String strCoreect[];
		strInterID = new String[intMaxQuestion];
		strCoreect = new String[intMaxQuestion];

		// XgA[f[^Pڂɖ߂
		vecStoreData = (Vector) objStoreData.getStoreData(0);

		// PAU擾
		strAU = (String) vecStoreData
				.get(IndividualLogCommon_inc.DEF_GR_AU_ID_o);

		// PInterraction擾
		intCol = objStoreData.getInteractionIDMAX((String) vecStoreData
				.get(IndividualLogCommon_inc.DEF_GR_AU_ID_o));
		for (int j = 0; j < intCol; j++) {
			// Interraction\
			vecCorrectResponse = objStoreData
					.getCorrectResponse((String) vecStoreData
							.get(IndividualLogCommon_inc.DEF_GR_AU_ID_o));

			// 萔
			// Vectoro
			vecQuestion = (Vector) vecCorrectResponse.get(j);
			strInterID[j] = (String) vecQuestion
					.get(IndividualLogCommon_inc.DEF_GR_INTERACTION_ID);
			strCoreect[j] = (String) vecQuestion
					.get(IndividualLogCommon_inc.DEF_GR_CORRECT_RESPONSE);

		}

		int intCorrect[];
		// wK
		int unLearningCount[];
		int intQuestion = 0;
		intCorrect = new int[intMaxQuestion];
		unLearningCount = new int[intMaxQuestion];
		float fltRound;
		int intWork;
		// 𗓗pDecimaltO
		int intDecimalFlg[];
		intDecimalFlg = new int[intMaxQuestion];

		// ϕ\tH[}bg
		DecimalFormat objAverageFormat = new DecimalFormat(
				IndividualLogCommon_inc.DEF_AVERAGE_FORMAT);
		// _\tH[}bg
		DecimalFormat objScoreFormat = new DecimalFormat(
				IndividualLogCommon_inc.DEF_SCORE_FORMAT);
		String strAverage;
		String strScore;
		String strSum;

		request
		.setAttribute("IndividualLogCommon_inc",
				IndividualLogCommon_inc);
		request.setAttribute("objStoreData", objStoreData);
		request.setAttribute("objAverageFormat", objAverageFormat);
		request.setAttribute("strAU", strAU);
		request.setAttribute("intCol", new Integer(intCol));
		request.setAttribute("strCoreect", strCoreect);
		request.setAttribute("intDecimalFlg", intDecimalFlg);
		request.setAttribute("intCorrect", intCorrect);
		request.setAttribute("unLearningCount", unLearningCount);
		request.setAttribute("strInterID", strInterID);
		request.setAttribute("count1", count1);
		request.setAttribute("count2", count2);
		request.setAttribute("count3", count3);
		request.setAttribute("IndividualLogComFunc_inc", IndividualLogComFunc_inc);
		request.setAttribute("objFormat", objFormat);
		
		// SCÕ^Cg錏̃oOΉ 20070129 by Oga Start
		Map auInfoMap = IndividualLogComFunc_inc.getAuInfoMap();
		request.setAttribute("auInfoMap", auInfoMap);
		// SCÕ^Cg錏̃oOΉ 20070129 by Oga End
		
		return mapping.findForward("success");

	
	}
}