/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JECR0011B050TPMA
*	ソースファイル名	：JECR0011B050TPMA.java
*	作成者				：富士通　
*	作成日				：2011年09月26日
*＜機能概要＞
*　単項目制約　独自処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/09/26   富士通		新規作成
*********************************************************************/
package eo.ejb.cbs.mainproc;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.ComPatternsCheck;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;
import com.fujitsu.futurity.model.ejb.common.fw.TemplateMainHandler;

import eo.ejb.cbs.cbsmsg.ECR0011B050CBSMsg;
import eo.ejb.common.JCRModelCommon;

/**
 * <p>
 * 対応記録一覧照会(クエリ実行問合せ)独自処理部品クラスです。
 * </p>
 * @author 富士通
 */
public class JECR0011B050TPMA implements TemplateMainHandler
{

	/**
	 * ＫＥＹ＿スキーマＩＤ,ＫＥＹ＿クエリ項目名,ＫＥＹ＿フィールド名,
	 * ＫＥＹ＿フィールドタイプコード,ＫＥＹ＿クエリ条件コード,
	 * ＫＥＹ＿クエリ値,ＫＥＹ＿ＯＲ条件有無の単項目チェックを行います。
	 * <BR>
	 * @param inCBSMsg CBSメッセージ
	 * @param inContext Agentから渡されたAgentDispatchContext
	 */
	public void invoke(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		//参考にしたクラスおよびメソッド
		// クラス：eo.ejb.check.item.JSYejbECK0011B050TMCK
		// メソッド：invoke
		JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"Call");

		//----------------------------------------------------------------------------------
		// スキーマID 単項目チェック
		//----------------------------------------------------------------------------------
		//(1)チェック対象項目の配列（スキーマID）の作成(No.1)
		final String[][] TMCKARGSSCHMAID = {
			//{項目,項目エラー,必須ErrFlg,ドメインErrFlg,桁ErrFlg,リファErrFlg,必須CHK区分,ドメインID,桁CHK区分,桁From,桁to,リファ型,リファレンス値}
			{ECR0011B050CBSMsg.KEY_SCHMA_ID, ECR0011B050CBSMsg.KEY_SCHMA_ID_ERR, "E1", "E2", "E3", "E4", "1", "C0000093", "1", "", "", "9", "" }
		};
		//(2)単項目チェック定義作成処理の呼び出し
		final String[][] STRARMSGSCHMAID = JCRModelCommon.createTMCKArgs(TMCKARGSSCHMAID);
		//(3)単項目チェック処理の呼び出し
		tmcheck( inCBSMsg , inContext , ECR0011B050CBSMsg.KEY_SCHMA_ID , 6 , STRARMSGSCHMAID );

		//----------------------------------------------------------------------------------
		// クエリ項目番号 単項目チェック
		//----------------------------------------------------------------------------------
		//(1)チェック対象項目の配列（クエリ項目番号）の作成(No.2)
		final String[][] TMCKARGSQUERYKMKNO = {
			{ECR0011B050CBSMsg.KEY_QUERY_KMK_NO, ECR0011B050CBSMsg.KEY_QUERY_KMK_NO_ERR, "E1", "E2", "E3", "E4", "1", "C0000155", "1", "", "", "9", "" }
		};
		//(2)単項目チェック定義作成処理の呼び出し
		final String[][] STRARMSGQUERYKMKNO = JCRModelCommon.createTMCKArgs(TMCKARGSQUERYKMKNO);
		//(3)単項目チェック処理の呼び出し
		tmcheck( inCBSMsg , inContext , ECR0011B050CBSMsg.KEY_QUERY_KMK_NO , 10 , STRARMSGQUERYKMKNO );
		
