/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//	スマートフォース教材タイトルレポート（学習者一覧）画面表示Actionクラス
//
//		変更履歴
//			2005.02.16  新規作成  氏名 石崎賢太郎
//
//	機能
//
//	スマートフォース教材タイトルレポート（学習者一覧）画面表示Actionクラスです。
//
/////////////////////////////////////////////////////////////////
package jp.co.ntt.lms.xmf.actions.lo.SmartForce;

import java.util.Vector;

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

import jp.co.ntt.lms.lo.SmartForce.CourseUnitLogRecord;
import jp.co.ntt.lms.lo.SmartForce.SmartForceLoEnv;
import jp.co.ntt.lms.xmf.common.CommonFunction;
import jp.co.ntt.lms.xmo.Environment;

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

/**
 * スマートフォース教材タイトルレポート（学習者一覧）画面表示Actionクラスです。
 * 
 * @author Kentaro Ishizaki (UNITEC)
 * @version 1.0
 */
public class SmartForceMatRep_LearnerListAction extends Action
{
	/**
	 * メッセージ定数。
	 */
	private static final String MSG_ENV_ERR = "環境設定エラーが発生しました。";
	/**
	 * 結果（パス）定数。
	 */
	private final String STR_LIST_PASS = "PASS";
	/**
	 * 結果（失敗）定数。
	 */
	private final String STR_LIST_FAIL = "FAIL";

