/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//SCORM個別ログ　演習回答状況(グループ単位)
//
//		変更履歴
//			2005.01.31  新規作成  OGA
//
//	機能
//
//この画面は演習回答状況画面(グループ単位)を表示します
//
///////////////////////////////////////////
//
// パラメータ取得
// 	・LoID		LoID		// 必須
// 	・userId	ユーザーID	// 必須
// 	・LoType	Loタイプ	// 必須
// 	・UID		UID			// 必須
///////////////////////////////////////////
/*
 * 作成日: 2005/02/15
 *
 * TODO この生成されたファイルのテンプレートを変更するには次へジャンプ:
 * ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
 */
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 この生成された型コメントのテンプレートを変更するには次へジャンプ: ウィンドウ - 設定 - Java - コード・スタイル -
 * コード・テンプレート
 */
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 );        // ユーザーID
		String strLoType_o       = request.getParameter( IndividualLogCommon_inc.STR_LOTYPE_o );        // Loタイプ
		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);
		// 取得した教材構造よりIDをキー、タイトルを値としたハッシュを設定します。
		IndividualLogComFunc_inc.setScoInfo(itemList);

		////////////////////////
		// データの取得
		////////////////////////
		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");
		}

		// データがない場合
		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);

		// 問題数(AU単位に異なる)
		int intCol;
		intCol = objStoreData.getInteractionIDMAX((String) vecStoreData
				.get(IndividualLogCommon_inc.DEF_GR_AU_ID_o));

		// 最大カラム数を計算する
		int MaxColumn = 5 + intCol * 2;

		/////////////////////////////////////////////
		// 学習者と訪問日時にて表をまとめる
		/////////////////////////////////////////////

		// AU_ID取得
		String strAU = " ";
		// 学習者名取得
		String strSTUDENT = " ";
		// セッション日付取得
		String strSESSIONT_ID = " ";

		// AU 単位にInteraction_IDと正解を取得する
		// ROWSPANを求める
		// カウンタ
		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;

		// 学習者とセッション日付をセット
		// 学習者同一
		count1[0] = 1;
		// セッションID同一
		count2[0] = 1;
		// 回答回数
		count3[0] = 1;
		intNum1 = 1;
		intNum2 = 1;

		// 同一学習者と同一セッション日付をカウントする
		for (int i = 0; i < objStoreData.getMaxData(); i++) {

			// 要素を取得
			vecStoreData = (Vector) objStoreData.getStoreData(i);
			// 表のなかで、最大問題個数を取得
			intCol = objStoreData.getInteractionIDMAX((String) vecStoreData
					.get(IndividualLogCommon_inc.DEF_GR_AU_ID_o));
			if (intCol > intMaxQuestion) {
				intMaxQuestion = intCol;
			}

			// 前回のAUと一致しなかった場合
			if (!(strAU.equals((String) vecStoreData
					.get(IndividualLogCommon_inc.DEF_GR_AU_ID_o)))) {
				// 異なるAUではROWSPANを計算しないため、リセットする
				count1[i] = 1;
				intNum1 = i;
				count2[i] = 1;
				intNum2 = i;
				count3[i] = 1;
				// 保存AU名を変更する
				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;
			}

			// 前回の学習者と一致する場合
			if (strSTUDENT.equals((String) vecStoreData
					.get(IndividualLogCommon_inc.DEF_GR_STUDY_NAME_o))) {
				// ROWSPANの数値を加算する。
				count1[intNum1] = count1[intNum1] + 1;
				count1[i] = 0;

				// 前回のセッションIDと一致する場合
				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 {
					// 前回のセッション日付と一致しない場合
					count2[i] = 1;
					intNum2 = i;
					count3[i] = 1;
					strSESSIONT_ID = (String) vecStoreData
							.get(IndividualLogCommon_inc.DEF_GR_SESSION_ID_o);
				}
			} else {
				// 前回の学習者と一致しない場合
				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];

		// ストアーデータ１件目に戻す
		vecStoreData = (Vector) objStoreData.getStoreData(0);

		// １件目AU取得
		strAU = (String) vecStoreData
				.get(IndividualLogCommon_inc.DEF_GR_AU_ID_o);

		// １件目Interraction名取得
		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));

			// 問題数分
			// Vectorを取り出す
			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[];
		// 未学習数
		int unLearningCount[];
		int intQuestion = 0;
		intCorrect = new int[intMaxQuestion];
		unLearningCount = new int[intMaxQuestion];
		float fltRound;
		int intWork;
		// 正解欄用Decimalフラグ
		int intDecimalFlg[];
		intDecimalFlg = new int[intMaxQuestion];

		// 平均表示フォーマット
		DecimalFormat objAverageFormat = new DecimalFormat(
				IndividualLogCommon_inc.DEF_AVERAGE_FORMAT);
		// 得点表示フォーマット
		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のタイトルが消える件のバグ対応 20070129 by Oga Start
		Map auInfoMap = IndividualLogComFunc_inc.getAuInfoMap();
		request.setAttribute("auInfoMap", auInfoMap);
		// SCOのタイトルが消える件のバグ対応 20070129 by Oga End
		
		return mapping.findForward("success");

	
	}
}