		//----------------------------------------------------------------------------------
		// クエリ項目名 単項目チェック
		//----------------------------------------------------------------------------------
		//(1)チェック対象項目の配列（クエリ項目名）の作成(No.3)
		final String[][] TMCKARGSQUERYKMK = {
			{ECR0011B050CBSMsg.KEY_QUERY_KMK_NM, ECR0011B050CBSMsg.KEY_QUERY_KMK_NM_ERR, "E1", "E2", "E3", "E4", "1", "C0000260", "3", "1", "40", "9", "" }
		};
		//(2)単項目チェック定義作成処理の呼び出し
		final String[][] STRARMSGQUERYKMK = JCRModelCommon.createTMCKArgs(TMCKARGSQUERYKMK);
		//(3)単項目チェック処理の呼び出し
		tmcheck( inCBSMsg , inContext , ECR0011B050CBSMsg.KEY_QUERY_KMK_NM , 50 , STRARMSGQUERYKMK );
		
		//----------------------------------------------------------------------------------
		// フィールド名 単項目チェック
		//----------------------------------------------------------------------------------
		//(1)チェック対象項目の配列（フィールド名）の作成(No.4)
		final String[][] TMCKARGSFIELDNM = {
			{ECR0011B050CBSMsg.KEY_FIELD_NM, ECR0011B050CBSMsg.KEY_FIELD_NM_ERR, "E1", "E2", "E3", "E4", "1", "M0000025", "3", "1", "26", "9", "" }
		};
		//(2)単項目チェック定義作成処理の呼び出し
		final String[][] STRARMSGFIELDNM = JCRModelCommon.createTMCKArgs(TMCKARGSFIELDNM);
		//(3)単項目チェック処理の呼び出し
		tmcheck( inCBSMsg , inContext , ECR0011B050CBSMsg.KEY_FIELD_NM , 26 , STRARMSGFIELDNM );
		
		//----------------------------------------------------------------------------------
		// フィールドタイプ 単項目チェック
		//----------------------------------------------------------------------------------
		//(1)チェック対象項目の配列（フィールドタイプ）の作成(No.5)
		final String[][] TMCKARGSFIELDTYPE = {
			{ECR0011B050CBSMsg.KEY_FIELD_TYPE_CD, ECR0011B050CBSMsg.KEY_FIELD_TYPE_CD_ERR, "E1", "E2", "E3", "E4", "0", "C0000070", "1", "", "", "9", "" }
		};
		//(2)単項目チェック定義作成処理の呼び出し
		final String[][] STRARMSGFIELDTYPECD = JCRModelCommon.createTMCKArgs(TMCKARGSFIELDTYPE);
		//(3)単項目チェック処理の呼び出し
		tmcheck( inCBSMsg , inContext , ECR0011B050CBSMsg.KEY_FIELD_TYPE_CD , 1 , STRARMSGFIELDTYPECD );
		
		//----------------------------------------------------------------------------------
		// クエリ条件コード 単項目チェック
		//----------------------------------------------------------------------------------
		//(1)チェック対象項目の配列（クエリ条件コード）の作成(No.6)
		final String[][] TMCKARGSQUERYJOKEN = {
			{ECR0011B050CBSMsg.KEY_QUERY_JOKEN_CD, ECR0011B050CBSMsg.KEY_QUERY_JOKEN_CD_ERR, "E1", "E2", "E3", "E4", "1", "C0000071", "1", "", "", "9", "" }
		};
		//(2)単項目チェック定義作成処理の呼び出し
		final String[][] STRARMSGQUERYJOKEN = JCRModelCommon.createTMCKArgs(TMCKARGSQUERYJOKEN);
		//(3)単項目チェック処理の呼び出し
		tmcheck( inCBSMsg , inContext , ECR0011B050CBSMsg.KEY_QUERY_JOKEN_CD , 2 , STRARMSGQUERYJOKEN );
		
		//----------------------------------------------------------------------------------
		// クエリ値 単項目チェック
		//----------------------------------------------------------------------------------
		//(1)チェック対象項目の配列（クエリ値）の作成(No.7)
		final String[][] TMCKARGSQUERYVALUE = {
			{ECR0011B050CBSMsg.KEY_QUERY_VALUE, ECR0011B050CBSMsg.KEY_QUERY_VALUE_ERR, "E1", "E2", "E3", "E4", "1", "C0000432", "3", "1", "40", "9", "" }
		};
		//(2)単項目チェック定義作成処理の呼び出し
		final String[][] STRARMSGQUERYVALUE = JCRModelCommon.createTMCKArgs(TMCKARGSQUERYVALUE);
		//(3)単項目チェック処理の呼び出し
		tmcheck( inCBSMsg , inContext , ECR0011B050CBSMsg.KEY_QUERY_VALUE , 40 , STRARMSGQUERYVALUE );
		
