/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//	ScormLO登録アクションクラス
//
//		変更履歴
//			2005.02.16  新規作成  梅原 浩司
//
//	機能
//
//	このクラスはScormLO登録画面のアクションクラスです。
//
////////////////////////////////////////////////////////////////

package jp.co.ntt.lms.xmf.actions.lo.scorm;

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

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 java.util.*;

import jp.co.ntt.lms.xmo.Environment;
import jp.co.ntt.lms.xmo.Lo.LoClient;
import jp.co.ntt.lms.xmo.Lo.MaterialData;
import jp.co.ntt.lms.lo.LoPropertyDef;
import jp.co.ntt.lms.lo.LoTopClient;
import jp.co.ntt.lms.xmo.Lo.LoMessage;
import jp.co.ntt.lms.lo.scorm.ScormLoEnv;
import jp.co.ntt.lms.xmf.common.CommonFunction;
//ADD 2005/02/13 START Katsuhiko Kagami(UNITEC) [LO購入項目追加]
import jp.co.ntt.lms.xmo.Lo.LoExtend.LoExtendTable;
//ADD 2005/02/13 END Katsuhiko Kagami(UNITEC) [LO購入項目追加] 

/**
 *  ScormLO登録アクションクラス
 * 
 *  このクラスはScormLO登録画面のアクションクラスです。
 * 
 *  @author 梅原 浩司
 *  @version 1.0
 */
public class ScormLoInsertAction extends Action {

//	ADD 2005/02/23 START Tsuboi(UNITEC) [キーワードリスト数]
	private final int NUM_LOSEARCH_KEYWORD_COUNT = 5;
//ADD 2005/02/23 END Tsuboi(UNITEC) [キーワードリスト数] 

