/////////////////////////////////////////////////////////////////
//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 jp.co.ntt.lms.xmo.Lo.LoClient;
import jp.co.ntt.lms.xmo.Lo.HistoryData;
import jp.co.ntt.lms.xmo.LoRelation.LoRelationClient;
import jp.co.ntt.lms.xmo.Environment;
import jp.co.ntt.lms.xmo.MessageData;
import jp.co.ntt.lms.lo.LoTopClient;
import jp.co.ntt.lms.lo.PropagateRelationRecord;

/**
 *  コンテナ削除アクションクラス
 * 
 *  このクラスはコンテナ削除画面のアクションクラスです。
 * 
 *  @author 梅原 浩司
 *  @version 1.0
 */
public class ContainerDeleteAction extends Action {
	
	/**
	 * 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 strParentID_o = request.getParameter("parentID");
		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( "Conclusion" ) );		// 完結要件

		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 strPrereFlg	 	= CommonFunction.null2blank( request.getParameter( "PrereFlg" ) );			// 前提条件判定フラグ

		String strPropagateFlg  = "off";

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

			// LOテーブルの設定
			objLo.setWhereLoID( strLoID );				// LOID
			objLo.setLoType( strLoType );				// LOタイプの設定
			objLo.setDeleteParentID( strParentID_o );	// 親ID
			objLo.setDeleteLOID( strLoID );

			// 削除処理の実行
			if( !objLo.delete() )
			{
				// 検索がうまくいかなかった場合
				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");
			}
			//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 );		// 作成日
			//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);			// 前提条件

		}
		// アクションフラグが設定されていない場合は削除情報を取得します
		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.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 = "---";
			}

			// コンテナデータの取得
			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");
			}			

			//文字化け対応
			//strForeignID		= CommonFunction.encodeSJIS(strForeignID);
			//strKeyWord			= CommonFunction.encodeSJIS(strKeyWord);
			
			// 削除するLOIDが前提条件に設定されているかをチェックします
			if( objLo.selectLOIDFromPrere( strLoID ) )
			{
				// LOIDのリストを取得
				String[] strPrereTable = objLo.getLOIDFromPrere();
				if ( strPrereTable.length > 0 )
				{
					strPrereFlg = "on";
				}
				else
				{
					// LoRelationClientをインスタンス化
					LoRelationClient objRelationClient = new LoRelationClient();
					if( objRelationClient.checkUnderPassivePrere( strParentID_o + strLoID ) )
					{
						int intPrereChk = (int)objRelationClient.getCheckUnderPrere();
						if( intPrereChk == 3 )
						{
							strPrereFlg = "on";
						}
						else if ( intPrereChk != 0 )
						{
							// 前提条件検索エラー
							request.setAttribute("message", resources.getMessage("M043001"));
							request.setAttribute("detail", "");
							request.setAttribute("close", "on");
							return mapping.findForward("error");
						}
					}
				}
			}
			else
			{
				// 前提条件検索エラー
				request.setAttribute("message", resources.getMessage("M043001"));
				request.setAttribute("detail", "");
				request.setAttribute("close", "on");
				return mapping.findForward("error");
			}

			// ステータス伝播レコード取得
			// Loサーバ名を取得する
			Environment objEnv = new Environment();
			String strLoServerName = objEnv.getLoServerName();

			LoTopClient objLoTop = new LoTopClient( strLoServerName, strLoType );
			if ( !objLoTop.getPropagateRelation( strLoID ) ){
				// 検索がうまくいかなかった場合
				MessageData objMessage = objLoTop.getMessageData();
				request.setAttribute("errorurl", objMessage.getURL());
				return mapping.findForward("error");
			}
			PropagateRelationRecord[] records = objLoTop.getPropageteRecords();
			if ( records.length > 0 ){
				for( int i = 0; i < records.length; i++ ) {
					if( records[i].getLoID().equals( strParentID_o ) ) {
						strPropagateFlg = "on";
					}
				}
			}

		}

		// 改行コード"\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>" );
		}

		request.setAttribute("strPropagateFlg", strPropagateFlg);
		request.setAttribute("strReturnURL", strReturnURL);
		request.setAttribute("strAction", strAction);
		request.setAttribute("strParentID_o", strParentID_o);
		request.setAttribute("strLoID", strLoID);
		request.setAttribute("strLoType", strLoType);
		request.setAttribute("strLoTytle", strLoTytle);
		request.setAttribute("strForeignID", strForeignID);
		request.setAttribute("strKeyWord", strKeyWord);
		request.setAttribute("strLoExplanation", strLoExplanation);
		request.setAttribute("strVersion", strVersion);
		request.setAttribute("strCreateDate", strCreateDate);
		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("strPrereFlg", strPrereFlg);
		request.setAttribute("strShowPrere", strShowPrere);
		request.setAttribute("strShowConclusion", strShowConclusion);

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