/*
 * 作成日: 2005/02/13
 *
 * TODO この生成されたファイルのテンプレートを変更するには次へジャンプ:
 * ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
 */
package jp.co.ntt.lms.xmf.actions.lo.scorm.individuallog;

import java.util.Hashtable;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.util.MessageResources;

import jp.co.ntt.lms.lo.LoComData;
import jp.co.ntt.lms.lo.LoTopClient;
import jp.co.ntt.lms.xmo.Lo.LoClient;
import jp.co.ntt.lms.xms.logsumup.scorm.ScormDocument;
import jp.co.ntt.lms.xmf.actions.lo.scorm.individuallog.inc.IndividualLogCommon_inc;

import jp.co.ntt.lms.xmo.*;

/**
 * @author Administrator
 *
 * TODO この生成された型コメントのテンプレートを変更するには次へジャンプ:
 * ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
 */
public class IndividualLogMenu_TreeAction extends Action {

	/* (非 Javadoc)
	 * @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
	 */
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		// TODO 自動生成されたメソッド・スタブ

		IndividualLogCommon_inc IndividualLogCommon_inc = new IndividualLogCommon_inc(); 

		// メッセージリソース取得
		MessageResources resources = getResources(request);

		// キャッシュ無効処理
		response.setHeader( "cache-control", "no-cache" );

		////////////////////////////////////////////////////////////////////
		// パラメータ取得
		// 	・LoID				LOID				必須
		// 	・AuID				AuID				任意
		// 	・LoType			LoType				必須
		// 	・userId			ユーザID			必須
		// 	・returnURL			戻りページ			必須
		////////////////////////////////////////////////////////////////////
		String strShowChildlenURL  ="";
		String strTopURL = "";
		String strLoID = request.getParameter( "LoID" );
		String strAuID = request.getParameter( "AuID" );
		String strLoType = request.getParameter( "LoType" );
		String strUserID = request.getParameter( "userId" );
		String strRealLoID = "";	// リアルＬＯＩＤ

		///////////////////////////////////////////
		// パラメータチェック
		///////////////////////////////////////////
		if( strLoID.equals("") || strLoType.equals("") || strUserID.equals("") ) {
			request.setAttribute("message", resources.getMessage("M012002"));
			request.setAttribute("detail", resources.getMessage("D012002"));
			request.setAttribute("close", "on");
			return mapping.findForward("error");
		}

		/////////////////////////////////////////////
		// ツリーのルートに表示するGIF名称を設定
		/////////////////////////////////////////////
		String strRootGif = "";
		strRootGif = IndividualLogCommon_inc.IMG_ROOT_LO_CLOSE_o;
		String strprm = ""; //script用TREE表示文字列

		HttpSession session = request.getSession(true);

		// ポップアップメニューを表示するJSPの設定を保持します。
		String strChildVM = "GetMenu.do";
		// 子リストを表示するJSPの設定を保持します。
		String strChildVM2 = "GetChildMatSt.do";

		String strDocument = "";
		String strMaterialID = "";

		try{
			// RealLoIDの取得
			LoClient onjData = new LoClient();
			if(onjData.getRealLOIDFromLOID(strLoID) != true){
				throw new Exception();
			}
			strRealLoID = onjData.getRealLOIDResult();

			// 教材種別を元にLoTopClientをインスタンス化
			// LOサーバ名の取得
			Environment objEnv = new Environment();
			String strLoServerName = objEnv.getLoServerName();
			// LOクラスをインスタンス化します
			LoTopClient objLoTopClient = new LoTopClient( strLoServerName, strLoType );

			// LOから教材詳細情報を取得
			if( objLoTopClient.getData(strRealLoID) ) {
				if( objLoTopClient.getDataLength() > 0 ) {
					LoComData objData = objLoTopClient.getDataInfo(0);
					// 教材IDの取得
					strMaterialID = objData.getMaterialID();
				}
			}

			// LOから教材詳細情報を取得
			Hashtable objParams = new Hashtable();
			objParams.put( "MATID", strMaterialID );
			if( objLoTopClient.getMaterialStructFile(objParams) ) {
				strDocument = objLoTopClient.getMaterialFile();
			}
			else{
				//教材構造ファイルの取得に失敗しました。;
				Exception e = new Exception();
				e.printStackTrace();
				throw e;
			}

		}catch(Exception ex){
			//システムエラー
			ex.printStackTrace();
			throw ex;
		}

		String strSectionTopID = null;
		String strSectionTopTitle = null;
		try{
			// Scorm教材構造定義取得処理（初期Scormノード作成処理）
			ScormDocument objSCONode = new ScormDocument();
			objSCONode.parseXML( strDocument );
			// ルートＩＤの設定
			strSectionTopID = objSCONode.getRootItemID();
			if(strSectionTopID.equals(null)){
				throw new Exception();
			}
			// ルートタイトルの設定
			strSectionTopTitle = objSCONode.getRootTitle();
			if(strSectionTopTitle.equals(null)){
				throw new Exception();
			}
			session.setAttribute( strLoID, objSCONode );

		}
		catch(Exception ex)
		{
			//教材構造の展開に失敗しました。
			ex.printStackTrace();
			throw ex;
		}
		// 初期展開教材リストＩＤを設定する
		strprm = strSectionTopID;

		// ツリーデータ取得用のアプレット
		String	strServerName	= request.getServerName();
		int	intServerPort	= request.getServerPort();
		String	strContextPath	= request.getContextPath();

		request.setAttribute( "strServerName", strServerName);
		request.setAttribute( "intServerPort", new Integer(intServerPort));
		request.setAttribute( "strContextPath", strContextPath);
		request.setAttribute( "strSectionTopID", strSectionTopID);
		request.setAttribute( "strRootGif", strRootGif);
		request.setAttribute( "strSectionTopTitle", strSectionTopTitle);
		request.setAttribute( "strprm", strprm);
		request.setAttribute( "strChildVM", strChildVM);
		request.setAttribute( "strChildVM2", strChildVM2);

		request.setAttribute( "strShowChildlenURL", strShowChildlenURL);
		request.setAttribute( "strTopURL", strTopURL);
		request.setAttribute( "strLoID", strLoID);
		request.setAttribute( "strAuID", strAuID);
		request.setAttribute( "strLoType", strLoType);
		request.setAttribute( "strUserID", strUserID);
		request.setAttribute( "strRealLoID", strRealLoID);
		
		return mapping.findForward("success");
	}
}
