/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//	コンテナ進捗クラス
//
//		変更履歴
//			2005.01.27  新規作成  Katsuhiko.Sakurai(UNITEC)
//
//	機能
//
//	このクラスはコンテナLOの進捗を表すクラスです。
//
////////////////////////////////////////////////////////////////
package jp.co.ntt.lms.lo.progress;

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

import jp.co.ntt.lms.lo.progress.util.LearningProgressConfigurationManager;

/**
 * コンテナ進捗クラスです。
 * 
 * このクラスはコンテナLOの進捗を表すクラスです。
 * 
 * @author Katsuhiko Sakurai (UNITEC)
 * @version 1.0
 */
public class ContainerProgress extends AbstractLOProgress {

	private List childList = null;
	
	/**
	 * コンストラクタです。
	 * 
	 * @param loID 対象となるLoID 
	 * @param targetUserID 対象となるユーザ・グループID 
	 * @param level 階層のレベル 
	 * @throws Exception
	 */
	public ContainerProgress(String loID, String targetUserID, int level) throws Exception {
		super(loID, targetUserID, level);
	}
	
	/**
	 * コンストラクタです。
	 * 
	 * @param loID 対象となるLoID 
	 * @param targetUserID 対象となるユーザ・グループID 
	 * @param level 階層のレベル 
	 * @param config 外部設定ファイル情報 
	 * @throws Exception
	 */
	public ContainerProgress(String loID, String targetUserID, int level, 
			LearningProgressConfigurationManager config) throws Exception {
		
		super(loID, targetUserID, level, config);

		this.childList = new ArrayList();
	}

	/**
	 * 進捗リストを生成します。
	 * 自分と子供の階層構造をリスト構造にして返します。
	 * 
	 * @return List 進捗リスト 
 	 * @throws Exception
	 */
	public List getProgressList() {

		ArrayList list = new ArrayList();
		
		// 自分がルートの場合は進捗リストに追加しない
		if ( this.loClient.getLoID().equals("LO0") == false ) {
			list.add(this);
		}

		Iterator ite = this.childList.iterator();
		while( ite.hasNext()) {
			
			XMOProgress xmoProgress = (XMOProgress)ite.next();
			
			List childList = xmoProgress.getProgressList();
			Iterator iteChild = childList.iterator();
			
			while( iteChild.hasNext() ) {
				list.add(iteChild.next());
			}
		}
		
		return list;
	}

	/**
	 * 自コンテナに子供の進捗LOを追加します。
	 * 
	 * @param xmoProgress 子供LO
	 * @return XMOProgress 自オブジェクト 
 	 * @throws Exception
	 */
	public XMOProgress add(XMOProgress xmoProgress) throws Exception {
		this.childList.add(xmoProgress);
		return this;
	}
}
