/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//	グループの進捗を表すクラス
//
//		変更履歴
//			2005.01.27  新規作成  Katsuhiko.Sakurai(UNITEC)
//
//	機能
//
//	このクラスはグループの進捗を表現するクラスです。
//
////////////////////////////////////////////////////////////////
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;
import jp.co.ntt.lms.lo.progress.util.XMOInformationGetter;
import jp.co.ntt.lms.xmo.Groups.GroupsClient;

/**
 * グループ進捗クラスです。
 * 
 * @author Katsuhiko Sakurai (UNITEC)
 * @version 1.0
 */
public class GroupProgress extends AbstractPeopleProgress {

	private GroupsClient groupClient = null;
	private List childList = null;
	
	/**
	 * コンストラクタです。
	 * 
	 * @param groupID 対象となるグループID
	 * @param targetLOID 対象となるLoID 
	 * @param level 階層のレベル 
	 * @throws Exception
	 */
	public GroupProgress(String groupID, String targetLOID, int level) throws Exception {
		super(groupID, targetLOID, level);
	}

	/**
	 * コンストラクタです。
	 * 
	 * @param groupID 対象となるグループID
	 * @param targetLOID 対象となるLoID 
	 * @param level 階層のレベル 
	 * @param config 外部設定ファイル情報 
	 * @throws Exception
	 */
	public GroupProgress(String groupID, String targetLOID, int level, 
			LearningProgressConfigurationManager config) throws Exception {
		
		super(groupID, targetLOID, level, config);

		this.childList = new ArrayList();

		if (groupID.equals("grouptreeroot")) return;
		
		// グループIDからPeopleクライアントを取得
		this.groupClient = XMOInformationGetter.getGroup(groupID); 
	}
	
	/**
	 * 進捗リストを生成します。
	 * 自分と子供の階層構造をリスト構造にして返します。
	 * 
	 * @return List 進捗リスト 
 	 * @throws Exception
	 */
	public List getProgressList() {
		
		ArrayList list = new ArrayList();
		
		// 自分がルートの場合は進捗リストに追加しない
		if ( this.groupClient != null 
				&& this.groupClient.getGroupID().equals("GR000000") == 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;
	}
	
	/**
	 * 自グループに子供のユーザ進捗を追加します。
	 * 
	 * @param progress 子供ユーザの進捗
	 * @return XMOProgress 自オブジェクト 
 	 * @throws Exception
	 */
	public XMOProgress add(XMOProgress progress) throws Exception {
		this.childList.add(progress);
		return this;
	}
	
	/**
	 * 進捗の項目名称を取得します。
	 * 
	 * @return String グループ名称 
	 */
	public String getItemName() {
		return this.groupClient.getGroupName();
	}

	/**
	 * 階層レベル付けされた項目名を取得します。
	 * 
	 * @return String 階層レベル付けされたグループ名 
	 */
	public String getNestedItemName() {
		String space = "　";
		for(int i=1; i<=this.level; i++) space += space;
		
		return space + this.getItemName();
	}

	/**
	 * グループの説明を取得します。
	 * 
	 * @return String グループの説明 
	 */
	public String getExplanation() {
		return this.groupClient.getCustomMsgDir();
	}
}
