/////////////////////////////////////////////////////////////////
//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.Environment;
import jp.co.ntt.lms.xmo.Lo.LoClient;
import jp.co.ntt.lms.xmo.MessageData;
import jp.co.ntt.lms.xmo.Lo.HistoryData;
import jp.co.ntt.lms.xmo.Lo.LoExtend.LoExtendTable;
import jp.co.ntt.lms.lo.LoTopClient;
import jp.co.ntt.lms.lo.Face2Face.Face2FaceLoPropertyDef;
import jp.co.ntt.lms.lo.Face2Face.Face2FaceLoData;
import jp.co.ntt.lms.xmo.People.PeopleClient;
import java.util.*;

import jp.co.ntt.lms.xmf.common.CommonFunction;

/**
 *  Face2Face更新アクションクラス
 * 
 *  このクラスはFace2Face更新画面のアクションクラスです。
 * 
 *  @author 梅原 浩司
 *  @version 1.0
 */
public class Face2FaceUpdateAction 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 strLoID = request.getParameter( "LoID" );
		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 strConclusion 	= "";	// 完結要件
		String strLogin_UserID	= (String)request.getSession().getAttribute( "userId" );		// ログインユーザID

		// アクションフラグが設定されていた場合は更新処理を行います
		if( strAction != null && strAction.equals( "on" ) ) {
			// 入力項目
			strLoTytle 		= request.getParameter( "LoTytle" );		// LOタイトル
			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" );	// 完結要件
		}
		String strRealLOID = ""; // RealLOID

		String strEntryDate		= CommonFunction.null2blank( request.getParameter( "EntryDate" ) );		// 登録日
		String strEntryName		= CommonFunction.null2blank( request.getParameter( "EntryName" ) );		// 登録者
		String strEntryID		= CommonFunction.null2blank( request.getParameter( "EntryID" ) );			// 登録ログインID
		String strLastDate		= CommonFunction.null2blank( request.getParameter( "LastDate" ) );			// 最終更新日
		String strLastName		= CommonFunction.null2blank( request.getParameter( "LastName" ) );			// 最終更新者
		String strLastID		= CommonFunction.null2blank( request.getParameter( "LastID" ) );			// 最終登録ログインID
		String strRenewCnt		= CommonFunction.null2blank( request.getParameter( "RenewCnt" ) );			// 更新回数
		String strPrere		 	= CommonFunction.null2blank( request.getParameter( "hdnPrere" ) );			// 前提条件
// ADD 2005/02/13 START Katsuhiko Kagami(UNITEC) [LO購入項目追加]
		String strBuyStatus 	= CommonFunction.null2blank( request.getParameter( "BuyStatus" ) );		// 購入ステータス
// ADD 2005/02/13 END Katsuhiko Kagami(UNITEC) [LO購入項目追加]
// ADD 2005/02/14 START s-mori [推奨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/14 END
//	ADD 2005/02/16 START MASUDA [属性追加対応]
		String strLomDetail 	= CommonFunction.null2blank( request.getParameter( "LomDetail" ) );