	/**
	 * executeメソッド
	 * 
	 * @param ActionMapping このアクションが選択されたときに使用されたActionMapping
	 * @param ActionForm 入力フォーム
	 * @param HttpServletRequest HTTPリクエスト
	 * @param HttpServletResponse HTTPレスポンス
	 * @return ActionForward アクションフォワード
	 * @throws Exception 
	 */
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {

		// メッセージリソース取得
		MessageResources resources = getResources(request, "msg.xmf.lo.scorm.MessageResources");

		// URLパラメータの取得
		String strParentID = request.getParameter( "parentID" );
		String strLoType = request.getParameter( "LoType" );
		String strReturnURL = request.getParameter( "returnURL" );
		String strAction = request.getParameter( "action" );

		//サーバエラーメッセージ
		String strMessage = null;
		// 外部ID
		String strForeignID = "";
		//メッセージID
		String strMessageID = null;
		// 外部メッセージID
		String strForeignMessageID = null;

		////////////////////////////////////////////////////////////////////////////
		// 入力項目
		// =========================================================================
		// LOタイトル
		String strLoTytle = CommonFunction.null2blank( request.getParameter( "LoTytle" ) );
		// 外部ID
		//XMsS.iniファイルからLO-Prefix情報を取得する
		Environment objEnv = new Environment();
		String StrPrefix=objEnv.getLoPrefix();
		if ( StrPrefix == null ){
			strForeignID = CommonFunction.null2blank( request.getParameter( "ForeignID" ) );
		}

		// 教材ID
		String strMaterialID    = CommonFunction.null2blank( request.getParameter( "MaterialID" ) );
		// キーワード
		String strKeyWord       = CommonFunction.null2blank( request.getParameter( "KeyWord" ) );
		// 説明
		String strLoExplanation = CommonFunction.null2blank( request.getParameter( "Loexplanation" ) );
		// バージョン
		String strVersion       = CommonFunction.null2blank( request.getParameter( "Version" ) );
		// 作成日
		String strCreateDate    = CommonFunction.null2blank( request.getParameter( "LocreateDate" ) );
		// 完結要件
		String strConclusion    = CommonFunction.null2blank( request.getParameter( "hdnConclusion" ) );
		// ログインユーザID
		String strLogin_UserID  = (String)request.getSession().getAttribute( "userId" );
		// Windowサイズ(縦)
		String strWinHeight     = CommonFunction.null2blank( request.getParameter( "txtWinHeight" ) );
		// Windowサイズ(横)
		String strWinWidth      = CommonFunction.null2blank( request.getParameter( "txtWinWidth" ) );
		// 前提条件
		String strPrere         = CommonFunction.null2blank( request.getParameter( "hdnPrere" ) );

//		 ADD 2005/02/23 START NaotoIto [LO購入項目追加]
		String strBuyStatus 	= CommonFunction.null2blank( request.getParameter( "BuyStatus" ) );		// 購入ステータス
// ADD 2005/02/23 END NaotoIto [LO購入項目追加]
// ADD 2005/02/23 START NaotoIto [推奨LO検索キーワード追加]
		String[] strLoSearchKeyWord = new String[NUM_LOSEARCH_KEYWORD_COUNT];
		for(int k = 0; k < NUM_LOSEARCH_KEYWORD_COUNT; k++){
			strLoSearchKeyWord[k] = CommonFunction.null2blank(request.getParameter("LoSearchKeyWord_" + k));
		}
// ADD 2005/02/23 END NaotoIto [推奨LO検索キーワード追加]
// ADD 2005/02/23 START NaotoIto [属性追加対応]
		String strLomDetail 	= CommonFunction.null2blank( request.getParameter( "LomDetail" ) );
// ADD 2005/02/23 END NaotoIto [属性追加対応]

		// 教材リスト
		Vector vecMaterialList = new Vector();
		// アクションフラグが設定されていた場合は登録処理を行います
		if( strAction != null && strAction.equals( "on" ) ) {
			LoClient objLo = new LoClient();
			////////////////////////////////////////////////////////////////////////
			// LOテーブルの設定
			// =====================================================================
			// 親ID
			objLo.setParentID( strParentID );
			// LOタイプ
			objLo.setLoType( strLoType );
			// LOタイトル
			objLo.setLoTytle( strLoTytle );
			// LO説明
			objLo.setLoExplanation( strLoExplanation );
			//XMS.iniファイルにユーザPrefixが設定されていない場合
			if ( StrPrefix == null ){
				// 外部ID
				objLo.setForeignID( strForeignID );
			}
			// キーワード
			objLo.setKeyWord( strKeyWord );
			// 隠しフラグ
			objLo.setDeleteFlag( "0" );

			////////////////////////////////////////////////////////////////////////
			// Scorm教材個別テーブルの設定
			// =====================================================================
			// バージョン
			objLo.setValue( LoPropertyDef.LOVERSION, strVersion );
			// 作成日付
			objLo.setValue( LoPropertyDef.LOCREATEDATE, strCreateDate );
			// 教材ID
			objLo.setValue( LoPropertyDef.MATERIALID, strMaterialID );
			// 完結要件
			objLo.setValue( LoPropertyDef.CONCLUSION, strConclusion );
			// ログインユーザID
			objLo.setValue( LoPropertyDef.LOGIN_USER_ID, strLogin_UserID );
			// Windowサイズ(縦)
			objLo.setValue( LoPropertyDef.WINHEIGHT, strWinHeight );
			// Windowサイズ(横)
			objLo.setValue( LoPropertyDef.WINWIDTH, strWinWidth );
			// 前提条件
			objLo.setValue( LoPropertyDef.PRERE, strPrere );

			// 登録処理の実行
			if( !objLo.insert() ) {
				// 検索がうまくいかなかった場合
				if( objLo.isErr() ) {
					// エラーの場合
					response.sendRedirect( objLo.getURL() );
				}
					
				strMessage =  objLo.getMessage();
				//メッセージIDを取得する
				strMessageID = objLo.getMessageID();
				strForeignMessageID = LoMessage.EXIT_FOREIGNID_WAR;
//				 ADD 2005/02/23 START NaotoIto [LO購入項目追加][推奨LOキーワード追加]
			} else {
				if (objLo.next()) {
					// Loの登録に成功した場合は、LoExtendの登録を行う。
					String strRegLoID = objLo.getLoID();
					String strRegBuyStatus = null;
					if (strBuyStatus.equals("")) {
						// 購入ステータスの選択が無かった場合は初期値は購入不要
						strRegBuyStatus = LoExtendTable.LOEXTEND_NOREQUIRE_BUY;
					} else {
						strRegBuyStatus = strBuyStatus;
					}
	
//	 ADD 2005/02/23 START NaotoIto [推奨LO検索キーワード追加]
					//for(int k = 0; k < NUM_LOSEARCH_KEYWORD_COUNT; k++){
					//	if(!strLoSearchKeyWord[k].equals("")){
					//		strLoSearchKeyWord[k] = CommonFunction.encodeSJIS(strLoSearchKeyWord[k]);
					//	}
					//}
//	 ADD 2005/02/23 END NaotoIto [推奨LO検索キーワード追加]
				
					if (!objLo.insertLoExtend(strRegLoID, strRegBuyStatus, strLoSearchKeyWord[0], strLoSearchKeyWord[1], strLoSearchKeyWord[2], strLoSearchKeyWord[3], strLoSearchKeyWord[4])) {
						// LoExtendの登録の失敗
//	 ADD 2005/02/23 START NaotoIto [エラーURLを返却]
						request.setAttribute("errorurl", objLo.getURL());
						return mapping.findForward("error");						
//	 ADD 2005/02/23 END NaotoIto [エラーURLを返却]
					}

//	 ADD 2005/02/23 START NaotoIto [属性追加対応]
					if (!strLomDetail.trim().equals("")) {
						//改行変換
						for (int cnt = 0; cnt < strLomDetail.trim().length(); cnt ++) {
							strLomDetail = CommonFunction.replace(strLomDetail.trim(), "<br>", "\r\n");
						}
	
						Vector inDisoData = objLo.setLomDetailData(strLomDetail, strRegLoID);
						if (!objLo.updateLomData(inDisoData)) {
							// LoExtendの登録の失敗
//	 ADD 2005/02/23 START NaotoIto [エラーURLを返却]
							request.setAttribute("errorurl", objLo.getURL());
							return mapping.findForward("error");						
//	 ADD 2005/02/23 END NaotoIto [エラーURLを返却]
						}
					}
//	 ADD 2005/02/23 END NaotoIto [属性追加対応]
				} else {
					// Lo登録に失敗したケース。ロジック的にはここには来ないはず
//	 ADD 2005/02/23 START NaotoIto [エラーURLを返却]
					request.setAttribute("errorurl", objLo.getURL());
					return mapping.findForward("error");
//	 ADD 2005/02/23 END NaotoIto [エラーURLを返却]											
				}
			}
//	 ADD 2005/02/23 END NaotoIto  [LO購入項目追加][推奨LOキーワード追加]			
		}
		// 教材リストを取得する。
		String strLoServerName = objEnv.getLoServerName();

		LoTopClient objLoTop = new LoTopClient(strLoServerName, strLoType);
		objLoTop.setValue( resources.getMessage("METHOD_TYPE"), resources.getMessage("METHOD_INSERT") );
		if( objLoTop.getMaterialList() ) {
			for( int i = 0; i < objLoTop.getMaterialSize(); i++ ) {
				MaterialData objMaterial = objLoTop.getMaterialData(i);
				vecMaterialList.add( objMaterial );
			}
		}

		//文字化け対応
		//if( strLoTytle != "" )
		//{
		//	strLoTytle = CommonFunction.encodeSJIS(strLoTytle);
		//}
		//if( strForeignID != "" )
		//{
		//	strForeignID = CommonFunction.encodeSJIS(strForeignID);
		//}
		//if( strKeyWord != "" )
		//{
		//	strKeyWord = CommonFunction.encodeSJIS(strKeyWord);
		//}
		//if( strLoExplanation != "" )
		//{
		//	strLoExplanation = CommonFunction.encodeSJIS(strLoExplanation);
		//}
		//if( strVersion != "" )
		//{
		//	strVersion = CommonFunction.encodeSJIS(strVersion);
		//}
		//if( strCreateDate != "" )
		//{
		//	strCreateDate = CommonFunction.encodeSJIS(strCreateDate);
		//}
		//if( strMaterialID != "" )
		//{
		//	strMaterialID = CommonFunction.encodeSJIS(strMaterialID);
		//}
		//if( strConclusion != "" )
		//{
		//	strConclusion = CommonFunction.encodeSJIS(strConclusion);
		//}
		//if( strWinHeight != "" )
		//{
		//	strWinHeight = CommonFunction.encodeSJIS(strWinHeight);
		//}
		//if( strWinWidth != "" )
		//{
		//	strWinWidth = CommonFunction.encodeSJIS(strWinWidth);
		//}
		//if( strPrere != "" )
		//{
		//	strPrere = CommonFunction.encodeSJIS(strPrere);
		//}

//	 ADD 2005/02/23 START NaotoIto [LO購入項目追加]
		//if( strBuyStatus != "" )
		//{
		//	strBuyStatus = CommonFunction.encodeSJIS(strBuyStatus);
		//}
//	 ADD 2005/02/23 END NaotoIto [LO購入項目追加]

		// 改行コード"\n"を"<br>"に置換
		String strShowPrere = "";
		if ( strPrere != null && !strPrere.equals( "" ) )
		{
			strShowPrere = CommonFunction.replace( strPrere, "\n", "<br>" );
		}

//	 ADD 2005/02/23 START NaotoIto [属性追加対応]
		//if( strLomDetail != "" )
		//{
		//	strLomDetail = CommonFunction.encodeSJIS(strLomDetail);
		//}
		// 改行コード"\n"を"<br>"に置換
		String strShowLomDetail = "";
		if ( strLomDetail != null && !strLomDetail.equals( "" ) )
		{
			strShowLomDetail = CommonFunction.replace( strLomDetail, "\n", "<br>" );
		}
//	 ADD 2005/02/23 END NaotoIto [属性追加対応]

		strCreateDate = CommonFunction.blank2today(strCreateDate);

//		 ADD 2005/02/23 START Tsuboi [strLoSearchKeyWordをVectorに挿入]
		Vector vecLoSearchKeyWordList = new Vector();		
		for(int k = 0; k < NUM_LOSEARCH_KEYWORD_COUNT; k++){
			vecLoSearchKeyWordList.add(strLoSearchKeyWord[k]) ;
		}
//		 ADD 2005/02/23 END Tsuboi

		ScormLoEnv objLoEnv = new ScormLoEnv();

		request.setAttribute("strParentID", strParentID);
		request.setAttribute("strMessage", strMessage);
		request.setAttribute("strReturnURL", strReturnURL);
		request.setAttribute("strMessageID", strMessageID);
		request.setAttribute("strForeignMessageID", strForeignMessageID);
		request.setAttribute("strAction", strAction);
		request.setAttribute("strLoType", strLoType);
		request.setAttribute("strConclusion", strConclusion);
		request.setAttribute("strCreateDate", strCreateDate);
		request.setAttribute("strPrere", strPrere);
		request.setAttribute("strLoTytle", strLoTytle);
		request.setAttribute("StrPrefix", StrPrefix);
		request.setAttribute("strForeignID", strForeignID);
		request.setAttribute("strWinHeight", strWinHeight);
		request.setAttribute("strWinWidth", strWinWidth);
		request.setAttribute("strKeyWord", strKeyWord);
		request.setAttribute("strLoExplanation", strLoExplanation);
		request.setAttribute("strVersion", strVersion);
		request.setAttribute("strShowPrere", strShowPrere);
		request.setAttribute("vecMaterialList", vecMaterialList);
		request.setAttribute("objLoEnv", objLoEnv);
//		 ADD 2005/02/23 START NaotoKIto [購入フラグ、LO詳細の為のパラメータ、推奨LO検索キーワードの引渡] 他
		request.setAttribute("LOEXTEND_REQUIRE_BUY", LoExtendTable.LOEXTEND_REQUIRE_BUY);
		request.setAttribute("LOEXTEND_NOREQUIRE_BUY", LoExtendTable.LOEXTEND_NOREQUIRE_BUY);
		request.setAttribute("strBuyStatus", strBuyStatus);
		request.setAttribute("strLomDetail", strLomDetail);
		request.setAttribute("vecLoSearchKeyWordList", vecLoSearchKeyWordList);
// ADD 2005/02/23 END NaotoKIto [購入フラグ、LO詳細の為のパラメータ、推奨LO検索キーワードの引渡] 他
		
//		 セッションに入っているLOM属性をクリアする。
		request.getSession().setAttribute("sesLomDetail" , "");  

		return mapping.findForward("success");
	}
}
