/*
このファイルの中身は、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.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

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

/**
 * ＬＯ別合格状況一覧結果フレーム用データ・クラス。<br>
 * 
 * @author shimoma
 */
public class LoLogMaterialPassResult extends LogResult {

	/** ID(グループID) */
	private String groupId;

	/** 名称(グループ名) */
	private String groupName;

	/** 外部ID(グループまたはユーザ) */
	private String foreignId;

	/** LoID */
	private String LoID;

	/** LO名 */
	private String LoName;

	/** LOタイプ */
	private String LoType;

	/** Lo外部ID */
	private String LoForeignId;

	/** 配下フラグ */
	private String subordinateflg;

	/** 学習者(ユーザ）数 */
	private String userCount;

	/** リアルLOID */
	private String realLoId;

	/** 集計対象が配下か直下かのメッセージ */
	private String condidateTotalMassage;

	/** コンテナかどうか **/
	private boolean container;

	/** 教材かどうか **/
	private boolean materiall;

	/** 未学習数の合計 */
	private int sumUnlearn;

	/** 学習開始数の合計 */
	private int sumStartStudy;

	/** 完了数の合計 */
	private int sumComplete;

	/** 合格数の合計 */
	private int sumPass;

	/** Loタイトル */
	private List LoTitleList;

	/** 未学習者数 */
	protected List unLearnList;

	/** 学習開始数 */
	protected List startStudyList;

	/** 完了数 */
	protected List completeList;

	/** 合格数 */
	protected List passList;