	/**
	 * strutsフレームワークから呼ばれるメソッドです。
	 * 
	 * @param mapping マッピングオブジェクト。
	 * @param form アクションフォームオブジェクト。
	 * @param request リクエストオブジェクト。
	 * @param response レスポンスオブジェクト。
	 * @return ActionForward アクションフォワードオブジェクト。
	 * @throws Exception
	 */
	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception
	{
		// キャッシュ無効処理
		response.setHeader("cache-control", "no-cache");
		
		//-------------------------------------------------------------------------
		//変数定義
		//-------------------------------------------------------------------------
		//ユーザID(比較用)
		String strStudentID = "";
		//Unitのタイトルを表示・非表示の判定フラグ(true	:表示した,false	:表示していない)
		boolean blDispUnitTitleFlg = false;

		//平均点算出用
		int intUserCount = 0;					//学習者数の合計
		Integer intWk;							//平均算出用Work
		int intTotalAccessCount 	= 0;		//アクセス回数の合計
		int intTotalProgressRate 	= 0;		//平均進捗率の合計
		int intTotalTestCount 		= 0;		//テスト回数の合計
		int intTotalAverageScore 	= 0;		//平均点の合計
		int intTotalHighestScore 	= 0;		//最高点の合計

		int intAllUserAccessCountAve 	= 0;	//全学習者のアクセス回数の平均
		int intAllUserProgressRateAve 	= 0;	//全学習者の平均進捗率の平均
		int intAllUserTestCountAve 		= 0;	//全学習者のテスト回数の平均
		int intAllUserAverageScoreAve 	= 0;	//全学習者の平均点の平均
		int intAllUserHighestScoreAve 	= 0;	//全学習者の最高点の平均

		String strComplete 	= "";		//学習終了表示用
		String strPass 		= "";		//テスト合否表示用
		String strUnitPass 	= "";		//ユニット合否表示用

		//-------------------------------------------------------------------------
		// 学習者一覧の取得()
		// objRecordの各項目のデータは、全てCommonFunction.encodeSJIS()でエンコードを行う。
		//-------------------------------------------------------------------------
		CourseUnitLogRecord[] objRecord = (CourseUnitLogRecord[])request.getAttribute("RECORD_LIST");
		if (objRecord.length == 0)
		{
			// ***************************
			// リクエストに変数をセットすること
			return mapping.findForward("success");
		}
		

		Object[][] arrayRecord = new Object[objRecord.length][8];
		final int RECORD_OUTPUT_TITLE_NO_UNIT = 0;
		final int RECORD_OUTPUT_TITLE_UNIT = 1;
		final int RECORD_OUTPUT_ENDTAG = 2;
		final int RECORD_USER_ID = 3;
		final int RECORD_ACCESS_COUNT = 4;
		final int RECORD_PROGRESS_RATE = 5;
		final int RECORD_TEST_COUNT = 6;
		
		final int USER_ID = 0;
		final int USER_ACCESS_COUNT = 1;
		final int USER_PROGRESS_RATE = 2;
		final int USER_COMPLETE = 3;
		final int USER_PASS = 4;
		final int USER_AVERAGE_SCORE = 5;
		final int USER_HIGHEST_SCORE = 6;
		final int USER_UNIT_COUNT = 7;
		
		final int UNIT_NAME = 0;
		final int UNIT_ACCESS_COUNT = 1;
		final int UNIT_PROGRESS = 2;
		final int UNIT_TEST_COUNT = 3;
		final int UNIT_COMPLETE = 4;
		final int UNIT_PASS = 5;
		final int UNIT_AVERAGE_SCORE = 6;
		final int UNIT_HIGHEST_SCORE = 7;
		
		Vector vecUser = new Vector();
		
		//-------------------------------------------------------------------------
		//全学習者の一覧を表示する
		//-------------------------------------------------------------------------
		//環境ファイルからDB種別情報取得のためEnvironmentクラスを生成する
		Environment objEnv = new Environment();
		SmartForceLoEnv objSFEnv = new SmartForceLoEnv();
		String lsDBEnv = objSFEnv.getDBType();
		if(lsDBEnv == null || lsDBEnv.trim().equals("")) {
			lsDBEnv = objEnv.getDBType();
		}
		int i = 0;
		for (i = 0; i < objRecord.length; i++) 
		{
			// ユーザIDが変わった学習者のデータを追加する
			if (!strStudentID.equalsIgnoreCase(objRecord[i].getStudentID()))
			{
				Object[] arrayUserInfo = new Object[3];
				// ユーザーID
				arrayUserInfo[USER_ID] = objRecord[i].getUserID();
				// アクセス回数
				arrayUserInfo[USER_ACCESS_COUNT] = objRecord[i].getAccessCount();
				// 進捗率
				arrayUserInfo[USER_PROGRESS_RATE] = objRecord[i].getProgressRate();
				// 学習終了
				arrayUserInfo[USER_COMPLETE] = objRecord[i].getCompleteFlag();
				//テスト合否
				arrayUserInfo[USER_PASS] = objRecord[i].getPassFlag();
				// 平均点
				arrayUserInfo[USER_AVERAGE_SCORE] = objRecord[i].getAverageScore();
				// 最高点
				arrayUserInfo[USER_HIGHEST_SCORE] = objRecord[i].getHighestScore();
				// ユニット数
				arrayUserInfo[USER_UNIT_COUNT] = objRecord[i].getUnitCount();
				
				vecUser.add(arrayUserInfo);
				
				// 初回(1レコード目)は処理しない
				if (!strStudentID.equals(""))
				{
					//-------------------------------------------------------------
					//学習者数をカウントする
					//-------------------------------------------------------------
					intUserCount += 1;

					// ユニットが存在する場合合計に加算
					if (!objRecord[i].getUnitCount().equals("0"))
					{
						//-------------------------------------------------------------
						//各項目の合計（１：String型の数値をIntegerへセット,２：Integer型からint型へ変換）
						//-------------------------------------------------------------
						//アクセス回数の合計
						intWk = new Integer(/*CommonFunction.encodeSJIS(*/objRecord[i].getAccessCount()/*)*/);
						intTotalAccessCount += intWk.intValue();

						//平均進捗率の合計
						intWk = new Integer(/*CommonFunction.encodeSJIS(*/objRecord[i].getProgressRate()/*)*/);
						intTotalProgressRate += intWk.intValue();
						//テスト回数の合計
						intWk = new Integer(/*CommonFunction.encodeSJIS(*/objRecord[i].getTestCount()/*)*/);
						intTotalTestCount += intWk.intValue();
						//平均点の合計
						intWk = new Integer(/*CommonFunction.encodeSJIS(*/objRecord[i].getAverageScore()/*)*/);
						intTotalAverageScore += intWk.intValue();
						//最高点の合計
						intWk = new Integer(/*CommonFunction.encodeSJIS(*/objRecord[i].getHighestScore()/*)*/);
						intTotalHighestScore += intWk.intValue();
					}
				}
			}
			//-------------------------------------------------------------
			//ユニット有無チェック
			//-------------------------------------------------------------
			//ユニットカウントが0の場合は、ブランク文字列を表示する
			if (!/*CommonFunction.encodeSJIS(*/objRecord[i].getUnitCount()/*)*/.equals("0"))
			{
				//-------------------------------------------------------------
				//ユニット合否のフラグに対応した文字列へ変換
				//-------------------------------------------------------------
				//ユニット合否
				if (/*CommonFunction.encodeSJIS(*/objRecord[i].getUnitPassFlag()/*)*/.equals("0"))
				{
					//"PASS"をセット
					strUnitPass = STR_LIST_FAIL;
				}
				else
				{
					//"FAIL"をセット
					strUnitPass = STR_LIST_PASS;
				}
				String strTemp = "";
				try {
					//DB種別情報が "0" の時　MS SQLServer
					//DB種別情報が "1" の時　Oracle
					if ( lsDBEnv.equals(Environment.DB_SQLSERVER) ) {
						strTemp = /*CommonFunction.encodeSJIS(*/objRecord[i].getUnitName()/*)*/;
					}
					else {
						strTemp = objRecord[i].getUnitName();
					}
				}
				catch( Exception e ) {
					e.printStackTrace();
					request.setAttribute("message", MSG_ENV_ERR);
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", "");
					return mapping.findForward("error");
				}
				
				arrayRecord[i][UNIT_NAME] = strTemp;
				arrayRecord[i][UNIT_ACCESS_COUNT] = objRecord[i].getUnitAccessCount();
				arrayRecord[i][UNIT_PROGRESS] = objRecord[i].getUnitProgress();
				arrayRecord[i][UNIT_TEST_COUNT] = objRecord[i].getUnitTestCount();
				arrayRecord[i][UNIT_AVERAGE_SCORE] = objRecord[i].getUnitAverageScore();
				arrayRecord[i][UNIT_HIGHEST_SCORE] = objRecord[i].getUnitHighestScore();
				arrayRecord[i][UNIT_PASS] = strUnitPass;
			}

			//---------------------------------------------------------------------
			//比較用の変数にユーザIDを格納
			//---------------------------------------------------------------------
			strStudentID = /*CommonFunction.encodeSJIS(*/objRecord[i].getStudentID()/*)*/;
		}

		//---------------------------------------------------------------------
		//学習者数をカウントする
		//---------------------------------------------------------------------
		intUserCount += 1;

		//---------------------------------------------------------------------
		//各項目の合計（１：String型の数値をIntegerへセット,２：Integer型からint型へ変換）
		//配列のINDEXをi-1としているのは、Loopを出た後だとiの値が、objRecord.length + 1と
		//なり、インデックスの範囲エラーとなってしまうため、これを回避するための意味。
		//---------------------------------------------------------------------
		//アクセス回数の合計
		intWk = new Integer(/*CommonFunction.encodeSJIS(*/objRecord[objRecord.length-1].getAccessCount()/*)*/);
		intTotalAccessCount += intWk.intValue();
		//平均進捗率の合計
		intWk = new Integer(/*CommonFunction.encodeSJIS(*/objRecord[objRecord.length-1].getProgressRate()/*)*/);
		intTotalProgressRate += intWk.intValue();
		//テスト回数の合計
		intWk = new Integer(/*CommonFunction.encodeSJIS(*/objRecord[objRecord.length-1].getTestCount()/*)*/);
		intTotalTestCount += intWk.intValue();
		//平均点の合計
		intWk = new Integer(/*CommonFunction.encodeSJIS(*/objRecord[objRecord.length-1].getAverageScore()/*)*/);
		intTotalAverageScore += intWk.intValue();
		//最高点の合計
		intWk = new Integer(/*CommonFunction.encodeSJIS(*/objRecord[objRecord.length-1].getHighestScore()/*)*/);
		intTotalHighestScore += intWk.intValue();


		//-------------------------------------------------------------
		//各タイトル項目の平均値の算出
		//-------------------------------------------------------------
		//全学習者のアクセス回数の平均
		intAllUserAccessCountAve 	= intTotalAccessCount / intUserCount;
		//全学習者の平均進捗率の平均
		intAllUserProgressRateAve 	= intTotalProgressRate / intUserCount;
		//全学習者のテスト回数の平均
		intAllUserTestCountAve 		= intTotalTestCount / intUserCount;
		//全学習者の平均点の平均
		intAllUserAverageScoreAve 	= intTotalAverageScore / intUserCount;
		//全学習者の最高点の平均
		intAllUserHighestScoreAve 	= intTotalHighestScore / intUserCount;

		return mapping.findForward("success");
	}
}
/*
// キャッシュ無効処理
response.setHeader("cache-control", "no-cache");

//-------------------------------------------------------------------------
//変数定義
//-------------------------------------------------------------------------
//ユーザID(比較用)
String strStudentID = "";
//Unitのタイトルを表示・非表示の判定フラグ(true	:表示した,false	:表示していない)
boolean blDispUnitTitleFlg = false;

//平均点算出用
int intUserCount = 0;					//学習者数の合計
Integer intWk;							//平均算出用Work
int intTotalAccessCount 	= 0;		//アクセス回数の合計
int intTotalProgressRate 	= 0;		//平均進捗率の合計
int intTotalTestCount 		= 0;		//テスト回数の合計
int intTotalAverageScore 	= 0;		//平均点の合計
int intTotalHighestScore 	= 0;		//最高点の合計

int intAllUserAccessCountAve 	= 0;	//全学習者のアクセス回数の平均
int intAllUserProgressRateAve 	= 0;	//全学習者の平均進捗率の平均
int intAllUserTestCountAve 		= 0;	//全学習者のテスト回数の平均
int intAllUserAverageScoreAve 	= 0;	//全学習者の平均点の平均
int intAllUserHighestScoreAve 	= 0;	//全学習者の最高点の平均

String strComplete 	= "";		//学習終了表示用
String strPass 		= "";		//テスト合否表示用
String strUnitPass 	= "";		//ユニット合否表示用

//-------------------------------------------------------------------------
// 学習者一覧の取得()
// objRecordの各項目のデータは、全てCommonFunction.encodeSJIS()でエンコードを行う。
//-------------------------------------------------------------------------
CourseUnitLogRecord[] objRecord = (CourseUnitLogRecord[])request.getAttribute("RECORD_LIST");
if (objRecord.length == 0)
{
	// ***************************
	// リクエストに変数をセットすること
	return mapping.findForward("success");
}


Object[][] arrayRecord = new Object[objRecord.length][8];
final int RECORD_OUTPUT_TITLE_NO_UNIT = 0;
final int RECORD_OUTPUT_TITLE_UNIT = 1;
final int RECORD_OUTPUT_ENDTAG = 2;
final int RECORD_USER_ID = 3;
final int RECORD_ACCESS_COUNT = 4;
final int RECORD_PROGRESS_RATE = 5;
final int RECORD_TEST_COUNT = 6;

Vector vecUser = new Vector();

//-------------------------------------------------------------------------
//全学習者の一覧を表示する
//-------------------------------------------------------------------------
//環境ファイルからDB種別情報取得のためEnvironmentクラスを生成する
Environment objEnv = new Environment();
SmartForceLoEnv objSFEnv = new SmartForceLoEnv();
String lsDBEnv = objSFEnv.getDBType();
if(lsDBEnv == null || lsDBEnv.trim().equals("")) {
	lsDBEnv = objEnv.getDBType();
}
int i = 0;
for(i = 0; i < objRecord.length; i++) 
{
	//---------------------------------------------------------------------
	//各タイトル項目の表示
	//---------------------------------------------------------------------
	// ユーザIDが変わったら次の行（学習者）のデータを表示する
	if( ! strStudentID.equalsIgnoreCase(CommonFunction.encodeSJIS(objRecord[i].getStudentID())) )
	{
		Object[] arrayUserInfo = new Object[3];
		// ユーザーID
		arrayUserInfo[USER_ID] = objRecord[i].getUserID();
		// アクセス回数
		arrayUserInfo[USER_ACCESS_COUNT] = objRecord[i].getAccessCount();
		// 進捗率
		arrayUserInfo[USER_PROGRESS_RATE] = objRecord[i].getProgressRate();
		// 学習終了
		if (CommonFunction.encodeSJIS(objRecord[i].getCompleteFlag()).equals("0"))
		{
			//"未"をセット
			strComplete = STR_LIST_INCOMPLETE;
		}
		else
		{
			//"COMPLETE"をセット
			strComplete = STR_LIST_COMPLETE;
		}
		arrayUserInfo[USER_COMPLETE] = strComplete;
		//テスト合否
		if (CommonFunction.encodeSJIS(objRecord[i].getPassFlag()).equals("0"))
		{
			//"PASS"をセット
			strPass = STR_LIST_FAIL;
		}
		else
		{
			//"FAIL"をセット
			strPass = STR_LIST_PASS;
		}
		arrayUserInfo[USER_PASS] = strPass;
		// 平均点
		arrayUserInfo[USER_AVERAGE_SCORE] = objRecord[i].getAverageScore();
		// 最高点
		arrayUserInfo[USER_HIGHEST_SCORE] = objRecord[i].getHighestScore();
		// ユニット数
		arrayUserInfo[USER_UNIT_COUNT] = objRecord[i].getUnitCount();
		
		vecUser.add(arrayUserInfo);
		
		
		arrayRecord[i][RECORD_CHANGED_USER_ID] = new Boolean(true);
		arrayRecord[i][RECORD_UNIT_COUNT] = objRecord[i].getUnitCount();
		
		//-------------------------------------------------------------
		//ユニット有無チェック
		//-------------------------------------------------------------
		//ユニットカウントが0の場合は、ブランク文字列を表示する
		if (CommonFunction.encodeSJIS(objRecord[i].getUnitCount()).equals("0"))
		{
			arrayRecord[i][RECORD_OUTPUT_TITLE_NO_UNIT] = new Boolean(true);
			
			//初回(1レコード目)は処理しない
			if (!strStudentID.equals(""))
			{
				arrayRecord[i][RECORD_NOT_FIRST_RECORD] = new Boolean(true);
				
				//---------------------------------------------------------------------
				//ユニットタイトルが表示された場合のみ、終了タグを表示する
				//---------------------------------------------------------------------
				if (blDispUnitTitleFlg == true)
				{
					arrayRecord[i][RECORD_OUTPUT_ENDTAG] = new Boolean(true);
					
					//out.println("</table>");	//ユニット項目表示テーブルの終了タグ
					//out.println("</td>");		//ユニット項目列の終了タグ
					//out.println("</tr>");		//学習者行の終了タグ
					
				}
				else
				{
					arrayRecord[i][RECORD_OUTPUT_ENDTAG] = new Boolean(false);
				}
				//-------------------------------------------------------------
				//学習者が変わるため、ユニットタイトル表示フラグを初期化(false)
				//-------------------------------------------------------------
				blDispUnitTitleFlg = false;	
				
				//-------------------------------------------------------------
				//学習者数をカウントする
				//-------------------------------------------------------------
				intUserCount += 1;
			}
			
			arrayRecord[i][RECORD_USER_ID] = objRecord[i].getUserID();
			arrayRecord[i][RECORD_ACCESS_COUNT] = objRecord[i].getAccessCount();
			arrayRecord[i][RECORD_PROGRESS_RATE] = objRecord[i].getProgressRate();
			arrayRecord[i][RECORD_TEST_COUNT] = objRecord[i].getTestCount();
		}
		else
		{
			arrayRecord[i][RECORD_OUTPUT_TITLE_UNIT] = new Boolean(true);
			
			//初回(1レコード目)は処理しない
			if (!strStudentID.equals(""))
			{
				arrayRecord[i][RECORD_NOT_FIRST_RECORD] = new Boolean(true);
				
				//---------------------------------------------------------------------
				//ユニットタイトルが表示された場合のみ、終了タグを表示する
				//---------------------------------------------------------------------
				if (blDispUnitTitleFlg == true)
				{
					arrayRecord[i][RECORD_OUTPUT_ENDTAG] = new Boolean(true);
					
					//out.println("</table>");	//ユニット項目表示テーブルの終了タグ
					//out.println("</td>");		//ユニット項目列の終了タグ
					//out.println("</tr>");		//学習者行の終了タグ
					
				}
				//-------------------------------------------------------------
				//学習者が変わるため、ユニットタイトル表示フラグを初期化(false)
				//-------------------------------------------------------------
				blDispUnitTitleFlg = false;	
				
				//-------------------------------------------------------------
				//学習者数をカウントする
				//-------------------------------------------------------------
				intUserCount += 1;

				//-------------------------------------------------------------
				//各項目の合計（１：String型の数値をIntegerへセット,２：Integer型からint型へ変換）
				//-------------------------------------------------------------
				//アクセス回数の合計
				intWk = new Integer(CommonFunction.encodeSJIS(objRecord[i].getAccessCount()));
				intTotalAccessCount += intWk.intValue();

				//平均進捗率の合計
				intWk = new Integer(CommonFunction.encodeSJIS(objRecord[i].getProgressRate()));
				intTotalProgressRate += intWk.intValue();
				//テスト回数の合計
				intWk = new Integer(CommonFunction.encodeSJIS(objRecord[i].getTestCount()));
				intTotalTestCount += intWk.intValue();
				//平均点の合計
				intWk = new Integer(CommonFunction.encodeSJIS(objRecord[i].getAverageScore()));
				intTotalAverageScore += intWk.intValue();
				//最高点の合計
				intWk = new Integer(CommonFunction.encodeSJIS(objRecord[i].getHighestScore()));
				intTotalHighestScore += intWk.intValue();
			}

			//-------------------------------------------------------------
			//学習終了、テスト合否、のフラグに対応した文字列へ変換
			//-------------------------------------------------------------
			//学習終了
			if (CommonFunction.encodeSJIS(objRecord[i].getCompleteFlag()).equals("0"))
			{
				//"未"をセット
				strComplete = STR_LIST_INCOMPLETE;
			}
			else
			{
				//"COMPLETE"をセット
				strComplete = STR_LIST_COMPLETE;
			}

			//テスト合否
			if (CommonFunction.encodeSJIS(objRecord[i].getPassFlag()).equals("0"))
			{
				//"PASS"をセット
				strPass = STR_LIST_FAIL;
			}
			else
			{
				//"FAIL"をセット
				strPass = STR_LIST_PASS;
			}
			
			arrayRecord[i][RECORD_USER_ID] = objRecord[i].getUserID();
			arrayRecord[i][RECORD_COMPLETE] = strComplete;
			arrayRecord[i][RECORD_PASS] = strPass;
			arrayRecord[i][RECORD_ACCESS_COUNT] = objRecord[i].getAccessCount();
			arrayRecord[i][RECORD_PROGRESS_RATE] = objRecord[i].getProgressRate();
			arrayRecord[i][RECORD_TEST_COUNT] = objRecord[i].getTestCount();
			arrayRecord[i][RECORD_AVERAGE_SCORE] = objRecord[i].getAverageScore();
			arrayRecord[i][RECORD_HIGHEST_SCORE] = objRecord[i].getHighestScore();
		}
	}
	//-------------------------------------------------------------
	//ユニット有無チェック
	//-------------------------------------------------------------
	//ユニットカウントが0の場合は、ブランク文字列を表示する
	if (CommonFunction.encodeSJIS(objRecord[i].getUnitCount()).equals("0"))
	{
		arrayRecord[i][RECORD_UNIT_COUNT] = objRecord[i].getUnitCount();
	}
	else
	{
		//-------------------------------------------------------------
		//各ユニット項目の表示
		//-------------------------------------------------------------
		//学習者が同じ間、かつ、ユニットタイトルをまだ表示していない場合のみ処理する
		if( ( ! strStudentID.equalsIgnoreCase(CommonFunction.encodeSJIS(objRecord[i].getStudentID()))) && (blDispUnitTitleFlg == false))
		{
			arrayRecord[i][RECORD_OUTPUT_UNIT_TITLE] = new Boolean(true);
			
			//-------------------------------------------------------------
			//ユニットタイトルを表示したため、trueフラグを立てる。
			//-------------------------------------------------------------
			blDispUnitTitleFlg = true;
		}

		//-------------------------------------------------------------
		//ユニット合否のフラグに対応した文字列へ変換
		//-------------------------------------------------------------
		//ユニット合否
		if (CommonFunction.encodeSJIS(objRecord[i].getUnitPassFlag()).equals("0"))
		{
			//"PASS"をセット
			strUnitPass = STR_LIST_FAIL;
		}
		else
		{
			//"FAIL"をセット
			strUnitPass = STR_LIST_PASS;
		}
		String strTemp = "";
		try {
			//DB種別情報が "0" の時　MS SQLServer
			//DB種別情報が "1" の時　Oracle
			if ( lsDBEnv.equals(objEnv.DB_SQLSERVER) ) {
				strTemp = CommonFunction.encodeSJIS(objRecord[i].getUnitName());
			}
			else {
				strTemp = objRecord[i].getUnitName();
			}
		}
		catch( Exception e ) {
			e.printStackTrace();
			response.sendRedirect(getParamErrURL(MSG_ENV_ERR, null, true));
			return;
		}
		
		arrayRecord[i][RECORD_UNIT_NAME] = strTemp;
		arrayRecord[i][RECORD_UNIT_ACCESS_COUNT] = objRecord[i].getUnitAccessCount();
		arrayRecord[i][RECORD_UNIT_PROGRESS] = objRecord[i].getUnitProgress();
		arrayRecord[i][RECORD_UNIT_TEST_COUNT] = objRecord[i].getUnitTestCount();
		arrayRecord[i][RECORD_UNIT_AVERAGE_SCORE] = objRecord[i].getUnitAverageScore();
		arrayRecord[i][RECORD_UNIT_HIGHEST_SCORE] = objRecord[i].getUnitHighestScore();
		arrayRecord[i][RECORD_UNIT_PASS] = strUnitPass;
	}

	//---------------------------------------------------------------------
	//比較用の変数にユーザIDを格納
	//---------------------------------------------------------------------
	strStudentID = CommonFunction.encodeSJIS(objRecord[i].getStudentID());
}

//-------------------------------------------------------------------------
//Loop後処理
//-------------------------------------------------------------------------
//ユニットタイトルが表示された場合のみ、終了タグを表示する
boolean isOutputEndTag = false;
if (blDispUnitTitleFlg == true)
{
	isOutputEndTag = true;
	out.println("</table>");	//ユニット項目表示テーブルの終了タグ
	out.println("</td>");		//ユニット項目列の終了タグ
	out.println("</tr>");		//学習者行の終了タグ
}

//---------------------------------------------------------------------
//学習者数をカウントする
//---------------------------------------------------------------------
intUserCount += 1;

//---------------------------------------------------------------------
//各項目の合計（１：String型の数値をIntegerへセット,２：Integer型からint型へ変換）
//配列のINDEXをi-1としているのは、Loopを出た後だとiの値が、objRecord.length + 1と
//なり、インデックスの範囲エラーとなってしまうため、これを回避するための意味。
//---------------------------------------------------------------------
//アクセス回数の合計
intWk = new Integer(CommonFunction.encodeSJIS(objRecord[objRecord.length-1].getAccessCount()));
intTotalAccessCount += intWk.intValue();
//平均進捗率の合計
intWk = new Integer(CommonFunction.encodeSJIS(objRecord[objRecord.length-1].getProgressRate()));
intTotalProgressRate += intWk.intValue();
//テスト回数の合計
intWk = new Integer(CommonFunction.encodeSJIS(objRecord[objRecord.length-1].getTestCount()));
intTotalTestCount += intWk.intValue();
//平均点の合計
intWk = new Integer(CommonFunction.encodeSJIS(objRecord[objRecord.length-1].getAverageScore()));
intTotalAverageScore += intWk.intValue();
//最高点の合計
intWk = new Integer(CommonFunction.encodeSJIS(objRecord[objRecord.length-1].getHighestScore()));
intTotalHighestScore += intWk.intValue();


//-------------------------------------------------------------
//各タイトル項目の平均値の算出
//-------------------------------------------------------------
//全学習者のアクセス回数の平均
intAllUserAccessCountAve 	= intTotalAccessCount / intUserCount;
//全学習者の平均進捗率の平均
intAllUserProgressRateAve 	= intTotalProgressRate / intUserCount;
//全学習者のテスト回数の平均
intAllUserTestCountAve 		= intTotalTestCount / intUserCount;
//全学習者の平均点の平均
intAllUserAverageScoreAve 	= intTotalAverageScore / intUserCount;
//全学習者の最高点の平均
intAllUserHighestScoreAve 	= intTotalHighestScore / intUserCount;
*/
