/*********************************************************************
*   All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JEKK0411D010KRCK
*   ソースファイル名：JEKK0411D010KRCK.java
*   作成者          ：富士通
*   日付            ：2013年05月30日
*＜機能概要＞
*   サブオプションサービス契約<ISP>登録の関連制約部品クラス
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   v4.00.00    2013/05/30  富士通      新規作成
*
**********************************************************************/

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.KK0411ETMsg;
import eo.ejb.cbs.cbsmsg.EKK0411D010CBSMsg;
import eo.ejb.common.JKKModelConst;

/**
 * <p>
 * サブオプションサービス契約<ISP>登録の関連制約部品クラスです。
 * </p>
 * @author 富士通
 */
public class JEKK0411D010KRCK
{
	/** 関連チェックエラーフラグ&エラー返却項目(NGワードチェック) */
	private static final String[] KRCK_OP_SVC_KEI_NO_ERR = {"EH", EKK0411D010CBSMsg.OP_SVC_KEI_NO_ERR};
	
	/** 関連チェックエラーフラグ&エラー返却項目(メールエイリアスのエイジングチェック) */
	private static final String[] KRCK_AGING_ALIAS_ERR = {"EI", EKK0411D010CBSMsg.OP_SVC_KEI_NO_ERR};
	
	/** 関連チェックエラーフラグ&エラー返却項目(サブオプション契約上限チェック処理(メール容量追加)) */
	private static final String[] KRCK_ADD_CAPA_MAIL_ERR = {"EA", EKK0411D010CBSMsg.ADD_CAPA_ERR};
	
	/** 関連チェックエラーフラグ&エラー返却項目(サブオプション契約上限チェック処理(ホームページ容量追加)) */
	private static final String[] KRCK_ADD_CAPA_HP_ERR = {"EB", EKK0411D010CBSMsg.ADD_CAPA_ERR};

	/** NGワードコード（エイリアス） */
	private static final String NG_WORD_CD_ALIAS = "10";


	/**
	 * <p>
	 * 新しいJEKK0411D010KRCKを作成します。
	 * </p>
	 */
	public JEKK0411D010KRCK()
	{
	}

	/**
	 * <p>
	 * サブオプションサービス契約<ISP>登録の関連制約を行います。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 */
	public void execKRCK(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		CAANMsg inETMsgKK0411 = new CAANMsg(KK0411ETMsg.class.getName());
		inETMsgKK0411.set(KK0411ETMsg.OP_SVC_KEI_NO, inCBSMsg.getString(EKK0411D010CBSMsg.OP_SVC_KEI_NO));
		inETMsgKK0411.set(KK0411ETMsg.SBOP_SVC_KEI_NO, inCBSMsg.getString(EKK0411D010CBSMsg.SBOP_SVC_KEI_NO));
		inETMsgKK0411.set(KK0411ETMsg.ALIAS, inCBSMsg.getString(EKK0411D010CBSMsg.ALIAS));
		inETMsgKK0411.set(KK0411ETMsg.ADD_CAPA, inCBSMsg.getString(EKK0411D010CBSMsg.ADD_CAPA));
		JKKejbZM0111KRCK instance = new JKKejbZM0111KRCK();
		instance.setSbop_Svc_cd(inCBSMsg.getString(EKK0411D010CBSMsg.SBOP_SVC_CD));
		JKKejbKK0401KRCK kk0401Krck = new JKKejbKK0401KRCK();
		kk0401Krck.setSbop_Svc_cd(inCBSMsg.getString(EKK0411D010CBSMsg.SBOP_SVC_CD));
		
		// エイリアス NGチェック処理(メールエイリアス) 
		if (!isNotNgAliasMlalias(inCBSMsg, inContext))
		{
			setErrInfo(inCBSMsg, StatusCodes.RELATION_ERR, KRCK_OP_SVC_KEI_NO_ERR);
			return;
		}

		// 異動区分がオプション引継または住所変更・登録の場合はチェックを行わない
		if (!JKKModelConst.IDO_DIV_OP_HKTGI.equals(inCBSMsg.getString(EKK0411D010CBSMsg.IDO_DIV)) &&
				!JKKModelConst.IDO_DIV_ADCHG_ADD.equals(inCBSMsg.getString(EKK0411D010CBSMsg.IDO_DIV)))
		{

			// メールエイリアスのエイジングチェック処理
			if (!instance.isMailaliastAgingChk(inETMsgKK0411, inContext, "1"))
			{
				setErrInfo(inCBSMsg, StatusCodes.RELATION_ERR, KRCK_AGING_ALIAS_ERR);
				return;
			}
		}

		// サブオプションサービス契約上限チェック処理（メール容量追加）
		if (!kk0401Krck.isCapaAddUpplMlAdd(inETMsgKK0411, inContext, "1"))
		{
			setErrInfo(inCBSMsg, StatusCodes.RELATION_ERR, KRCK_ADD_CAPA_MAIL_ERR);
			return;
		}

		// サブオプションサービス契約上限チェック処理（ホームページ容量追加）
		if (!kk0401Krck.isCapaAddUpplHpAdd(inETMsgKK0411, inContext, "1"))
		{
			setErrInfo(inCBSMsg, StatusCodes.RELATION_ERR, KRCK_ADD_CAPA_HP_ERR);
			return;
		}
	}

	/**
	 * <p>
	 * エイリアス NGチェック処理
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return エイリアスが、NGワードに存在する場合false。それ以外の場合false。
	*/
	private boolean isNotNgAliasMlalias(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// サブオプションサービスコードが"メールエイリアス"以外の場合、チェック対象外
		if (!JKKModelConst.SBOP_SVC_CD_MAILALIAS.equals(inCBSMsg.getString(EKK0411D010CBSMsg.SBOP_SVC_CD)))
		{
			return true;
		}

		// エイリアスが未設定の場合、チェック対象外
		if (inCBSMsg.isNull(EKK0411D010CBSMsg.ALIAS))
		{
			return true;
		}

		// NGワードチェック処理を呼び出す
		JKKejbKRCKCommon krckc = new JKKejbKRCKCommon();
		return krckc.isNotExistsNg(inCBSMsg, inContext, NG_WORD_CD_ALIAS, inCBSMsg.getString(EKK0411D010CBSMsg.ALIAS));
	}

	/**
	 * <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;
	}

}
