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

//
// グループ比較ログ集計結果フレーム出力用・データクラス
// 
//
//	変更履歴
//	2004.01.08 新規作成		A.Shimoma 
//
package jp.co.ntt.lms.xms.logsumup;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import jp.co.ntt.lms.xms.framework.XmsException;
import jp.co.ntt.lms.xms.framework.XmsSystemException;
import jp.co.ntt.lms.xms.framework.base.LogResult;

/**
 * ログ集計グループ比較、結果フレーム出力用・集計結果格納クラス。<br>
 *
 * @author shimoma
 */
public class LoLogGroupCompareResult extends LogResult {

	/** 
	 * 学習開始日付。<br>
	 */
	private List startDateList;
	/** 
	 * 最終アクセス日付。<br>
	 */
	private List endDateList;
	/**
	 * 総アクセス回数。<br>
	 */
	private List accessCountList;
	/**
	 * 累積滞在時間。<br>
	 */
	private List residanceTimeList;
	/**
	 * 完了者数。<br>
	 */
	private List userCompleteList;
	/**
	 * 合格者数。<br>
	 */
	private List userPassList;
	/**
	 * ユーザ数。<br>
	 */
	private List userCountList;
	/**
	 * 完了率。<br>
	 */
	private List compPercentList;
	/**
	 * 合格率。<br>
	 */
	private List passPercentList;
	/**
	 * グループID。<br>
	 */
	private List groupIdList;
	/**
	 * グループ名。<br>
	 */
	private List groupNameList;
	/**
	 * グループ外部ID。<br>
	 */
	private List groupForeignIdList;
	/**
	 * グループパス。<br>
	 */
	private List groupPathList;
	/**
	 * グループ外部IDをキー順序を値としたハッシュ。<br>
	 */
	private HashMap hmGroupForeignId;
	/**
	 *  groupForeignIdListをソートしたリスト。<br>
	 */
	private List sortGroupForeignIdList;

	/**
	 * コンストラクタ。<br>
	 * 内部リストならびにカーソル位置の初期化を実施する。
	 */
	public LoLogGroupCompareResult() {
		initialize();
	}

	/**
	 * 集計結果オブジェクトの数
	 * @return int オブジェクト数
	 * @see LogResult
	 */
	public int size() {
		return groupIdList.size();
	}

	/**
	 * 検索結果をすべて削除する。<br>
	 * 内部リストならびにカーソル位置の初期化を実施する。
	 */
	void clearLog() {
		initialize();
	}

	/**
	 * 内部リストならびにカーソル位置の初期化を実施する。<br>
	 */
	protected void initialize() {

		// カーソル位置の初期化。
		super.initialize();

		startDateList = new ArrayList();
		endDateList = new ArrayList();
		accessCountList = new ArrayList();
		residanceTimeList = new ArrayList();
		userCompleteList = new ArrayList();
		userPassList = new ArrayList();
		userCountList = new ArrayList();
		compPercentList = new ArrayList();
		passPercentList = new ArrayList();
		groupIdList = new ArrayList();
		groupNameList = new ArrayList();
		groupForeignIdList = new ArrayList();
		groupPathList = new ArrayList();
		sortGroupForeignIdList = new ArrayList();
	}

	/**
	 * 検索結果を１行追加する。<br>
	 * 内部に保持しているリストの最後にそれぞれ追加する。<br>
	 * 完了・合格パーセンテージの計算も行います。
	 * 
	 * @param logList ログデータ	[0]:学習終了日時,[1]:最終アクセス日時,[2]:総アクセス数
	 * 								[3]:累積滞在時間,[4]:完了者数,[5]:合格者数。
	 * @param intUserCount ユーザ数
	 * @param strGroupId グループID
	 * @param strGroups  [0]:グループ名,[1]グループ外部ID
	 * @param strGroupPath グループパス
	 */