//	ADD 2005/02/16 END MASUDA

		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 {
					String strMessage =  objPeople.getMessage();
					response.sendRedirect( CommonFunction.getParamErrURL( strMessage, null, true ) );
				}
			}

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

				LoClient objLo = new LoClient();

				// LOテーブルの設定
				objLo.setWhereLoID( strLoID );				// 更新条件の設定
				objLo.setLoID( strLoID );					// LOID
				objLo.setParentID( strLoID );				// 親ID
				objLo.setLoType( strLoType );				// LOタイプ
				objLo.setLoTytle( strLoTytle );				// LOタイトル
				objLo.setLoExplanation( strLoExplanation );	// LO説明
				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 );	// 作成日
				objLo.setValue( Face2FaceLoPropertyDef.CONCLUSION, strConclusion );		// 完結要件
				objLo.setValue( Face2FaceLoPropertyDef.LOGIN_USER_ID, strLogin_UserID );	// ログインユーザID
				objLo.setValue( Face2FaceLoPropertyDef.PRERE, strPrere );					// 前提条件

				// ADD 2005/02/13 START Katsuhiko Kagami(UNITEC) [LO購入項目追加]
				// 先にLoExtendの更新を試みる。
				String strRegLoID = strLoID;
				String strRegBuyStatus = null;
				// 新規か更新かの判断
				boolean bExistLoExtend = false;
				if (objLo.selectLoExtend(strLoID)) {
					if (objLo.isExistLoExtend()) {
						// 更新処理
						bExistLoExtend = true;
					}
				}
				if (strBuyStatus.equals("")) {
					// 購入ステータスの選択が無かった場合は初期値は購入不要
					strRegBuyStatus = LoExtendTable.LOEXTEND_NOREQUIRE_BUY;
				} else {
					strRegBuyStatus = strBuyStatus;
				}

				// ADD 2005/02/14 START s-mori [推奨LO検索キーワード追加]
				//for(int k = 0; k < NUM_LOSEARCH_KEYWORD_COUNT; k++){
				//	if(!strLoSearchKeyWord[k].equals("")){
				//		strLoSearchKeyWord[k] = CommonFunction.encodeSJIS(strLoSearchKeyWord[k]);
				//	}
				//}
				// ADD 2005/02/14 END

				if (bExistLoExtend) {
					// 既存のレコードの更新処理
					if (!objLo.updateLoExtend(strRegLoID, strRegBuyStatus, strLoSearchKeyWord[0], strLoSearchKeyWord[1], strLoSearchKeyWord[2], strLoSearchKeyWord[3], strLoSearchKeyWord[4])) {
						// LoExtendの更新の失敗
//	 ADD 2005/02/23 START Tsuboi [エラーURLを返却]						
						request.setAttribute("errorurl", objLo.getURL());
//	 ADD 2005/02/23 END Tsuboi
						return mapping.findForward("error");
					}
				} else {
					// 未登録なので新規登録する
					if (!objLo.insertLoExtend(strRegLoID, strRegBuyStatus, strLoSearchKeyWord[0], strLoSearchKeyWord[1], strLoSearchKeyWord[2], strLoSearchKeyWord[3], strLoSearchKeyWord[4])) {
						// LoExtendの登録の失敗
//	 ADD 2005/02/23 START Tsuboi [エラーURLを返却]						
						request.setAttribute("errorurl", objLo.getURL());
//	 ADD 2005/02/23 END Tsuboi
						return mapping.findForward("error");
					}
				}
//	 ADD 2005/02/13 END Katsuhiko Kagami(UNITEC) [LO購入項目追加]

//		ADD 2005/02/16 START MASUDA [属性追加対応]
				//LOM情報設定
				if ((strLomDetail != null) && !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)) {
						// Lom更新の失敗
//	 ADD 2005/02/23 START Tsuboi [エラーURLを返却]						
						request.setAttribute("errorurl", objLo.getURL());
//	 ADD 2005/02/23 END Tsuboi
						return mapping.findForward("error");
					}
				}
//		ADD 2005/02/16 END MASUDA
				
				// 更新処理の実行
				if( !objLo.update() )
				{
					// 更新がうまくいかなかった場合
					if( objLo.isErr() )
					{
						// エラーの場合
						response.sendRedirect( objLo.getURL() );
					}
					else
					{
						String strMessage =  objLo.getMessage();
						String strWarURL = CommonFunction.getParamErrURL( strMessage, null, true );
						response.sendRedirect( CommonFunction.getParamErrURL( strMessage, null, true ) );
					}
				}
			}
			else {
				//UserIDが存在しない場合エラーを出力する
				String 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);		//完結要件
			//strEntryDate		= CommonFunction.encodeSJIS(strEntryDate);
			//strEntryName		= CommonFunction.encodeSJIS(strEntryName);
			//strEntryID			= CommonFunction.encodeSJIS(strEntryID);
			//strLastDate			= CommonFunction.encodeSJIS(strLastDate);
			//strLastName			= CommonFunction.encodeSJIS(strLastName);
			//strLastID			= CommonFunction.encodeSJIS(strLastID);
			//strRenewCnt			= CommonFunction.encodeSJIS(strRenewCnt);
			//strPrere			= CommonFunction.encodeSJIS(strPrere);
