/*********************************************************************
*   All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JEKK0361C040KRCK
*   ソースファイル名：JEKK0361C040KRCK.java
*   作成者          ：富士通
*   日付            ：2011年11月12日
*＜機能概要＞
*   オプションサービス契約<ISP>開始の関連制約部品クラス
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   v1.00.00    2011/11/12  富士通      新規作成
*
**********************************************************************/

package eo.ejb.common.entity;

import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbm.entity.KK0351ETMsg;
import eo.ejb.cbs.cbsmsg.EKK0361C040CBSMsg;
import eo.ejb.common.JKKModelCommon;

/**
 * <p>
 * オプションサービス契約<ISP>開始の関連制約部品クラスです。
 * </p>
 * @author 富士通
 */
public class JEKK0361C040KRCK
{

	/** 関連チェックエラーフラグ&エラー返却項目(オプションサービス契約 存在チェック) */
	private static final String[] KRCK_OPSVCKEI_EXISTS_ERR = {"EA", EKK0361C040CBSMsg.OP_SVC_KEI_NO_ERR};

	/** 状態遷移チェックエラーフラグ&エラー返却項目(オプションサービス契約 状態チェック) */
	private static final String[] JSCK_STATUS_ERR = {"EA", EKK0361C040CBSMsg.OP_SVC_KEI_NO_ERR};

	/** 関連チェックエラーフラグ&エラー返却項目(IPv6アドレス 存在チェック) */
	private static final String[] KRCK_IPV6AD_EXISTS_ERR = {"EA", EKK0361C040CBSMsg.IPV6_AD_IFID_ERR};
	
	/** 関連チェックエラーフラグ&エラー返却項目(オプションサービス契約<ISP> URL設定済チェック) */
	private static final String[] KRCK_OPISP_URL_CONFIGURED_ERR = {"ED", EKK0361C040CBSMsg.OP_SVC_KEI_NO_ERR};
	
	/** 関連チェックエラーフラグ&エラー返却項目(オプションサービス契約<ISP> IPv6アドレス払出済チェック) */
	private static final String[] KRCK_OPISP_IPV6HARAIDASHI_ERR = {"EB", EKK0361C040CBSMsg.IPV6_AD_IFID_ERR};
	
	/** 関連チェックエラーフラグ&エラー返却項目(機器提供サービス契約 IPv6ルーター機器出荷済チェック) */
	private static final String[] KRCK_KKTK_IPV6RKIKISYUKA_ERR = {"EE", EKK0361C040CBSMsg.OP_SVC_KEI_NO_ERR};
	
	/**
	 * <p>
	 * 新しいJEKK0361C040KRCKを作成します。
	 * </p>
	 */
	public JEKK0361C040KRCK()
	{
	}

	/**
	 * <p>
	 * オプションサービス契約<ISP>開始の関連制約を行います。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 */
	public void execKRCK(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// オプションサービス契約関連チェック部品
		JKKejbKK0351KRCK kk0351KRCK = new JKKejbKK0351KRCK();
		
		// IPv6アドレス関連チェック部品
		JZMejbZM0481KRCK zm0481KRCK = new JZMejbZM0481KRCK();
		
		// オプションサービス契約番号
		String opSvcKeiNo = inCBSMsg.getString(EKK0361C040CBSMsg.OP_SVC_KEI_NO);

		// IPv6アドレス(インターフェイスID)を取得
		String ipv6Ad = inCBSMsg.getString(EKK0361C040CBSMsg.IPV6_AD_IFID);
		
		// オプションサービス契約 存在チェック
		if (!kk0351KRCK.isExistsNonGene(opSvcKeiNo))
		{
			setErrInfo(inCBSMsg, StatusCodes.RELATION_ERR, KRCK_OPSVCKEI_EXISTS_ERR);
			return;
		}

		// IPv6アドレス 存在チェック
		if (!zm0481KRCK.isExistsNonGene(ipv6Ad))
		{
			setErrInfo(inCBSMsg, StatusCodes.RELATION_ERR, KRCK_IPV6AD_EXISTS_ERR);
			return;
		}
		
		// URL設定済チェック
		if (!inCBSMsg.isNull(EKK0361C040CBSMsg.OP_SVC_KEI_NO) 
			&& !kk0351KRCK.isConfiguredUrl(inCBSMsg, inContext, opSvcKeiNo))
		{
			setErrInfo(inCBSMsg, StatusCodes.RELATION_ERR, KRCK_OPISP_URL_CONFIGURED_ERR);
			return;
		}
		
		// IPv6アドレス払出済チェック
		if (!inCBSMsg.isNull(EKK0361C040CBSMsg.OP_SVC_KEI_NO) 
			&& inCBSMsg.isNull(EKK0361C040CBSMsg.IPV6_AD_IFID)
			&& !kk0351KRCK.isIpv6Haraidashi(inCBSMsg, inContext, opSvcKeiNo))
		{
			setErrInfo(inCBSMsg, StatusCodes.RELATION_ERR, KRCK_OPISP_IPV6HARAIDASHI_ERR);
			return;
		}
		
		// IPv6ルーター機器出荷済チェック
		if (!inCBSMsg.isNull(EKK0361C040CBSMsg.OP_SVC_KEI_NO) 
			&& !kk0351KRCK.isIPv6RouteKikiSyukaChk(inCBSMsg, inContext, opSvcKeiNo))
		{
			setErrInfo(inCBSMsg, StatusCodes.RELATION_ERR, KRCK_KKTK_IPV6RKIKISYUKA_ERR);
			return;
		}
		
		// オプションサービス契約状態遷移チェック用ETメッセージ
		CAANMsg inETMsg = new CAANMsg(KK0351ETMsg.class.getName());
		inETMsg.set(JCMConstants.TEMPLATE_ID_KEY, inCBSMsg.getString(JCMConstants.TEMPLATE_ID_KEY));
		inETMsg.set(KK0351ETMsg.OP_SVC_KEI_NO, inCBSMsg.getString(EKK0361C040CBSMsg.OP_SVC_KEI_NO));
		
		// オプションサービス契約 状態チェック
		if (!JKKModelCommon.checkStateTransitionKK0351(inETMsg, inContext))
		{
			setErrInfo(inCBSMsg, StatusCodes.STATUSTRANS_ERR, JSCK_STATUS_ERR);
			return;			
		}
	}
	
	/**
	 * <p>
	 * エラー返却項目にエラーフラグを設定します。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param status エラー時のステータス
	 * @param errInfo[] エラー情報が設定された配列 [0]:エラーフラグ [1]:エラー返却項目
	 */
	private void setErrInfo(CAANMsg inCBSMsg, int status, String[] errInfo)
	{
		inCBSMsg.set(JCMConstants.STATUS_INT_KEY, status);
		inCBSMsg.set(errInfo[1], errInfo[0]);
		return;
	}

}