	protected void addLog(
		Object[] logList,
		int intUserCount,
		String strGroupId,
		String[] strGroups,
		String strGroupPath)
		throws XmsException {

		// 完了者(%)
		String strCompPercent;
		// 合格者(%)
		String strPassPercent;

		LoLogCommon_inc cominc = new LoLogCommon_inc();

		try {

			if (intUserCount != 0) {

				// 完了者(%)を設定
				// 少数第一位を四捨五入したパーセンテージ
				strCompPercent =
					cominc.getPercent(
						(String) logList[4],
						Integer.toString(intUserCount));

				// 合格者(%)を設定
				// 少数第一位を四捨五入したパーセンテージ
				strPassPercent =
					cominc.getPercent(
						(String) logList[5],
						Integer.toString(intUserCount));

			} else {

				// ユーザが存在しない場合
				strCompPercent = LoLogConstant.USER_COUONT_ZERO;
				strPassPercent = LoLogConstant.USER_COUONT_ZERO;
			}

			// 学習開始日時を設定する。
			startDateList.add(logList[0]);
			// 最終アクセス日時を設定する。
			endDateList.add(logList[1]);
			// 総アクセス数を設定する。
			accessCountList.add(logList[2]);

			// 累積滞在時間を設定する。
			residanceTimeList.add(logList[3]);

			// 完了者数を設定する。
			userCompleteList.add(logList[4]);
			// 合格者数を設定する。
			userPassList.add(logList[5]);
			// ユーザ数を設定する。
			userCountList.add(Integer.toString(intUserCount));
			// 完了率を設定する。
			compPercentList.add(strCompPercent);
			// 合格率を設定する。
			passPercentList.add(strPassPercent);

			// グループIDを設定する。
			groupIdList.add(strGroupId);
			// グループ名を設定する。
			groupNameList.add(strGroups[0]);
			// 要素０番目をグループＩＤ、要素１番目をグループ外部ＩＤとするリストを生成
			List tempGroupAndForeignIDList = new ArrayList();
			tempGroupAndForeignIDList.add(strGroupId);
			tempGroupAndForeignIDList.add(strGroups[1]);

			// グループIDと外部IDのリストを設定する。
			groupForeignIdList.add(tempGroupAndForeignIDList);

			// グループパスを設定する。
			groupPathList.add(strGroupPath);


		} catch (XmsException e) {
			throw e;
		} catch (Exception e) {
			throw new XmsSystemException(e);
		}

	}

	//**********************
	//*  アクセサメソッド  *
	//**********************

	/**
	 * ソートされたグループ外部IDリストよりカーソルが指し示す現在行のグループID取得する。<br>
	 * @return 現在行のグループID。
	 * @throws ArrayIndexOutOfBoundsException カーソルの位置が内部リストの範囲外の場合。
	 */
	public String getSortGroupIdList() throws ArrayIndexOutOfBoundsException {

		String groupId = null;
		List groupIdAndForeignIdList = (List)sortGroupForeignIdList.get(getCursorPos());
		groupId = (String)groupIdAndForeignIdList.get(0);
		return groupId;
	}

	/**
	 * ソートされたグループ外部IDリストよりカーソルが指し示す現在行のグループ外部ID取得する。<br>
	 * @return 現在行のグループ外部ID。
	 * @throws ArrayIndexOutOfBoundsException カーソルの位置が内部リストの範囲外の場合。
	 */
	public String getSortGroupForeignIdList() throws ArrayIndexOutOfBoundsException {

		String groupForeignId = null;
		List groupIdAndForeignIdList = (List)sortGroupForeignIdList.get(getCursorPos());
		groupForeignId = (String)groupIdAndForeignIdList.get(1);
		return groupForeignId;
	}

	/**
	 * ソートしたグループ外部IDのハッシュを設定する。<br>
	 * @param  ソートしたグループ外部IDのハッシュ。
	 */
	public void setSortGroupForeignIdList(List sortGroupForeignIdList) {
		this.sortGroupForeignIdList = sortGroupForeignIdList;
	}

	/**
	 * グループ外部IDをキー、順序を値としたハッシュを取得する。<br>
	 * @return  グループ外部IDをキー、順序を値としたハッシュ。
	 */
	public HashMap getHmGroupForeignId() {
		return hmGroupForeignId;
	}

	/**
	 * 総アクセス回数を取得する。
	 * @return accessCountList
	 */
	public List getAccessCountList() {
		return accessCountList;
	}

	/**
	 * 完了率を取得する。
	 * @return compPercentList
	 */
	public List getCompPercentList() {
		return compPercentList;
	}

	/**
	 * 最終アクセス日付を取得する。
	 * @return endDateList
	 */
	public List getEndDateList() {
		return endDateList;
	}