		//----------------------------------------------------------------------------------
		// OR条件有無 単項目チェック
		//----------------------------------------------------------------------------------
		//(1)チェック対象項目の配列（OR条件有無）の作成(No.8)
		final String[][] TMCKARGSJOKENUM = {
			{ECR0011B050CBSMsg.KEY_OR_JOKEN_UM, ECR0011B050CBSMsg.KEY_OR_JOKEN_UM_ERR, "E1", "E2", "E3", "E4", "1", "C0000024", "1", "", "", "9", "" }
		};
		//(2)単項目チェック定義作成処理の呼び出し
		final String[][] STRARMSGJOKENUM = JCRModelCommon.createTMCKArgs(TMCKARGSJOKENUM);
		//(3)単項目チェック処理の呼び出し
		tmcheck( inCBSMsg , inContext , ECR0011B050CBSMsg.KEY_OR_JOKEN_UM , 1 , STRARMSGJOKENUM );


	}

	/**
	 * 渡された項目を指定された桁数で区切り、それぞれ個々に単項目チェックを行います。
	 * <BR>
	 * @param inCBSMsg CBSメッセージ
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param key 単項目チェックを行う項目ID
	 * @param kmk_length 1項目の桁数
	 * @param strArMsg チェック用配列
	 */
	private void tmcheck(CAANMsg inCBSMsg , AgentDispatchContext inContext , String key , int kmk_length , String[][] strArMsg)
	{
		//参考にしたクラスおよびメソッド
		// クラス：eo.ejb.check.item.JSYejbECK0011B050TMCK
		// メソッド：invoke
		//-------------------------------------------------------------------------------------------------------
		//(1)チェック対象となる項目取得する。
		//-------------------------------------------------------------------------------------------------------
		String tmckValue = (String)inCBSMsg.getObject(key);
		if(tmckValue == null)
		{
			ComPatternsCheck.check(inContext, inCBSMsg, strArMsg, ECR0011B050CBSMsg.STATUS);
		}
		else
		{
			//-------------------------------------------------------------------------------------------------------
			//(2)指定された桁数で区切って配列に格納する。
			//-------------------------------------------------------------------------------------------------------
			String[] tmckValues = JCRModelCommon.splitQueryCondition(tmckValue, kmk_length);
			if(tmckValues.length == 0)
			{
				//区切り文字のみ指定された場合
				inCBSMsg.setNull(key);
				ComPatternsCheck.check(inContext, inCBSMsg, strArMsg, ECR0011B050CBSMsg.STATUS);
			}
			else
			{
				for(int iCnt = 0 ; iCnt < tmckValues.length ; iCnt++ )
				{
					//-------------------------------------------------------------------------------------------------------
					//(3)CBSMsgに指定された桁数で区切った項目をセットする。
					//-------------------------------------------------------------------------------------------------------
					if("".equals(tmckValues[iCnt]))
					{
						inCBSMsg.setNull(key);
					}
					else
					{
						inCBSMsg.set(key, tmckValues[iCnt]);
					}
					//-------------------------------------------------------------------------------------------------------
					//(4)単項目チェック呼び出す。
					//-------------------------------------------------------------------------------------------------------
					boolean bRtn = ComPatternsCheck.check(inContext, inCBSMsg, strArMsg, ECR0011B050CBSMsg.STATUS);
					if(!bRtn)
					{
						//1つでも単項目チェックがNGの場合、チェックをやめる
						break;
					}
				}
			}
			//-------------------------------------------------------------------------------------------------------
			//(5)単項目チェックを行った項目を元に戻す。
			//-------------------------------------------------------------------------------------------------------
			inCBSMsg.set(key, tmckValue);
		}

	}

}
