/*
このファイルの中身は、NTT オープンソースライセンス　バージョン 1.0（「本
契約」という）の適用を受けます。
本契約を遵守しない限り、このファイルを使用してはなりません。
本契約のコピーは、次のＵＲＬから入手できます。
【配布サイトのURL】 http://www.oss.ecl.ntt.co.jp/lms/

本契約に基づき頒布されるソフトウェアは、現状のまま、明示又は黙示のあらゆ
る種類の保証なしで、頒布されます。本契約に基づく権利及び制限を律する特定
の文言については、本契約を参照してください。

「オリジナルコード」は、 NTT Cyber Space Laboratories Code です。 
「オリジナルコード」の「初期開発者」は、日本電信電話株式会社です。  
日本電信電話株式会社により創作された部分は、Copyright (C) 2004 
日本電信電話株式会社 です。
全ての権利が留保されます。 
「コントリビュータ」：_____________________________________ 


The contents of this file are subject to the NTT Opensource License
Version 1.0 (the License); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
【配布サイトのURL】 http://www.oss.ecl.ntt.co.jp/lms/

Software distributed under the License is distributed on an AS IS
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.

The Original Code is NTT Cyber Space Laboratories Code .

The Initial Developer of the Original Code is NIPPON TELEGRAPH AND 
TELEPHONE CORPORATION.
Portions created by the NIPPON TELEGRAPH AND TELEPHONE CORPORATION 
are Copyright (C) 2004 NIPPON TELEGRAPH AND TELEPHONE CORPORATION. 
All Rights Reserved.

Contributor(s) ______________________________________.
*/

//
//	Catalog閲覧管理クラス
//			新規作成
//				2004.01.08 新規作成 kin
//

package jp.co.ntt.lms.lo.Catalog;

import jp.co.ntt.lms.lo.*;
import jp.co.ntt.lms.xmo.util.*;
import jp.co.ntt.lms.xmo.*;
import jp.co.ntt.lms.Common.status.*;


import java.util.Hashtable;
import java.util.Vector;
import java.sql.SQLException;

/**
 * 学習管理インタフェースクラス<BR>
 * <PRE>
 *   Loの学習を管理する。
 *   LoServerクラスが所有する。
 *   下位に各Loの学習管理クラスを持つ。
 * </PRE>
 *
 */

public class CatalogLoLearnManager extends LearnManagerType1 
	implements CatalogLoTable

{
	/**
	 * Catalog閲覧開始処理<BR>
	 * @param Hashtabel パラメータリスト
	 * @return Object 学習開始URL
	 * @exception LOException LO固有の例外エラー
	 */

	protected Object startLearnAction(Hashtable htbParam, DataAccess objDataAccess)
		throws LOException

	{
		LearnData objRet = new LearnData();

		try
		{

			// Launch_URLを取得する
			CatalogLoEnv objEnv = new CatalogLoEnv();
			String strLoUrl = objEnv.getLaunch_URL();

			//Launch_URLのパラメータとしてLOIDとLOTypeを追加する
			String strLoID = (String)htbParam.get( LOID );
			String strLoType = (String)htbParam.get( LO_TYPE );
			String strLearnURL = strLoUrl + "?LOID=" + strLoID + "&LOType=" + strLoType;

			String strEstimation = objEnv.getEstimation();

			objRet.setLearnURL(strLearnURL);
			objRet.setEstimation(strEstimation);

		}
		catch(LOException le)
		{

			throw le;
		}
		catch(Exception e)
		{

			DebugLog.write( this.getClass(), e, DebugLog.HIGHT );
			throw new LOException(e.getMessage());
		}
		return objRet;
	}
	

	/**
	 * 文字列をマクロ展開します(Launch&Forget個別処理)<BR>
	 * '%'で囲まれた文字列を取得し、引数で渡されたHashtableから
	 * 取得した文字列をキーにして、値を取得し、入れ替えて返します。
	 * @param strBase 変換前
	 * @param htbTable マクロ情報
	 * @return String 変換後文字列
	 */
	private String expand(String strBase , Hashtable htbTable ) {
		// 返還前文字列をchar配列に変換します
		char[] chrBase = strBase.toCharArray();
		// 変換後の文字列を格納します
		StringBuffer sbBase = new StringBuffer();
		// '$'で囲まれてた文字列を格納します
		StringBuffer sbMacro = new StringBuffer();
		// マクロ文字列読み取り中か、普通の文字列読み取り中かを判断する
		boolean blMacro = false;
		// charの配列文ループします
		for( int i = 0; i < chrBase.length; i++ ) {
			// '%'の部分はマクロ文字列として格納します
			if( chrBase[i] == '%' ) {
				if( blMacro ) {
					blMacro = false;
					// マクロ文字列をキーにして、値を入れる
					String strMacro = (String)htbTable.get( sbMacro.toString() );
					// 取得した文字列がnull以外なら、設定
					if( strMacro != null ) {
						sbBase.append( (String)htbTable.get( sbMacro.toString() ) );
					}
					// マクロ文字列を初期化します
					sbMacro = new StringBuffer();
				}
				else {
					blMacro = true;
				}
				continue;
			}
			
			// マクロ読み取り中の場合
			if( blMacro ) {
				sbMacro.append( chrBase[i] );
			}
			// 普通の文字列読み取り中
			else {
				sbBase.append( chrBase[i] );
			}
		}
		return sbBase.toString();
	}

}
