/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//	PerceptionLo更新画面表示Actionクラス
//
//		変更履歴
//			2005.02.16  新規作成  氏名 石崎賢太郎
//
//	機能
//
//	PerceptionLo更新画面表示Actionクラスです。
//
/////////////////////////////////////////////////////////////////
package jp.co.ntt.lms.xmf.actions.lo.Perception;

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

import jp.co.ntt.lms.lo.LoComData;
import jp.co.ntt.lms.lo.LoTopClient;
import jp.co.ntt.lms.lo.Perception.PerceptionLoData;
import jp.co.ntt.lms.lo.Perception.PerceptionLoEnv;
import jp.co.ntt.lms.lo.Perception.PerceptionPropertyDef;
import jp.co.ntt.lms.xmf.common.CommonFunction;
import jp.co.ntt.lms.xmo.Environment;
import jp.co.ntt.lms.xmo.MessageData;
import jp.co.ntt.lms.xmo.Lo.HistoryData;
import jp.co.ntt.lms.xmo.Lo.LoClient;

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;
// ADD 2005/02/13 START Katsuhiko Kagami(UNITEC) [LO購入項目追加]
import java.util.*;
import jp.co.ntt.lms.xmo.Lo.LoExtend.LoExtendTable;
//ADD 2005/02/13 END Katsuhiko Kagami(UNITEC) [LO購入項目追加] 

/**
 * PerceptionLo更新画面表示Actionクラスです。
 * 
 * @author Kentaro Ishizaki (UNITEC)
 * @version 1.0
 */
public class PerceptionLoUpdateAction extends Action
{
//ADD 2005/02/23 START Tsuboi(UNITEC) [キーワードリスト数]
	private final int NUM_LOSEARCH_KEYWORD_COUNT = 5;
//ADD 2005/02/23 END Tsuboi(UNITEC) [キーワードリスト数] 

	/**
	 * strutsフレームワークから呼ばれるメソッドです。
	 * 
	 * @param mapping マッピングオブジェクト。
	 * @param form アクションフォームオブジェクト。
	 * @param request リクエストオブジェクト。
	 * @param response レスポンスオブジェクト。
	 * @return ActionForward アクションフォワードオブジェクト。
	 * @throws Exception
	 */
	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception
	{
		// メッセージリソース取得
		MessageResources resources = getResources(request, "msg.xmf.xmo.Lo.MessageResources");
		
		// URLパラメータの取得
		String strLoID = request.getParameter( "LoID" );
		String strLoType = request.getParameter( "LoType" );
		String strReturnURL = request.getParameter( "returnURL" );
		String strAction = request.getParameter( "action" );
		String strLogin_UserID	= (String)request.getSession().getAttribute( "userId" );		// ログインユーザID

		// 入力項目
		String strLoTytle 		= CommonFunction.null2blank( request.getParameter( "LoTytle" ) );			// LOタイトル
		String strForeignID 	= CommonFunction.null2blank( request.getParameter( "ForeignID" ) );		// 外部ID
		String strKeyWord 		= CommonFunction.null2blank( request.getParameter( "KeyWord" ) );			// キーワード
		String strLoExplanation = CommonFunction.null2blank( request.getParameter( "Loexplanation" ) );	// 説明
		String strVersion 		= CommonFunction.null2blank( request.getParameter( "Version" ) );			// バージョン
		String strAssessmentID 	= CommonFunction.null2blank( request.getParameter( "AssessmentID" ) );		// アセスメントID
		String strSessionName 	= CommonFunction.null2blank( request.getParameter( "SessionName" ) );	// セッション名
		String strWinHeight	 	= CommonFunction.null2blank( request.getParameter( "txtWinHeight" ) );		// Windowサイズ(縦)
		String strWinWidth	 	= CommonFunction.null2blank( request.getParameter( "txtWinWidth" ) );		// Windowサイズ(横)

		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" ) );			// 前提条件

		String strRealLOID 	    = "";		// RealLOID
// 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

		// アクションフラグが設定されていた場合は更新処理を行います
		if( strAction != null && strAction.equals( "on" ) ) {
			LoClient objLo = new LoClient();

			// LOテーブルの設定
			objLo.setWhereLoID( strLoID );				// LOID
			objLo.setLoType( strLoType );				// LOタイプ
			objLo.setForeignID( strForeignID );			// 外部ID
			objLo.setKeyWord( strKeyWord );				// キーワード
			objLo.setDeleteFlag( "0" );					// 隠しフラグ("0"で固定)

			// Perception教材個別テーブルの設定
			// 共通登録項目の設定
			objLo.setValue( PerceptionPropertyDef.LOID, strLoID );
			objLo.setValue( PerceptionPropertyDef.LOEXPLANATION, strLoExplanation );	// LO説明
			objLo.setValue( PerceptionPropertyDef.LOTITLE, strLoTytle );				// LOタイトル
			objLo.setValue( PerceptionPropertyDef.LOVERSION, strVersion );				// バージョン

			objLo.setValue( PerceptionPropertyDef.WINHEIGHT, strWinHeight );				// Windowサイズ(縦)
			objLo.setValue( PerceptionPropertyDef.WINWIDTH, strWinWidth );				// Windowサイズ(横)

			objLo.setValue( PerceptionPropertyDef.LOGIN_USER_ID, strLogin_UserID );	// ログインユーザID

			objLo.setValue( PerceptionPropertyDef.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() ) {
					// エラーの場合
					request.setAttribute("message", "");
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", objLo.getURL());
					return mapping.findForward("error");
				}
				else {
					String strMessage =  objLo.getMessage();
					request.setAttribute("message", strMessage);
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", "");
					return mapping.findForward("error");
				}
			}

			//文字化け対応
			//strForeignID		= CommonFunction.encodeSJIS(strForeignID);
			//strKeyWord			= CommonFunction.encodeSJIS(strKeyWord);
			//strLoTytle			= CommonFunction.encodeSJIS(strLoTytle);
			//strLoExplanation	= CommonFunction.encodeSJIS(strLoExplanation);
			//strVersion			= CommonFunction.encodeSJIS(strVersion);
			//strAssessmentID		= CommonFunction.encodeSJIS(strAssessmentID);
			//strSessionName		= CommonFunction.encodeSJIS(strSessionName);

			//strWinHeight		= CommonFunction.encodeSJIS(strWinHeight);
			//strWinWidth			= CommonFunction.encodeSJIS(strWinWidth);
			//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 {
			// LO情報をLOXMOより取得します。
			LoClient objLo = new LoClient();
			// 検索条件を設定
			objLo.setWhereLoID(strLoID);
			if( !objLo.select() ) {
				// 検索がうまくいかなかった場合
				if( objLo.isErr() ) {
					// エラーの場合
					request.setAttribute("message", "");
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", objLo.getURL());
					return mapping.findForward("error");
				}
				else {
					String strMessage =  objLo.getMessage();
					request.setAttribute("message", strMessage);
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", "");
					return mapping.findForward("error");
				}
			}

			// LOデータの取得
			if( objLo.next() ) {
				strLoExplanation = objLo.getLoExplanation();
				strLoTytle = objLo.getLoTytle();
				strVersion = objLo.getLoVersion();
				strRealLOID = objLo.getRealLOID();
				strPrere = objLo.getPrere();
			}
			else {
				//LO名が存在しない場合エラーを出力する
				String strMessage = resources.getMessage("M042010");
				request.setAttribute("message", strMessage);
				request.setAttribute("detail", "");
				request.setAttribute("close", "on");
				request.setAttribute("errorurl", "");
				return mapping.findForward("error");
			}
			// 検索条件を設定
			if( !objLo.selectHistory(strRealLOID) ) {
				// 検索がうまくいかなかった場合
				if( objLo.isErr() ) {
					// エラーの場合
					request.setAttribute("message", "");
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", objLo.getURL());
					return mapping.findForward("error");
				}
				else {
					String strMessage =  objLo.getMessage();
					request.setAttribute("message", strMessage);
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", "");
					return mapping.findForward("error");
				}
			}

			// 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		= "---";
			}

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