// ADD 2005/02/13 START Katsuhiko Kagami(UNITEC) [LO購入項目追加]
			//strBuyStatus		= CommonFunction.encodeSJIS(strBuyStatus);
// ADD 2005/02/13 END Katsuhiko Kagami(UNITEC) [LO購入項目追加]
// ADD 2005/02/16 START MASUDA [属性追加対応]
			//strLomDetail 		= CommonFunction.encodeSJIS(strLomDetail);
// ADD 2005/02/16 END MASUDA
		}
		// アクションフラグが設定されていない場合は更新情報を取得します
		else {

			LoClient objLo = new LoClient();
			//検索条件を設定
			objLo.setWhereLoID( strLoID );

			// 検索処理
			if( !objLo.select() ) {
				// 検索がうまくいかなかった場合
				if( objLo.isErr() )
				{
					// エラーの場合
					response.sendRedirect( objLo.getURL() );
				}
				else
				{
					String strMessage =  objLo.getMessage();
					String strWarURL = CommonFunction.getParamErrURL( strMessage, null, true );
					response.sendRedirect( CommonFunction.getParamErrURL( strMessage, null, true ) );
				}
			}

			// 検索がうまくいった場合はデータを取得する
			if( objLo.next() ){
				strForeignID = objLo.getForeignID();
				strKeyWord = objLo.getKeyWord();
				strLoExplanation = objLo.getLoExplanation();
				strLoTytle = objLo.getLoTytle();
				strConclusion = objLo.getConclusion();		//完結要件
				strVersion =  objLo.getLoVersion();			//バージョン
				strRealLOID = objLo.getRealLOID();
				strPrere = objLo.getPrere();

			}

			// 検索条件を設定
			if( !objLo.selectHistory(strRealLOID) ) {
				// 検索がうまくいかなかった場合
				if( objLo.isErr() ) {
					// エラーの場合
					response.sendRedirect( objLo.getURL() );
				}
				else {
					String strMessage =  objLo.getMessage();
					response.sendRedirect( CommonFunction.getParamErrURL( strMessage, null, true ) );
				}
			}

			// LOHistoryデータの取得
			HistoryData objHistory = (HistoryData)objLo.getHistory();
			strEntryDate	= objHistory.getEntryDate();
			strLastDate		= objHistory.getLastDate();
			strRenewCnt		= objHistory.getRenewCnt();
			strEntryID		= objHistory.getEntryLoginID();
			if( strEntryID == null || strEntryID.equals(""))
			{
				strEntryID		= "---";
			}
			strEntryName	= objHistory.getEntryUserName();
			if( strEntryName == null || strEntryName.equals(""))
			{
				strEntryName	= "---";
			}
			strLastID		= objHistory.getLastLoginID();
			if( strLastID == null || strLastID.equals(""))
			{
				strLastID		= "---";
			}
			strLastName		= objHistory.getLastUserName();
			if( strLastName == null || strLastName.equals(""))
			{
				strLastName		= "---";
			}

//			 ADD 2005/02/13 START Katsuhiko Kagami(UNITEC) [LO購入項目追加]
			if (objLo.selectLoExtend(strLoID)) {
				// LoExtendがあれば取得する
				if (objLo.isExistLoExtend()) {
					// 購入ステータスの更新
					strBuyStatus = CommonFunction.null2blank(objLo.getLoExtendRecord().getBuy());
					//if( strBuyStatus != "" )
					//{
					//	strBuyStatus = CommonFunction.encodeSJIS(strBuyStatus);
					//}
				}
			}
//	 ADD 2005/02/13 END Katsuhiko Kagami(UNITEC) [LO購入項目追加]
//	 ADD 2005/02/14 START s-mori [推奨LO検索キーワード追加]
			if(objLo.getLoExtendRecord() != null){
				strLoSearchKeyWord[0] = CommonFunction.null2blank(objLo.getLoExtendRecord().getKeyword1());
				strLoSearchKeyWord[1] = CommonFunction.null2blank(objLo.getLoExtendRecord().getKeyword2());
				strLoSearchKeyWord[2] = CommonFunction.null2blank(objLo.getLoExtendRecord().getKeyword3());
				strLoSearchKeyWord[3] = CommonFunction.null2blank(objLo.getLoExtendRecord().getKeyword4());
				strLoSearchKeyWord[4] = CommonFunction.null2blank(objLo.getLoExtendRecord().getKeyword5());
			}else{
				for(int k = 0; k < NUM_LOSEARCH_KEYWORD_COUNT; k++){
					strLoSearchKeyWord[k] = "";
				}
			}
//	 ADD 2005/02/14 END

			// Loサーバ名を取得する
			Environment objEnv = new Environment();
			String strLoServerName = objEnv.getLoServerName();

			LoTopClient objLoTop = new LoTopClient( strLoServerName, strLoType );

			//個別テーブル検索条件を設定
			objLoTop.setValue(Face2FaceLoPropertyDef.LOID, strRealLOID);

			// 検索メソッド実行
			if( !objLoTop.getIndividualLog( null, strLoID ) ) {
				// 検索がうまくいかなかった場合
				MessageData objMessage = objLoTop.getMessageData();
				response.sendRedirect( objMessage.getURL() );
			}

			Vector objIndividualLog = (Vector)objLoTop.getIndividualLog();

			for(int i=0; i<objIndividualLog.size(); i++){
				Face2FaceLoData objLoData = (Face2FaceLoData)objIndividualLog.elementAt(i);

				strUserID =  objLoData.getTeacherID();			//講師ID	
				strCreateDate =  objLoData.getCreateDate();		//作成日

			}

			//Face2FaceLoテーブルUserIDよりログインIDを取得
			PeopleClient objPeople = new PeopleClient();
			// 検索条件の設定
			objPeople.setWhereUserID( strUserID );
			if( !objPeople.select() ) {
				// 検索がうまくいかなかった場合
				if( objPeople.isErr() ) {
					// エラーの場合
					response.sendRedirect( objPeople.getURL() );
				}
				else {
					String strMessage =  objPeople.getMessage();
					response.sendRedirect( CommonFunction.getParamErrURL( strMessage, null, true ) );
				}
			}

			// User情報の取得
			if( objPeople.next() ) {
				strTeacherID = objPeople.getLoginID();
			}
			else {
			}
		}

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

