/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//拡張メニュー準備クラス
//
//変更履歴
//2005.02.16  新規作成  鏡味 克彦
//
//機能
//
//OLMSカスタマイズに伴う拡張メニューを作成するクラスです。
//
/////////////////////////////////////////////////////////////////

/**
 * 
 * OLMS機能カスタマイズ：拡張メニュー準備クラス
 * @author Katsuhiko Kagami(UNITEC)
 * @version 1.1
 * 
 **/

package jp.co.ntt.lms.lo;

import java.util.Vector;
import java.util.Hashtable;

import jp.co.ntt.lms.xmo.Environment;
import jp.co.ntt.lms.xmo.MenuData;
import jp.co.ntt.lms.xmo.util.DebugLog;
import jp.co.ntt.lms.xmo.Roles.RolesClient;

/**
 * 
 * OLMS機能カスタマイズ：拡張メニュー準備クラス<br>
 * OLMS機能カスタマイズの機能追加分のメニューを準備します。<br>
 * このソースは新規ビュー用です。
 * 
 **/
public class MenuMakerExtend implements LoPropertyDef {

	/**
	 * コンストラクタ
	 */
	public MenuMakerExtend() {
	}


	/**
	 * TODO メニューの表示に必要なパラメータは逐次追加してください。
	 * 
	 * OLMS機能カスタマイズ：拡張メニュー
	 * @param strTargetUserID 対象のユーザID
	 * @return MenuData[] メニューデータの配列(作成できない場合はnull)
	 * @throws LOException Lo固有の例外エラー
	 */
	public MenuData[] makeMenu(String strTargetUserID)
	throws LOException
	{
		return this.makeMenu(strTargetUserID, null);
	}

	
	/**
	 * TODO メニューの表示に必要なパラメータは逐次追加してください。
	 * 
	 * OLMS機能カスタマイズ：拡張メニュー
	 * @param strTargetUserID 対象のユーザID
	 * @param strLOID 対象のLOID
	 * @return MenuData[] メニューデータの配列(作成できない場合はnull)
	 * @throws LOException Lo固有の例外エラー
	 */
	public MenuData[] makeMenu(String strTargetUserID, String strLOID)
		throws LOException
	{
		try
		{
			Hashtable htbParam = new Hashtable();

			// 渡ってきたパラメータをハッシュに格納
			if(strTargetUserID != null && !strTargetUserID.equals("")){
				// TARGET_ID:対象ユーザID
				htbParam.put(TARGET_ID, strTargetUserID);
			}
			
			// LOID:対象LOID
			if(strLOID != null && !strLOID.equals("")){
				htbParam.put(LOID, strLOID);
			}
			
			// メニュー作成用メソッドを実行
			Vector vecRet = makeExtendMenu(htbParam);
			
			// メニューが作成されたら
			if (!vecRet.isEmpty()) {
				// Vectorをメニューデータ配列型に変換
				MenuData[] objRet = new MenuData[vecRet.size()];
				vecRet.copyInto(objRet);

				return objRet;
			} else {
				// 該当するメニューが無い場合はnull
				return null;
			}
		}
		catch(LOException le)
		{
			throw le;
		}
	}

	
	/**
	 * メニューに拡張メニューを追加します。<br>
	 * @param htbParam メニュー生成のためのパラメータ
	 * @return Vector 更新されたメニューオブジェクト
	 * @throws LOException LO操作時の例外
	 */
	private Vector makeExtendMenu(Hashtable htbParam) throws LOException {
		boolean bUserID = false;
		boolean bLoID = false;
		
		// 渡されたパラメータのチェック
		if (htbParam.get(TARGET_ID) != null) {
			bUserID = true;
		}
		if (htbParam.get(LOID) != null) {
			bLoID = true;
		}

		Vector vecMenu = new Vector();
		
		// メニューはここ以降に追加してください。		
		try {
			RolesClient objRoCl = new RolesClient();
			// MOD 2005/03/17 START Katsuhiko Kagami(UNITEC) [権限チェックを除去]

			// LO選択時のみ表示するメニュー
			if (bLoID) {
				//	ADD 2005/02/10 START s-mori 推奨LO一覧
				// 推奨LO一覧メニュー設定
				vecMenu.add(makeRecomendedLoMenu(htbParam));
				//	ADD 2005/02/10 END s-mori
			} else {
				// LO非選択時のみ表示するメニュー
	
				// ADD 2005/02/02 START MASUDA [コース管理メニュー対応]
				if (bUserID) {
					// コース管理メニュー表示
					vecMenu.add(makeLoFinishMenu(htbParam));
				}
				// ADD 2005/02/02 END MASUDA
			}

			// MOD 2005/03/17 END Katsuhiko Kagami(UNITEC) [権限チェックを除去]

		} catch (Exception e) {
			//あっては困る状態なので、システム例外を投げる
	//			throw new XmsSystemException(e);
		}

		return vecMenu;
	}

