/*******************************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*   モジュール名    ：JCCModelCommon
*   ソースファイル名：JCCModelCommon.java
*   作成者          ：富士通
*   日付            ：2011年04月01日
*＜機能概要＞
*   モデル共通アクセッサー部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/04/01   FJ）坂本    新規作成
*				2023/09/01	 FJ)広田	 ANK-4463-00-00_【eo定期】サービスサーバリプレース対応_ＳＴ工程まで
*   v3.00.00    2025/02/13   FJ）佃    ANK-4592-00-00_テレビ新コース（スカパー用）導入対応)
**********************************************************************/

package eo.ejb.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


import com.fujitsu.futurity.common.JCCWebAddTrnId;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.JSYLogBase;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;
import com.fujitsu.futurity.model.ejb.common.JSYejbConnection;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;
import com.fujitsu.futurity.model.base.CAANJDBCUtil;

import eo.common.util.JCCChohyoMaskCache;
import eo.common.util.JCCChohyoMaskUtil;
import eo.common.util.JCCComExecUtil;
import eo.common.util.JCCFrameworkException;
import eo.common.util.JCCGetMailHeaderUtil;
import eo.common.util.JCCGetSystemDateUtil;
import eo.common.util.JCCOracleSeqUtil;
import eo.common.util.JCCSanitizingUtil;
import eo.common.util.JPCUtilCommon;
import eo.common.util.JCCMapConvXml;
import eo.common.util.JCCcomEncryptionUtil;
import eo.common.util.JCCFtpClientUtil;

/**
 * モデル共通アクセッサー部品です。<p>
 * サービスインターフェイスで実装します。<p>
 * <BR>
 * @author 富士通
 */
public class JCCModelCommon extends JPCUtilCommon
{
	/** ESB種別 ISI */
	public static final int	ISI = 1;
	/** ESB種別 III */
	public static final int	III = 2;
	
	/** 外部コマンド同期実行処理用ラインセパレータ */
	public static final String LINE_SEPARATOR = System.getProperty("line.separator");
	
