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

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

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

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

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.Lo.LoClient;
import jp.co.ntt.lms.xmo.Lo.HistoryData;
import jp.co.ntt.lms.lo.Container.ContainerPropertyDef;
// 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購入項目追加] 

/**
 *  コンテナ更新アクションクラス
 * 
 *  このクラスはコンテナ更新画面のアクションクラスです。
 * 
 *  @author 梅原 浩司
 *  @version 1.0
 */
public class ContainerUpdateAction 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.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 strCreateDate 	= CommonFunction.null2blank( request.getParameter( "LocreateDate" ) );		// 作成日
		String strConclusion 	= CommonFunction.null2blank( request.getParameter( "hdnConclusion" ) );	// 完結要件
		String strBeforeConclusion = CommonFunction.null2blank( request.getParameter( "hdnBeforeConclusion " ) );	// 更新前完結要件

		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


		// アクションフラグが設定されていた場合は更新処理を行います
		if( strAction != null && strAction.equals( "on" ) ) {
			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" );					// 隠しフラグ

			// Wbt教材個別テーブルの設定
			// 共通更新項目の設定
			objLo.setValue( ContainerPropertyDef.LOVERSION, strVersion );			// バージョン
			objLo.setValue( ContainerPropertyDef.LOGIN_USER_ID, strLogin_UserID );	// ログインユーザID
			objLo.setValue( ContainerPropertyDef.PRERE, strPrere );					// 前提条件

			objLo.setValue( ContainerPropertyDef.CONCLUSION, strConclusion );		// 完結要件
			// 更新前完結要件と更新後完結要件が違う場合はステータス伝搬フラグを設定する
			if( !strConclusion.equals( strBeforeConclusion ) ) {
				objLo.setStatusPropagateFlag();
			}
			
// 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("errorurl", objLo.getURL());
				}
				else
				{
					request.setAttribute("message", objLo.getMessage());
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
				}
				return mapping.findForward("error");
			}

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

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

			// コンテナデータの取得
			if( objLo.next() ) {
				strLoExplanation = objLo.getLoExplanation();
				strLoTytle = objLo.getLoTytle();
				strVersion = objLo.getLoVersion();
				strCreateDate = objLo.getLoCreateDate();
				strConclusion = objLo.getConclusion();
				strPrere = objLo.getPrere();
			}
			else {
				//コンテナ名が存在しない場合エラーを出力する
				request.setAttribute("message", resources.getMessage("M042010"));
				request.setAttribute("detail", "");
				request.setAttribute("close", "on");
				return mapping.findForward("error");
			}

			// 検索条件を設定
			if( !objLo.selectHistory(strLoID) ) {
				// 検索がうまくいかなかった場合
				if( objLo.isErr() ) {
					// エラーの場合
					request.setAttribute("errorurl", objLo.getURL());
				}
				else {
					request.setAttribute("message", objLo.getMessage());
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
				}
				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 = "---";
			}

			//文字化け対応
			//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 strShowConclusion = "";
		if ( strConclusion != null && !strConclusion.equals( "" ) )
		{
			strShowConclusion = CommonFunction.replace( strConclusion, "\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("strShowPrere", strShowPrere);
		request.setAttribute("strShowConclusion", strShowConclusion);

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