/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//	ユーザ・グループ進捗抽象クラス
//
//		変更履歴
//			2005.01.31  新規作成  Katsuhiko.Sakurai(UNITEC)
//
//	機能
//
//	このクラスはユーザ・グループの進捗を表現する抽象クラスです。
//
////////////////////////////////////////////////////////////////
package jp.co.ntt.lms.lo.progress;

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


/**
 * ユーザ進捗抽象クラスです。
 * 
 * ユーザ階層構造をコンポジットパターンで実装します。
 * 
 * @author Katsuhiko Sakurai (UNITEC)
 * @version 1.0
 */
public abstract class AbstractPeopleProgress implements XMOProgress{
	
	protected int level = 0;
	protected LearningProgress progress = null;

	/**
	 * コンストラクタです。
	 * 
	 * @param userID 対象となるユーザ・グループID
	 * @param targetLOID 対象となるLoID 
	 * @param level 階層のレベル 
	 * @throws Exception
	 */
	public AbstractPeopleProgress(String userID, String targetLOID, int level) throws Exception {
		this(userID, targetLOID, level, new LearningProgressConfigurationManager());
	}

	/**
	 * コンストラクタです。
	 * 
	 * @param userID 対象となるユーザ・グループID
	 * @param targetLOID 対象となるLoID 
	 * @param level 階層のレベル 
	 * @param config 外部設定ファイル情報 
	 * @throws Exception
	 */
	public AbstractPeopleProgress(String userID, String targetLOID, int level, 
			LearningProgressConfigurationManager config) throws Exception {
		
		if (userID.equals("grouptreeroot")) return;
		
		// 進捗を設定
		this.progress = this.getProgress(userID, targetLOID, config);

		// レベルを設定
		this.level = level;
	}

	/**
	 * 子供の進捗情報を追加します。
	 * 
	 * リーフ(ユーザ)ではこのメソッドは呼ばれることを想定しないため
	 * デフォルト実装を例外送出としています。
	 *  
	 * @param xmoProgress 進捗情報 
	 * @throws Exception
	 */
	public XMOProgress add(XMOProgress xmoProgress) throws Exception {
		throw new Exception();
	}
	
	/**
	 * 進捗情報を取得します。
	 * 
	 * @return LearningProgress 進捗情報 
	 */
	public LearningProgress getProgress() {
		return this.progress;
	}

	/**
	 * 階層のレベルを取得します。
	 * 
	 * @return int 階層のレベル 
	 */
	public int getLevel() {
		return this.level;
	}

	/**
	 * 進捗情報を取得します。
	 * 
	 * @param userID 対象となるuserID
	 * @param targetLOID 対象となるLoID
	 * @param config 設定ファイル情報
	 * @return LearningProgress 進捗情報
	 * @throws Exception　
	 */
	protected LearningProgress getProgress( String userID, String targetLOID,
					LearningProgressConfigurationManager config) throws Exception {
		return new LearningProgress(userID, targetLOID, config);
	}
}
