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

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

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 jp.co.ntt.lms.xmo.util.XMODate;
import jp.co.ntt.lms.xmo.Environment;
import jp.co.ntt.lms.xmo.Lo.LoClient;
import jp.co.ntt.lms.lo.Face2Face.Face2FaceLoPropertyDef;
import java.util.*;
import jp.co.ntt.lms.xmo.People.PeopleClient;
import jp.co.ntt.lms.xmo.Lo.LoMessage;

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購入項目追加] 

/**
 *  Face2Face登録アクションクラス
 * 
 *  このクラスはFace2Face登録画面のアクションクラスです。
 * 
 *  @author 梅原 浩司
 *  @version 1.0
 */
public class Face2FaceInsertAction 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 resMsg = getResources(request, "msg.xmf.xmo.People.PeopleMessage");

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

		String strLoTytle 		= "";	// LOタイトル
		String strForeignID 	= "";	// 外部ID
		String strKeyWord 		= "";	// キーワード
		String strLoExplanation = "";	// 説明
		String strVersion 		= "";	// バージョン
		String strCreateDate 	= "";	// 作成日
		String strTeacherID 	= "";	// 講師ID(LoginID)
		String strUserID		= "";	// 講師のUserID
		String strPrere	 		= "";	// 前提条件
		String strLogin_UserID = (String)request.getSession().getAttribute( "userId" );		// ログインユーザID

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

		//XMsS.iniファイルからユーザPrefix情報を取得する
		Environment ObjEnv = new Environment();
		String StrPrefix=ObjEnv.getLoPrefix();

		String strConclusion 	= "";	// 完結要件
// 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 [属性追加対応]

		// アクションフラグが設定されていた場合は入力情報を取得します
		if( strAction != null && strAction.equals( "on" ) ) {
			// 入力項目
			strLoTytle 		= request.getParameter( "LoTytle" );		// LOタイトル
			//XMS.iniファイルにユーザPrefixが設定されていない場合
			if ( StrPrefix == null ){
				strForeignID 	= request.getParameter( "ForeignID" );		// 外部ID
			}
			strKeyWord 		= request.getParameter( "KeyWord" );		// キーワード
			strLoExplanation = request.getParameter( "Loexplanation" );	// 説明
			strVersion 		= request.getParameter( "Version" );		// バージョン
			strCreateDate 	= request.getParameter( "LocreateDate" );	// 作成日
			strTeacherID 	= request.getParameter( "TeacherID" );		// 講師ID
			strConclusion 	= request.getParameter( "hdnConclusion" );	// 完結要件
			strPrere	 	= CommonFunction.null2blank( request.getParameter( "hdnPrere" ) );	// 前提条件

		}

		String strErrFlg = "";

		// アクションフラグが設定されていた場合は登録処理を行います
		if( strAction != null && strAction.equals( "on" ) ) {
			//ログインIDからUserIdを取得する。
			PeopleClient objPeople = new PeopleClient();
			// 検索条件の設定
			objPeople.setWhereLoginID( strTeacherID );
			if( !objPeople.select() ) {
				// 検索がうまくいかなかった場合
				if( objPeople.isErr() ) {
					// エラーの場合
					response.sendRedirect( objPeople.getURL() );
				}
				else {
					strMessage =  objPeople.getMessage();
					response.sendRedirect( CommonFunction.getParamErrURL( strMessage, null, true ) );
				}
			}

			// User情報の取得
			if( objPeople.next() ) {
				strUserID = objPeople.getUserID();

				LoClient objLo = new LoClient();

				// LOテーブルの設定
				objLo.setParentID( strParentID );			// 親ID
				objLo.setLoType( strLoType );				// LOタイプ
				objLo.setLoTytle( strLoTytle );				// LOタイトル
				objLo.setLoExplanation( strLoExplanation );		// LO説明
				//XMS.iniファイルにユーザPrefixが設定されていない場合
				if ( StrPrefix == null ){

					objLo.setForeignID( strForeignID );		// 外部ID
				}

				objLo.setKeyWord( strKeyWord );				// キーワード
				objLo.setDeleteFlag( "0" );					// 隠しフラグ

				// Face2Face教材個別テーブルの設定
				// 共通登録項目の設定
				objLo.setValue( Face2FaceLoPropertyDef.TEACHERID, strUserID );			// 講師ID
				objLo.setValue( Face2FaceLoPropertyDef.LOVERSION, strVersion );			// バージョン
				objLo.setValue( Face2FaceLoPropertyDef.LOCREATEDATE, strCreateDate );	// 作成日
				// 学習開始日
				String strStartDate = XMODate.parseTime(new Date());
				objLo.setValue( Face2FaceLoPropertyDef.STUDY_START_DATE, strStartDate );	// 学習開始日
				objLo.setValue( Face2FaceLoPropertyDef.CONCLUSION, strConclusion );		// 完結要件

				objLo.setValue( Face2FaceLoPropertyDef.LOGIN_USER_ID, strLogin_UserID );	// ログインユーザID
				objLo.setValue( Face2FaceLoPropertyDef.PRERE, strPrere );					// 前提条件

				// 登録処理の実行
				if( !objLo.insert() )
				{
					// 登録がうまくいかなかった場合
					if( objLo.isErr() )
					{
						// エラーの場合
						response.sendRedirect( objLo.getURL() );
					}
					else
					{
						
						strMessage =  objLo.getMessage();
						//メッセージIDを取得する
						strMessageID = objLo.getMessageID();
						strForeignMessageID = LoMessage.EXIT_FOREIGNID_WAR;
						strMessage =  objLo.getMessage();
					}
// 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キーワード追加]			
			}
			else {
				//UserIDが存在しない場合エラーを出力する
				strMessage =  resMsg.getMessage("M032010");
				String strDetail = null;
				strErrFlg = "error";
			}
			// エンコード変換処理
			//strLoTytle = CommonFunction.encodeSJIS( strLoTytle );				// LOタイトル
			//strForeignID 	= CommonFunction.encodeSJIS( strForeignID );		// 外部ID
			//strKeyWord 		= CommonFunction.encodeSJIS( strKeyWord );			// キーワード
			//strLoExplanation = CommonFunction.encodeSJIS( strLoExplanation );	// 説明
			//strVersion 		= CommonFunction.encodeSJIS( strVersion );			// バージョン
			//strCreateDate 	= CommonFunction.encodeSJIS( strCreateDate );		// 作成日
			//strTeacherID 	= CommonFunction.encodeSJIS( strTeacherID );		// 講師ID
			//strConclusion = CommonFunction.encodeSJIS( strConclusion );		//完結要件
			//strPrere		= CommonFunction.encodeSJIS(strPrere);				// 前提条件

		}
		strCreateDate		= CommonFunction.blank2today(strCreateDate);

// 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 [属性追加対応]

//		 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
		
		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("strKeyWord", strKeyWord);
		request.setAttribute("strLoExplanation", strLoExplanation);
		request.setAttribute("strVersion", strVersion);
		request.setAttribute("strShowPrere", strShowPrere);
		request.setAttribute("strTeacherID", strTeacherID);
		request.setAttribute("strErrFlg", strErrFlg);
// 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");
	}
}