	/**
	 * 運用日付取得処理です。
	 * アプリケーションプロパティファイルの定義に基づいて
	 * アプリケーションプロパティファイルかシステムパラメータ管理テーブルに設定されている
	 * 運用日付を返却します。
	 * 
	 * バッチ呼び出し以外の場合はオンライン運用日付を返却します。
	 * バッチ呼び出しの場合のみバッチ運用日付を返却します。
	 * 
	 * @param msg CBSメッセージ
	 * @param key システムID　例)"KK"等、またはnull
	 * @return YYYYMMDD形式の運用日付
	 * @exception JCCFrameworkExceptionがスローされます。
	 */
	public static String getOpeDate(CAANMsg msg, String key)
	{
		try
		{
			return JCCejbGetOperationDateUtil.getOpeDate(msg, key);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * 運用日付取得処理です。
	 * アプリケーションプロパティファイルの定義に基づいて
	 * アプリケーションプロパティファイルかシステムパラメータ管理テーブルに設定されている
	 * 運用日付を返却します。
	 * 
	 * バッチ呼び出し以外の場合はオンライン運用日付を返却します。
	 * バッチ呼び出しの場合のみバッチ運用日付を返却します。
	 * 
	 * @param msg CBSメッセージ
	 * @param context エージェントディスパッチコンテキスト
	 * @param Object システムID　例)"KK"等、またはnull
	 * @return YYYYMMDD形式の運用日付
	 * @exception JCCFrameworkExceptionがスローされます。
	 */
	public static Object getOpeDate(CAANMsg msg, AgentDispatchContext context, Object obj)
	{
		try
		{
			String key = objectToString(obj);
			return JCCejbGetOperationDateUtil.getOpeDate(msg, key);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * 運用日時取得処理です。
	 * アプリケーションプロパティファイルの定義に基づいて
	 * アプリケーションプロパティファイルかシステムパラメータ管理テーブルに設定されている
	 * 運用日付にシステム日時取得処理の返す時分秒を付加して返却します。
	 * 
	 * バッチ呼び出し以外の場合はオンライン運用日付を返却します。
	 * バッチ呼び出しの場合のみバッチ運用日付を返却します。 
	 * 
	 * @param msg CBSメッセージ
	 * @param key システムID　例)"KK"等、またはnull
	 * @return YYYYMMDDhhmmss形式の運用日時
	 * @exception JCCFrameworkExceptionがスローされます。
	 */
	public static String getOpeDateTime(CAANMsg msg, String key)
	{
		try
		{
			String opeDate = getOpeDate(msg, key);
			if (null == opeDate)
			{
				return null;
			}
			String opeTime = getSysDateTime();
			return opeDate + opeTime.substring(8, 14);
		}	
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	/**
	 * 運用日時取得処理です。
	 * アプリケーションプロパティファイルの定義に基づいて
	 * アプリケーションプロパティファイルかシステムパラメータ管理テーブルに設定されている
	 * 運用日付にシステム日時取得処理の返す時分秒を付加して返却します。
	 * 
	 * バッチ呼び出し以外の場合はオンライン運用日付を返却します。
	 * バッチ呼び出しの場合のみバッチ運用日付を返却します。
	 * 
	 * @param msg CBSメッセージ
	 * @param context エージェントディスパッチコンテキスト
	 * @param key システムID　例)"KK"等、またはnull
	 * @return YYYYMMDDhhmmss形式の運用日時
	 * @exception JCCFrameworkExceptionがスローされます。
	 */
	public static Object getOpeDateTime(CAANMsg msg, AgentDispatchContext context, Object obj)
	{
		try
		{
			String opeDate = (String)getOpeDate(msg, context, obj);
			if (null == opeDate)
			{
				return null;
			}
			String opeTime = getSysDateTime();
			return opeDate + opeTime.substring(8, 14);
		}	
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

	/**
	 * 運用日時取得処理です。
	 * アプリケーションプロパティファイルの定義に基づいて
	 * アプリケーションプロパティファイルかシステムパラメータ管理テーブルに設定されている
	 * 運用日付にシステム日時取得処理の返す時分秒ミリ秒を付加して返却します。
	 * 
	 * バッチ呼び出し以外の場合はオンライン運用日付を返却します。
	 * バッチ呼び出しの場合のみバッチ運用日付を返却します。
	 * 
	 * @param msg CBSメッセージ
	 * @param key システムID　例)"KK"等、またはnull
	 * @return YYYYMMDDhhmmssSSS形式の運用日時
	 * @exception JCCFrameworkExceptionがスローされます。
	 */
	public static String getOpeDateTimeStamp(CAANMsg msg, String key)
	{
		try
		{
			String opeDate = getOpeDate(msg, key);
			if (null == opeDate)
			{
				return null;
			}
			String opeTime = getSysDateTimeStamp();
			return opeDate + opeTime.substring(8, 17);
		}	
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	/**
	 * 運用日時取得処理です。
	 * アプリケーションプロパティファイルの定義に基づいて
	 * アプリケーションプロパティファイルかシステムパラメータ管理テーブルに設定されている
	 * 運用日付にシステム日時取得処理の返す時分秒ミリ秒を付加して返却します。
	 * 
	 * バッチ呼び出し以外の場合はオンライン運用日付を返却します。
	 * バッチ呼び出しの場合のみバッチ運用日付を返却します。
	 * 
	 * @param msg CBSメッセージ
	 * @param context エージェントディスパッチコンテキスト
	 * @param key システムID　例)"KK"等、またはnull
	 * @return YYYYMMDDhhmmssSSS形式の運用日時
	 * @exception JCCFrameworkExceptionがスローされます。
	 */
	public static Object getOpeDateTimeStamp(CAANMsg msg, AgentDispatchContext context, Object obj)
	{
		try
		{
			String opeDate = (String)getOpeDate(msg, context, obj);
			if (null == opeDate)
			{
				return null;
			}
			String opeTime = getSysDateTimeStamp();
			return opeDate + opeTime.substring(8, 17);
		}	
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

// 2013/03/28 FST_mukuo)オンライン運用日付取得専用処理追加 start
	/**
	 * オンライン運用日付取得処理です。
	 * システムIDに対応するオンライン運用日付を返却します。
	 * システムIDにnullを指定した場合、共通のオンライン運用日付を返却します。
	 * システムIDに対応するオンライン運用日付が定義されていなければ、nullを返却します。
	 * アプリケーションプロパティファイルの定義に基づいて
	 * アプリケーションプロパティファイルかシステムパラメータ管理テーブルに設定されている
	 * 運用日付を返却します。
	 * 
	 * @param msg CBSメッセージ
	 * @param key システムID　例)"KK"等、またはnull
	 * @return YYYYMMDD形式の運用日付
	 * @exception JCCFrameworkExceptionがスローされます。
	 */
	public static String getOnlineOpeDate(CAANMsg msg, String key)
	{
		try
		{
			return JCCejbGetOperationDateUtil.getOnlineOpeDate(msg, key);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * オンライン運用日付取得処理です。
	 * システムIDに対応するオンライン運用日付を返却します。
	 * システムIDにnullを指定した場合、共通のオンライン運用日付を返却します。
	 * システムIDに対応するオンライン運用日付が定義されていなければ、nullを返却します。
	 * アプリケーションプロパティファイルの定義に基づいて
	 * アプリケーションプロパティファイルかシステムパラメータ管理テーブルに設定されている
	 * 運用日付を返却します。
	 * 
	 * @param msg CBSメッセージ
	 * @param context エージェントディスパッチコンテキスト
	 * @param Object システムID　例)"KK"等、またはnull
	 * @return YYYYMMDD形式の運用日付
	 * @exception JCCFrameworkExceptionがスローされます。
	 */
	public static Object getOnlineOpeDate(CAANMsg msg, AgentDispatchContext context, Object obj)
	{
		try
		{
			String key = objectToString(obj);
			return JCCejbGetOperationDateUtil.getOnlineOpeDate(msg, key);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * オンライン運用日時取得処理です。
	 * システムIDに対応するオンライン運用日時を返却します。
	 * システムIDにnullを指定した場合、共通のオンライン運用日時を返却します。
	 * システムIDに対応するオンライン運用日時が定義されていなければ、nullを返却します。
	 * アプリケーションプロパティファイルの定義に基づいて
	 * アプリケーションプロパティファイルかシステムパラメータ管理テーブルに設定されている
	 * 運用日付にシステム日時取得処理の返す時分秒を付加して返却します。
	 * 
	 * @param msg CBSメッセージ
	 * @param key システムID　例)"KK"等、またはnull
	 * @return YYYYMMDDhhmmss形式の運用日時
	 * @exception JCCFrameworkExceptionがスローされます。
	 */
	public static String getOnlineOpeDateTime(CAANMsg msg, String key)
	{
		try
		{
			String opeDate = getOnlineOpeDate(msg, key);
			if (null == opeDate)
			{
				return null;
			}
			String opeTime = getSysDateTime();
			return opeDate + opeTime.substring(8, 14);
		}	
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	/**
	 * オンライン運用日時取得処理です。
	 * システムIDに対応するオンライン運用日時を返却します。
	 * システムIDにnullを指定した場合、共通のオンライン運用日時を返却します。
	 * システムIDに対応するオンライン運用日時が定義されていなければ、nullを返却します。
	 * アプリケーションプロパティファイルの定義に基づいて
	 * アプリケーションプロパティファイルかシステムパラメータ管理テーブルに設定されている
	 * 運用日付にシステム日時取得処理の返す時分秒を付加して返却します。
	 * 
	 * @param msg CBSメッセージ
	 * @param context エージェントディスパッチコンテキスト
	 * @param key システムID　例)"KK"等、またはnull
	 * @return YYYYMMDDhhmmss形式の運用日時
	 * @exception JCCFrameworkExceptionがスローされます。
	 */
	public static Object getOnlineOpeDateTime(CAANMsg msg, AgentDispatchContext context, Object obj)
	{
		try
		{
			String opeDate = (String)getOnlineOpeDate(msg, context, obj);
			if (null == opeDate)
			{
				return null;
			}
			String opeTime = getSysDateTime();
			return opeDate + opeTime.substring(8, 14);
		}	
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

	/**
	 * オンライン運用日時取得処理です。
	 * システムIDに対応するオンライン運用日時を返却します。
	 * システムIDにnullを指定した場合、共通のオンライン運用日時を返却します。
	 * システムIDに対応するオンライン運用日時が定義されていなければ、nullを返却します。
	 * アプリケーションプロパティファイルの定義に基づいて
	 * アプリケーションプロパティファイルかシステムパラメータ管理テーブルに設定されている
	 * 運用日付にシステム日時取得処理の返す時分秒ミリ秒を付加して返却します。
	 * 
	 * @param msg CBSメッセージ
	 * @param key システムID　例)"KK"等、またはnull
	 * @return YYYYMMDDhhmmssSSS形式の運用日時
	 * @exception JCCFrameworkExceptionがスローされます。
	 */
	public static String getOnlineOpeDateTimeStamp(CAANMsg msg, String key)
	{
		try
		{
			String opeDate = getOnlineOpeDate(msg, key);
			if (null == opeDate)
			{
				return null;
			}
			String opeTime = getSysDateTimeStamp();
			return opeDate + opeTime.substring(8, 17);
		}	
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	/**
	 * オンライン運用日時取得処理です。
	 * システムIDに対応するオンライン運用日時を返却します。
	 * システムIDにnullを指定した場合、共通のオンライン運用日時を返却します。
	 * システムIDに対応するオンライン運用日時が定義されていなければ、nullを返却します。
	 * アプリケーションプロパティファイルの定義に基づいて
	 * アプリケーションプロパティファイルかシステムパラメータ管理テーブルに設定されている
	 * 運用日付にシステム日時取得処理の返す時分秒ミリ秒を付加して返却します。
	 * 
	 * @param msg CBSメッセージ
	 * @param context エージェントディスパッチコンテキスト
	 * @param key システムID　例)"KK"等、またはnull
	 * @return YYYYMMDDhhmmssSSS形式の運用日時
	 * @exception JCCFrameworkExceptionがスローされます。
	 */
	public static Object getOnlineOpeDateTimeStamp(CAANMsg msg, AgentDispatchContext context, Object obj)
	{
		try
		{
			String opeDate = (String)getOnlineOpeDate(msg, context, obj);
			if (null == opeDate)
			{
				return null;
			}
			String opeTime = getSysDateTimeStamp();
			return opeDate + opeTime.substring(8, 17);
		}	
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
// 2013/03/28 FST_mukuo)オンライン運用日付取得専用処理追加 end

	/**
	 * バッチ運用日付取得処理です。
	 * システムIDに対応するバッチ運用日付を返却します。
	 * システムIDにnullを指定した場合、共通のバッチ運用日付を返却します。
	 * システムIDに対応するバッチ運用日付が定義されていなければ、nullを返却します。
	 * アプリケーションプロパティファイルの「運用日付取得元」で設定されている値により
	 * アプリケーションプロパティファイルかシステムパラメータ管理テーブルに設定されている
	 * バッチ運用日付を返却します。
	 * 
	 * @param msg CBSメッセージ
	 * @param key システムID　例)"KK"等、またはnull
	 * @return YYYYMMDD形式の運用日付
	 * @exception JCCFrameworkExceptionがスローされます。
	 */
	public static String getBatOpeDate(CAANMsg msg, String key)
	{
		try
		{
			return JCCejbGetOperationDateUtil.getBatOpeDate(msg, key);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * システム日時取得処理です。
	 * アプリケーションプロパティファイルの定義に基いて、
	 * OSの保持日時またはテスト用に擬似的に設定したテスト日時を返却します。
	 * 定義を省略した場合、OSの保持日時を返却します。
	 * 
	 * @return YYYYMMDDhhmmssSSS形式の日付
	 * @exception JCCFrameworkExceptionがスローされます。
	 */
	public static String getSysDateTimeStamp()
	{
		try
		{
			return JCCGetSystemDateUtil.getSystemDateTime().get(JCCGetSystemDateUtil.KEY_YYYYMMDDHHMMSS_SSS);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * システム日時取得処理です。
	 * アプリケーションプロパティファイルの定義に基いて、
	 * OSの保持日時またはテスト用に擬似的に設定したテスト日時を返却します。
	 * 定義を省略した場合、OSの保持日時を返却します。
	 * 
	 * @return YYYYMMDDhhmmss形式の日付
	 * @exception JCCFrameworkExceptionがスローされます。
	 */
	public static String getSysDateTime()
	{
		try
		{
			return JCCGetSystemDateUtil.getSystemDateTime().get(JCCGetSystemDateUtil.KEY_YYYYMMDDHHMMSS);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * システム日時取得処理です。
	 * アプリケーションプロパティファイルの定義に基いて、
	 * OSの保持日時またはテスト用に擬似的に設定したテスト日時を返却します。
	 * 定義を省略した場合、OSの保持日時を返却します。
	 * 
	 * @return YYYYMMDD形式の日付
	 * @exception JCCFrameworkExceptionがスローされます。
	 */
	public static String getSysDate()
	{
		try
		{
			return JCCGetSystemDateUtil.getSystemDateTime().get(JCCGetSystemDateUtil.KEY_YYYYMMDD);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * 外部システム向け文字変換処理です。
	 * 引数のHashMap内に格納された文字列を文字変換リファレンスファイルおよび
	 * 文字変換ルールファイルの定義に基いて置換を行います。
	 * 
	 * @param String arg0 外部システムのインターフェイスID
	 * @param HashMap arg1 キー：APIの項目名を指定します。
	 * 				        値	：変換元となる文字列を格納します
	 * @exception JCCFrameworkExceptionがスローされます。
	 */
	public static void convertForOut(String arg0, HashMap<String, String> arg1)
	{
		try
		{
// ANK-4463-00-00 MOD START
			//JCCejbConvertCharacter.convertCharacter(arg0, arg1);
			JCCejbConvertCharacter.convertCharacter2(arg0, arg1);
// ANK-4463-00-00 MOD END
		}		
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * マスク済データファイル生成処理です。<br>
	 * 帳票マスキング定義ファイルに従い、引数のマスク対象データファイルにマスキング処理を行います。<br>
	 *
	 * @param arg0 データファイル名パス
	 * @param arg1 帳票ID
	 */
	public static void createMaskingDataFile(String arg0,String arg1)
	{
		
	}
	
	/**
	 * Oracleシーケンス取得処理です。
	 * Oracleのシーケンス採番値を返却します。
	 *
	 * @param arg0 シーケンス定義名
	 * @return 採番値
	 */
	public static String getNextSeq(String arg0)
	{
		try
		{
			//2012/10/10 シーケンス取得情報をログ出力する start
			Connection con = JSYejbConnection.getConnection("DUAL");
			
			JSYLogBase.println(JSYLogBase.DEBUG, new JCCModelCommon().getClass(), "JCCOracleSeqUtil.getFormatedNextSeq() start", "CS0010I", new String[]{}, "", JSYLogBase.EJB_MODE);
			JSYLogBase.println(JSYLogBase.DEBUG, new JCCModelCommon().getClass(), "シーケンス定義名：" + arg0, "CS0010I", new String[]{}, "", JSYLogBase.EJB_MODE);
			
			String retStr = JCCOracleSeqUtil.getNextSeq(con, arg0);
			
			JSYLogBase.println(JSYLogBase.DEBUG, new JCCModelCommon().getClass(), "採番値：" + retStr, "CS0010I", new String[]{}, "", JSYLogBase.EJB_MODE);
			JSYLogBase.println(JSYLogBase.DEBUG, new JCCModelCommon().getClass(), "JCCOracleSeqUtil.getFormatedNextSeq() end", "CS0010I", new String[]{}, "", JSYLogBase.EJB_MODE);
			
			return retStr;
			//return JCCOracleSeqUtil.getNextSeq(con, arg0);
			//2012/10/10 シーケンス取得情報をログ出力する end
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

	
	/**
	 * フォーマット化したOracleシーケンス取得処理です。
	 * フォーマット化したOracleのシーケンス採番値を返却します。
	 * Oracleシーケンスの採番値を取得し、引数の接頭辞の付与と接頭辞と採番値の間のゼロ埋めを行います。
	 * 
	 * @param arg0 シーケンス定義名
	 * @param arg1 接頭語
	 * @param arg2 桁数
	 * @return 採番値
	 */
	public static String getFormatedNextSeq(String arg0,String arg1,int arg2)
	{
		try
		{
			//2012/10/10 シーケンス取得情報をログ出力する start
			Connection con = JSYejbConnection.getConnection("DUAL");
			
			JSYLogBase.println(JSYLogBase.DEBUG, new JCCModelCommon().getClass(), "JCCOracleSeqUtil.getFormatedNextSeq() start", "CS0010I", new String[]{}, "", JSYLogBase.EJB_MODE);
			JSYLogBase.println(JSYLogBase.DEBUG, new JCCModelCommon().getClass(), "シーケンス定義名：" + arg0, "CS0010I", new String[]{}, "", JSYLogBase.EJB_MODE);
			JSYLogBase.println(JSYLogBase.DEBUG, new JCCModelCommon().getClass(), "接頭語：" + arg1, "CS0010I", new String[]{}, "", JSYLogBase.EJB_MODE);
			JSYLogBase.println(JSYLogBase.DEBUG, new JCCModelCommon().getClass(), "桁数：" + arg2, "CS0010I", new String[]{}, "", JSYLogBase.EJB_MODE);
			
			String retStr = JCCOracleSeqUtil.getFormatedNextSeq(con, arg0, arg1, arg2);
			
			JSYLogBase.println(JSYLogBase.DEBUG, new JCCModelCommon().getClass(), "採番値：" + retStr, "CS0010I", new String[]{}, "", JSYLogBase.EJB_MODE);
			JSYLogBase.println(JSYLogBase.DEBUG, new JCCModelCommon().getClass(), "JCCOracleSeqUtil.getFormatedNextSeq() end", "CS0010I", new String[]{}, "", JSYLogBase.EJB_MODE);
			
			return retStr;
			//return JCCOracleSeqUtil.getFormatedNextSeq(con, arg0, arg1, arg2);
			//2012/10/10 シーケンス取得情報をログ出力する end
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

	/**
	 * メールヘッダー取得処理です。
	 * メールヘッダー情報の文字列からヘッダーのキーと値を返却します。
	 * 
	 * @param arg0 メールヘッダー情報
	 * @return メールヘッダー情報のキーと値
	 */
	public static HashMap<String, String> getMailHeader(String arg0)
	{
		try
		{
			return JCCGetMailHeaderUtil.getMailHeader(arg0);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * FTPクライアントのPUT処理です。<br>
	 * FTPクライアントのPUTを行います。<br>
	 * 
	 * @param arg0 CAANMsg
	 * @param arg1 DBコネクション
	 * @param arg2 FTP転送対象のファイルリスト(ローカルのフルパス)
	 * @param arg3 FTP転送依頼するインターフェイスID
	 * @param arg4 処理結果詳細を格納したHashMap。内容は下記@参照 <BR>
	 * <pre>
	 *  @処理結果詳細HashMap
	 *   ERR_KBN       (Integer)  エラー区分。0:エラーなし 1:接続エラー 2:ファイルエラー
	 *   CONNECT_ERR   (HashMap)  接続エラー。内容は下記A参照
	 *   FILE_ERR      (ArrayList<Hash Map>)  ファイルエラー。内容は下記B参照
     * </pre>
	 * <pre>
	 *  A接続エラー詳細HashMap
	 *   ERR_FLG       (Boolean) 成功:true 失敗:false
	 *   ERR_MESSAGE   (String)  エラーメッセージ
	 *   ERR_CD        (String)  エラーコード。詳細は下記C参照
     * </pre>
 	 * <pre>
	 *  Bファイルエラー詳細HashMap
	 *   FILE_NAME     (String)  ファイル名
	 *   ERR_FLG       (Boolean) 成功:true 失敗:false
	 *   ERR_MESSAGE   (String)  エラーメッセージ
	 *   ERR_CD        (String)  エラーコード。詳細は下記C参照
     * </pre>
 	 * <pre>
	 *   200 ソケット接続に失敗
	 *   201 ユーザー認証に失敗
	 *   201 パスワード認証に失敗
	 *   202 リモートホストの指定したディレクトリ移動に失敗
	 *   203 一時作業用フォルダ作成に失敗
	 *   203 ダウンロードファイルオープンに失敗
	 *   203 ダウンロードファイル転送に失敗
	 *   204 アップロードファイルオープンに失敗
	 *   204 アップロードファイル転送に失敗
	 *   205 ファイル削除に失敗
	 *   206 切断に失敗
	 *   207 CDコマンドの実行に失敗（ファイルアップロード時）
	 *   208 CDコマンドの実行に失敗（ファイルダウンロード時）
	 *   209 CDコマンドの実行に失敗（サーバからの削除時）
	 *   210 転送モードの設定に失敗（ファイルアップロード時）
	 *   211 転送モードの設定に失敗（ファイルダウンロード時）
	 *   212 監視完了ファイルの生成に失敗
	 *   300 ダウンロードファイルの書き込みに失敗
	 *   302 ファイルバックアップに失敗
	 *   303 ファイルサイズ不一致
	 *   304 その他の例外が発生
	 *   305 ファイルが存在しない（監視完了ファイル作成時）
	 *   306 ファイルが存在しない（バックアップファイル作成時）
	 *   307 ファイルが存在しない（ダウンロード時）
	 *   308 ファイルが存在しない（アップロード時）
	 *   310 ファイルが存在しない（サイズチェック時）
     * </pre>
	 * @return 処理結果（正常：true／エラー：false） 
	 */
	public static boolean putFTP(CAANMsg arg0, Connection arg1,
			ArrayList<String>arg2,String arg3, HashMap<String, Object> arg4)
	{
		// ESB種別をISI固定でFTP転送部品を呼び出し
		return putFTP(arg0, arg1, arg2, arg3, ISI, arg4);
	}
	
	/**
	 * FTPクライアントのPUT処理です。<br>
	 * FTPクライアントのPUTを行います。<br>
	 * 
	 * @param arg0 CAANMsg
	 * @param arg1 DBコネクション
	 * @param arg2 FTP転送対象のファイルリスト(ローカルのフルパス)
	 * @param arg3 FTP転送依頼するインターフェイスID
	 * @param arg4 ESB種別。1:ISI(定数JCCModelCommon.ISI) 2:III(定数JCCModelCommon.III)
	 * @param arg5 処理結果詳細を格納したHashMap。内容は下記@参照 <BR>
	 * <pre>
	 *  @処理結果詳細HashMap
	 *   ERR_KBN       (Integer)  エラー区分。0:エラーなし 1:接続エラー 2:ファイルエラー
	 *   CONNECT_ERR   (HashMap)  接続エラー。内容は下記A参照
	 *   FILE_ERR      (ArrayList<Hash Map>)  ファイルエラー。内容は下記B参照
     * </pre>
	 * <pre>
	 *  A接続エラー詳細HashMap
	 *   ERR_FLG       (Boolean) 成功:true 失敗:false
	 *   ERR_MESSAGE   (String)  エラーメッセージ
	 *   ERR_CD        (String)  エラーコード。詳細は下記C参照
     * </pre>
 	 * <pre>
	 *  Bファイルエラー詳細HashMap
	 *   FILE_NAME     (String)  ファイル名
	 *   ERR_FLG       (Boolean) 成功:true 失敗:false
	 *   ERR_MESSAGE   (String)  エラーメッセージ
	 *   ERR_CD        (String)  エラーコード。詳細は下記C参照
     * </pre>
 	 * <pre>
	 *  Cエラーコード一覧
	 *   200 ソケット接続に失敗
	 *   201 ユーザー認証に失敗
	 *   201 パスワード認証に失敗
	 *   202 リモートホストの指定したディレクトリ移動に失敗
	 *   203 一時作業用フォルダ作成に失敗
	 *   203 ダウンロードファイルオープンに失敗
	 *   203 ダウンロードファイル転送に失敗
	 *   204 アップロードファイルオープンに失敗
	 *   204 アップロードファイル転送に失敗
	 *   205 ファイル削除に失敗
	 *   206 切断に失敗
	 *   207 CDコマンドの実行に失敗（ファイルアップロード時）
	 *   208 CDコマンドの実行に失敗（ファイルダウンロード時）
	 *   209 CDコマンドの実行に失敗（サーバからの削除時）
	 *   210 転送モードの設定に失敗（ファイルアップロード時）
	 *   211 転送モードの設定に失敗（ファイルダウンロード時）
	 *   212 監視完了ファイルの生成に失敗
	 *   300 ダウンロードファイルの書き込みに失敗
	 *   302 ファイルバックアップに失敗
	 *   303 ファイルサイズ不一致
	 *   304 その他の例外が発生
	 *   305 ファイルが存在しない（監視完了ファイル作成時）
	 *   306 ファイルが存在しない（バックアップファイル作成時）
	 *   307 ファイルが存在しない（ダウンロード時）
	 *   308 ファイルが存在しない（アップロード時）
	 *   310 ファイルが存在しない（サイズチェック時）
     * </pre>
	 * @return 処理結果（正常：true／エラー：false） 
	 */
	public static boolean putFTP(CAANMsg arg0, Connection arg1,
			ArrayList<String> arg2,String arg3, int arg4, HashMap<String, Object> arg5)
	{
		/*************************
		/ パラメータチェック処理
		**************************/
		
		//CAANMsgがnullの場合
		if(null == arg0)
		{
			throw new JCCFrameworkException("CAANMsgがnullです");
		}
		
		//コネクションがnullの場合
		if(null == arg1)
		{
			throw new JCCFrameworkException("コネクションがnullです");
		}
		
		//ファイルリストがnull、または要素数が0の場合
		if(null == arg2 || 0 == arg2.size())
		{
			throw new JCCFrameworkException("ファイルリストがnullもしくは要素数０です");
		}
		
		// インターフェイスIDがnull、または空白の場合
		if(null == arg3 || "".equals(arg3))
		{
			throw new JCCFrameworkException("インターフェイスIDがnullもしくは空白です");
		}
		
		// ESB種別が1(ISI)もしくは2(III)以外の場合
		if(ISI != arg4 && III != arg4)
		{
			throw new JCCFrameworkException("ESB種別が不正です");
		}
		
		
		/**********************************
		/ システムパラメータ情報取得処理
		***********************************/
		
		// 複合化KEY
		final String ENCRYPT_KEY 	 	= "ENCRYPT_KEY";
		// SYS_PARAM_ID
		final String HOST_NAME		 	= "hostName";
		final String PORT 			 	= "port";
		final String USER_ID 		 	= "userId";
		final String PASSWORD 		 	= "password";
		final String RETRY_INTERVAL	 	= "rtryIntrvl";
		final String RETRY_COUNT_UNI	= "rtryCnt_uni";
		final String RETRY_COUNT_GEN	= "rtryCnt_gen";
		final String TRANSFER_MODE	 	= "tranMode";
		final String DIRECTORY_PASS	 	= "dirPath";
		
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;
		
		// ISI、III判別用
		String COLUMN_NAME = "";
		
		// 複合化後パスワード
		String decryptPass = "";
		
		// ファイルリスト
		String[] fileList;
		
		// エラーメッセージ格納用
		StringBuffer err_Buff = new StringBuffer();
		
		// ESBサーバ情報格納用
		HashMap<String, String> mapSvr = new HashMap<String, String>();
		ArrayList<String> prmSvr = new ArrayList<String>();
		prmSvr.add(HOST_NAME);
		prmSvr.add(PORT);
		prmSvr.add(USER_ID);
		prmSvr.add(PASSWORD);
		
		// インターフェース情報格納用
		HashMap<String, String> mapIntrfc = new HashMap<String, String>();
		ArrayList<String> prmIntrfc = new ArrayList<String>();
		prmIntrfc.add(RETRY_INTERVAL);
		prmIntrfc.add(RETRY_COUNT_UNI);
		prmIntrfc.add(RETRY_COUNT_GEN);
		prmIntrfc.add(TRANSFER_MODE);
		prmIntrfc.add(DIRECTORY_PASS);
		
		try {
			// システムパラメータ（ESBサーバ情報）取得
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(" SELECT ZM0311.SYS_PARAM_ID            AS SYS_PARAM_ID, ")
					.append("        ZM0311.SYS_PARAM_SETTE_VALUE_1 AS ISI_VALUE, ")
					.append("        ZM0311.SYS_PARAM_SETTE_VALUE_2 AS III_VALUE ")
					.append(" FROM   ZM_M_SYS_PARAM_KNRI ZM0311 ")
					.append(" WHERE  ZM0311.SYS_PARAM_BUNRUI_CD = 'F0000000000000000001' ")
					.append(" AND    ZM0311.SYS_PARAM_TSTAYMD <= ? ")
					.append(" AND    ZM0311.SYS_PARAM_TENDYMD >= ? ")
					.append(" AND    ZM0311.MK_FLG = '0' ")
					.append(" ORDER BY ZM0311.SYS_PARAM_ID ");
			
			// prepareStatementにSQL文をセット
			pstmt = arg1.prepareStatement(sql_Buff.toString());
			
			// パラメータ設定
			CAANJDBCUtil.setParam(pstmt, 1, JCCModelCommon.getOpeDate(arg0, null));
			CAANJDBCUtil.setParam(pstmt, 2, JCCModelCommon.getOpeDate(arg0, null));
			
			// SQLを実行
			rsltQuery = pstmt.executeQuery();
			
			// ESB種別が「ISI」の場合
			if(arg4 == ISI)
			{
				// "ISI_VALUE"を設定
				COLUMN_NAME = "ISI_VALUE";
			}
			// ESB種別が「III」の場合
			else if(arg4 == III)
			{
				// "ISI_VALUE"を設定
				COLUMN_NAME = "III_VALUE";
			}
			
			// カラム値の取得
			while(rsltQuery.next())
			{
				// ESBサーバ情報項目名数分ループ
				for(int i=0; i<prmSvr.size(); i++){
					// SYS_PARAM_IDが項目名と一致した場合
					if(prmSvr.get(i).equals(rsltQuery.getString("SYS_PARAM_ID"))){
						// SYS_PARAM_ID、SYS_PARAM_SETTE_VALUEを格納
						mapSvr.put(	rsltQuery.getString("SYS_PARAM_ID"), 
									rsltQuery.getString(COLUMN_NAME));
					}
				}
			}
			
			// 情報取得に失敗した場合
			if(prmSvr.size() != mapSvr.size()){
				err_Buff.delete(0,err_Buff.length());
				err_Buff.append("システムパラメータの情報取得に失敗しました。")
						.append("ホスト名:" + mapSvr.get(HOST_NAME) + "、")
						.append("ポート番号:" + mapSvr.get(PORT) + "、")
						.append("ユーザID:" + mapSvr.get(USER_ID) + "、")
						.append("パスワード:" + mapSvr.get(PASSWORD));
				// メッセージを設定し例外をTHROW
				throw new JCCFrameworkException(err_Buff.toString());
			}
			
			
			// システムパラメータ（インターフェース情報）取得
			sql_Buff.delete(0,sql_Buff.length());
			sql_Buff.append(" SELECT ZM0311.SYS_PARAM_ID            AS SYS_PARAM_ID, ")
					.append("        ZM0311.SYS_PARAM_SETTE_VALUE_1 AS INTER_FAICE_VALUE ")
					.append(" FROM   ZM_M_SYS_PARAM_KNRI ZM0311 ")
					.append(" WHERE  ZM0311.SYS_PARAM_BUNRUI_CD = 'F0000000000000000002' ")
					.append(" AND    ZM0311.SYS_PARAM_TSTAYMD <= ? ")
					.append(" AND    ZM0311.SYS_PARAM_TENDYMD >= ? ")
					.append(" AND    ZM0311.SYS_PARAM_ID LIKE  ? || '%' ")
					.append(" AND    ZM0311.MK_FLG = '0' ")
					.append(" ORDER BY ZM0311.SYS_PARAM_ID ");
			
			
			//2012/03/21 prepareStatementをクローズする start
			if(null != pstmt)
			{
				pstmt.close();
			}
			//2012/03/21 prepareStatementをクローズする end

			// prepareStatementにSQL文をセット
			pstmt = arg1.prepareStatement(sql_Buff.toString());
			
			
			// パラメータ設定
			CAANJDBCUtil.setParam(pstmt, 1, JCCModelCommon.getOpeDate(arg0, null));
			CAANJDBCUtil.setParam(pstmt, 2, JCCModelCommon.getOpeDate(arg0, null));
			CAANJDBCUtil.setParam(pstmt, 3, arg3);
			
			//2012/03/21 ResultSetをクローズする start
			if(null != rsltQuery)
			{
				rsltQuery.close();
			}
			//2012/03/21 ResultSetをクローズする start
			
			// SQLを実行
			rsltQuery = pstmt.executeQuery();
			
			// カラム値の取得
			while(rsltQuery.next())
			{
				// ESBサーバ情報項目名数分ループ
				for(int i=0; i<prmIntrfc.size(); i++){
					// SYS_PARAM_IDが項目名と一致した場合
					if((arg3 + "_" + prmIntrfc.get(i)).equals(rsltQuery.getString("SYS_PARAM_ID"))){
						// SYS_PARAM_ID、SYS_PARAM_SETTE_VALUE_1を格納
						mapIntrfc.put(	rsltQuery.getString("SYS_PARAM_ID"), 
										rsltQuery.getString("INTER_FAICE_VALUE"));
					}
				}
			}
			
			// 情報取得に失敗した場合
			if(prmIntrfc.size() != mapIntrfc.size()){
				err_Buff.delete(0,err_Buff.length());
				err_Buff.append("システムパラメータの情報取得に失敗しました。")
						.append("リトライ間隔:" + mapIntrfc.get(arg3 + "_" + RETRY_INTERVAL) + "、")
						.append("単位あたりのリトライ回数:" + mapIntrfc.get(arg3 + "_" + RETRY_COUNT_UNI) + "、")
						.append("総リトライ回数:" + mapIntrfc.get(arg3 + "_" + RETRY_COUNT_GEN) + "、")
						.append("転送モード:" + mapIntrfc.get(arg3 + "_" + TRANSFER_MODE) + "、")
						.append("転送先ディレクトリパス:" + mapIntrfc.get(arg3 + "_" + DIRECTORY_PASS));
				// メッセージを設定し例外をTHROW
				throw new JCCFrameworkException(err_Buff.toString());
			}
			
			if (rsltQuery != null)
			{
				rsltQuery.close();
			}
			if (pstmt != null)
			{
				pstmt.close();
			}
		} catch (SQLException e) {
			try 
			{
				if (rsltQuery != null)
				{
					rsltQuery.close();
				}
				if (pstmt != null)
				{
					pstmt.close();
				}
			} 
			catch (SQLException se) 
			{
			}
			throw new JCCFrameworkException("システムパラメータの情報取得に失敗しました。", e);
		}
		finally
		{
		}
		
		
		/*******************
		/ FTP転送処理
		********************/
		
		try {
			// パスワード複合化
			decryptPass = JCCcomEncryptionUtil.decrypt(
					JCCModelCommon.getApplicationConst(ENCRYPT_KEY), mapSvr.get(PASSWORD));
		} catch(Throwable e) {
			throw new JCCFrameworkException("複合化処理で例外が発生しました。", e);
		}
		
		// ファイルリスト読み込み
		fileList = new String[arg2.size()];
		for(int i=0; i< arg2.size(); i++)
		{
			fileList[i] = arg2.get(i);
		}
		
		// ファイルFTP部品のインスタンス生成
		JCCFtpClientUtil jCCFtpClientUtil = new JCCFtpClientUtil();
		
		try {
			// ファイルFTP部品を呼び出し業務サービスへ返却
			return jCCFtpClientUtil.putFtp(	mapSvr.get(HOST_NAME), 											// ホスト名
											mapSvr.get(PORT), 												// ポート番号
											mapSvr.get(USER_ID), 											// ユーザ
											decryptPass, 													// パスワード
											Integer.parseInt(mapIntrfc.get(arg3 + "_" + RETRY_INTERVAL)), 	// リトライ間隔
											Integer.parseInt(mapIntrfc.get(arg3 + "_" + RETRY_COUNT_UNI)), 	// 連続リトライ回数
											Integer.parseInt(mapIntrfc.get(arg3 + "_" + RETRY_COUNT_GEN)), 	// 総リトライ回数
											mapIntrfc.get(arg3 + "_" + TRANSFER_MODE), 						// 転送モード
											mapIntrfc.get(arg3 + "_" + DIRECTORY_PASS), 					// 転送先ディレクトリパス
											fileList, 														// ファイルリスト
											arg3, 															// インターフェースID
											arg5);															// 処理結果詳細
		} catch (Throwable e) {
			throw new JCCFrameworkException("FTP送信処理で例外が発生しました。", e);
		}
	}
	
	/**
	 * 各種定義ファイルから情報を取得する処理です。
	 * 各種定義ファイルからキーで指定された情報を返却します。
	 * 
	 * @param arg0 定義ファイルのID
	 * @param arg1 取得する情報のキー
	 * 
	 * @return キーで取得された情報
	 */
	public static String getPropertyValue(String arg0,String arg1)
	{
		return "";
	}

	/**
	 * アプリケーションプロパティファイルから情報を取得する処理です。
	 * アプリケーションプロパティファイルからキーで指定された情報を返却します。
	 * 
	 * @param arg0 キー
	 * 
	 * @return キーで取得された情報
	 */
	public static String getApplicationConst(String arg0)
	{
		return JCMAPLConstMgr.getString(arg0);
	}

	/**
	 * XMLからMapオブジェクトへの変換処理です。<br>
	 * XMLを解析してMapオブジェクトに変換します。<br>
	 * XMLから生成されるMapオブジェクトのデータ構造は「MapオブジェクトからXMLへの変換処理(getParseMapToXml)」を参照ください。<br>
	 * @param xml XML形式データ
	 * @return map XMLを格納したMapオブジェクト
	 * @exception JCCFrameworkExceptionがスローされます。
	 */
	public static HashMap<String, Object> getParseXmlToMap(String xml)
	{
		try
		{
			return new JCCMapConvXml().getParseXmlToMap(xml);
		}	
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

	/**
	 * MapオブジェクトからXMLへの変換処理です。<br>
	 * Mapオブジェクトを解析してXMLに変換します。<br>
	 * <PRE>HashMapの最上位データ構造は以下の形式になります。
	 *    キー              値                                           型
	 * -----------  -----------------    --------------------------------------------------------------------------
	 * "ENCODING"   XML文字エンコード    String
	 * "ELEMENT"    要素名               String
	 * "ATTRIBUTE"  属性                 ArrayList&lt;HashMap&lt;String, String&gt;&gt;
	 *                                   要素に対する1つの属性のキーと値は1つのHashMap&lt;String, String&gt;にセットします。
	 *                                   HashMapはArrayListにセットします。
	 *                                   属性が複数ある場合、1つずつHashMapにしてArrayListにセットします。
	 * "VALUE"      値または子要素       ArrayList&lt;Object&gt;
	 *                                   要素に対する値または子要素をArrayListにセットします。
	 *                                   値の場合はString、子要素の場合はHashMap&lt;String, Object&gt;型でセットします。
	 *                                   親要素と同様にキーを"ELEMENT"として、子となる要素名をセットします。
	 *                                   属性、値も親要素と同様に"ATTRIBUTE"、"VALUE"をキーとしてセットします。
	 * 
	 * 設定例)
	 * &lt;?xml version="1.0" encoding="shift_jis"?&gt;
	 * &lt;RESPONSE&gt;
	 *     &lt;RESULT CODE="1"/&gt;
	 *     &lt;STATUS&gt;99999&lt;/STATUS&gt;
	 *     &lt;MESSAGE NO="1"&gt;メッセージ&lt;/MESSAGE&gt;
	 * &lt;/RESPONSE&gt;
	 *      ↓
	 *      ↓上記のXMLを生成したい場合、以下のHashMapのデータ構造とする必要があります。
	 *      ↓ 
	 * HashMapのデータ構造
	 *    キー              値
	 * ---------- ------------------------
	 * "ENCODING"  "shift_jis"
	 * "ELEMENT"   "RESPONSE"
	 * "VALUE"     ArrayList&lt;Object&gt; ---> ArrayListに格納されるHashMap
	 * 
	 *                                       HashMap
	 *                                    キー                   値
	 *                                 ----------- ---------------------------------
	 *                                 "ELEMENT"   "RESULT"
	 *                                 "ATTRIBUTE" ArrayList&lt;HashMap&lt;String, String&gt;&gt; ---> ArrayListに格納されるHashMap
	 *                                                                                         HashMap
	 *                                                                                        キー      値
	 *                                                                                    ----------- -------
	 *                                                                                    "CODE"       "1"
	 * 
	 *                                       HashMap
	 *                                    キー                   値
	 *                                 ----------- ---------------------------------
	 *                                 "ELEMENT"   "STATUS"
	 *                                 "VALUE"     ArrayList&lt;Object&gt;                  ---> ArrayListに格納されるObject
	 *                                                                                         値(String)
	 *                                                                                          "99999"
	 * 
	 *                                       HashMap
	 *                                    キー                   値
	 *                                 ----------- ---------------------------------
	 *                                 "ELEMENT"   "MESSAGE"
	 *                                 "ATTRIBUTE" ArrayList&lt;HashMap&lt;String, String&gt;&gt;  ---> ArrayListに格納されるHashMap
	 *                                                                                         HashMap
	 *                                                                                        キー      値
	 *                                                                                    ----------- -------
	 *                                                                                      "NO"        "1"
	 * 
	 *                                 "VALUE"     ArrayList&lt;Object&gt;                  ---> ArrayListに格納されるObject
	 *                                                                                         値(String)
	 *                                                                                          "メッセージ"
	 * </PRE>
	 * 
	 * @param map XMLデータを格納したMapオブジェクト
	 * @return XMLデータ
	 * @exception JCCFrameworkExceptionがスローされます。
	 */
	public static String getParseMapToXml(HashMap<String, Object> map)
	{
		try
		{
			return new JCCMapConvXml().getParseMapToXml(map);
		}	
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

	/**
	 * JCCFrameworkExceptionオブジェクト生成処理です。
	 * ThrowableオブジェクトをJCCFrameworkExceptionオブジェクトに保持して返却します。
	 * ThrowableオブジェクトがJCCFrameworkExceptionオブジェクトの場合は、そのまま返却します。
	 * @param th Throwableオブジェクト
	 * @return JCCFrameworkExceptionオブジェクト
	 */
	private static JCCFrameworkException makeJCCFrameworkException(Throwable th)
	{	
		if (th instanceof JCCFrameworkException)
		{	
			return (JCCFrameworkException)th;
		}
		JCCFrameworkException fwe = new JCCFrameworkException();
		fwe.initCause(th);
		return fwe;
	}
	
	/**
	 * オブジェクト文字列取得処理です。
	 * オブジェクトを文字列に変換して返却します。
	 * @param obj オブジェクト
	 * @return 文字列
	 */
	private static String objectToString(Object obj)
	{	
		if (null == obj)
		{	
			return null;
		}
		return obj.toString();
	}
	
	/**
	 * 外部コマンド同期実行処理です。<br>
	 * コマンドまたはコマンドとパラメータを含む文字列を受け取り、<br>
	 * 同期モードでコマンドを実行し、コマンドの標準出力結果を返します。<br>
	 * <PRE>コマンドライン引数の配列には以下のように格納します。
	 * 配列先頭をコマンド、配列2番目以降で"-"が付いている場合オプション、付いていない場合は引数と判断します。
	 * コマンド及び引数にパスを設定する場合は、ルートディレクトリからの絶対パスで設定してください。
	 * (例)
	 * args[0] = "/usr/bin/find";                    // システムコマンド
	 * args[1] = "/etc";                             // 引数１
	 * args[2] = "-type";                            // オプション１
	 * args[3] = "f";                                // 引数２
	 * args[4] = "-and";                             // オプション２
	 * args[5] = "-name";                            // オプション３
	 * args[6] = "20110627120000.log";               // 引数３
	 * args[7] = "-print";                           // オプション４
	 * </PRE>
	 * @param arg0       コマンドライン引数
	 * @param arg1       標準出力結果格納用引数。コマンド実行結果は、JCCModelCommon.LINE_SEPARATORで
	 *                    1行ずつ取得可能です。
	 * @param arg2       タイムアウト時間（秒）。0を指定するとフレームワークのタイムアウト上限時間で
	 *                    タイムアウトします。またタイムアウト時間を指定した場合でも、フレームワーク
	 *                    の上限を超過したら強制的にタイムアウトします。
	 * @return 結果コード（コマンド実行のリターンコード "0":正常終了、"0"以外：エラー）
	 * @exception JCCFrameworkExceptionがスローされます。
	 *      getResult()で取得した値が"100"であった場合、メモリ空き容量が不足したことを示します。
	 *      getResult()で取得した値が"200"であった場合、コマンド実行がタイムアウトしたことを示します。
	 */
	public static String execSync(String[] arg0, StringBuffer arg1, int arg2)
	{
		// コマンド実行部品呼び出し
		return execSync(arg0, arg1, arg2, "");
	}
	
	/**
	 * 外部コマンド同期実行処理です。<br>
	 * コマンドまたはコマンドとパラメータを含む文字列を受け取り、<br>
	 * 同期モードでコマンドを実行し、コマンドの標準出力結果を返します。<br>
	 * アプリケーションプロパティファイルに、サービスインターフェイスIDがKEYに含まれる
	 * 許可リストを設定していた場合、アクセス禁止ディレクトリ・禁止コマンドパス・
	 * 禁止引数リストの対象外となります。<br>
	 * (例)<br>
	 * 禁止コマンドリストが以下のように設定されていた場合、<br>
	 *     EXEC_PROHIBIT_CMD=/bin/usr/su;/bin/usr/ssh<br>
	 * アプリケーションプロパティファイルに以下の形式で許可したいコマンドを設定し
	 * 当部品を呼び出すことで実行可能となります。<br>
	 *     EXEC_PERMIT_CMD_(サービスインターフェイスID)=/bin/usr/ssh
	 * <PRE>コマンドライン引数の配列には以下のように格納します。
	 * 配列先頭をコマンド、配列2番目以降で"-"が付いている場合オプション、付いていない場合は引数と判断します。
	 * コマンド及び引数にパスを設定する場合は、ルートディレクトリからの絶対パスで設定してください。
	 * (例)
	 * args[0] = "/usr/bin/find";                    // システムコマンド
	 * args[1] = "/etc";                             // 引数１
	 * args[2] = "-type";                            // オプション１
	 * args[3] = "f";                                // 引数２
	 * args[4] = "-and";                             // オプション２
	 * args[5] = "-name";                            // オプション３
	 * args[6] = "20110627120000.log";               // 引数３
	 * args[7] = "-print";                           // オプション４
	 * </PRE>
	 * @param arg0       コマンドライン引数
	 * @param arg1       標準出力結果格納用引数。コマンド実行結果は、JCCModelCommon.LINE_SEPARATORで
	 *                    1行ずつ取得可能です。
	 * @param arg2       タイムアウト時間（秒）。0を指定するとフレームワークのタイムアウト上限時間で
	 *                    タイムアウトします。またタイムアウト時間を指定した場合でも、フレームワーク
	 *                    の上限を超過したら強制的にタイムアウトします。
	 * @param arg3       サービスインターフェイスID
	 * @return 結果コード（コマンド実行のリターンコード "0":正常終了、"0"以外：エラー）
	 * @exception JCCFrameworkExceptionがスローされます。
	 *      getResult()で取得した値が"100"であった場合、メモリ空き容量が不足したことを示します。
	 *      getResult()で取得した値が"200"であった場合、コマンド実行がタイムアウトしたことを示します。
	 */
	public static String execSync(String[] arg0, StringBuffer arg1, int arg2, String arg3)
	{
		/*************************
		/ パラメータチェック処理
		**************************/
		
		// コマンドがnull、または要素数0の場合
		if(null == arg0 || 0 == arg0.length)
		{
			throw new JCCFrameworkException("コマンドがnullもしくは要素数０です。");
		}
		
		// コマンドにnullの要素が含まれている場合
		for(int i=0; i < arg0.length; i++){
			if(null == arg0[i] || "".equals(arg0[i])){
				throw new JCCFrameworkException("コマンドにnullの要素が含まれています。");
			}
		}
		
		// コマンド実行タイムアウト時間が0より小さい場合
		if(arg2 < 0)
		{
			throw new JCCFrameworkException("コマンド実行タイムアウト時間が0より小さい値です。");
		}
		
		// サービスIF_IDがnullの場合
		if(null == arg3)
		{
			// 空白を設定
			arg3 = "";
		}
		
		
		/****************************************
		/ アプリケーションプロパティ取得処理
		*****************************************/
		
		// アプリケーションプロパティMap生成
		HashMap<String, Object> propMap = new HashMap<String, Object>();
		
		// コマンド実行クラスのインスタンス生成
		JCCComExecUtil execCmd = new JCCComExecUtil();
		
		//*** アクセスを禁止するディレクトリのリスト ***//
		getAPLPropForExec(propMap, execCmd.EXEC_ACCESS_PROHIBIT_DIR);
		
		//*** 例外的に許可するディレクトリのリストとその実行を許可するID ***//
		getAPLPropForExec(propMap, execCmd.EXEC_ACCESS_PERMIT_DIR, arg3);
		
		//*** 禁止するコマンドパスのリスト ***//
		getAPLPropForExec(propMap, execCmd.EXEC_PROHIBIT_CMD);
		
		//*** 例外的に許可するディレクトリのリストとその実行を許可するID ***//
		getAPLPropForExec(propMap, execCmd.EXEC_PERMIT_CMD, arg3);
		
		//*** 禁止する引数のリスト ***//
		getAPLPropForExec(propMap, execCmd.EXEC_PROHIBIT_ARGS);
		
		//*** 例外的に許可する引数のリストとその実行を許可するID ***//
		getAPLPropForExec(propMap, execCmd.EXEC_PERMIT_ARGS, arg3);
		
		//*** 処理結果詳細Buffサイズの最大値 ***//
		propMap.put(execCmd.EXEC_BUFF_SIZE, getApplicationConst(execCmd.EXEC_BUFF_SIZE));
		
		//*** コマンドの実行を許可するシステムの空きメモリサイズ(MB) ***//
		propMap.put(execCmd.EXEC_PERMIT_MEMORY, getApplicationConst(execCmd.EXEC_PERMIT_MEMORY));
		
//Windows対応　2011/08/11 FST)fujita　start
		//*** Windows使用許可設定 ***//
		propMap.put(execCmd.EXEC_WINDOWS_PERMIT_FLG, getApplicationConst(execCmd.EXEC_WINDOWS_PERMIT_FLG));
//Windows対応　2011/08/11 FST)fujita　end
		
		/****************************************
		/ コマンド実行部品呼び出し処理
		*****************************************/
		
		// コマンドの実行
		return execCmd.exec(arg0, true, arg2, "", propMap, arg1);
	}
	
	/**
	 * 外部コマンド非同期実行処理です。<br>
	 * コマンドまたはコマンドとパラメータを含む文字列を受け取り、<br>
	 * 非同期モードでコマンドを実行し、コマンドの標準出力結果を返します。<br>
	 * <PRE>コマンドライン引数の配列には以下のように格納します。
	 * 配列先頭をコマンド、配列2番目以降で"-"が付いている場合オプション、付いていない場合は引数と判断します。
	 * コマンド及び引数にパスを設定する場合は、ルートディレクトリからの絶対パスで設定してください。
	 * (例)
	 * args[0] = "/usr/bin/find";                    // システムコマンド
	 * args[1] = "/etc";                             // 引数１
	 * args[2] = "-type";                            // オプション１
	 * args[3] = "f";                                // 引数２
	 * args[4] = "-and";                             // オプション２
	 * args[5] = "-name";                            // オプション３
	 * args[6] = "20110627120000.log";               // 引数３
	 * args[7] = "-print";                           // オプション４
	 * </PRE>
	 * @param arg0       コマンドライン引数
	 * @exception JCCFrameworkExceptionがスローされます。
	 *      getResult()で取得した値が"100"であった場合、メモリ空き容量が不足したことを示します。
	 */
	public static void execAsync(String[] arg0)
	{
		// コマンド実行部品呼び出し
		execAsync(arg0, "", "");
	}
	
	/**
	 * 外部コマンド非同期実行処理です。<br>
	 * コマンドまたはコマンドとパラメータを含む文字列を受け取り、<br>
	 * 非同期モードでコマンドを実行し、コマンドの標準出力結果を返します。<br>
	 * 外部コマンド実行結果は業務ログへ出力します。<br>
	 * アプリケーションプロパティファイルに、サービスインターフェイスIDがKEYに含まれる
	 * 許可リストを設定していた場合、アクセス禁止ディレクトリ・禁止コマンドパス・
	 * 禁止引数リストの対象外となります。<br>
	 * <PRE>(例)
	 * 禁止コマンドリストが以下のように設定されていた場合、<br>
	 *     EXEC_PROHIBIT_CMD=/bin/usr/su;/bin/usr/ssh<br>
	 * アプリケーションプロパティファイルに以下の形式で許可したいコマンドを設定し
	 * 当部品を呼び出すことで実行可能となります。<br>
	 *     EXEC_PERMIT_CMD_(サービスインターフェイスID)=/bin/usr/ssh
	 * <PRE>コマンドライン引数の配列には以下のように格納します。
	 * 配列先頭をコマンド、配列2番目以降で"-"が付いている場合オプション、付いていない場合は引数と判断します。
	 * コマンド及び引数にパスを設定する場合は、ルートディレクトリからの絶対パスで設定してください。
	 * (例)
	 * args[0] = "/usr/bin/find";                    // システムコマンド
	 * args[1] = "/etc";                             // 引数１
	 * args[2] = "-type";                            // オプション１
	 * args[3] = "f";                                // 引数２
	 * args[4] = "-and";                             // オプション２
	 * args[5] = "-name";                            // オプション３
	 * args[6] = "20110627120000.log";               // 引数３
	 * args[7] = "-print";                           // オプション４
	 * </PRE>
	 * @param arg0       コマンドライン引数
	 * @param arg1       サービスインターフェイスID
	 * @param arg2       標準出力結果格納用ログファイルパス
	 * @exception JCCFrameworkExceptionがスローされます。
	 *      getResult()で取得した値が"100"であった場合、メモリ空き容量が不足したことを示します。
	 */
	public static void execAsync(String[] arg0, String arg1, String arg2)
	{
		/*************************
		/ パラメータチェック処理
		**************************/
		
		// コマンドがnull、または要素数0の場合
		if(null == arg0 || 0 == arg0.length)
		{
			throw new JCCFrameworkException("コマンドがnullもしくは要素数０です。");
		}
		
		// コマンドにnullの要素が含まれている場合
		for(int i=0; i < arg0.length; i++){
			if(null == arg0[i] || "".equals(arg0[i])){
				throw new JCCFrameworkException("コマンドにnullの要素が含まれています。");
			}
		}
		
		// サービスIF_IDがnullの場合
		if(null == arg1)
		{
			// 空白を設定
			arg1 = "";
		}
		
		// ログファイルパスがnullの場合
		if(null == arg2)
		{
			// 空白を設定
			arg2 = "";
		}
		
		
		// 共通部品へ渡す標準出力結果格納用引数（未使用）
		StringBuffer buf = new StringBuffer();
		
		/****************************************
		/ アプリケーションプロパティ取得処理
		*****************************************/
		
		// アプリケーションプロパティMap生成
		HashMap<String, Object> propMap = new HashMap<String, Object>();
		
		// コマンド実行クラスのインスタンス生成
		JCCComExecUtil execCmd = new JCCComExecUtil();
		
		//*** アクセスを禁止するディレクトリのリスト ***//
		getAPLPropForExec(propMap, execCmd.EXEC_ACCESS_PROHIBIT_DIR);
		
		//*** 例外的に許可するディレクトリのリストとその実行を許可するID ***//
		getAPLPropForExec(propMap, execCmd.EXEC_ACCESS_PERMIT_DIR, arg1);
		
		//*** 禁止するコマンドパスのリスト ***//
		getAPLPropForExec(propMap, execCmd.EXEC_PROHIBIT_CMD);
		
		//*** 例外的に許可するディレクトリのリストとその実行を許可するID ***//
		getAPLPropForExec(propMap, execCmd.EXEC_PERMIT_CMD, arg1);
		
		//*** 禁止する引数のリスト ***//
		getAPLPropForExec(propMap, execCmd.EXEC_PROHIBIT_ARGS);
		
		//*** 例外的に許可する引数のリストとその実行を許可するID ***//
		getAPLPropForExec(propMap, execCmd.EXEC_PERMIT_ARGS, arg1);
		
		//*** 処理結果詳細Buffサイズの最大値 ***//
		propMap.put(execCmd.EXEC_BUFF_SIZE, getApplicationConst(execCmd.EXEC_BUFF_SIZE));
		
		//*** コマンドの実行を許可するシステムの空きメモリサイズ(MB) ***//
		propMap.put(execCmd.EXEC_PERMIT_MEMORY, getApplicationConst(execCmd.EXEC_PERMIT_MEMORY));
		
//Windows対応　2011/08/11 FST)fujita　start
		//*** Windows使用許可設定 ***//
		propMap.put(execCmd.EXEC_WINDOWS_PERMIT_FLG, getApplicationConst(execCmd.EXEC_WINDOWS_PERMIT_FLG));
//Windows対応　2011/08/11 FST)fujita　end
		
		/****************************************
		/ コマンド実行部品呼び出し処理
		*****************************************/
		
		// コマンドの実行
		execCmd.exec(arg0, false, 0, arg2, propMap, buf);
	}
	
	/**
	 * コマンド実行処理用アプリケーションプロパティ読み込み処理です。<br>
	 * アプリケーションプロパティの読み込みを行います。<br>
	 * 
	 * @param arg0 アプリケーションプロパティ情報格納用マップ
	 * @param arg1 検索KEY
	 * @return void 
	 */
	public static void getAPLPropForExec(HashMap<String, Object> arg0, String arg1)
	{	
		final String SEPARATER = ";";
		
		ArrayList<String> alList = new ArrayList<String>();
		String[] prmList = {};
		String prmStr = getApplicationConst(arg1);
		
		// セミコロンを区切り文字に分解
		if(null != prmStr){
			prmList = prmStr.split(SEPARATER);
		}
		if(null != prmList){
			// パラメータをリストへ格納
			for(int i=0; i < prmList.length; i++){
				alList.add(prmList[i]);
			}
		}
		// Mapへ格納
		arg0.put(arg1, alList);
	}
	
	/**
	 * コマンド実行処理用アプリケーションプロパティ読み込み処理です。<br>
	 * アプリケーションプロパティの読み込みを行います。<br>
	 * 
	 * @param arg0 アプリケーションプロパティ情報格納用マップ
	 * @param arg1 検索KEY
	 * @param arg2 識別ID
	 * @return void 
	 */
	public static void getAPLPropForExec(HashMap<String, Object> arg0, String arg1, String arg2)
	{	
		final String SEPARATER = ";";
		
		ArrayList<String> alList = new ArrayList<String>();
		String[] prmtList = {};
		String prmStr = "";
		
		// KEYに呼び出し元の識別子を付与して検索
		prmStr = getApplicationConst(arg1 + "_" + arg2);
		// レコード設定されている場合
		if(null != prmStr){
			prmtList = prmStr.split(SEPARATER);
		}
		// 値が設定されている場合
		if(null != prmtList && 0 != prmtList.length){
			for(int i=0; i < prmtList.length; i++){
				// パラメータをリストへ追加
				alList.add(prmtList[i]);
			}
			// Mapへ格納
			arg0.put(arg1, alList);
		}
	}
	
	/**
	 * 
	 * 指定された文字列にサニタイズ処理を行った文字列を返却します。
	 * 
	 * @param value サニタイズする文字列
	 * @return サニタイズ処理後の文字列
	 */
	public static String escapeString( String value )
	{
		try
		{
			return JCCSanitizingUtil.escapeString(value);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * 
	 * サニタイズ処理が施された文字列を元に戻し、返却します。
	 * 
	 * @param value サニタイズ処理されている文字列
	 * @return サニタイズ処理された文字列を元に戻した文字列
	 */
	public static String reverseEscapeString( String value )
	{
		try
		{
			return JCCSanitizingUtil.reverseEscapeString(value);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * 帳票ファイルのマスキング処理です。<br>
	 * 帳票ファイル（CSV形式）のファイルパスを受け取り、<br>
	 * 帳票マスキング定義ファイルの定義を元にマスクしたファイルを作成しパスを返却します。<br>
	 * <PRE>帳票マスキング定義ファイルへは、以下の形式でマスキング定義を設定してください。
	 * 帳票マスキング定義ファイルの設定
	 * 帳票ID=[カラム番号];[置換え文字]%[表示文字数]
	 * カラム番号：マスクを行いたいCSVのカラム番号を指定してください。番号は0から開始します。
	 * 置換え文字：マスクした際に表示する文字列を指定してください。
	 * 表示文字数：下N桁を残してマスクを行う場合に指定してください。指定文字数分マスキング前の値の末尾を表示します。
	 * (例)
	 * CCLST00101=2;********,3;************%4
	 * 上記設定の場合、以下のようにマスクが行われます。
	 * "00001","井尾太郎","abcdef","1234567890123456"
	 *                    ↓
	 * "00001","井尾太郎","********","************3456"
	 * 
	 * アプリケーションプロパティファイルへは、帳票ファイルの文字コード及び改行コードを設定してください。
	 * (設定例)
	 * 文字コード：CHOHYO_DATA_MOJI_CD=UTF-8　　※必須
	 * 改行コード：CCHOHYO_DATA_KAIGYO_CD=CRLF　※CRLF、LF、空白のいずれかを設定（空白設定時はOS準拠の改行コードを適用）
	 * </PRE>
	 * @param arg0       帳票ID
	 * @param arg1       マスキング対象ファイルパス
	 * @return           マスキング実施後のファイルパス
	 * @exception JCCFrameworkExceptionがスローされます。
	 */
	public static String maskingChyohyoFile(String arg0, String arg1)
	{
		/*************************
		/ パラメータチェック処理
		**************************/
		
		// 帳票IDがnullまたは空白の場合
		if(null == arg0 || "".equals(arg0))
		{
			throw new JCCFrameworkException("帳票IDがnullもしくは空白です。");
		}
		
		// ファイルパスがnullまたは空白の場合
		if(null == arg1 || "".equals(arg1))
		{
			throw new JCCFrameworkException("ファイルパスがnullもしくは空白です。");
		}
		
		
		/*************************
		/ 定義ファイル情報取得
		**************************/
		
		// 帳票マスキング定義ファイルのパスを取得
		String path = getApplicationConst("CHOHYO_MASK_FILE_PATH");
		// 帳票マスキング定義ファイルの文字コードを取得
		String encord = getApplicationConst("CHOHYO_MASK_FILE_ENCODING");
		// 帳票マスキング定義ファイルの文字コードを取得
		String chyohyoEncord = getApplicationConst("CHOHYO_DATA_MOJI_CD");
		// 帳票マスキング定義ファイルの改行コードを取得
		String chyohyoLineSep = getApplicationConst("CHOHYO_DATA_KAIGYO_CD");
		
		// 定義ファイル設定
		JCCChohyoMaskCache.setPath(path, encord);
		
		// 帳票IDをキーに帳票マスキング定義ファイル読み込み
		HashMap<Integer, ArrayList<String>> propMap = JCCChohyoMaskCache.getValue(arg0);
		
		// 帳票マスキング定義未登録時
		if(null == propMap || propMap.keySet().isEmpty())
		{
			// ファイルパスを無編集で返却
			return arg1;
		}
		
		
		/*************************
		/ マスキング処理の実行
		**************************/
		
		// 帳票マスキング部品のインスタンス生成
		JCCChohyoMaskUtil mask = new JCCChohyoMaskUtil();
		
		// マスキング処理呼び出し、結果パスを返却
		return mask.maskingInputFile(arg1, chyohyoEncord, chyohyoLineSep, propMap);
		
	}
	
	//処理ID付与対応　2011/07/31 FST)fujita　start
	/**
	 * 
	 * SQL(Insert文)の共通カラム名を返却します。
	 * LogiclEntityを使用せずスキーマにアクセスする場合は
	 * 生成するSQL文に本メソッドの返却文字列を挿入してください。
	 * 
	 * @return SQL挿入用文字列
	 */
	public static String getCommonColumnNameInsert()
	{
		String columnsStr = "ADD_DTM, ADD_UNYO_YMD, ADD_TRN_ID, ADD_OPEACNT "
					 +"," + "UPD_DTM, UPD_UNYO_YMD, UPD_TRN_ID, UPD_OPEACNT "
					 +"," + "MK_FLG";
		return columnsStr;
	}
	/**
	 * 
	 * SQL(Insert文)の共通カラムに挿入するデータを返却します。
	 * LogiclEntityを使用せずスキーマにアクセスする場合は
	 * 生成するSQL文に本メソッドの返却文字列を挿入してください。
	 * 
	 * @return SQL挿入用文字列
	 */
	@Deprecated
	public static String getCommonColumnValueInsert()
	{
		StringBuffer sql = new StringBuffer();
		// システム日付取得
		String sysDate = getSysDateTimeStamp();
//運用日付対応　2011/08/05 FST)fujita　
		  // 運用年月日
		String unyoDate = null;
		// スレッドローカルより依頼元IDを取得
		HashMap<String, Object> comMsg = JCCWebAddTrnId.get(JCMConstants.ADD_TRN_ID_MESSAGE_COMMON_MAP);
		// スレッドローカルより運用日付を取得
		HashMap<String, Object> unyoDateMap = JCCWebAddTrnId.get(JCMConstants.ADD_TRN_ID_UNYO_DATE_MAP);
		//String unyoDate = "20990730";
		//HashMap<String, Object> comMsg = JCCWebAddTrnId.get();
//運用日付対応　2011/08/05 FST)fujita　end
		// 処理ID取得
		String callType = (String)comMsg.get(JCMConstants.CALL_TYPE_KEY);
		String trnId = (String)comMsg.get(JCMConstants.INVOKE_GAMEN_ID_KEY);
		if("2".equals(callType))  // API
		{
			trnId = trnId.substring(0, 6);  // 依頼元IDから不要な「0PJP」をカット
		}
		// バックヤード、フロント、モバイルの場合
		// 2012/02/15 量販タイプを追加 start
		else if("0".equals(callType) || "1".equals(callType) || "5".equals(callType) || "6".equals(callType))
		// 2012/02/15 量販タイプを追加 end
		{
			trnId = trnId.substring(0, 8);  // 依頼元IDから不要な「0PJP」をカット
		}
		else
		{
			// なにもしない
		}
//運用日付対応　2011/08/05 FST)fujita　start
		// 運用日付を取得
		if("4".equals(callType))  // バッチ
		{
			// 20130531 日中バッチ運用日付対応 fst)yanagihara start
			unyoDate = getBatunyoDate(unyoDateMap);
			//unyoDate = (String)unyoDateMap.get("BDATE");
			// 20130531 日中バッチ運用日付対応 fst)yanagihara end
		}
		else                     //  バッチ以外
		{
			unyoDate = (String)unyoDateMap.get("ODATE");
		}
//運用日付対応　2011/08/05 FST)fujita　end
		// オペレータアカウント取得
		String opeId =  (String)comMsg.get(JCMConstants.OPERATOR_ID_KEY);
		
		for (int i = 0; i < 2; i++) { //２回まわす
			sql.append("'" + sysDate + "'").append(",");
			sql.append("'" + unyoDate + "'").append(",");
			sql.append("'" + trnId + "'").append(",");
			sql.append("'" + opeId + "'").append(",");
		}
		sql.append("'0'");
		return sql.toString();
	}
	/**
	 * 
	 * SQL(Update文)の共通カラム名、データを返却します。
	 * LogiclEntityを使用せずスキーマにアクセスする場合は
	 * 生成するSQL文に本メソッドの返却文字列を挿入してください。
	 * 
	 * @return SQL挿入用文字列
	 */
	@Deprecated
	public static String getCommonColumnUpdate()
	{
		StringBuffer sql = new StringBuffer();
		// システム日付取得
		String sysDate = getSysDateTimeStamp();
//運用日付対応　2011/08/05 FST)fujita　
		  // 運用年月日
		String unyoDate = null;
		// スレッドローカルより依頼元IDを取得
		HashMap<String, Object> comMsg = JCCWebAddTrnId.get(JCMConstants.ADD_TRN_ID_MESSAGE_COMMON_MAP);
		// スレッドローカルより運用日付を取得
		HashMap<String, Object> unyoDateMap = JCCWebAddTrnId.get(JCMConstants.ADD_TRN_ID_UNYO_DATE_MAP);
		//String unyoDate = "20990730";
		//HashMap<String, Object> comMsg = JCCWebAddTrnId.get();
//運用日付対応　2011/08/05 FST)fujita　end
		// 処理ID取得
		String callType = (String)comMsg.get(JCMConstants.CALL_TYPE_KEY);
		String trnId = (String)comMsg.get(JCMConstants.INVOKE_GAMEN_ID_KEY);
		if("2".equals(callType))  // API
		{
			trnId = trnId.substring(0, 6);  // 依頼元IDから不要な「0PJP」をカット
		}
		// バックヤード、フロント、モバイルの場合
		// 2012/02/15 量販タイプを追加 start
		else if("0".equals(callType) || "1".equals(callType) || "5".equals(callType) || "6".equals(callType))
		// 2012/02/15 量販タイプを追加 end
		{
			trnId = trnId.substring(0, 8);  // 依頼元IDから不要な「0PJP」をカット
		}
		else
		{
			// なにもしない
		}
//運用日付対応　2011/08/05 FST)fujita　start
		// 運用日付を取得
		if("4".equals(callType))  // バッチ
		{
			// 20130531 日中バッチ運用日付対応 fst)yanagihara start
			unyoDate = getBatunyoDate(unyoDateMap);
			//unyoDate = (String)unyoDateMap.get("BDATE");
			// 20130531 日中バッチ運用日付対応 fst)yanagihara end
		}
		else                     //  バッチ以外
		{
			unyoDate = (String)unyoDateMap.get("ODATE");
		}
//運用日付対応　2011/08/05 FST)fujita　end
		// オペレータアカウント取得
		String opeId =  (String)comMsg.get(JCMConstants.OPERATOR_ID_KEY);
		
		sql.append(" UPD_DTM = ").append("'" + sysDate + "'").append(",");
		sql.append(" UPD_UNYO_YMD = ").append("'" + unyoDate + "'").append(",");
		sql.append(" UPD_TRN_ID = ").append("'" + trnId + "'").append(",");
		sql.append(" UPD_OPEACNT = ").append("'" + opeId + "'").append(",");
		sql.append(" MK_FLG = ").append("'" + "0" + "'");
		
		return sql.toString();
		
	}
	/**
	 * 
	 * SQL(論理削除文)の共通カラム名、データを返却します。
	 * LogiclEntityを使用せずスキーマにアクセスする場合は
	 * 生成するSQL文に本メソッドの返却文字列を挿入してください。
	 * 
	 * @return SQL挿入用文字列
	 */
	@Deprecated
	public static String getCommonColumnDelete()
	{
		StringBuffer sql = new StringBuffer();
		// システム日付取得
		String sysDate = getSysDateTimeStamp();
//運用日付対応　2011/08/05 FST)fujita　
		  // 運用年月日
		String unyoDate = null;
		// スレッドローカルより依頼元IDを取得
		HashMap<String, Object> comMsg = JCCWebAddTrnId.get(JCMConstants.ADD_TRN_ID_MESSAGE_COMMON_MAP);
		// スレッドローカルより運用日付を取得
		HashMap<String, Object> unyoDateMap = JCCWebAddTrnId.get(JCMConstants.ADD_TRN_ID_UNYO_DATE_MAP);
		//String unyoDate = "20990730";
		//HashMap<String, Object> comMsg = JCCWebAddTrnId.get();
//運用日付対応　2011/08/05 FST)fujita　end
		// 処理ID取得
		String callType = (String)comMsg.get(JCMConstants.CALL_TYPE_KEY);
		String trnId = (String)comMsg.get(JCMConstants.INVOKE_GAMEN_ID_KEY);
		if("2".equals(callType))  // API
		{
			trnId = trnId.substring(0, 6);  // 依頼元IDから不要な「0PJP」をカット
		}
		// バックヤード、フロント、モバイルの場合
		// 2012/02/15 量販タイプを追加 start
		else if("0".equals(callType) || "1".equals(callType) || "5".equals(callType) || "6".equals(callType))
		// 2012/02/15 量販タイプを追加 end
		{
			trnId = trnId.substring(0, 8);  // 依頼元IDから不要な「0PJP」をカット
		}
		else
		{
			// なにもしない
		}
//運用日付対応　2011/08/05 FST)fujita　start
		// 運用日付を取得
		if("4".equals(callType))  // バッチ
		{
			// 20130531 日中バッチ運用日付対応 fst)yanagihara start
			unyoDate = getBatunyoDate(unyoDateMap);
			//unyoDate = (String)unyoDateMap.get("BDATE");
			// 20130531 日中バッチ運用日付対応 fst)yanagihara end
		}
		else                     //  バッチ以外
		{
			unyoDate = (String)unyoDateMap.get("ODATE");
		}
//運用日付対応　2011/08/05 FST)fujita　end
		// オペレータアカウント取得
		String opeId =  (String)comMsg.get(JCMConstants.OPERATOR_ID_KEY);
		
		sql.append(" UPD_DTM = ").append("'" + sysDate + "'").append(",");
		sql.append(" UPD_UNYO_YMD = ").append("'" + unyoDate + "'").append(",");
		sql.append(" UPD_TRN_ID = ").append("'" + trnId + "'").append(",");
		sql.append(" UPD_OPEACNT = ").append("'" + opeId + "'").append(",");
		sql.append(" DEL_DTM = ").append("'" + sysDate + "'").append(",");
		sql.append(" DEL_UNYO_YMD = ").append("'" + unyoDate + "'").append(",");
		sql.append(" DEL_TRN_ID = ").append("'" + trnId + "'").append(",");
		sql.append(" DEL_OPEACNT = ").append("'" + opeId + "'").append(",");
		sql.append(" MK_FLG = ").append("'" + "1" + "'");
		
		return sql.toString();
	}
	
	
	//処理ID付与対応　2011/07/31 FST)fujita　end
	
	/**
	 * 
	 * SQL(Insert文)の共通カラムに挿入するデータを返却します。
	 * LogiclEntityを使用せずスキーマにアクセスする場合は
	 * 生成するSQL文に本メソッドの返却文字列を挿入してください。
	 * 
	 * @return SQL挿入用文字列
	 */
	public static String getCommonColumnValueInsert(CAANMsg inMsg)
	{
		StringBuffer sql = new StringBuffer();
		// システム日付取得
		String sysDate = inMsg.getString("operateDatetime");
//運用日付対応　2011/08/05 FST)fujita　
		  // 運用年月日
		String unyoDate = null;
		// スレッドローカルより依頼元IDを取得
		HashMap<String, Object> comMsg = JCCWebAddTrnId.get(JCMConstants.ADD_TRN_ID_MESSAGE_COMMON_MAP);
		// スレッドローカルより運用日付を取得
		HashMap<String, Object> unyoDateMap = JCCWebAddTrnId.get(JCMConstants.ADD_TRN_ID_UNYO_DATE_MAP);
		//String unyoDate = "20990730";
		//HashMap<String, Object> comMsg = JCCWebAddTrnId.get();
//運用日付対応　2011/08/05 FST)fujita　end
		// 処理ID取得
		String callType = (String)comMsg.get(JCMConstants.CALL_TYPE_KEY);
		String trnId = (String)comMsg.get(JCMConstants.INVOKE_GAMEN_ID_KEY);
		if("2".equals(callType))  // API
		{
			trnId = trnId.substring(0, 6);  // 依頼元IDから不要な「0PJP」をカット
		}
		// バックヤード、フロント、モバイルの場合
		// 2012/02/15 量販タイプを追加 start
		else if("0".equals(callType) || "1".equals(callType) || "5".equals(callType) || "6".equals(callType))
		// 2012/02/15 量販タイプを追加 end
		{
			trnId = trnId.substring(0, 8);  // 依頼元IDから不要な「0PJP」をカット
		}
		else
		{
			// なにもしない
		}
//運用日付対応　2011/08/05 FST)fujita　start
		// 運用日付を取得
		if("4".equals(callType))  // バッチ
		{
			// 20130531 日中バッチ運用日付対応 fst)yanagihara start
			unyoDate = getBatunyoDate(unyoDateMap);
			//unyoDate = (String)unyoDateMap.get("BDATE");
			// 20130531 日中バッチ運用日付対応 fst)yanagihara end
		}
		else                     //  バッチ以外
		{
			unyoDate = (String)unyoDateMap.get("ODATE");
		}
//運用日付対応　2011/08/05 FST)fujita　end
		// オペレータアカウント取得
		String opeId =  (String)comMsg.get(JCMConstants.OPERATOR_ID_KEY);
		
		for (int i = 0; i < 2; i++) { //２回まわす
			sql.append("'" + sysDate + "'").append(",");
			sql.append("'" + unyoDate + "'").append(",");
			sql.append("'" + trnId + "'").append(",");
			sql.append("'" + opeId + "'").append(",");
		}
		sql.append("'0'");
		return sql.toString();
	}
	/**
	 * 
	 * SQL(Update文)の共通カラム名、データを返却します。
	 * LogiclEntityを使用せずスキーマにアクセスする場合は
	 * 生成するSQL文に本メソッドの返却文字列を挿入してください。
	 * 
	 * @return SQL挿入用文字列
	 */
	public static String getCommonColumnUpdate(CAANMsg inMsg)
	{
		StringBuffer sql = new StringBuffer();
		// システム日付取得
		String sysDate = inMsg.getString("operateDatetime");
		  // 運用年月日
		String unyoDate = null;
		// スレッドローカルより依頼元IDを取得
		HashMap<String, Object> comMsg = JCCWebAddTrnId.get(JCMConstants.ADD_TRN_ID_MESSAGE_COMMON_MAP);
		// スレッドローカルより運用日付を取得
		HashMap<String, Object> unyoDateMap = JCCWebAddTrnId.get(JCMConstants.ADD_TRN_ID_UNYO_DATE_MAP);
		//String unyoDate = "20990730";
		//HashMap<String, Object> comMsg = JCCWebAddTrnId.get();
//運用日付対応　2011/08/05 FST)fujita　end
		// 処理ID取得
		String callType = (String)comMsg.get(JCMConstants.CALL_TYPE_KEY);
		String trnId = (String)comMsg.get(JCMConstants.INVOKE_GAMEN_ID_KEY);
		if("2".equals(callType))  // API
		{
			trnId = trnId.substring(0, 6);  // 依頼元IDから不要な「0PJP」をカット
		}
		// バックヤード、フロント、モバイルの場合
		// 2012/02/15 量販タイプを追加 start
		else if("0".equals(callType) || "1".equals(callType) || "5".equals(callType) || "6".equals(callType))
		// 2012/02/15 量販タイプを追加 end
		{
			trnId = trnId.substring(0, 8);  // 依頼元IDから不要な「0PJP」をカット
		}
		else
		{
			// なにもしない
		}
//運用日付対応　2011/08/05 FST)fujita　start
		// 運用日付を取得
		if("4".equals(callType))  // バッチ
		{
			// 20130531 日中バッチ運用日付対応 fst)yanagihara start
			unyoDate = getBatunyoDate(unyoDateMap);
			//unyoDate = (String)unyoDateMap.get("BDATE");
			// 20130531 日中バッチ運用日付対応 fst)yanagihara end
		}
		else                     //  バッチ以外
		{
			unyoDate = (String)unyoDateMap.get("ODATE");
		}
//運用日付対応　2011/08/05 FST)fujita　end
		// オペレータアカウント取得
		String opeId =  (String)comMsg.get(JCMConstants.OPERATOR_ID_KEY);
		
		sql.append(" UPD_DTM = ").append("'" + sysDate + "'").append(",");
		sql.append(" UPD_UNYO_YMD = ").append("'" + unyoDate + "'").append(",");
		sql.append(" UPD_TRN_ID = ").append("'" + trnId + "'").append(",");
		sql.append(" UPD_OPEACNT = ").append("'" + opeId + "'").append(",");
		sql.append(" MK_FLG = ").append("'" + "0" + "'");
		
		return sql.toString();
		
	}
	/**
	 * 
	 * SQL(論理削除文)の共通カラム名、データを返却します。
	 * LogiclEntityを使用せずスキーマにアクセスする場合は
	 * 生成するSQL文に本メソッドの返却文字列を挿入してください。
	 * 
	 * @return SQL挿入用文字列
	 */
	public static String getCommonColumnDelete(CAANMsg inMsg)
	{
		StringBuffer sql = new StringBuffer();
		// システム日付取得
		String sysDate = inMsg.getString("operateDatetime");
//運用日付対応　2011/08/05 FST)fujita　
		  // 運用年月日
		String unyoDate = null;
		// スレッドローカルより依頼元IDを取得
		HashMap<String, Object> comMsg = JCCWebAddTrnId.get(JCMConstants.ADD_TRN_ID_MESSAGE_COMMON_MAP);
		// スレッドローカルより運用日付を取得
		HashMap<String, Object> unyoDateMap = JCCWebAddTrnId.get(JCMConstants.ADD_TRN_ID_UNYO_DATE_MAP);
		//String unyoDate = "20990730";
		//HashMap<String, Object> comMsg = JCCWebAddTrnId.get();
//運用日付対応　2011/08/05 FST)fujita　end
		// 処理ID取得
		String callType = (String)comMsg.get(JCMConstants.CALL_TYPE_KEY);
		String trnId = (String)comMsg.get(JCMConstants.INVOKE_GAMEN_ID_KEY);
		if("2".equals(callType))  // API
		{
			trnId = trnId.substring(0, 6);  // 依頼元IDから不要な「0PJP」をカット
		}
		// バックヤード、フロント、モバイルの場合
		// 2012/02/15 量販タイプを追加 start
		else if("0".equals(callType) || "1".equals(callType) || "5".equals(callType) || "6".equals(callType))
		// 2012/02/15 量販タイプを追加 end
		{
			trnId = trnId.substring(0, 8);  // 依頼元IDから不要な「0PJP」をカット
		}
		else
		{
			// なにもしない
		}
//運用日付対応　2011/08/05 FST)fujita　start
		// 運用日付を取得
		if("4".equals(callType))  // バッチ
		{
			// 20130531 日中バッチ運用日付対応 fst)yanagihara start
			unyoDate = getBatunyoDate(unyoDateMap);
			//unyoDate = (String)unyoDateMap.get("BDATE");
			// 20130531 日中バッチ運用日付対応 fst)yanagihara end
		}
		else                     //  バッチ以外
		{
			unyoDate = (String)unyoDateMap.get("ODATE");
		}
//運用日付対応　2011/08/05 FST)fujita　end
		// オペレータアカウント取得
		String opeId =  (String)comMsg.get(JCMConstants.OPERATOR_ID_KEY);
		
		sql.append(" UPD_DTM = ").append("'" + sysDate + "'").append(",");
		sql.append(" UPD_UNYO_YMD = ").append("'" + unyoDate + "'").append(",");
		sql.append(" UPD_TRN_ID = ").append("'" + trnId + "'").append(",");
		sql.append(" UPD_OPEACNT = ").append("'" + opeId + "'").append(",");
		sql.append(" DEL_DTM = ").append("'" + sysDate + "'").append(",");
		sql.append(" DEL_UNYO_YMD = ").append("'" + unyoDate + "'").append(",");
		sql.append(" DEL_TRN_ID = ").append("'" + trnId + "'").append(",");
		sql.append(" DEL_OPEACNT = ").append("'" + opeId + "'").append(",");
		sql.append(" MK_FLG = ").append("'" + "1" + "'");
		
		return sql.toString();
	}
	
	// 20130531 日中バッチ運用日付対応 fst)yanagihara start
	/**
	 * バッチ運用日付の取得処理。
	 * @param HashMap unyoDateMap
	 * @return 運用日付
	 */
	private static String getBatunyoDate(HashMap<String, Object> unyoDateMap)
	{
		// バッチアプリケーションから渡された運用日付を取得する。
		HashMap map = JCCWebAddTrnId.get(JCMConstants.CC_BATCH_OPERATE_DATE);
		if(map != null)
		{
			String opedate = (String) map.get(JCMConstants.BATCH_OPEDATE);
			if(opedate != null && !"".equals(opedate))
			{
				return opedate;
			}
		}
		// 空メール受信の場合は、バッチより運用日付が渡されないためBDATE固定で返却
		return (String)unyoDateMap.get("BDATE");
	}
	// 20130531 日中バッチ運用日付対応 fst)yanagihara end
	
	// 暗号化／復号化対応 2012/01/04 FST start
	/**
	 * 文字列暗号化処理です。入力された文字列を暗号化して結果の文字列を返却します。
	 * (AES256暗号化方式)
	 * 
	 * @param inMsg CAANMsg
	 * @param context AgentDispatchContext
	 * @param inStr 暗号化対象の文字列
	 * @return 暗号化結果の文字列
	 * @throws JCCFrameworkException
	 */
	public static String getEncryptResult(CAANMsg inMsg, AgentDispatchContext context, Object inStr) throws JCCFrameworkException
	{
		try
		{
			return JCCejbEncryptionUtil.getEncryptResult(inMsg, context, inStr);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * 文字列復号化処理です。入力された文字列を復号化して結果の文字列を返却します。
	 * (AES256暗号化方式)
	 * 
	 * @param inMsg CAANMsg
	 * @param context AgentDispatchContext
	 * @param inStr 復号化対象の文字列
	 * @return 復号化結果の文字列
	 * @throws JCCFrameworkException
	 */
	public static String getDecryptResult(CAANMsg inMsg, AgentDispatchContext context, Object inStr) throws JCCFrameworkException
	{
		try
		{
			return JCCejbEncryptionUtil.getDecryptResult(inMsg, context, inStr);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	// 暗号化／復号化対応 2012/01/04 FST end
	
	// 暗号化／復号化対応 2012/02/26 FST start
	/**
	 * 文字列暗号化処理です。入力された文字列を暗号化して結果の文字列を返却します。
	 * (Blowfish暗号化方式)
	 *
	 * @param key 暗号化用キー
	 * @param inStr 暗号化対象の文字列
	 * @return 暗号化結果の文字列
	 * @throws JCCbatFrameworkException
	 */
	public static String getEncryptResultPassword(String inStr) throws JCCFrameworkException
	{
		try
		{
			String key = JCCModelCommon.getApplicationConst("ENCRYPT_KEY");
			if(null == key)
			{
				throw new JCCFrameworkException("APLConstに[ENCRYPT_KEY]が指定されていません。");
			}
			return JCCcomEncryptionUtil.encrypt(key, inStr);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * 文字列復号化処理です。入力された文字列を復号化して結果の文字列を返却します。
	 * (Blowfish暗号化方式)
	 * 
	 * @param key 復号化用キー
	 * @param inStr 復号化対象の文字列
	 * @return 復号化結果の文字列
	 * @throws JCCbatFrameworkException
	 */
	public static String getDecryptResultPassword(String inStr) throws JCCFrameworkException
	{
		try
		{
			String key = JCCModelCommon.getApplicationConst("ENCRYPT_KEY");
			if(null == key)
			{
				throw new JCCFrameworkException("APLConstに[ENCRYPT_KEY]が指定されていません。");
			}
			return JCCcomEncryptionUtil.decrypt(key, inStr);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	// パスワード暗号化／復号化対応 2012/02/26 FST end
	
	// ANK-4592-00-00 ADD START
	/**
	 * チェックディジット判定処理です。
	 * (Blowfish暗号化方式)
	 * 
	 * @param inStr チェックディジット判定対象の文字列(20桁)
	 * @return Boolean チェック結果
	 * @throws false チェックNG
	 */
	public static Boolean checkDigit(String inStr) throws JCCFrameworkException
	{
		try
		{
			// チェック実行判定
			String mode = JCCModelCommon.getApplicationConst("CHK_DIGIT_MODE");
			
			// チェック実行モードの場合
			if ("2".equals(mode))
			{
				
				// CASカード番号の上15桁を取得
				String top15 = inStr.substring(0, 15);
				// CASカード番号の下5桁を取得
				String bottom5 = inStr.substring(15, 20);
				
				// 上15桁を16進数に変換
				long decimal = Long.parseLong(top15, 10);
				String wkHex = Long.toHexString(decimal);
				// 16進数を2バイト単位に分割
				String hex = String.format("%12s", wkHex).replace(" ", "0");
				String hex12 = hex.substring(0, 4);
				String hex34 = hex.substring(4, 8);
				String hex56 = hex.substring(8, 12);
				String xorBinary1 = Integer.toBinaryString(Integer.parseInt(hex12, 16) ^ Integer.parseInt(hex34, 16));
				String xorBinary2 = Integer.toBinaryString(Integer.parseInt(xorBinary1, 2) ^ Integer.parseInt(hex56, 16));
				// 2進数を10進数に変換
				int sum = Integer.parseInt(xorBinary2, 2);
				String chkSum = String.format("%05d", sum);
				
				// CASカード番号の末尾5桁と演算結果が不一致の場合
				if (!(bottom5.equals(chkSum)))
				{
					// チェックNG
					return true;
				}
			}
		}
		catch(Throwable th)
		{
			// 異常終了の場合、チェックNG
			return true;
		}
		return false;
	}
	// ANK-4592-00-00 ADD END
}