	/**
	 * グループ外部IDを取得する。
	 * @return groupForeignIdList
	 */
	public List getGroupForeignIdList() {
		return groupForeignIdList;
	}

	/**
	 * グループIDを取得する。
	 * @return groupIdList
	 */
	public List getGroupIdList() {
		return groupIdList;
	}

	/**
	 * グループ名を取得する。
	 * @return groupNameList
	 */
	public List getGroupNameList() {
		return groupNameList;
	}

	/**
	 * グループパスを取得する。
	 * @return groupPathList
	 */
	public List getGroupPathList() {
		return groupPathList;
	}

	/**
	 * 合格率を取得する。
	 * @return passPercentList
	 */
	public List getPassPercentList() {
		return passPercentList;
	}

	/**
	 * 累積滞在時間を取得する。
	 * @return residanceTimeList
	 */
	public List getResidanceTimeList() {
		return residanceTimeList;
	}

	/**
	 * 学習開始日付を取得する。
	 * @return startDateList
	 */
	public List getStartDateList() {
		return startDateList;
	}

	/**
	 * 完了者数を取得する。
	 * @return userCompleteList
	 */
	public List getUserCompleteList() {
		return userCompleteList;
	}

	/**
	 * ユーザ数を取得する。
	 * @return userCountList
	 */
	public List getUserCountList() {
		return userCountList;
	}

	/**
	 * 合格者数を取得する。
	 * @return userPassList
	 */
	public List getUserPassList() {
		return userPassList;
	}

	/**
	 * 総アクセス回数を設定する。
	 * @param accessCountList
	 */
	public void setAccessCountList(List accessCountList) {
		this.accessCountList = accessCountList;
	}

	/**
	 * 完了率を設定する。
	 * @param compPercentList
	 */
	public void setCompPercentList(List compPercentList) {
		this.compPercentList = compPercentList;
	}

	/**
	 * 最終アクセス日付を設定する。
	 * @param endDateList
	 */
	public void setEndDateList(List endDateList) {
		this.endDateList = endDateList;
	}

	/**
	 * グループ外部IDを設定する。
	 * @param groupForeignIdList
	 */
	public void setGroupForeignIdList(List groupForeignIdList) {
		this.groupForeignIdList = groupForeignIdList;
	}

	/**
	 * グループIDを設定する。
	 * @param groupIdList
	 */
	public void setGroupIdList(List groupIdList) {
		this.groupIdList = groupIdList;
	}

	/**
	 * グループ名を設定する。
	 * @param groupNameList
	 */
	public void setGroupNameList(List groupNameList) {
		this.groupNameList = groupNameList;
	}

	/**
	 * グループパスを設定する。
	 * @param groupPathList The groupPathList to set
	 */
	public void setGroupPathList(List groupPathList) {
		this.groupPathList = groupPathList;
	}

	/**
	 * グループ外部IDをキー、順序を値としたハッシュを設定する。
	 * @param hmGroupForeignId
	 */
	public void setHmGroupForeignId(HashMap hmGroupForeignId) {
		this.hmGroupForeignId = hmGroupForeignId;
	}

	/**
	 * 合格率を設定する。
	 * @param passPercentList
	 */
	public void setPassPercentList(List passPercentList) {
		this.passPercentList = passPercentList;
	}

	/**
	 * 累積滞在時間を設定する。
	 * @param residanceTimeList
	 */
	public void setResidanceTimeList(List residanceTimeList) {
		this.residanceTimeList = residanceTimeList;
	}

	/**
	 * 学習開始日付を設定する。
	 * @param startDateList
	 */
	public void setStartDateList(List startDateList) {
		this.startDateList = startDateList;
	}

	/**
	 * 完了者数を設定する。
	 * @param userCompleteList
	 */
	public void setUserCompleteList(List userCompleteList) {
		this.userCompleteList = userCompleteList;
	}

	/**
	 * ユーザ数を設定する。
	 * @param userCountList
	 */
	public void setUserCountList(List userCountList) {
		this.userCountList = userCountList;
	}

	/**
	 * 合格者数を設定する。
	 * @param userPassList
	 */
	public void setUserPassList(List userPassList) {
		this.userPassList = userPassList;
	}

}
