package eo.ejb.cbs.mainproc;

import java.util.ArrayList;

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.EZM0041B011CBSMsg;
import eo.ejb.domain.JSYejbBaseDomain;

public class JSYejbEZM0041B011_01TPMA implements TemplateMainHandler {

	/**
	 * 権限グループコードの単項目チェックを行う。
	 * 
	 * @param inCBSMsg CBSメッセージ
	 * @param inContext Agentから渡されたAgentDispatchContext
	 */
	public void invoke(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		/* ++++++++++ v1.00.00 修正開始 ++++++++++ */
		//チェック対象項目の配列（権限グループコード用）
		final String[][] tmckArgs = {
			//{項目,項目エラー,必須ErrFlg,ドメインErrFlg,桁ErrFlg,リファErrFlg,必須CHK区分,ドメインID,桁CHK区分,桁From,桁to,リファ型,リファレンス値}
			{EZM0041B011CBSMsg.KEY_AUTHORITY_CD, EZM0041B011CBSMsg.KEY_AUTHORITY_CD_ERR, "E1", "E2", "E3", "E4", "1", "M0000004", "2", "10", "", "9", "" }
		};
		//チェック用配列作成
		final String[][] strArMsg = createTMCKArgs(tmckArgs);

		JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"Call");
		/**
		 * 権限グループコード単項目チェック
		 */
		String kGrpCode = (String)inCBSMsg.getObject(EZM0041B011CBSMsg.KEY_AUTHORITY_CD);
		if(kGrpCode == null)
		{
			ComPatternsCheck.check(inContext, inCBSMsg, strArMsg, EZM0041B011CBSMsg.STATUS);
		}
		else
		{
			/**
			 * 「：」で区切られた権限コードを配列に格納しておき、それぞれ単項目チェックを行う
			 */
			String[] kGrpCodes = kGrpCode.split(":");
			if(kGrpCodes.length == 0)
			{
				//区切り文字のみ指定された場合
				inCBSMsg.setNull(EZM0041B011CBSMsg.KEY_AUTHORITY_CD);
				ComPatternsCheck.check(inContext, inCBSMsg, strArMsg, EZM0041B011CBSMsg.STATUS);
			}
			else
			{
				for(int iCnt = 0 ; iCnt < kGrpCodes.length ; iCnt++ )
				{
					if("".equals(kGrpCodes[iCnt]))
					{
						inCBSMsg.setNull(EZM0041B011CBSMsg.KEY_AUTHORITY_CD);
					}
					else
					{
						inCBSMsg.set(EZM0041B011CBSMsg.KEY_AUTHORITY_CD, kGrpCodes[iCnt]);
					}
					boolean bRtn = ComPatternsCheck.check(inContext, inCBSMsg, strArMsg, EZM0041B011CBSMsg.STATUS);
					if(!bRtn)
					{
						//1つでも単項目チェックがNGの場合、権限グループコードのチェックをやめる
						break;
					}
				}
			}
			//権限グループコードを元に戻す。
			inCBSMsg.set(EZM0041B011CBSMsg.KEY_AUTHORITY_CD, kGrpCode);
		}
	}
	/**
	 * 単項目制約定義とドメイン定義から、単項目チェック定義を生成
	 * @param args 単項目制約定義情報
	 * @return	単項目制約情報（単項目チェック部品へ引き渡すチェック用パラメタ配列）
	 *
	 */
	private String[][] createTMCKArgs(String[][] args) {
		
		ArrayList tmckList = new ArrayList();
		for ( int i=0; i< args.length; i++ ) {
			ArrayList tmckRec = new ArrayList();
			String[] komokuDef = args[i];
			String domainID = komokuDef[7];
			String domainCls = "eo.ejb.domain.JSYejb" + domainID + "Domain";
			try {
				JSYejbBaseDomain domain =
					(JSYejbBaseDomain) Class.forName(domainCls).newInstance();
				tmckRec = domain.getTmckDefine(komokuDef);
				for (int p=0;p<tmckRec.size();p++) {
					tmckList.add(tmckRec.get(p));
				}
			} catch (Exception e) {
			}
		}
	
		return (String[][])tmckList.toArray(new String[tmckList.size()][0]);
	
	}

}
