/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//	階層構造作成抽象クラス
//
//		変更履歴
//			2005.01.27  新規作成  Katsuhiko.Sakurai(UNITEC)
//
//	機能
//
//	このクラスはLOまたはユーザ・グループの階層構造を作成する
//  抽象クラスです。
//
////////////////////////////////////////////////////////////////
package jp.co.ntt.lms.lo.progress;

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

/**
 * 階層構造作成抽象クラスです。
 * 
 * LO階層構造をコンポジットパターンで実装します。
 * 
 * @author Katsuhiko Sakurai (UNITEC)
 * @version 1.0
 */
public abstract class AbstractXMOProgressTreeFactory {
	
	private String parentID = null;
	private String targetID = null;
	private String loginID = null;
	private LearningProgressConfigurationManager configManager = null;
	
	/**
	 * コンストラクタです。
	 * 
	 * @param parentID 階層構造の親ID 
	 * @param targetID 進捗情報の対象となるLOまたはユーザ・グループID 
	 * @param loginID ログインユーザのユーザID 
	 */
	public AbstractXMOProgressTreeFactory( String parentID, String targetID, String loginID ) {
		this.parentID = parentID;
		this.targetID = targetID;
		this.loginID = loginID;
	}
	
	/**
	 * 進捗情報の階層構造を生成します。
	 * 
	 * @throws Exception
	 */
	public final XMOProgress create() throws Exception{
		return this.createProgressTree( this.parentID, this.targetID, this.loginID, 0 );
	}
	
	/**
	 * 進捗外部設定情報管理オブジェクトを取得します。
	 * 
	 */
	public LearningProgressConfigurationManager getConfigManager() {

		if (this.configManager == null) {
			try {
				this.configManager = new LearningProgressConfigurationManager();
			} catch(Exception e) {
				return null;
			}
		}
		return this.configManager;
	}
	
	/**
	 * 進捗情報の階層構造を生成します。
	 * 
	 * @param parentID 階層構造の親ID 
	 * @param targetID 進捗情報の対象となるLOまたはユーザ・グループID 
	 * @param loginID ログインユーザのユーザID 
	 * @param level 階層のレベル
	 * @return XMOProgress 階層構造のルートオブジェクト
	 * @throws Exception
	 */
	protected abstract XMOProgress createProgressTree( String parentID, 
									String targetID, String loginID, int level  ) throws Exception;
}
