//
//基本画面 メソッド一覧ペイン　情報管理クラス
//		変更履歴
//			2005/03/24	新規作成		梅原 浩司
//
package jp.co.ntt.lms.xms.login.base;

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

import jp.co.ntt.lms.xmo.Base.Gui.BaseDisplayData;
import jp.co.ntt.lms.xms.framework.XmsException;
import jp.co.ntt.lms.xms.framework.XmsSystemException;
import jp.co.ntt.lms.xmo.Environment;
import jp.co.ntt.lms.xmo.MessageData;
import jp.co.ntt.lms.xmo.Method.MethodData;
import jp.co.ntt.lms.xmo.util.XMODate;
import jp.co.ntt.lms.xmo.LoRelation.LoRelationClient;
import jp.co.ntt.lms.xmo.Lo.LoClient;

/**
 * 基本画面 メソッド一覧ペイン　情報管理クラス<BR>
 * 一覧レコード情報を保持する。
 * @author 梅原 浩司
 */
public class ShowMethodChildrenBean extends ShowLoChildrenBean {
	/**
	 * 画面のレコード情報を生成し、内部のリストに格納します。
	 * @param parentLoID 親LOID
	 * @param loginUserId ログインユーザ情報
	 * @param assignTop アサイントップ検索か直下検索か
	 *             <PRE>
	 *                 true: アサイントップ検索
	 *                 false: 直下検索
	 *             </PRE>
	 * @param displayList レコード標準情報を格納した配列 レコードが存在しない場合は空の配列を渡す。
	 * @throws XmsException Xms共通エラー
	 * @throws Exception RMI通信エラーなど
	 */
	public void makeRecord(String parentLoId,
							String loginUserId,
							boolean assignTop,
							MethodData[] methodList)
		throws XmsException, Exception
	{
		BaseDisplayData[] displayList = new BaseDisplayData[methodList.length];
		for( int i = 0; i < displayList.length; i++ ) {
			BaseDisplayData objDisp = new BaseDisplayData();
			objDisp.setID( methodList[i].getLoID() );
			objDisp.setDescription( methodList[i].getLoexplanation() );
			objDisp.setPrere( methodList[i].getPrere() );
			objDisp.setTitle( methodList[i].getLoTytle() );
			objDisp.setType( methodList[i].getLoType() );
			displayList[i] = objDisp;
		}
		
		super.makeRecord(parentLoId,loginUserId,assignTop,displayList);
		
		// Loサーバ名を取得する
		Environment objEnv = new Environment();
		String strLoServerName = objEnv.getLoServerName();
		
		LoRelationClient objLoRel = new LoRelationClient();
		LoClient objLo = new LoClient();
		
		List recLoList = getRecordList();
		List recList = new ArrayList();
		for( int i = 0; i < recLoList.size(); i++ ) {
			// 親クラスから情報をコピー
			ShowLoChildrenRecordBean recLo = (ShowLoChildrenRecordBean)recLoList.get(i);
			ShowMethodChildrenRecordBean record = new ShowMethodChildrenRecordBean(parentLoId, displayList[i]);
			recList.add(record);
			record.setAssignUsable(recLo.getAssignUsable());
			record.setFillPrerequisite(recLo.isFillPrerequisite());
			record.setStatus(recLo.getStatus());

			// データをコピー
			MethodData objData = methodList[i];
			record.setStartDate( XMODate.parseYYYYMMDD(objData.getDateStart()) );
			record.setEndDate( XMODate.parseYYYYMMDD(objData.getDateEnd()) );
			record.setMethodLOID( objData.getMethodLOID() );
			record.setBeforeLearnFlag( objData.isBeforeLearnFlag() );
			record.setAfterLearnFlag( objData.isAfterLearnFlag() );
			record.setParallelFlag( objData.isParallelFlag() );
			record.setPeriod( objData.getPeriodNum() );
			
			// パスの設定
			if ( !objLoRel.searchPath(record.getLoId()) ) {
				throw new XmsSystemException(objLoRel.getMessage());
			}
			if( objLoRel.next() ) {
				String[] strPath = objLoRel.getPath();
				StringBuffer strbPath = new StringBuffer();
				for( int j = 0; j < strPath.length - 1; j++ ) {
					objLo.clear();
					objLo.setWhereLoID(strPath[j]);
					if( objLo.select() ) {
						if ( objLo.next() ) {
							strbPath.append( objLo.getLoTytle() );
							strbPath.append( "/" );
						}
					}
				}
				record.setPath(strbPath.toString());
			}
		}
		setRecordList(recList);
	}
	