	//	ADD 2005/02/02 START MASUDA [LO一覧(履修済み/中)対応]
	/**
	 * Catalog 履修済みおよび履修中一覧メニューオブジェクト作成
	 *
	 * @param htbParam パラメータ
	 * @return MenuData メニューデータ
	 * @exception LOException Lo固有の例外エラー
	 */
	private MenuData makeLoFinishMenu(Hashtable htbParam)
		throws LOException
	{
		// LOG_INFO
		DebugLog.write( this.getClass(), "Loメニュー作成開始！", DebugLog.MID);

		try
		{
			String strUserID        = (String)htbParam.get(TARGET_ID);
			// MOD 2005/02/24 START Katsuhiko Kagami [新規ビュー対応]
//			String strLogURL        = "../LoLog/LoLogCourseManageLoList.jsp?userId=" + strUserID;

			Environment objEnv = new Environment();
			// XMS2のシステムURLを取得
			String strSystemURL = objEnv.getSystemURL();
			String strLogURL        = strSystemURL + "/xmo/LoLog/LoLogCourseManageLoList.do?userId=" + strUserID;
			// MOD 2005/02/24 END Katsuhiko Kagami [新規ビュー対応]
			
			MenuData objLogMenu = new MenuData(strLogURL,
								"コース管理",
								MenuData.DEFAULT_MENU,
								MenuData.ALL_MENU);
			// ウィンドウ表示方法を別ウィンドウに設定します。
			objLogMenu.setTargetWindow( "_blank" );
			return objLogMenu;
		}
		catch(Exception e)
		{
			throw new LOException(e.getMessage());
		}
	}
	//	ADD 2005/02/02 END MASUDA

	//	ADD 2005/02/10 START s-mori 推奨LO一覧
	/**
	 * 学習可能Lo一覧メニューオブジェクト作成
	 * TODO 未実装大量
	 *
	 * @param htbParam パラメータ
	 * @return MenuData メニューデータ
	 * @exception LOException Lo固有の例外エラー
	 */
	private MenuData makeRecomendedLoMenu(Hashtable htbParam)
		throws LOException
	{
		// LOG_INFO
		DebugLog.write( this.getClass(), "Loメニュー作成開始！", DebugLog.MID);
		
		try
		{

			String strUserID        = (String)htbParam.get(TARGET_ID);
			String strLoID          = (String)htbParam.get(LOID);
			// MOD 2005/02/24 START Katsuhiko Kagami [新規ビュー対応]
//			String strLogURL        = "../../lo/Catalog/RecommendedCatalogPerusal.jsp?LOID=" + strLoID + "&LOType=6&MODE=1";
			Environment objEnv = new Environment();
			// XMS2のシステムURLを取得
			String strSystemURL = objEnv.getSystemURL();
			String strLogURL        = strSystemURL + "/lo/Catalog/RecommendedCatalogPerusal.do?LOID=" + strLoID + "&LOType=6&MODE=1";
			// MOD 2005/02/24 END Katsuhiko Kagami [新規ビュー対応]
			
			MenuData objLogMenu = new MenuData(strLogURL,
								"推奨ＬＯ一覧（学習者用）",
								MenuData.DEFAULT_MENU,
								MenuData.STUDENT_MENU);
			// ウィンドウ表示方法を別ウィンドウに設定します。
			objLogMenu.setTargetWindow( "_blank" );
			return objLogMenu;
		}
		catch(Exception e)
		{
			throw new LOException(e.getMessage());
		}
	}
	//	ADD 2005/02/10 END s-mori


}