//		 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("strLoID", strLoID);
		request.setAttribute("strReturnURL", strReturnURL);
		request.setAttribute("strAction", strAction);
		request.setAttribute("strLoType", strLoType);
		request.setAttribute("strConclusion", strConclusion);
		request.setAttribute("strEntryDate", strEntryDate);
		request.setAttribute("strEntryName", strEntryName);
		request.setAttribute("strEntryID", strEntryID);
		request.setAttribute("strLastDate", strLastDate);
		request.setAttribute("strLastName", strLastName);
		request.setAttribute("strLastID", strLastID);
		request.setAttribute("strRenewCnt", strRenewCnt);
		request.setAttribute("strPrere", strPrere);
		request.setAttribute("strLoTytle", strLoTytle);
		request.setAttribute("strForeignID", strForeignID);
		request.setAttribute("strKeyWord", strKeyWord);
		request.setAttribute("strLoExplanation", strLoExplanation);
		request.setAttribute("strVersion", strVersion);
		request.setAttribute("strRenewCnt", strRenewCnt);
		request.setAttribute("strShowPrere", strShowPrere);
		request.setAttribute("strTeacherID", strTeacherID);
		request.setAttribute("strErrFlg", strErrFlg);

//		 ADD 2005/02/23 START Tsuboi [購入フラグ、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

		// セッションに入っているLOM属性をクリアする。
		request.getSession().setAttribute("sesLomDetail" , "");  

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