	/**
	 * 画面のレコード情報を生成し、内部のリストに格納します。
	 * @param parentLoID 親LOID
	 * @param loginUserId ログインユーザ情報
	 * @param assignTop アサイントップ検索か直下検索か
	 *             <PRE>
	 *                 true: アサイントップ検索
	 *                 false: 直下検索
	 *             </PRE>
	 * @param displayList レコード標準情報を格納した配列 レコードが存在しない場合は空の配列を渡す。
	 * @param strStatus ステータス(0:未学習＋学習中 1:未学習 2:学習済み 3:すべて)
	 * @throws XmsException Xms共通エラー
	 * @throws Exception RMI通信エラーなど
	 */
	public void makeRecordWithStatus(String parentLoId,
							String loginUserId,
							boolean assignTop,
							MethodData[] methodList,
							String strStatus)
		throws XmsException, Exception
	{
		BaseDisplayData[] displayList = new BaseDisplayData[methodList.length];
		for( int i = 0; i < displayList.length; i++ ) {
			BaseDisplayData objDisp = new BaseDisplayData();
			objDisp.setID( methodList[i].getLoID() );
			objDisp.setDescription( methodList[i].getLoexplanation() );
			objDisp.setPrere( methodList[i].getPrere() );
			objDisp.setTitle( methodList[i].getLoTytle() );
			objDisp.setType( methodList[i].getLoType() );
			displayList[i] = objDisp;
		}
		
		super.makeRecord(parentLoId,loginUserId,assignTop,displayList);
		
		// Loサーバ名を取得する
		Environment objEnv = new Environment();
		String strLoServerName = objEnv.getLoServerName();
		
		LoRelationClient objLoRel = new LoRelationClient();
		LoClient objLo = new LoClient();
		
		int nStatus = 3;
		try
		{
			nStatus = Integer.parseInt(strStatus);
		}
		catch(Exception ex)
		{
			throw ex;
		}
		
		List recLoList = getRecordList();
		List recList = new ArrayList();
		int nRecStatus;
		boolean bCont;
		for( int i = 0; i < recLoList.size(); i++ ) {
			bCont = false;
			// 親クラスから情報をコピー
			ShowLoChildrenRecordBean recLo = (ShowLoChildrenRecordBean)recLoList.get(i);
			nRecStatus = recLo.getStatus();
			if (nStatus == 0 && (nRecStatus == 1 || nRecStatus == 2)) //未学習+学習中
			{
				bCont = true;
			}
			else if (nStatus == 1 && nRecStatus == 1) //未学習
			{
				bCont = true;
			}
			else if (nStatus == 2 && nRecStatus == 3) //完了
			{
				bCont = true;
			}
			else if (nStatus == 3) // すべて
			{
				bCont = true;
			}
			
			if (bCont == true)
			{
				ShowMethodChildrenRecordBean record = new ShowMethodChildrenRecordBean(parentLoId, displayList[i]);
				recList.add(record);
				record.setAssignUsable(recLo.getAssignUsable());
				record.setFillPrerequisite(recLo.isFillPrerequisite());
				record.setStatus(recLo.getStatus());
	
				// データをコピー
				MethodData objData = methodList[i];
				record.setStartDate( XMODate.parseYYYYMMDD(objData.getDateStart()) );
				record.setEndDate( XMODate.parseYYYYMMDD(objData.getDateEnd()) );
				record.setMethodLOID( objData.getMethodLOID() );
				record.setBeforeLearnFlag( objData.isBeforeLearnFlag() );
				record.setAfterLearnFlag( objData.isAfterLearnFlag() );
				record.setParallelFlag( objData.isParallelFlag() );
				record.setPeriod( objData.getPeriodNum() );
				
				// パスの設定
				if ( !objLoRel.searchPath(record.getLoId()) ) {
					throw new XmsSystemException(objLoRel.getMessage());
				}
				if( objLoRel.next() ) {
					String[] strPath = objLoRel.getPath();
					ArrayList pathIDList = new ArrayList();
					ArrayList pathNameList = new ArrayList();
					StringBuffer strbPath = new StringBuffer();
					for( int j = 0; j < strPath.length; j++ ) {
						objLo.clear();
						objLo.setWhereLoID(strPath[j]);
						if( objLo.select() ) {
							if ( objLo.next() ) {
								strbPath.append( objLo.getLoTytle() );
								pathIDList.add(strPath[j]);
								pathNameList.add(objLo.getLoTytle());
								strbPath.append( "/" );
							}
						}
					}
					record.setPath(strbPath.toString());
					record.setPathIDList(pathIDList);
					record.setPathNameList(pathNameList);
				}
			}
		}
		setRecordList(recList);
	}
}
