/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JTUejbTU0011TKCK
*	ソースファイル名：JTUejbTU0011TKCK.java
*	作成者			：FJ
*	日付			：2011年05月26日
*＜機能概要＞
*	指定された項目が前方一致するか判定を行う部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v3.00.00	2011/05/26	FJ)楠神		新規作成
*
**********************************************************************/
package eo.ejb.common.itemrelation;

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.fw.AgentDispatchContext;

import eo.common.constant.JTUStrConst;
import eo.common.util.JPCCommonUtil;
import eo.ejb.domain.JSYejbBaseDomain;

/**
 * 番ポ工事単関連制約部品<p>
 * <br>
 * @author FJ
 */
public class JTUejbTU0011TKCK extends JPCCommonUtil
{

	/** 番ポ工事番号のドメインID（番号(12桁)(識別子)） */
	private static final String DOMAIN_ID_BMP_KOJI_NO = "C0000026";
	/** 単項目チェックでの必須区分(必須） */
	private static final String HISSU_KBN_HISSU = "1";

	/**
	 * 結合ＫＥＹ＿番ポ工事番号の単関連チェックを行う。
	 * @param inMsg
	 * @param inContext
	 * @param targetItemName
	 * @return boolean
	 */
	public static boolean checkJoinKeyBmpKojiNo(CAANMsg inMsg, AgentDispatchContext inContext, Object targetItemName) 
	{
		
		if(targetItemName == null || "".equals((String)targetItemName))
		{
			return false;
		}
		
		if(!checkJoinKeyTMCK(inMsg, inContext, (String)targetItemName, DOMAIN_ID_BMP_KOJI_NO, HISSU_KBN_HISSU, JTUStrConst.KGR_CHAR_BMP_KOJI_REQ))
		{
			return false;
		}
		return true;
	}
	
	/**
	 * 結合されたＫＥＹ項目を区切り文字で分割し単項目チェックを行う。
	 * @param inMsg
	 * @param inContext
	 * @param targetItemName
	 * @param checkDomainId
	 * @param hissuKbn
	 * @param kgrChar
	 * @return boolean
	 */
	private static boolean checkJoinKeyTMCK(CAANMsg inMsg, AgentDispatchContext inContext
			, String targetItemName, String checkDomainId, String hissuKbn, String kgrChar) 
	{
		
		if (inMsg.isNull(targetItemName))
		{
			// 未設定の場合、falseを返却。
			return false;
		}

		String target = inMsg.getString(targetItemName);
		String[] targetList = target.split(kgrChar);
		long len = targetList.length;
		
		//チェック対象項目の配列
		String[][] tmckArgs = {
			//{項目,項目エラー,必須ErrFlg,ドメインErrFlg,桁ErrFlg,リファErrFlg,必須CHK区分,ドメインID,桁CHK区分,桁From,桁to,リファ型,リファレンス値}
			{targetItemName, targetItemName + "_err", "E1", "E2", "E3", "E4", hissuKbn, checkDomainId, "1", "", "", "9", "" }
		};

		String[][] strArMsg = createTMCKArgs(tmckArgs);

		CAANMsg chkMsg = new CAANMsg(inMsg.getSchemaName());
		for(int i = 0; i < len; i++)
		{
			chkMsg.set(targetItemName, targetList[i]);
			if(!ComPatternsCheck.check(inContext, chkMsg, strArMsg, "status"))
			{
				// falseを返却。
				return false;
			}
		}
		
		// trueを返却。
		return true;
	}

	/**
	 * (ART生成ソース)
	 * 単項目制約定義とドメイン定義から、単項目チェック定義を生成
	 * @param args 単項目制約定義情報
	 * @return	単項目制約情報（単項目チェック部品へ引き渡すチェック用パラメタ配列）
	 *
	 */
	private static 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]);
	
	}
}
