/*
 * 作成日: 2005/03/15
 *
 * TODO この生成されたファイルのテンプレートを変更するには次へジャンプ:
 * ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
 */
package jp.co.ntt.lms.xmf.lo.method.list;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;

import jp.co.ntt.lms.lo.LoTopClient;
import jp.co.ntt.lms.lo.method.MethodData;
import jp.co.ntt.lms.lo.method.MethodEnv;
import jp.co.ntt.lms.xmo.Environment;
import jp.co.ntt.lms.xmo.Lo.HistoryData;
import jp.co.ntt.lms.xmo.Lo.LoClient;
import jp.co.ntt.lms.xmo.Lo.LoData;
import jp.co.ntt.lms.xmo.LoRelation.LoRelationClient;
	

/**
 * @author Administrator
 *
 * TODO この生成された型コメントのテンプレートを変更するには次へジャンプ:
 * ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
 */
public class MethodDispDataList {

	//データのリスト
	public ArrayList methodDispDataList = new ArrayList();

	
	/**
	 * 
	 */
	public MethodDispDataList(String strMethodID) {
		setDispDataList(strMethodID);
	}
	
	/**
	 * 
	 */
	public MethodDispDataList() {
		super();
		// TODO 自動生成されたコンストラクター・スタブ
	}
	/**
	 * @param strMethodID
	 * 指定されたMethodID(LoID)配下のデータに関する表示データを作成し、リストにして返す
	 */
	public void setDispDataList(String strMethodID) {

		try {
			// ワーク用
			String methodID;
			LoData loData;
			
			// LoRelation クライアントオブジェクト
			LoRelationClient objLoRelationXMO = new LoRelationClient();
			objLoRelationXMO.setParentID(strMethodID);
			
			if (objLoRelationXMO.select())
			{
				// 子のIDを調べる
				while(objLoRelationXMO.next()) {
					//子のIDを取る
					methodID = objLoRelationXMO.getChildID();
					
					// IDから表示用のデータを取る
					MethodDispData mdd = convLoID2Disp(methodID);

					// データをリストに追加する
					if(mdd != null){
						methodDispDataList.add(mdd);
					}
				}
			}
		} catch (Exception e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}
		
	}
	
	
	/**
	 * @param loID
	 * @return MethodID(LoID)から表示用のデータを作成して戻す
	 */
	public MethodDispData convLoID2Disp(String loID) {

		MethodDispData mdd = null;

		// 表示用オブジェクト
		mdd = new MethodDispData();

		//共通データセット
		if(convLoData2Disp(loID, mdd)){
			//共通データセット
			if(convMethodData2Disp(loID, mdd)){
				return mdd;
			}
		}
		
		return null;
	}
	
	
	/**
	 * @param loData
	 */
	public boolean convLoData2Disp(String loID,MethodDispData mdd){
		
		try {
			// Lo クライアントオブジェクト
			LoClient objLoXMO = new LoClient();

			// 検索条件の設定
			objLoXMO.setWhereLoID(loID);
			if (objLoXMO.select())
			{
				if(objLoXMO.next()){
					// データを取る
					LoData loData = objLoXMO.getLoData();

				// Lo 共通データ
					mdd.strLoID = loID;										//自分のLOID
					mdd.strTitle = loData.getLoTytle(); 					//タイトル
					mdd.strExplanation = loData.getLoexplanation(); 		//説明
					mdd.strForeignID = loData.getForeignID(); 				//外部ID
					mdd.strKeyWord = loData.getKeyWord(); 					//キーワード
					mdd.strVersion = loData.getLoVersion(); 				//バージョン

				// 履歴データセット
					// 検索条件を設定
					if (objLoXMO.selectHistory(objLoXMO.getRealLOID()) == false) {
						//検索失敗
						throw new Exception("selectHistory Method of LoClient Class returned false.");
					}
					// LOHistoryデータの取得
					HistoryData objHistory = (HistoryData) objLoXMO.getHistory();

					mdd.strDateRegistered = objHistory.getEntryDate();		//登録日
					mdd.strDateUpdated = objHistory.getLastDate(); 			//最終更新日
					mdd.strNumOfUpdate = objHistory.getRenewCnt();			//更新回数
				}
				else{
					return false;
				}
			}
		} catch (Exception e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
			return false;
		}
		return true;
	}
	
	public boolean convMethodData2Disp(String loID,MethodDispData mdd){
		
		try {
			// 日付用データ変換
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
			Calendar cal = Calendar.getInstance();
			Date workDate; 
			
			// Method 特有データ
			// Loサーバ名を取得する
			Environment objEnv = new Environment();
			String strLoServerName = objEnv.getLoServerName();
			// メソッドLOのLoTypeを取得する。
			MethodEnv objMethodEnv = new MethodEnv();
			String strLoType = objMethodEnv.getLoType();
			mdd.strMethodLoType = strLoType; 
			// LoTopClientのgetDataメソッドで指定された
			// LOIDに対応するメソッドデータを取得
			LoTopClient objLoTop = new LoTopClient( strLoServerName, strLoType );
			// 検索処理
			if( !objLoTop.getData(loID) ) {
				return false;
			}
			else{
				
				// 検索がうまくいった場合はデータを取得する
				MethodData objData = (MethodData)objLoTop.getDataInfo(0);
				
				workDate = objData.getDateStart();						//開始日
				if(workDate != null){
					mdd.strDateStart = sdf.format(workDate);
				}
				mdd.strNumOfPeriod = Integer.toString(objData.getPeriodNum()); 				//期間
				workDate = objData.getDateEnd();						//終了日
				if(workDate != null){
					mdd.strDateEnd = sdf.format(workDate);
				}
				if(objData.isParallelFlag()){							//配下の並び
					mdd.strChildrenSequence = "並列";	
				}
				else {
					mdd.strChildrenSequence = "直列";	
				}
				if(objData.isBeforeLearnFlag()){						//計画日付前学習の可否
					mdd.strBeforeLearning = "可"; 	
				}
				else{
					mdd.strBeforeLearning = "不可"; 	
				}
				if(objData.isAfterLearnFlag()){							//計画日付後学習の可否
					mdd.strAfterLearning = "可"; 	
				}
				else{
					mdd.strAfterLearning = "不可"; 	
				}
				
				// 子Loに関するデータ
				mdd.strMethodLoID = objData.getMethodLOID(); 			//自分が管理するLOのID：このデータがnullなら配下がある
				if(mdd.strMethodLoID != null){
					if(mdd.strMethodLoID.equals("")){
						mdd.strMethodLoID = null;
					}
				}
				if(mdd.strMethodLoID != null ){
					// Lo クライアントオブジェクト
					LoClient objLoXMO = new LoClient();

					// 検索条件の設定
					objLoXMO.setWhereLoID(mdd.strMethodLoID);
					if (objLoXMO.select())
					{
						if(objLoXMO.next()){
							// データを取る
							LoData loData = objLoXMO.getLoData();

							// Lo 共通データ
							mdd.strMethodLoType = loData.getLoType(); 		//自分が管理するLOのType
						}
					}
				}
			}

		} catch (Exception e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
			return false;
		}
		return true;
	}
}