			//------------------------------
			// PerceptionLOテーブル検索処理
			//------------------------------
			// 検索条件の設定
			LoTopClient objLoTop = new LoTopClient( strLoServerName, strLoType );
			objLoTop.setValue(PerceptionPropertyDef.LOID, strRealLOID);
			if( !objLoTop.getData(strRealLOID) ) {
				// 検索がうまくいかなかった場合
				MessageData objMessage = objLoTop.getMessageData();
				request.setAttribute("message", "");
				request.setAttribute("detail", "");
				request.setAttribute("close", "on");
				request.setAttribute("errorurl", objMessage.getURL());
				return mapping.findForward("error");
			}

			// 検索がうまくいった場合はデータを取得する
			LoComData objData = objLoTop.getDataInfo(0);
			PerceptionLoData objLoData = (PerceptionLoData)objData;
			strAssessmentID = objLoData.getAssessmentID();
			strSessionName = objLoData.getSessionName();
			strWinHeight = objLoData.getWinHeight();
			strWinWidth = objLoData.getWinWidth();

			//文字化け対応
			//strForeignID		= CommonFunction.encodeSJIS(strForeignID);
			//strKeyWord			= CommonFunction.encodeSJIS(strKeyWord);
// 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
		}

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

		PerceptionLoEnv objLoEnv = new PerceptionLoEnv();
		//画面フラグをセットする。（登録画面:"INS"、更新画面"UPD"）
		String strDisplayFlg = "UPD";
		
//		 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("strReturnURL", strReturnURL);
		request.setAttribute("strAction", strAction);
		request.setAttribute("strLoID", strLoID);
		request.setAttribute("strLoType", strLoType);
		request.setAttribute("strAssessmentID", strAssessmentID);
		request.setAttribute("strSessionName", strSessionName);
		request.setAttribute("strLoTytle", strLoTytle);
		request.setAttribute("strForeignID", strForeignID);
		request.setAttribute("strKeyWord", strKeyWord);
		request.setAttribute("strLoExplanation", strLoExplanation);
		request.setAttribute("strVersion", strVersion);
		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("strShowPrere", strShowPrere);
		request.setAttribute("strWinHeight", strWinHeight);
		request.setAttribute("strWinWidth", strWinWidth);
// 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");
	}
}