	/** LO外部ID */
	private List LoForeignIdList;

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

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

	}

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

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

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

		LoTitleList = new ArrayList();
		unLearnList = new ArrayList();
		startStudyList = new ArrayList();
		completeList = new ArrayList();
		passList = new ArrayList();
		LoForeignIdList = new ArrayList();
	}

	/**
	 * プロパティに設定されている値の一覧を返却します<br>
	 * 
	 * このオブジェクトのgetterメソッドを実行しプロパティの一覧を返します
	 *
	 * @return プロパティに設定されている値の一覧を返却します
	 */
	public String toString() {
		StringBuffer buffer = new StringBuffer();

		try {
			Method methods[] = this.getClass().getDeclaredMethods();
			for (int i = 0; i < methods.length; i++) {
				String methodName = methods[i].getName();
				if (methodName.startsWith("get")
					|| methodName.startsWith("is")) {
					Object o =
						(Object) this.getClass().getMethod(
							methodName,
							null).invoke(
							this,
							null);
					buffer.append("[");
					buffer.append(methodName);
					buffer.append(":");
					if (o == null) {
						buffer.append("null");
					} else {
						buffer.append(o.toString());
					}
					buffer.append("]");
					buffer.append("\r\n");

				}
			}

		} catch (Exception e) {
			//デバック用なのでなにもしない
		}
		return buffer.toString();
	}

	/**
	 * 検索結果を１行追加する。<br>
	 * 内部に保持しているリストの最後にそれぞれ追加する。<br>
	 * 
	 * @param strLoTitle    ＬＯタイトル
	 * @param intUnLearn    未学習数
	 * @param intStartStudy 学習開始数
	 * @param intComplete   完了数
	 * @param intPass       合格数
	 * @param foreignId     外部LOID
	 */
	protected void addLog(
		String strLoTitle,
		int intUnLearn,
		int intStartStudy,
		int intComplete,
		int intPass,
		String LoForeignId)
		throws XmsException {

		// LOタイトルを設定する。
		LoTitleList.add(strLoTitle);
		// 未学習数を設定する。
		unLearnList.add(Integer.toString(intUnLearn));
		// 学習開始数を設定する。
		startStudyList.add(Integer.toString(intStartStudy));
		// 完了数を設定する。
		completeList.add(Integer.toString(intComplete));
		// 合格数を設定する。
		passList.add(Integer.toString(intPass));
		// 外部LOIDを設定する。
		LoForeignIdList.add(LoForeignId);

	}

	/**
	 * 合格状況の合計を設定します。<br>
	 * 
	 * @param intSumUnlearn    未学習数の合計
	 * @param intSumStartStudy 学習開始数の合計
	 * @param intSumComplete   完了数の合計
	 * @param intSumPass       合格数の合計
	 */
	protected void setSum(
		int intSumUnlearn,
		int intSumStartStudy,
		int intSumComplete,
		int intSumPass)
		throws XmsException {

		this.sumUnlearn = intSumUnlearn;
		this.sumStartStudy = intSumStartStudy;
		this.sumComplete = intSumComplete;
		this.sumPass = intSumPass;
	}

	/**
	 * カーソルが指し示す現在行のLOタイトルを取得する。<br>
	 * @return 現在行のLoタイトル。
	 * @throws ArrayIndexOutOfBoundsException カーソルの位置が内部リストの範囲外の場合。
	 */
	public String getLoTitle() throws ArrayIndexOutOfBoundsException {

		String LoTitle = null;
		LoTitle = (String) LoTitleList.get(getCursorPos());
		return LoTitle;
	}

	/**
	 * カーソルが指し示す現在行の未学習数を取得する。<br>
	 * @return 現在行の未学習数。
	 * @throws ArrayIndexOutOfBoundsException カーソルの位置が内部リストの範囲外の場合。
	 */
	public String getUnLearn() throws ArrayIndexOutOfBoundsException {

		String unLearn = null;
		unLearn = (String) unLearnList.get(getCursorPos());
		return unLearn;
	}

	/**
	 * カーソルが指し示す現在行の学習開始数を取得する。<br>
	 * @return 現在行の学習開始数。
	 * @throws ArrayIndexOutOfBoundsException カーソルの位置が内部リストの範囲外の場合。
	 */
	public String getStartStudy() throws ArrayIndexOutOfBoundsException {

		String startStudy = null;
		startStudy = (String) startStudyList.get(getCursorPos());
		return startStudy;
	}

	/**
	 * カーソルが指し示す現在行の完了数を取得する。<br>
	 * @return 現在行の完了数。
	 * @throws ArrayIndexOutOfBoundsException カーソルの位置が内部リストの範囲外の場合。
	 */
	public String getComplete() throws ArrayIndexOutOfBoundsException {

		String complete = null;
		complete = (String) completeList.get(getCursorPos());
		return complete;
	}

	/**
	 * カーソルが指し示す現在行の合格数を取得する。<br>
	 * @return 現在行の合格数。
	 * @throws ArrayIndexOutOfBoundsException カーソルの位置が内部リストの範囲外の場合。
	 */
	public String getPass() throws ArrayIndexOutOfBoundsException {

		String pass = null;
		pass = (String) passList.get(getCursorPos());
		return pass;
	}

	/**
	 * カーソルが指し示す現在行の合格数を取得する。<br>
	 * @return 現在行の合格数。
	 * @throws ArrayIndexOutOfBoundsException カーソルの位置が内部リストの範囲外の場合。
	 */
	public String getLoForeignIds() throws ArrayIndexOutOfBoundsException {

		String foreignIds = null;
		foreignIds = (String) LoForeignIdList.get(getCursorPos());
		return foreignIds;
	}

	/**
	 * 集計対象が配下か直下かのメッセージを取得する。
	 * @return condidateTotalMassage
	 */
	public String getCondidateTotalMassage() {
		return condidateTotalMassage;
	}

	/**
	 * コンテナかどうかを取得する。
	 * @return container
	 */
	public boolean isContainer() {
		return container;
	}

	/**
	 * グループ外部IDを取得する。
	 * @return foreignId
	 */
	public String getForeignId() {
		return foreignId;
	}

	/**
	 * グループIDを取得する。
	 * @return groupId
	 */
	public String getGroupId() {
		return groupId;
	}

	/**
	 * グループ名を取得する。
	 * @return groupName
	 */
	public String getGroupName() {
		return groupName;
	}

	/**
	 * 外部LoIDを取得する。
	 * @return LoForeignId
	 */
	public String getLoForeignId() {
		return LoForeignId;
	}

	/**
	 * LoIDを取得する。
	 * @return LoID
	 */
	public String getLoID() {
		return LoID;
	}

	/**
	 * LO名を取得する。
	 * @return LoName
	 */
	public String getLoName() {
		return LoName;
	}

	/**
	 * LOタイプを取得する。
	 * @return LoType
	 */
	public String getLoType() {
		return LoType;
	}

	/**
	 * 教材かどうかを取得する。
	 * @return materiall
	 */
	public boolean isMateriall() {
		return materiall;
	}

	/**
	 * リアルLOIDを取得する。
	 * @return realLoId
	 */
	public String getRealLoId() {
		return realLoId;
	}

	/**
	 * 配下フラグを取得する。
	 * @return subordinateflg
	 */
	public String getSubordinateflg() {
		return subordinateflg;
	}

	/**
	 * 完了数の合計を取得する。
	 * @return sumComplete
	 */
	public int getSumComplete() {
		return sumComplete;
	}

	/**
	 * 合格数の合計を取得する。
	 * @return sumPass
	 */
	public int getSumPass() {
		return sumPass;
	}

	/**
	 * 学習開始数の合計を取得する。
	 * @return sumStartStudy
	 */
	public int getSumStartStudy() {
		return sumStartStudy;
	}

	/**
	 * 未学習数の合計を取得する。
	 * @return sumUnlearn
	 */
	public int getSumUnlearn() {
		return sumUnlearn;
	}

	/**
	 * 学習者(ユーザ)数を取得する。
	 * @return userCount
	 */
	public String getUserCount() {
		return userCount;
	}

	/**
	 * 集計対象が配下か直下かのメッセージを設定する。
	 * @param condidateTotalMassage
	 */
	public void setCondidateTotalMassage(String condidateTotalMassage) {
		this.condidateTotalMassage = condidateTotalMassage;
	}

	/**
	 * コンテナかどうかを設定する。
	 * @param container
	 */
	public void setContainer(boolean container) {
		this.container = container;
	}

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

	/**
	 * グループIDを設定する。
	 * @param groupId The groupId to set
	 */
	public void setGroupId(String groupId) {
		this.groupId = groupId;
	}

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

	/**
	 * 外部LoIDを設定する。
	 * @param loForeignId
	 */
	public void setLoForeignId(String loForeignId) {
		LoForeignId = loForeignId;
	}

	/**
	 * LoIDを設定する。
	 * @param loID
	 */
	public void setLoID(String loID) {
		LoID = loID;
	}

	/**
	 * Lo名を設定するThe loName to set
	 */
	public void setLoName(String loName) {
		LoName = loName;
	}

	/**
	 * Loタイプを設定する。
	 * @param loType
	 */
	public void setLoType(String loType) {
		LoType = loType;
	}

	/**
	 * 教材かどうかを設定する
	 * @param materiall The materiall to set
	 */
	public void setMateriall(boolean materiall) {
		this.materiall = materiall;
	}

	/**
	 * リアルLOIDを設定する。
	 * @param realLoId
	 */
	public void setRealLoId(String realLoId) {
		this.realLoId = realLoId;
	}

	/**
	 * 配下フラグを設定する。
	 * @param subordinateflg
	 */
	public void setSubordinateflg(String subordinateflg) {
		this.subordinateflg = subordinateflg;
	}

	/**
	 * 完了数の合計を設定する。
	 * @param sumComplete
	 */
	public void setSumComplete(int sumComplete) {
		this.sumComplete = sumComplete;
	}

	/**
	 * 合格数の合計を設定する。
	 * @param sumPass
	 */
	public void setSumPass(int sumPass) {
		this.sumPass = sumPass;
	}

	/**
	 * 学習開始数の合計を設定する。
	 * @param sumStartStudy
	 */
	public void setSumStartStudy(int sumStartStudy) {
		this.sumStartStudy = sumStartStudy;
	}

	/**
	 * 未学習数の合計を設定する。
	 * @param sumUnlearn
	 */
	public void setSumUnlearn(int sumUnlearn) {
		this.sumUnlearn = sumUnlearn;
	}

	/**
	 * 学習者(ユーザ)数を設定する。
	 * @param userCount
	 */
	public void setUserCount(String userCount) {
		this.userCount = userCount;
	}

}
