package eo.ejb.cbm.entity;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;
import com.fujitsu.futurity.model.ejb.common.fw.SansyoseiyakuCheckHandler;

import eo.ejb.common.EventIDList;
import eo.ejb.common.JKKModelCommon;

public class JSYejbKK3401SSCK implements SansyoseiyakuCheckHandler{

		/**
		 * コンストラクタ
		 */

		public JSYejbKK3401SSCK() {
		}

		/**
		 * 請求契約参照チェックを行います。
		 * 
		 * @param inETMsg エンティティ
		 * @param inContext Agentから渡されたAgentDispatchContext
		 */

		public void invoke(CAANMsg inETMsg, AgentDispatchContext inContext) {

			JSYejbLog.println(JSYejbLog.DEBUG, getClass(), "call:JSYejbKK3401SSCK.invoke");

			// inETMsgのチェック
			if(inETMsg == null) {
				throw new CAANRuntimeException("inETMsgがnullです。");
			}

			// 振舞IDの取り出し
			String eventID = inETMsg.getString("eventID");
			if(eventID == null) {
				throw new CAANRuntimeException("振舞IDがnullです。");
			}

			// 処理の振り分け
			// イベントの振り分け
			if(eventID.equals(EventIDList.KK3401D001)){
				/** 請求契約予約結果反映振舞内部 */
				int Rtn = 0;
				Rtn = execKK3401D001_1(inETMsg, inContext, "EA");

			}

			JSYejbLog.println(JSYejbLog.DEBUG, getClass(), "end:JSYejbKK3401SSCK.invoke");

		}

		/**
		 * IKK0491C001_制約ＮＯ2チェック
		 *
		 * @param inETMsg チェック対象のETMsg(KK0491ETMsg)
		 * @param inContext Agentから渡されたAgentDispatchContext
		 * @param errFlag ERRフラグ
		 * @return int チェック結果
		 */
		private int execKK3401D001_1(CAANMsg inETMsg, AgentDispatchContext inContext, String errFlag){

			// ステータス
			int rtn = 0;

				// 制約部品引数定義
				// 判定条件
				if(JKKModelCommon.checkStateTransitionKK0491(inETMsg, inContext ) == false){
					inETMsg.set(KK3401ETMsg.SEIKY_KEI_NO_ERR, errFlag);
					if("W".equals(errFlag.substring(0,1))){
						rtn = StatusCodes.WARNING;
					} else {
						rtn = StatusCodes.STATUSTRANS_ERR;
					}
				}
			
			// ステータスのセット
			if (rtn > inETMsg.getInt(KK0491ETMsg.STATUS)) {
				inETMsg.set(KK0491ETMsg.STATUS, rtn);
			}

			return rtn;

		}

}
