/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JCCWebCommon
*   ソースファイル名：JCCWebCommon.java
*   作成者          ：富士通
*   日付            ：2011年04月01日
*＜機能概要＞
*   Ｗｅｂ共通アクセッサー部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/04/01   富士通      新規作成
*
**********************************************************************/

package eo.web.webview.common;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;

import javax.servlet.http.HttpSession;

import com.fujitsu.futurity.model.common.JCMAPLConstMgr;
import com.fujitsu.futurity.web.x31.X31BWebBusinessLogic;
import com.fujitsu.futurity.web.x31.X31CMessageResult;
import com.fujitsu.futurity.web.x31.X31CVector;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;
import com.fujitsu.futurity.web.x31.X31SRuntimeException;
import com.fujitsu.futurity.web.x33.X33CUtil;
import com.fujitsu.futurity.web.x33.beans.X33VViewJSPBean;

import eo.common.util.JCCComExecUtil;
import eo.common.util.JCCCompressFileUtil;
import eo.common.util.JCCFileUtil;
import eo.common.util.JCCFrameworkException;
import eo.common.util.JCCGetMailHeaderUtil;
import eo.common.util.JCCMapConvXml;
import eo.common.util.JCCSanitizingUtil;
import eo.common.util.JCCcomEncryptionUtil;
import eo.common.util.JPCUtilCommon;

import eo.common.util.JCCGetSystemDateUtil;
import eo.web.webview.JCCWebBusinessLogic;

/**
 * Ｗｅｂ共通アクセッサー部品です。<p>
 * XIＥＷロジック等で実装します。<p>
 * <BR>
 * @author 富士通
 */
public class JCCWebCommon extends JPCUtilCommon
{
	// 20121220 メニューIDの取得先変更（戻るボタンが効かない障害の対応） fst)yanagihara start
	/** メニューID取得先パラメータ*/
	public static final String MENUID_PARAM_NAME = "ZMW069010PJP_menuidsystem";
	// 20121220 メニューIDの取得先変更（戻るボタンが効かない障害の対応） fst)yanagihara end
	
	/** 外部コマンド同期実行処理用ラインセパレータ */
	public static final String LINE_SEPARATOR = System.getProperty("line.separator");
	
	/**
	 * オンライン運用日付取得処理です。
	 * システムIDに対応するオンライン運用日付を返却します。
	 * システムIDにnullを指定した場合、共通のオンライン運用日付を返却します。
	 * システムIDに対応するオンライン運用日付が定義されていなければ、nullを返却します。
	 * アプリケーションプロパティファイルの定義に基づいて
	 * アプリケーションプロパティファイルかシステムパラメータ管理テーブルに設定されている
	 * 運用日付を返却します。
	 * 
	 * @param bl 業務ロジック
	 * @param key システムID　例)"KK"等、またはnull
	 * @return YYYYMMDD形式の運用日付
	 * @throws JCCFrameworkException
	 */
	public static String getOpeDate(X31BWebBusinessLogic bl, String key)
	{
		try
		{
			return JCCsvlGetOperationDateUtil.getOpeDate(bl, key);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

	/**
	 * オンライン運用日付取得処理です。
	 * システムIDに対応するオンライン運用日付を返却します。
	 * システムIDにnullを指定した場合、共通のオンライン運用日付を返却します。
	 * システムIDに対応するオンライン運用日付が定義されていなければ、nullを返却します。
	 * アプリケーションプロパティファイルの定義に基づいて
	 * アプリケーションプロパティファイルかシステムパラメータ管理テーブルに設定されている
	 * 運用日付にシステム日時取得処理の返す時分秒を付加して返却します。
	 * 
	 * @param bl 業務ロジック
	 * @param key システムID　例)"KK"等、またはnull
	 * @return YYYYMMDDhhmmss形式の運用日付
	 * @throws JCCFrameworkException
	 */
	public static String getOpeDateTime(X31BWebBusinessLogic bl, String key)
	{
		try
		{
			String opeDate = getOpeDate(bl, 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 bl 業務ロジック
	 * @param key システムID　例)"KK"等、またはnull
	 * @return YYYYMMDDhhmmssSSS形式の運用日付
	 * @throws JCCFrameworkException
	 */
	public static String getOpeDateTimeStamp(X31BWebBusinessLogic bl, String key)
	{
		try
		{
			String opeDate = getOpeDate(bl, 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 bl 業務ロジック
	 * @param key システムコード　例)"KK"等、またはnull
	 * @return YYYYMMDD形式の運用日付
	 * @throws JCCFrameworkException
	 */
	public static String getBatOpeDate(X31BWebBusinessLogic bl, String key)
	{
		try
		{
			return JCCsvlGetOperationDateUtil.getBatOpeDate(bl, key);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * システム日時取得処理処理です。
	 * アプリケーションプロパティファイルの定義に基いて、
	 * OSの保持日時またはテスト用に擬似的に設定したテスト日時を返却します。
	 * 定義を省略した場合、OSの保持日時を返却します。
	 * 
	 * @return YYYYMMDDhhmmssSSS形式の日付
	 * @throws JCCFrameworkException
	 */
	public static String getSysDateTimeStamp()
	{
		try
		{
			return JCCGetSystemDateUtil.getSystemDateTime().get(JCCGetSystemDateUtil.KEY_YYYYMMDDHHMMSS_SSS);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * システム日時取得処理処理です。
	 * アプリケーションプロパティファイルの定義に基いて、
	 * OSの保持日時またはテスト用に擬似的に設定したテスト日時を返却します。
	 * 定義を省略した場合、OSの保持日時を返却します。
	 * 
	 * @return YYYYMMDDhhmmss形式の日付
	 * @throws JCCFrameworkException
	 */
	public static String getSysDateTime()
	{
		try
		{
			return JCCGetSystemDateUtil.getSystemDateTime().get(JCCGetSystemDateUtil.KEY_YYYYMMDDHHMMSS);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * システム日時取得処理処理です。
	 * アプリケーションプロパティファイルの定義に基いて、
	 * OSの保持日時またはテスト用に擬似的に設定したテスト日時を返却します。
	 * 定義を省略した場合、OSの保持日時を返却します。
	 * 
	 * @return YYYYMMDD形式の日付
	 * @throws JCCFrameworkException
	 */
	public static String getSysDate()
	{
		try
		{
			return JCCGetSystemDateUtil.getSystemDateTime().get(JCCGetSystemDateUtil.KEY_YYYYMMDD);
		}
		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);
		}
	}
	
	/**
	 * 置換メッセージをメッセージエリアに設定する処理です。
	 * 
	 * @param arg0 VIEWロジックインスタンス
	 * @param arg1 メッセージID
	 * @param arg2 置換文字の配列
	 * @throws JCCFrameworkException
	 */
	public static void setMessageInfo(X31BWebBusinessLogic arg0, String arg1, String[] arg2)
	{
		try
		{
			JCCSetMessage setMsg = new JCCSetMessage();
			setMsg.setMessageInfo(arg0, arg1, arg2);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * メッセージをメッセージエリアに設定する処理です。
	 * 
	 * @param arg0 VIEWロジックインスタンス
	 * @param arg1 メッセージID
	 * @throws JCCFrameworkException
	 */
	public static void setMessageInfo(X31BWebBusinessLogic arg0, String arg1)
	{
		try
		{
			JCCSetMessage setMsg = new JCCSetMessage();
			setMsg.setMessageInfo(arg0, arg1);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

	/**
	 * フロント画面の場合置換メッセージをエラーのあった項目の上に表示します。
	 * バックヤード画面の場合置換メッセージはメッセージエリアに表示し、
	 * エラーのあった項目の背景を赤く設定します。
	 * <br>
	 * @param arg0		VIEWロジックインスタンス
	 * @param arg1		メッセージID
	 * @param arg2		置換文字の配列
	 * @param arg3		項目ID
	 * @throws JCCFrameworkException
	 */
	public static void setMessageInfo(X31BWebBusinessLogic arg0, String arg1, String[] arg2, String arg3)
	{
		try
		{
			JCCSetMessage setMsg = new JCCSetMessage();
			setMsg.setMessageInfo(arg0, arg1, arg2, arg3);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

	/**
	 * フロント画面の場合メッセージをエラーのあった項目の上に表示します。
	 * バックヤード画面の場合メッセージはメッセージエリアに表示し、
	 * エラーのあった項目の背景を赤く設定します。
	 * 項目IDに設定がない場合は
	 * <br>
	 * @param arg0		VIEWロジックインスタンス
	 * @param arg1		メッセージID
	 * @param arg2		項目ID
	 * @throws JCCFrameworkException
	 */
	public static void setMessageInfo(X31BWebBusinessLogic arg0, String arg1, String arg2)
	{
		try
		{
			JCCSetMessage setMsg = new JCCSetMessage();
			setMsg.setMessageInfo(arg0, arg1, arg2);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * メッセージ出力処理です。
	 * エラーメッセージ情報インスタンス(VIEWロジックのinvokeServiceの戻り値)よりメッセージを取得し、
	 * メッセージエリアに表示します。
	 * 
	 * @param arg0 VIEWロジックインスタンス
	 * @param arg1 エラーメッセージ情報インスタンス
	 */
	public static void setMessageInfo(X31BWebBusinessLogic arg0,X31CMessageResult arg1)
	{
	}
	
	/**
	 * メッセージエリアの背景色を共有フォームBeanに設定する処理です。
	 * 0:背景色白、1:背景色黄となります。
	 * 画面のonload時に背景色が変更されます。
	 * <br>
	 * @param arg0			VIEWロジックインスタンス
	 * @param arg1			強調フラグ
	 */
	public static void setMessageAreaBackColor(X31BWebBusinessLogic arg0, String arg1)
	{
		JCCSetMessage setMsg = new JCCSetMessage();
		setMsg.setMessageAreaBackColor(arg0, arg1);
	}
	
	/**
	 * 置換メッセージ取得処理です。
	 * 指定されたメッセージIDのメッセージに対して文字置換えを実行し返却します。	
	 * 出力するメッセージの文字置換えは[文字1,文字2,文字3]をメッセージ中の%1%%2%%3%と置き換えます。
	 * 
	 * @param arg0 メッセージID
	 * @param arg1 置換文字の配列
	 * @return 生成されたメッセージ
	 * @throws JCCFrameworkException
	 */
	public static String getMessage(String arg0,String[] arg1)
	{
		try
		{
			return JCCMessageCache.getMessage(arg0, arg1);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

	/**
	 * メッセージ取得処理です。
	 * 指定されたメッセージIDのメッセージを返却します。	
	 * 
	 * @param arg0 メッセージID
	 * @return 生成されたメッセージ
	 * @throws JCCFrameworkException
	 */
	public static String getMessage(String arg0)
	{
		try
		{
			return JCCMessageCache.getMessage(arg0);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

	/**
	 * ユーザ認証実行処理です。<BR>
	 * ユーザ認証を行い、認証結果を返却します。<BR>
	 * 留意事項：統合認証ID側の仕様が確定していないためスタブとなります。<BR>
	 * 以下はスタブにおける入出力パラメータについて記載します。<BR>
	 * <BR>
	 * @param bl VIEWロジックインスタンス
	 * @param id ユーザーID(6〜10桁)    (現状は"908000"〜"909999"までを認証OKとします。それ以外の値では認証NGとなります。)
	 * @param pass パスワード(桁数未定) (現状は指定値に関係なく認証OKとします。)
	 * @return ユーザ統合認証結果情報
	 * @deprecated このメソッドはスタブメソッドです
	 * <PRE>返却するHashMapの値は以下の通りです
	 *    キー          キーの型           値               値の型           説明
	 * --------------  ------------   ----------------   -------------   -----------------
	 * "RESULT"        String          "1"または"2"      String          "1":OK／"2":NG
	 * "ERROR_INFO"    String          "000"             String[]※1     正常時は"000"
	 *                                 "001"                             エラー時は"001"
	 * 
	 * ※1統合認証仕様確定後に、複数エラーコードの返却に対応するため、配列としています。
	 * 
	 */
	public static HashMap<String, Object> getCertifyResult(X31BWebBusinessLogic bl, String id, String pass)
	{
		HashMap<String, Object> retMap = new HashMap<String, Object>();
		String[] retStr = new String[1];
		
		if(null == bl || null == id)
		{
			retMap.put("RESULT", "2");
			retStr[0] = "001";
			retMap.put("ERROR_INFO", retStr);
		}
		else
		{
			int idNum = Integer.parseInt(id);
			// 認証OK
			if(idNum >= 908000 && idNum <= 909999)
			{
				retMap.put("RESULT", "1");
				retStr[0] = "000";
				retMap.put("ERROR_INFO", retStr);
			}
			// 認証NG
			else
			{
				retMap.put("RESULT", "2");
				retStr[0] = "001";
				retMap.put("ERROR_INFO", retStr);
			}
		}
		return retMap;
	}
	
	/**
	 * ユーザ認証実行処理です。(ユーザーIDおよびパスワードで認証)<BR>
	 * ユーザ認証を行い、認証結果を返却します。(ユーザーIDおよびパスワードで認証)<BR>
	 * <BR>
	 * @param bl VIEWロジックインスタンス
	 * @param userId ユーザーID(6桁)
	 * @param password パスワード
	 * @return ユーザ認証結果情報
	 * <PRE>返却するHashMapの値は以下の通り
	 *  ninsho_stat                (String)     認証状態(認証OK:0　認証NG:1)
	 *  shk_password_flg           (String)     初期パスワードフラグ(変更済:0　未変更:1)
	 *  password_yk_kigen          (String)     パスワード有効期限
	 *  worker_kanri_div_cd        (String)     従業員管理区分CD
	 *  kanji_nm_fmlnm             (String)     漢字氏名(姓)
	 *  kanji_nm_fstnm             (String)     漢字氏名(名)
	 *  syozk_cd                   (String)     所属コード
	 *  syokui_cd                  (String)     職位コード
	 *  ECCTGN00001CBSMsg1List     (ArrayList)  兼務情報明細
	 *            kenmu_syozk_cd        (String)   兼務所属コード
	 *            kenmu_syokui_cd       (String)   兼務職位コード
	 *  ECCTGN00001CBSMsg2List     (ArrayList)  ワークグループ組織コード・立場コード明細
	 *            wkgrp_joi_org_cd      (String)   ワークグループ上位組織コード
	 *            wkgrp_org_cd          (String)   ワークグループ組織コード
	 *            wkgrp_position_cd     (String)   ワークグループ立場コード
	 *  ECCTGN00001CBSMsg3List     (ArrayList)  中間組織コード・立場コード明細
	 *            chukan_joi_org_cd     (String)   中間上位組織コード
	 *            chukan_org_cd         (String)   中間組織コード
	 *            chukan_position_cd    (String)   中間立場コード
	 *  ECCTGN00001CBSMsg4List     (ArrayList)  特別権限組織コード・立場コード明細
	 *            spcl_org_cd           (String)   特別権限組織コード
	 *            spcl_position_cd      (String)   特別権限立場コード
	 */
	public static HashMap<String, Object> getLdapCertifyResult(X31BWebBusinessLogic bl, String id, String pass) throws Exception
	{	
		return JCCLdapCertifyUtil.getLdapCertifyResult(bl, id, pass);
	}
	
	/**
	 * ユーザ認証実行処理です。(ユーザーIDのみで認証)<BR>
	 * ユーザ認証を行い、認証結果を返却します。(ユーザーIDのみで認証)<BR>
	 * <BR>
	 * @param bl VIEWロジックインスタンス
	 * @param userId ユーザーID(6桁)
	 * @return ユーザ認証結果情報
	 * <PRE>返却するHashMapの値は以下の通り
	 *  ninsho_stat                (String)     認証状態(認証OK:0　認証NG:1)
	 *  shk_password_flg           (String)     初期パスワードフラグ(変更済:0　未変更:1)
	 *  password_yk_kigen          (String)     パスワード有効期限
	 *  worker_kanri_div_cd        (String)     従業員管理区分CD
	 *  kanji_nm_fmlnm             (String)     漢字氏名(姓)
	 *  kanji_nm_fstnm             (String)     漢字氏名(名)
	 *  syozk_cd                   (String)     所属コード
	 *  syokui_cd                  (String)     職位コード
	 *  ECCTGN00001CBSMsg1List     (ArrayList)  兼務情報明細
	 *            kenmu_syozk_cd        (String)   兼務所属コード
	 *            kenmu_syokui_cd       (String)   兼務職位コード
	 *  ECCTGN00001CBSMsg2List     (ArrayList)  ワークグループ組織コード・立場コード明細
	 *            wkgrp_joi_org_cd      (String)   ワークグループ上位組織コード
	 *            wkgrp_org_cd          (String)   ワークグループ組織コード
	 *            wkgrp_position_cd     (String)   ワークグループ立場コード
	 *  ECCTGN00001CBSMsg3List     (ArrayList)  中間組織コード・立場コード明細
	 *            chukan_joi_org_cd     (String)   中間上位組織コード
	 *            chukan_org_cd         (String)   中間組織コード
	 *            chukan_position_cd    (String)   中間立場コード
	 *  ECCTGN00001CBSMsg4List     (ArrayList)  特別権限組織コード・立場コード明細
	 *            spcl_org_cd           (String)   特別権限組織コード
	 *            spcl_position_cd      (String)   特別権限立場コード
	 */
	public static HashMap<String, Object> getLdapCertifyResultUserId(X31BWebBusinessLogic bl, String id) throws Exception
	{	
		return JCCLdapCertifyUtil.getLdapCertifyResultUserId(bl, id);
		
	}

//	/**
//	 * セッション情報取得処理です。
//	 * セッション領域より情報を取得します。
//	 * 
//	 * @param arg0 VIEWロジックインスタンス
//	 * @param arg1 キー情報
//	 * @return キーに対応する値
//	 */
//	public static Object getSessionData(X31BWebBusinessLogic arg0,String arg1)
//	{
//		return new Object();
//	}
//
//	/**
//	 * セッション情報設定処理です。
//	 * セッション領域に情報を設定します。
//	 * 
//	 * @param arg0 VIEWロジックインスタンス
//	 * @param arg1 キー情報
//	 * @param arg2 セッション領域に格納するObject
//	 */
//	public static void setSessionData(X31BWebBusinessLogic arg0,String arg1,Object arg2)
//	{
//		
//	}

	/**
	 * 該当VIEWロジックで使用する画面情報が、メニュー配下にあるかどうか判定します。<BR>
	 * <BR>
	 * @param arg0 VIEWロジックインスタンス
	 * @return 画面情報格納場所判定フラグ
	 * <PRE>返却する画面情報格納場所判定フラグの詳細は以下の通りです。
	 * true:画面情報を画面情報格納領域のメニュー情報格納領域配下に格納する
	 * false:画面情報を画面情報格納領域の直下に格納する
	 */
	private static boolean isMenuContent(JCCWebBusinessLogic arg0) 
	{
		try 
		{
			// アプリケーションプロパティファイルから、プロジェクト種別を取得
			String projectType = JCMAPLConstMgr.getString("TARGET_SYSTEM");
			// メニューIDを取得
			String menuid = getMenuId(arg0);
			// バックヤードでメニューIDが取得できる場合、メニュー配下に情報を格納する事になる。
			if((projectType != null && "BACKYARD".equals(projectType)) && (menuid != null && (menuid.length() > 0))) 
			{
				return true;
			} 
			else 
			{
				return false;
			}
		} 
		catch(Throwable th) 
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * 指定された画面情報格納領域を取得する。<BR>
	 * 
	 * @param arg0 VIEWロジックインスタンス
	 * @param key 画面紹鴎領域名
	 * @return 画面情報格納領域
	 */
	private static HashMap getSessionBaseMap(JCCWebBusinessLogic arg0, String key) 
	{
		try 
		{
			HttpSession session = getSession(arg0);
			// セッションより画面情報HashMapを取得する。
			return (HashMap)session.getAttribute(key);
		} 
		catch(Throwable th) 
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * 指定されたセッション領域の指定されたキーでMAPを取得する。
	 * バックヤードの場合は、メニュー配下のMAP
	 * バックヤード以外の場合、バックヤードのメニューではセッション配下のMAP
	 * @param arg0
	 * @param key
	 * @param screenId
	 * @return HashMap
	 */
	private static HashMap getSessionScreenMap( JCCWebBusinessLogic arg0, String key, String screenId ) {
		try 
		{
			
			// セッションより画面情報HashMapを取得する。
			HashMap sessionMap = getSessionBaseMap(arg0, key);
			// 画面情報Mapがない場合はnullを返却する。
			if(sessionMap == null)
			{
				return null;
			}
			
			String screenKeyId = getScreenIdWith0PJP(screenId);
			
			// バックヤードでメニューIDが取得できる場合、メニューID配下の戻り先画面IDとなる。
			if(isMenuContent(arg0)) 
			{
				// メニューIDを取得
				String menuid = getMenuId(arg0);
				
				// メニューIDのMAPを取得する。
				HashMap menuIdMap = (HashMap) sessionMap.get(menuid);
				if(menuIdMap == null) 
				{
					return null;
				}
				
				return (HashMap) menuIdMap.get(screenKeyId);
			} 
			else 
			{
				return (HashMap) sessionMap.get(screenKeyId);
			}
		} 
		catch(Throwable th) 
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * 遷移元の画面IDを取得します。
	 * 
	 * @param arg0 VIEWロジックインスタンス
	 * @return 遷移元の画面ID
	 */
	public static String getScreenId(JCCWebBusinessLogic arg0) 
	{
		return getScreenIdBase(arg0, arg0.getGamenId());
	}
	
	/**
	 * 指定した画面IDに紐付く、遷移元の画面IDを取得します。
	 * 
	 * @param arg0 VIEWロジックインスタンス
	 * @param screenId キーとなる画面ID
	 * @return 遷移元の画面ID
	 */
	public static String getScreenId(JCCWebBusinessLogic arg0, String screenId) 
	{
		return getScreenIdBase(arg0, screenId);
	}
	
	/**
	 * 遷移元の画面IDを取得します。
	 * 
	 * @param arg0 VIEWロジックインスタンス
	 * @return 戻り先の画面ID
	 * @throws JCCFrameworkException
	 */
	private static String getScreenIdBase(JCCWebBusinessLogic arg0, String screenId)
	{
		// 指定した画面IDがNULLの場合、NULLを返却
		if(screenId == null) 
		{
			return null;
		}
		
		try
		{
			HashMap sessionMap = getSessionBaseMap(arg0, "screenId");
			if(sessionMap == null)
			{
				return null;
			}
			
			if(isMenuContent(arg0))
			{
				String menuId = getMenuId(arg0);
				
				HashMap menuIdMap = (HashMap) sessionMap.get(menuId);
				if (menuIdMap == null) 
				{
					return null;
				}
				
				return (String)menuIdMap.get(getScreenIdWith0PJP(screenId));
			} 
			else 
			{
				return (String)sessionMap.get(getScreenIdWith0PJP(screenId));
			}
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

	/**
	 * 遷移元の画面IDを設定します。<BR>
	 * 
	 * @param arg0 VIEWロジックインスタンス
	 * @param arg1 遷移元の画面IDに紐付く画面ID
	 * @param arg2 遷移元の画面ID
	 * @throws JCCFrameworkException
	 */
	public static void setScreenId(JCCWebBusinessLogic arg0,String arg1,String arg2)
	{
		try
		{
			// セッションのキー
			String sessionKey = "screenId";
			// セッション領域から画面情報Mapを取得
			HashMap sessionIdMap = getSessionBaseMap(arg0, sessionKey);
			// 初回の場合はHashMapを生成してセッション領域に格納
			if(sessionIdMap == null)
			{
				sessionIdMap = new HashMap();
				getSession(arg0).setAttribute(sessionKey, sessionIdMap);
			}
			
			// バックヤードでメニューIDが取得できる場合、メニューID配下の戻り先画面IDとなる。
			if (isMenuContent(arg0)) 
			{
				// メニューIDを取得
				String menuid = getMenuId(arg0);
				
				// メニューIDMAPを取得する。
				HashMap menuIdMap = (HashMap) sessionIdMap.get(menuid);
				// 初回の場合はHashMapを生成してメニューID領域に格納
				if (menuIdMap == null) 
				{
					menuIdMap = new HashMap();
					sessionIdMap.put(menuid, menuIdMap);
				}
				
				// メニューIDMAP配下に、戻り先画面IDを設定する。
				menuIdMap.put(JCCWebCommon.getScreenIdWith0PJP(arg1), arg2);
			} 
			else 
			{
				// sessionIdMap配下に、戻り先画面IDを設定する。
				sessionIdMap.put(JCCWebCommon.getScreenIdWith0PJP(arg1), arg2);
			}
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

	/**
	 * VIEWロジックに紐付く画面情報を取得します。<BR>
	 * 
	 * @param arg0 VIEWロジックインスタンス
	 * @return 画面情報を格納したHashMap
	 */
	public static HashMap<String, Object> getScreenInfo(JCCWebBusinessLogic arg0)
	{
		return getScreenInfoBase(arg0, arg0.getGamenId());
	}
	
	/**
	 * 指定した画面IDの画面情報を取得します。
	 * 
	 * @param arg0 VIEWロジックインスタンス
	 * @param screenId 画面情報を取得するための画面ID
	 * @return 指定した画面IDの画面情報を格納したHashMap
	 */
	public static HashMap<String, Object> getScreenInfo(JCCWebBusinessLogic arg0, String screenId)
	{
		return getScreenInfoBase(arg0, screenId);
	}
	
	/**
	 * セッションから画面情報を取得します。<BR>
	 * <BR>
	 * VIEWロジックインスタンスの画面IDと、指定した画面IDが同じ場合、<BR>
	 * サービスフォームBeanに画面情報を転記後、セッションから画面IDに<BR>
	 * 紐付く画面情報を削除し、画面情報を返却します。<BR>
	 * 
	 * VIEWロジックインスタンスの画面IDと、指定した画面IDが異なる場合、<BR>
	 * 指定した画面IDに紐付く画面情報を返却します。<BR>
	 * 
	 * @param arg0 VIEWロジックインスタンス
	 * @param screenId 画面ID
	 * @return 画面IDに紐付く画面情報
	 * @throws JCCFrameworkException
	 */
	private static HashMap<String, Object> getScreenInfoBase(JCCWebBusinessLogic arg0, String screenId) {
		try
		{
			String sessionKey = "screenInfo";
			// 0PJP付の画面IDを取得
			String screenKeyId = JCCWebCommon.getScreenIdWith0PJP(screenId);
			
			// 画面情報を設定するマップ
			HashMap paramMap = getSessionScreenMap(arg0, sessionKey, screenKeyId);
			
			// 画面IDをキーとして、画面情報を取得できない場合はnullを返却する。
			if (paramMap == null) 
			{
				return null;
			}
			
			// VIEWロジックインスタンスの画面IDと指定された画面IDが同じ場合：従来のgetScreenInfo
			// サービスフォームBeanに設定後、セッションから削除する。
			//
			// VIEWロジックインスタンスの画面IDと指定された画面IDが異なる場合：画面IDを指定するgetScreenInfo
			// HashMap取得のみ行い、サービスフォームBean転記及びセッションから画面情報削除は行わない。
			if (arg0.getGamenId().equals(screenKeyId)) 
			{
				// DataBeanを取得
				X31SDataBeanAccess bean = arg0.getServiceFormBean();
				// DataBeanに値を設定
				setMapToDataBean(paramMap, bean);
				
				HashMap screenInfoMap = getSessionBaseMap(arg0, sessionKey);
				// バックヤードの場合、メニューID配下の画面情報を削除
				if(isMenuContent(arg0))
				{
					String menuid = getMenuId(arg0);
					// メニューIDのMAPを取得
					// メニューID配下の指定した画面IDで紐付く画面情報を削除
					HashMap menuIdMap = (HashMap)screenInfoMap.get(menuid);
					if (menuIdMap != null)
					{
						menuIdMap.remove(screenKeyId);
					}
						
					// メニューID配下の画面情報が全て無くなっていたら、メニューID自身のMAPも削除
					if (menuIdMap.size() == 0) 
					{
						screenInfoMap.remove(menuid);
					}
					
				} 
				else 
				{
					//HashMapより画面情報を削除
					screenInfoMap.remove(screenKeyId);
				}
			}
			
			// 画面情報HashMapを返却
			return paramMap;
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * HashMapとDataBeanの変換を行います。
	 * @param paramMap 引継ぎ情報を格納したHashMap
	 * @param bean 引継ぎ情報を設定するDataBean
	 * @throws makeJCCFrameworkException 
	 */
	private static void setMapToDataBean(HashMap paramMap, X31SDataBeanAccess bean) throws Exception{
		Iterator ite = paramMap.keySet().iterator();
		while(ite.hasNext())
		{
			String key = (String)ite.next();
			Object value = paramMap.get(key);
			
			// 値がNULLの場合、次へ
			if (value == null) 
			{
				continue;
			}
			
			// 引継ぎ情報がString型の場合
			if(value instanceof String)
			{
				bean.sendMessageString(key, X31CWebConst.DATABEAN_SET_VALUE, (String)paramMap.get(key));
			// 引継ぎ情報がLong型の場合
			}
			else if(value instanceof Long) 
			{
				bean.sendMessageLong(key, X31CWebConst.DATABEAN_SET_VALUE, (Long)paramMap.get(key));
			// 引継ぎ情報がBoolean型の場合
			}
			else if(value instanceof Boolean) 
			{
				bean.sendMessageBoolean(key, X31CWebConst.DATABEAN_SET_VALUE, (Boolean)paramMap.get(key));
			// 引継ぎ情報がString[]型の場合
			}
			else if(value instanceof String[]) 
			{
				X31CVector<String> vec = new X31CVector<String>();
				for(String s:(String[])value){
					vec.add(s);
				}
				bean.sendMessageStringArray(key, X31CWebConst.DATABEAN_SET_DEF_VALUE, vec);
			// 引継ぎ情報がLong[]型の場合
			}
			else if(value instanceof Long[]) 
			{
				X31CVector<Long> vec = new X31CVector<Long>();
				for(Long s:(Long[])value)
				{
					vec.add(s);
				}
				bean.sendMessageLongArray(key, X31CWebConst.DATABEAN_SET_DEF_VALUE, vec);
			// 引継ぎ情報がBoolean[]型の場合
			}
			else if(value instanceof Boolean[]) 
			{
				X31CVector<Boolean> vec = new X31CVector<Boolean>();
				for(Boolean s:(Boolean[])value)
				{
					vec.add(s);
				}
				bean.sendMessageBooleanArray(key, X31CWebConst.DATABEAN_SET_DEF_VALUE, vec);
			// 引継ぎ情報がArrayList型の場合
			}
			else if(value instanceof ArrayList) 
			{
				
				X31SDataBeanAccessArray subBeanArray = null;
				try 
				{
					subBeanArray = bean.getDataBeanArray(key);
				} 
				catch (X31SRuntimeException sre) 
				{
					continue;
				}
				
				// 固定長配列用カウンタ
				int i = 0;
				for(Object map : (ArrayList)value){
					// リストの最後尾に要素を追加する。
					X31SDataBeanAccess beanArray = subBeanArray.addDataBean();
					
					// 固定長配列の場合、addDataBeanの戻り値はnullの為、カウンタを使用し明示的に要素を取得する。
					if (beanArray == null) 
					{
						beanArray = subBeanArray.getDataBean(i);
						// カウンタをインクリメントする。
						i++;
					}
					
					HashMap listMap = (HashMap)map;
					// 再起呼び出し
					setMapToDataBean(listMap, beanArray);
				}
				
			// 上記以外の場合は例外をthrowする。
			}
			else
			{
				throw new JCCFrameworkException("JCCWebCommon#getScreenInfoでサポートされていないオブジェクトの型です。");
			}
		}
	}

	/**
	 * 画面遷移時に遷移先画面へ引き継ぐ画面情報を設定します。<BR>
	 * 
	 * @param arg0 VIEWロジックインスタンス
	 * @param arg1 画面情報を設定する画面の画面ID
	 * @param arg2 画面情報を格納したHashMap
	 * @throws JCCFrameworkException
	 * <PRE>画面情報の設定例は以下の通りです。
	 * 設定先画面ID:CCW99999
	 * 設定する画面情報
	 * 項目1:値1
	 * 項目2:値2
	 * 項目3:値3
	 *
	 * HashMap<String,Object> paramMap = new HashMap<String,Object>();
	 * paramMap.put("項目1", "値1");
	 * paramMap.put("項目2", "値2");
	 * paramMap.put("項目3", "値3");
	 *
	 * setScreenInfo(this, JCCScreenConst.SCREEN_ID_CCW99999, paramMap);
	 */
	public static void setScreenInfo(JCCWebBusinessLogic arg0, String arg1, HashMap<String, Object> arg2)
	{
		try
		{
			String sessionKey = "screenInfo";
			// セッション領域から画面情報Mapを取得
			HashMap sessionInfoMap = getSessionBaseMap(arg0, sessionKey);
			// 初回の場合はHashMapを生成してセッション領域に格納
			if(sessionInfoMap == null)
			{
				sessionInfoMap = new HashMap();
				getSession(arg0).setAttribute(sessionKey, sessionInfoMap);
			}
			
			// バックヤードの場合、メニューID配下の画面情報となる。
			if (isMenuContent(arg0)) 
			{
				// メニューIDを取得
				String menuid = getMenuId(arg0);
				
				// メニューID配下の画面情報を取得
				HashMap menuIdMap = (HashMap)sessionInfoMap.get(menuid);
				// 初回の場合はHashMapを生成してセッション領域に格納
				if (menuIdMap == null) 
				{
					menuIdMap = new HashMap();
					sessionInfoMap.put(menuid, menuIdMap);
				}
				
				// メニューID配下に画面情報を格納
				menuIdMap.put(JCCWebCommon.getScreenIdWith0PJP(arg1), arg2);
			} 
			else 
			{
				// セッション領域に画面情報を格納
				sessionInfoMap.put(JCCWebCommon.getScreenIdWith0PJP(arg1), arg2);
			}
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

	/**
	 * セッションを取得します。
	 * 
	 * @param arg0 VIEWロジックインスタンス
	 */
	private static HttpSession getSession(JCCWebBusinessLogic arg0) throws Exception
	{
		// セッションID取得
		String sessionId = arg0.getSession().getViewParamId().getSessionID();
		// セッションを取得して返却
		return X33CUtil.getSession(sessionId).getSession();
	}
	
	/**
	 * 指定した画面IDの画面情報を削除します。<BR>
	 * 
	 * @param arg0 VIEWロジックインスタンス
	 * @param screenId 画面情報を削除する画面ID
	 * @throws JCCFrameworkException
	 */
	public static void removeScreenInfo(JCCWebBusinessLogic arg0, String screenId)
	{
		try
		{
			// セッションより画面情報HashMapを取得する。
			HashMap screenInfoMap = getSessionBaseMap(arg0, "screenInfo");
			// 画面情報Mapがない場合は何もしない。
			if(screenInfoMap == null)
			{
				return;
			}
			
			// バックヤードの場合、メニューID配下の画面情報となる。
			if (isMenuContent(arg0)) 
			{
				// メニューIDを取得
				String menuid = getMenuId(arg0);
				
				HashMap menuIdMap = (HashMap) screenInfoMap.get(menuid);
				if (menuIdMap == null) 
				{
					return;
				}
				
				// メニューIDMAPから、指定した画面IDに紐付く画面情報を削除する。
				menuIdMap.remove(JCCWebCommon.getScreenIdWith0PJP(screenId));
				
				// メニューIDMAPが空になった場合は、メニューIDMAP自身を削除する。
				if (menuIdMap.size() == 0) 
				{
					screenInfoMap.remove(menuid);
				}
			} 
			
			// バックヤード以外の場合
			else 
			{
				//HashMapより画面情報を削除
				screenInfoMap.remove(JCCWebCommon.getScreenIdWith0PJP(screenId));
			}
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * 非同期セッション情報取得処理です。
	 * 非同期処理(Ajax)時にセッション領域から情報を取得します。
	 * 
	 * @param arg0 VIEWロジックインスタンス
	 * @param arg1 キー情報
	 * @return キーに対応するオブジェクト
	 */
	public static Object getAsyncSessionData(X31BWebBusinessLogic arg0, String arg1)
	{
		return new Object();
	}

	/**
	 * アップロード一時ファイル情報取得処理です。
	 * アップロード一時ファイルを生成し、
	 * 生成したファイル情報のリストを返却します。
	 * 
	 * @param arg0 VIEWロジックインスタンス
	 * @return アップロード一時ファイル情報のリスト
	 */
	public static ArrayList<HashMap<String, Object>> getFileInfoArray(JCCWebBusinessLogic arg0)
	{
		return arg0.getFileInfoArray();
	}
	
	/**
	 * アップロード一時ファイル情報取得処理です。
	 * アップロード一時ファイルを生成し、
	 * 生成したファイル情報のリストを返却します。
	 * ファイルを圧縮してアップロードする場合
	 * 第二引数をtrueに設定します。
	 * 
	 * @param arg0 VIEWロジックインスタンス
	 * @param zipFlg 圧縮フラグ
	 * @return アップロード一時ファイル情報のリスト
	 */
	public static ArrayList<HashMap<String, Object>> getFileInfoArray(JCCWebBusinessLogic arg0, boolean zipFlg)
	{
		return arg0.getFileInfoArray(zipFlg);
	}

	/**
	 * アップロード一時ファイル取得処理です。
	 * アップロード一時ファイルをバイナリ形式で取得します。
	 * 
	 * @param arg0 VIEWロジックインスタンス
	 * @param arg1 アップロードファイルに紐づくキー
	 * @return アップロード対象となるファイルのバイナリデータ
	 */
	public static byte[] getFile(JCCWebBusinessLogic arg0, String arg1)
	{	
		return arg0.getFile(arg1);
	}

	/**
	 * アップロード一時ファイル削除処理です。
	 * 
	 * @param arg0 VIEWロジックインスタンス
	 * @param arg1 アップロードファイルに紐づくキー
	 */
	public static void deleteFile(JCCWebBusinessLogic arg0, String arg1)
	{	
		arg0.deleteFile(arg1);
		return;
	}

	/**
	 * アップロード完了後の一時ファイル削除処理です。
	 * 
	 * @param arg0 VIEWロジックインスタンス
	 */
	public static void deleteCache(JCCWebBusinessLogic arg0)
	{	
		arg0.deleteCache();
		return;
	}

	/**
	 * 一時ファイルダウンロード処理です。
	 * 一時ファイルを生成し、呼び出し元へダウンロードします。電子ファイル管理は行いません。
	 * 
	 * @param arg0 VIEWロジックインスタンス
	 * @param arg1 ダウンロード対象となるファイルのバイナリデータ
	 * @param arg2 ダウンロード対象となるファイルの実ファイル名
	 * @throws JCCFrameworkException
	 */
	public static void setTempDownloadFile(JCCWebBusinessLogic arg0, byte[] arg1, String arg2)
	{
		try
		{
			arg0.setTempDownloadFile(arg1, arg2);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

	/**
	 * 電子管理ファイルダウンロード処理です。
	 * 電子ファイル検索を行い、呼び出し元へダウンロードします。
	 * 
	 * @param arg0 VIEWロジックインスタンス
	 * @param arg1 ダウンロードファイルに紐づくファイルキー
	 * @param arg2 ダウンロード対象となるファイルの実ファイル名
	 * @throws JCCFrameworkException
	 */
	public static void setDownloadFile(JCCWebBusinessLogic arg0, String arg1, String arg2)
	{
		try
		{
			arg0.setDownloadFile(arg1, arg2);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * 電子管理ファイルサービス生成処理です。
	 * 電子ファイル管理登録サービスIF用のサービス情報を生成します。
	 * 
	 * @param arg0 サービス情報マップ
	 * @param arg1 添付ファイル情報マップ
	 * @param arg2 システムID
	 * @param arg3 実ファイルに紐付けるファイルコード
	 * @param arg4 実ファイルバイナリ
	 * @param arg5 ファイル削除年月日
	 * @param arg6 機能コード
	 * @throws JCCFrameworkException
	 * 
	 */
	public static void setDenshiFileService(HashMap<String, Object> arg0, HashMap<String, Object> arg1, 
			String arg2, ArrayList<String> arg3, ArrayList<byte[]> arg4, ArrayList<String> arg5, String arg6)
	{
		try
		{
			JCCDenshiFileMapUtil.setDenshiFileService(arg0, arg1, arg2, arg3, arg4, arg5, arg6);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

	/**
	 * 各種定義ファイルから情報を取得する処理です。
	 * 各種定義ファイルからキーで指定された情報を返却します。
	 * 
	 * @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);
	}
	
	/**
	 * セッションに格納されているページリンク情報オブジェクトの内容を、
	 * 画面ID_表番号(0)をキーとして紐付く、検索サービスI/Fのマッピングに反映します。
	 * ページリンク情報オブジェクトが存在しない場合は、新規で作成します。
	 * 
	 * また、紐付くサービスI/Fのマッピング情報より、検索処理パターン、
	 * 最大検索数、表示件数を取得し、ページリンク情報オブジェクトへ格納します。
	 * 
	 * @param arg0 実行中のVIEWロジックインスタンス
	 * @param templateId SCタイトル
	 * @param conditionMap IMRCツールで作成したマッピングクラスの処理が完了したMap
	 * @throws JCCFrameworkException
	 */
	public static void upmapperPageLinkInfo(JCCWebBusinessLogic arg0, String templateId, HashMap conditionMap)
	{
		try
		{
			upmapperPageLinkInfo(arg0, "0", templateId, conditionMap);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * セッションに格納されているページリンク情報オブジェクトの内容を、
	 * 画面ID_表番号(0)をキーとして紐付く、検索サービスI/Fのマッピングに反映します。
	 * ページリンク情報オブジェクトが存在しない場合は、新規で作成します。
	 * 
	 * また、紐付くサービスI/Fのマッピング情報より、検索処理パターン、
	 * 最大検索数、表示件数を取得し、ページリンク情報オブジェクトへ格納します。
	 * 
	 * @param arg0 実行中のVIEWロジックインスタンス
	 * @param templateId SCタイトル
	 * @param conditionMap IMRCツールで作成したマッピングクラスの処理が完了したMap
	 * @throws JCCFrameworkException
	 */
	public static void upmapperPageLinkInfo(JCCWebBusinessLogic arg0, String templateId, HashMap conditionMap, String screenId) 
	{
		try
		{
			upmapperPageLinkInfoBase(arg0, "0", templateId, conditionMap, screenId);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * セッションに格納されているページリンク情報オブジェクトの内容を、
	 * 画面ID_表番号をキーとして紐付く、検索サービスI/Fのマッピングに反映します。
	 * ページリンク情報オブジェクトが存在しない場合は、新規で作成します。
	 * 
	 * また、紐付くサービスI/Fのマッピング情報より、検索処理パターン、
	 * 最大検索数、表示件数を取得し、ページリンク情報オブジェクトへ格納します。
	 * 
	 * @param arg0 実行中のVIEWロジックインスタンス
	 * @param tableIndex 表番号
	 * @param templateId SCタイトル
	 * @param conditionMap IMRCツールで作成したマッピングクラスの処理が完了したMap
	 * @throws JCCFrameworkException
	 */
	public static void upmapperPageLinkInfo(JCCWebBusinessLogic arg0, String tableIndex, String templateId, HashMap conditionMap) 
	{
		try
		{
			upmapperPageLinkInfoBase(arg0, tableIndex, templateId, conditionMap, arg0.getGamenId());
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

	/**
	 * セッションに格納されているページリンク情報オブジェクトの内容を、
	 * 指定した画面ID_表番号をキーとして紐付く、検索サービスI/Fのマッピングに反映します。
	 * ページリンク情報オブジェクトが存在しない場合は、新規で作成します。
	 * 
	 * また、紐付くサービスI/Fのマッピング情報より、検索処理パターン、
	 * 最大検索数、表示件数を取得し、ページリンク情報オブジェクトへ格納します。
	 * 
	 * @param arg0 実行中のVIEWロジックインスタンス
	 * @param tableIndex 表番号
	 * @param templateId SCタイトル
	 * @param conditionMap IMRCツールで作成したマッピングクラスの処理が完了したMap
	 * @param screenId 画面ID
	 * @throws JCCFrameworkException
	 */
	public static void upmapperPageLinkInfo(JCCWebBusinessLogic arg0, String tableIndex, String templateId, HashMap conditionMap, String screenId) 
	{
		try
		{
			upmapperPageLinkInfoBase(arg0, tableIndex, templateId, conditionMap, screenId);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	private static String createPageInfoKey(String screenId, String tableIndex) {
		if (screenId == null || tableIndex == null) 
		{
			return null;
		}
		return JCCWebCommon.getScreenIdWith0PJP(screenId) + "_" + tableIndex;
	}
	
	/**
	 * セッションに格納されているページリンク情報オブジェクトの内容を、
	 * 指定した画面ID_表番号をキーとして紐付く、検索サービスI/Fのマッピングに反映します。
	 * ページリンク情報オブジェクトが存在しない場合は、新規で作成します。
	 * 
	 * また、紐付くサービスI/Fのマッピング情報より、検索処理パターン、
	 * 最大検索数、表示件数を取得し、ページリンク情報オブジェクトへ格納します。
	 * 
	 * @param arg0 実行中のVIEWロジックインスタンス
	 * @param tableIndex 表番号
	 * @param templateId CCタイトル
	 * @param conditionMap IMRCツールで作成したマッピングクラスの処理が完了したMap
	 * @param screenId 画面ID
	 * @throws Exception 
	 */
	private static void upmapperPageLinkInfoBase(JCCWebBusinessLogic arg0, String tableIndex, String templateId, HashMap conditionMap, String screenId) throws Exception{
		
		String sessionKey = "pageLinkInfo";
		// セッションからページリンク情報格納Mapを取得
		HashMap pageLinkInfoBaseMap = getSessionBaseMap(arg0, sessionKey);
		
		// ページリンク情報格納Mapが取得できない場合は作成する。
		if ( pageLinkInfoBaseMap == null ) 
		{
			pageLinkInfoBaseMap = new HashMap<String, HashMap<String, String>>();
			getSession(arg0).setAttribute("pageLinkInfo" , pageLinkInfoBaseMap);
		}
		
		// ページリンク情報オブジェクトのキーを生成。
		// キー：画面ID_表番号
		String screenKeyId = createPageInfoKey(screenId, tableIndex);
		// メニューIDを取得
		String menuid = getMenuId(arg0);
		
		// キー：画面ID_表番号で紐付くページリンク情報オブジェクト
		HashMap targetPageLinkInfoMap = null;
		
		// バックヤードの場合、メニューID配下の画面情報となる。
		if (isMenuContent(arg0)) 
		{
			// メニューIDMAPを取得する。
			HashMap menuIdMap = (HashMap) pageLinkInfoBaseMap.get(menuid);
			// メニューIDMAPが取得できない場合は作成する。
			if (menuIdMap == null) 
			{
				menuIdMap = new HashMap();
				pageLinkInfoBaseMap.put(menuid, menuIdMap);
			}
			
			// キー：画面ID_表番号で紐付くページリンク情報オブジェクトを取得する。
			targetPageLinkInfoMap = (HashMap) menuIdMap.get( screenKeyId );
			
			// キー：画面ID_表番号で紐付くページリンク情報オブジェクトが取得できない場合、
			// 最初の検索として、表示ページ番号に"1"を設定して作成する。
			if (targetPageLinkInfoMap == null) 
			{
				targetPageLinkInfoMap = new HashMap<String, String>();
				targetPageLinkInfoMap.put("display_page_num", "1");
				
				// 作成したページリンク情報オブジェクトをセッションへ格納する。
				menuIdMap.put(screenKeyId, targetPageLinkInfoMap);
			}
		} 
		else 
		{
			// キー：画面ID_表番号で紐付くページリンク情報オブジェクトを取得する。
			targetPageLinkInfoMap = (HashMap) pageLinkInfoBaseMap.get( screenKeyId );
			
			// キー：画面ID_表番号で紐付くページリンク情報オブジェクトが取得できない場合、
			// 最初の検索として、表示ページ番号に"1"を設定して作成する。
			if (targetPageLinkInfoMap == null) 
			{
				targetPageLinkInfoMap = new HashMap<String, String>();
				targetPageLinkInfoMap.put("display_page_num", "1");
				
				// 作成したページリンク情報オブジェクトをセッションへ格納する。
				pageLinkInfoBaseMap.put(screenKeyId, targetPageLinkInfoMap);
			}
		}
		
		// 検索情報が設定されたMapから、指定されたCCタイトルに紐付く情報が格納されたMapを取得する。
		HashMap searchInfoMap = (HashMap) conditionMap.get( templateId );
		
		//取得できない場合は処理を継続できないためエラーとする。
		if (searchInfoMap == null) 
		{
			throw new JCCFrameworkException("SCタイトル：" + templateId + "の情報が取得できません。");
		}
		
		// キー項目の存在チェックを行う。
		// 検索処理パターン
		if (!searchInfoMap.containsKey("search_type")) 
		{
			throw new JCCFrameworkException("searchInfoMap：search_typeが取得できません。");
		}
		
		// 最大検索件数
		if (!searchInfoMap.containsKey("max_search_num")) 
		{
			throw new JCCFrameworkException("searchInfoMap：max_search_numが取得できません。");
		}
		
		// 表示件数
		if (!searchInfoMap.containsKey("display_num")) 
		{
			throw new JCCFrameworkException("searchInfoMap：display_numが取得できません。");
		}
		
		// キー：画面ID_表番号で紐付くページリンク情報オブジェクトへ検索情報を反映する。
		// 検索処理パターン
		targetPageLinkInfoMap.put("search_type", searchInfoMap.get("search_type"));
		
		// 最大検索件数
		targetPageLinkInfoMap.put("max_search_num", searchInfoMap.get("max_search_num"));
		
		// 表示件数
		targetPageLinkInfoMap.put("display_num", searchInfoMap.get("display_num"));
		
		// 上りマッピング処理
		// ページリンク情報オブジェクトの表示ページ番号を、
		// 検索サービスI/Fで使用する検索情報が設定されたMapへマッピングする。
		searchInfoMap.put("display_page_num", targetPageLinkInfoMap.get("display_page_num"));
	}

	/**
	 * 検索サービスI/Fの検索結果を、キー：画面ID_表番号(0)で紐付くページリンク情報オブジェクトに反映します。
	 * 
	 * @param arg0 実行中のVIEWロジックインスタンス
	 * @param tableIndex 表番号
	 * @param templateId SCタイトル
	 * @param searchResultMap 検索結果が格納されたMap
	 * @throws JCCFrameworkException
	 */
	public static void downmapperPageLinkInfo(JCCWebBusinessLogic arg0, String templateId, HashMap searchResultMap)
	{
		try
		{
			downmapperPageLinkInfo(arg0, "0", templateId, searchResultMap);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

	/**
	 * 検索サービスI/Fの検索結果を、キー：指定した画面ID_表番号(0)で紐付くページリンク情報オブジェクトに反映します。
	 * 
	 * @param arg0 実行中のVIEWロジックインスタンス
	 * @param tableIndex 表番号
	 * @param templateId SCタイトル
	 * @param searchResultMap 検索結果が格納されたMap
	 * @throws JCCFrameworkException
	 */
	public static void downmapperPageLinkInfo(JCCWebBusinessLogic arg0, String templateId, HashMap searchResultMap, String screenId)
	{
		try
		{
			downmapperPageLinkInfoBase(arg0, "0", templateId, searchResultMap, screenId);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * 検索サービスI/Fの検索結果を、キー：画面ID_表番号で紐付くページリンク情報オブジェクトに反映します。
	 * 
	 * @param arg0 実行中のVIEWロジックインスタンス
	 * @param tableIndex 表番号
	 * @param templateId CCタイトル
	 * @param searchResultMap 検索結果が格納されたMap
	 * @throws JCCFrameworkException
	 */
	public static void downmapperPageLinkInfo(JCCWebBusinessLogic arg0, String tableIndex, String templateId, HashMap searchResultMap)
	{
		try
		{
			downmapperPageLinkInfoBase(arg0, tableIndex, templateId, searchResultMap, arg0.getGamenId());
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * 検索サービスI/Fの検索結果を、キー：指定した画面ID_表番号で紐付くページリンク情報オブジェクトに反映します。
	 * 
	 * @param arg0 実行中のVIEWロジックインスタンス
	 * @param tableIndex 表番号
	 * @param templateId CCタイトル
	 * @param searchResultMap 検索結果が格納されたMap
	 * @throws JCCFrameworkException
	 */
	public static void downmapperPageLinkInfo(JCCWebBusinessLogic arg0, String tableIndex, String templateId, HashMap searchResultMap, String screenId) 
	{
		try
		{
			downmapperPageLinkInfoBase(arg0, tableIndex, templateId, searchResultMap, screenId);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * 検索サービスI/Fの検索結果を、キー：指定した画面ID_表番号で紐付くページリンク情報オブジェクトに反映します。
	 * 
	 * @param arg0 実行中のVIEWロジックインスタンス
	 * @param tableIndex 表番号
	 * @param templateId CCタイトル
	 * @param searchResultMap 検索結果が格納されたMap
	 * @throws Exception
	 */
	private static void downmapperPageLinkInfoBase(JCCWebBusinessLogic arg0, String tableIndex, String templateId, HashMap searchResultMap, String screenId) throws Exception 
	{
		
		String sessionKey = "pageLinkInfo";
		// セッションからページリンク情報格納Mapを取得
		HashMap pageLinkInfoBaseMap = getSessionBaseMap(arg0, sessionKey);
		
		// ページリンク情報格納Mapが取得できない場合は、処理を継続できないためエラーとする。
		if (pageLinkInfoBaseMap == null) 
		{
			throw new JCCFrameworkException("ページリンク情報オブジェクトを格納するMapが取得できません。");
		}
		
		// ページリンク情報オブジェクトのキーを生成。
		// キー：画面ID_表番号
		String screenKeyId = createPageInfoKey(screenId, tableIndex);
		
		HashMap targetPageLinkInfoMap = null;
		// バックヤードの場合、メニューID配下の画面情報となる。
		if (isMenuContent(arg0)) 
		{
			// メニューIDを取得
			String menuid = getMenuId(arg0);
			
			// メニューIDMAPを取得する。
			HashMap menuIdMap = (HashMap) pageLinkInfoBaseMap.get(menuid);
			// メニューIDMAPが取得できない場合は作成する。
			if (menuIdMap == null) 
			{
				throw new JCCFrameworkException("ページリンク情報オブジェクトを格納するMapが取得できません。");
			}
			
			// キー：画面ID_表番号で紐付くページリンク情報オブジェクトをセッションから取得する。
			targetPageLinkInfoMap = (HashMap) menuIdMap.get( screenKeyId );
		} 
		else 
		{
			// キー：画面ID_表番号で紐付くページリンク情報オブジェクトをセッションから取得する。
			targetPageLinkInfoMap = (HashMap) pageLinkInfoBaseMap.get( screenKeyId );
		}
		
		// キー：画面ID_表番号で紐付くページリンク情報オブジェクトが取得できない場合、
		// 処理を継続できないためエラーとする。
		if (targetPageLinkInfoMap == null) 
		{
			throw new JCCFrameworkException("ページリンク情報オブジェクトを取得できません。");
		
		}
		
		// 下りマッピング処理
		// 検索結果から、ページリンク情報オブジェクトへ反映する。
		// 検索結果が格納されたMapから、指定されたCCタイトルに紐付く情報が格納されたMapを取得する。
		HashMap searchInfoMap = (HashMap) searchResultMap.get( templateId );
		
		if (searchInfoMap == null) 
		{
			throw new JCCFrameworkException("SCタイトル：" + templateId + "の情報が取得できません。");
		}
		
		// キー項目の存在チェックを行う。
		// 総ページ数
		if (!searchInfoMap.containsKey("total_page_num")) 
		{
			throw new JCCFrameworkException("searchInfoMap：total_page_numが取得できません。");
		}
		
		// 総検索件数
		if (!searchInfoMap.containsKey("total_search_num")) 
		{
			throw new JCCFrameworkException("searchInfoMap：total_search_numが取得できません。");
		}
		
		// 総ページ数
		targetPageLinkInfoMap.put("total_page_num", searchInfoMap.get("total_page_num"));
		// 総検索件数
		targetPageLinkInfoMap.put("total_search_num", searchInfoMap.get("total_search_num"));
		// 検索エラーフラグ
		targetPageLinkInfoMap.put("search_err_flg", searchInfoMap.get("search_err_flg"));
		
		// 検索エラーフラグが3の場合、表示ページ番号を1に設定する。
		if (searchInfoMap.get("search_err_flg") != null && searchInfoMap.get("search_err_flg").equals("3")) 
		{
			targetPageLinkInfoMap.put("display_page_num","1");
		}
		
	}
	
	/**
	 * 指定した画面のページリンク情報をセッションから削除します。
	 * @param arg0 Viewロジックインスタンス
	 * @param screenId ページリンク情報を削除する画面ID
	 * @throws JCCFrameworkException
	 */
	public static void clearPageLinkInfo(JCCWebBusinessLogic arg0, String screenId)
	{
		try
		{
			String sessionKey = "pageLinkInfo";
			// セッションからページリンク情報格納Mapを取得
			HashMap pageLinkInfoBaseMap = getSessionBaseMap(arg0, sessionKey);
			
			// ページリンク情報格納Mapが取得できない場合は、何もしない。
			if (pageLinkInfoBaseMap == null) 
			{
				return;
			}
			
			// メニューIDを取得
			String menuid = getMenuId(arg0);
			Iterator ite = null;
			// バックヤードの場合、メニューID配下の画面情報となる。
			if (isMenuContent(arg0)) 
			{
				// メニューIDMAPを取得する。
				HashMap menuIdMap = (HashMap) pageLinkInfoBaseMap.get(menuid);
				// メニューIDMAPが取得できない場合はなにもしない。
				if (menuIdMap == null) 
				{
					return;
				}
				
				ite = menuIdMap.keySet().iterator();
			} 
			else 
			{
				ite = pageLinkInfoBaseMap.keySet().iterator();
			}
			
			// ページリンク情報格納Mapの要素を格納する
			String key;
			// 削除対象の画面ID
			String deleteKey = JCCWebCommon.getScreenIdWith0PJP(screenId);
			while ( ite.hasNext() ) {
				 key = (String) ite.next();
				 
				 // 画面ID_表番号がkeyのため、_で分割してチェックする。
				 String[] keyArray = key.split("_");
				 
				 if ( keyArray.length != 2 ) {
					 continue;
				 }
				 
				 if ( deleteKey.equals( keyArray[0] ) ) {
					ite.remove();
				 }
			}
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

	/**
	 * 指定した画面のページリンク情報をセッションから削除します。
	 * @param arg0 Viewロジックインスタンス
	 * @param screenId ページリンク情報を削除する画面ID
	 * @param tableIndex ページリンク情報を削除する表番号
	 * @throws JCCFrameworkException
	 */
	public static void clearPageLinkInfo( JCCWebBusinessLogic arg0, String screenId, String tableIndex)
	{
		try
		{
			String sessionKey = "pageLinkInfo";
			// セッションからページリンク情報格納Mapを取得
			HashMap pageLinkInfoBaseMap = getSessionBaseMap(arg0, sessionKey);
			
			// ページリンク情報格納Mapが取得できない場合は、何もしない。
			if ( pageLinkInfoBaseMap == null ) {
				return;
			}
			
			// メニューIDを取得
			String menuid = getMenuId(arg0);
			Iterator ite = null;
			// バックヤードの場合、メニューID配下の画面情報となる。
			if ( isMenuContent(arg0) ) {
				// メニューIDMAPを取得する。
				HashMap menuIdMap = (HashMap) pageLinkInfoBaseMap.get(menuid);
				// メニューIDMAPが取得できない場合はなにもしない。
				if ( menuIdMap == null ) {
					return;
				}
				
				ite = menuIdMap.keySet().iterator();
			} else {
				ite = pageLinkInfoBaseMap.keySet().iterator();
			}
			
			// ページリンク情報格納Mapの要素を格納する
			String key;
			// 削除対象の画面IDと表番号
			String deleteKey = JCCWebCommon.getScreenIdWith0PJP(screenId) + "_" + tableIndex;
			while ( ite.hasNext() ) {
				 key = (String) ite.next();
				 if ( deleteKey.equals( key ) ) {
					ite.remove();
				 }
			}
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

	/**
	 * 
	 * コマンドマップIDをセッションに設定します。
	 * 
	 * @param arg0 実行中のVIEWロジックインスタンス
	 * @param commandId コマンドマップに定義されているID
	 * @throws JCCFrameworkException
	 */
	public static void setSearchCommand(JCCWebBusinessLogic arg0, String commandId)
	{
		try
		{
			setSearchCommandBase(arg0, "0", commandId, arg0.getGamenId());
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * 
	 * 画面IDをキーとして、コマンドマップIDをセッションに設定します。
	 * 
	 * @param arg0 実行中のVIEWロジックインスタンス
	 * @param commandId コマンドマップに定義されているID
	 * @param screenId 画面ID
	 * @throws JCCFrameworkException
	 */
	public static void setSearchCommand(JCCWebBusinessLogic arg0, String commandId, String screenId) 
	{
		try
		{
			if(null == screenId)
			{
				screenId = arg0.getGamenId();
			}
			setSearchCommandBase(arg0, "0", commandId, screenId);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * 
	 * 画面IDをキーとして、コマンドマップIDを指定したインデックスに紐づけてセッションに設定します。
	 * 
	 * @param arg0 実行中のVIEWロジックインスタンス
	 * @param tableIndex pageLinkHeaderに紐づくインデックス情報
	 * @param commandId コマンドマップに定義されているID
	 * @param screenId 画面ID(nullを指定した場合は自画面IDを取得)
	 * @throws JCCFrameworkException
	 */
	public static void setSearchCommand(JCCWebBusinessLogic arg0, String tableIndex, String commandId, String screenId)
	{
		try
		{
			if(null == screenId)
			{
				screenId = arg0.getGamenId();
			}
			setSearchCommandBase(arg0, tableIndex, commandId, screenId);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * 
	 * コマンドマップIDをセッションに設定します。
	 * 
	 * @param arg0 実行中のVIEWロジックインスタンス
	 * @param commandId コマンドマップに定義されているID
	 * @param screenId 画面ID
	 * @throws Exception
	 */
	private static void setSearchCommandBase(JCCWebBusinessLogic arg0, String tableIndex, String commandId, String screenId) throws Exception
	{
		
		String sessionKey = "pageLinkInfo";
		// セッションからページリンク情報格納Mapを取得
		HashMap pageLinkInfoBaseMap = getSessionBaseMap(arg0, sessionKey);
		
		// ページリンク情報格納Mapが取得できない場合
		if ( pageLinkInfoBaseMap == null ) {
			pageLinkInfoBaseMap = new HashMap<String,HashMap<String,String>>();
			getSession(arg0).setAttribute( "pageLinkInfo" , pageLinkInfoBaseMap );
		}
		
		String screenKeyId = JCCWebCommon.getScreenIdWith0PJP(screenId);
		
		// バックヤードの場合、メニューID配下の画面情報となる。
		if ( isMenuContent(arg0) ) {
			// メニューIDを取得
			String menuid = getMenuId(arg0);
			
			// メニューIDMAPを取得する。
			HashMap menuIdMap = (HashMap) pageLinkInfoBaseMap.get(menuid);
			// メニューIDMAPが取得できない場合はなにもしない。
			if ( menuIdMap == null ) {
				menuIdMap = new HashMap();
				pageLinkInfoBaseMap.put(menuid, menuIdMap);
			}
			
			// コマンドIDをメニュー配下に設定
			//menuIdMap.put(screenKeyId, screenKeyId + "_" + commandId);
			// 20110721 tableIndex対応に伴ってキーを変更
			menuIdMap.put(screenKeyId + "_command_" + tableIndex, screenKeyId + "_" + commandId);
		} else {
			// コマンドIDをセッションに設定
			// 20110721 tableIndex対応に伴ってキーを変更
			//pageLinkInfoBaseMap.put(screenKeyId, screenKeyId + "_" + commandId);
			pageLinkInfoBaseMap.put(screenKeyId + "_command_" + tableIndex, screenKeyId + "_" + commandId);
		}
	}
	
	/**
	 * メニューIDを取得する。
	 * @param arg0 VIEWロジックインスタンス
	 * @return メニューID
	 */
	private static String getMenuId( JCCWebBusinessLogic arg0 ) {
		try {
			X33VViewJSPBean jspBean = (X33VViewJSPBean) X33CUtil.getSession( arg0.getSession().getViewParamId().getSessionID() ).getContext().getRequestBean();
			String eventPageId = jspBean.getEventPageId();
			
			// アプリケーションプロパティファイルのメニュー画面ID定義を取得
			String menuScreenId = JCMAPLConstMgr.getString("MENU_SCREEN_ID");
			
			HashMap map = arg0.getRequestParams();
			if ( eventPageId != null && menuScreenId != null && eventPageId.equals(menuScreenId) ) {
				// 20121220 メニューIDの取得先変更（戻るボタンが効かない障害の対応） fst)yanagihara start
				return (String) map.get(JCCWebCommon.MENUID_PARAM_NAME);
				//return (String) map.get("uji.verb");
				// 20121220 メニューIDの取得先変更（戻るボタンが効かない障害の対応） fst)yanagihara end
			} else {
				return (String) map.get("menuid_system");
			}
		} catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * 
	 * 検索結果のHashMapから、指定したSCタイトルの検索エラーフラグを取得します。
	 * 
	 * @param templateId SCタイトル
	 * @param searchResultMap 検索結果が格納されたHashMap
	 * @return 検索エラーフラグ
	 * @throws JCCFrameworkException
	 */
	public static String getSearchErrFlg(String templateId, HashMap searchResultMap)
	{
		try
		{
			HashMap templateMap = (HashMap)searchResultMap.get(templateId);
			String errFlg = (String)templateMap.get("search_err_flg");
			return errFlg;
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

	/**
	 * 
	 * 検索定義ファイルから指定したキーに対応する値を取得します。
	 * 
	 * @param key 検索定義ファイルのキー
	 * @return 指定したキーに対応する検索定義ファイルの値
	 * @throws JCCFrameworkException
	 */
	public static String getSearchConst( String key )
	{
		try
		{
			// 検索定義ファイルのパスと文字エンコーディングを設定する。
			JCCSearchRestrictionCache.setPath();
			
			// 検索定義ファイルから指定されたキーに対応する値を取得する。
			return JCCSearchRestrictionCache.getValue(key);
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}

	/**
	 * 
	 * 指定された文字列にサニタイズ処理を行った文字列を返却します。
	 * 
	 * @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);
		}
	}
	
	/**
	 * 指定された画面IDが"0PJP"で終わっていない場合、"0PJP"を付与して返却します。
	 * "0PJP"で終わっている場合、処理を行わず画面IDを返却します。
	 * @param screenId 画面ID
	 * @return 画面ID + "0PJP"
	 */
	private static String getScreenIdWith0PJP(String screenId) {
		if ( screenId == null ) {
			return null;
		}
		
		int ret = screenId.lastIndexOf("0PJP");
		if (ret == -1) {
			return screenId + "0PJP";
		} else {
			return screenId;
		}
	}
	
	/**
	 * 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;
	}
	
	/**
	 * 外部コマンド同期実行処理です。<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       標準出力結果格納用引数。コマンド実行結果は、JCCWebCommon.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       標準出力結果格納用引数。コマンド実行結果は、JCCWebCommon.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より小さい値です。");
		}
		
		// 画面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の要素が含まれています。");
			}
		}
		
		// 画面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 arg0 VIEWロジックインスタンス
	 * @param arg1 ファイル連番
	 * @return ファイル管理番号。取得できなかった場合はNULLを返却します。
	 * @throws JCCFrameworkException
	 */
	public static String getReplaceNoString(JCCWebBusinessLogic arg0, String arg1)
	{
		return arg0.getReplaceNoString(arg1);
	}
	
	/**
	 * AxMシステムに対して、認証処理を要求し結果を返却します。
	 * <br>
	 * 返却値のHashMapには、認証結果及びSYSIDが設定されており、<br>
	 * それぞれ、認証結果取得時のKEYは"RESULT",SYSID取得時のKEYは"SYSID"です。<br>
	 * アプリケーションプロパティファイルに、AXM_TEST_MODE=ON が設定されていると、<br>
	 * 本処理はテストモードとして以下のように動作します。<br>
	 * テストモードでは、ユーザーIDの先頭4ケタを見て、返却値のHashMapのKEY:"RESULT","SYSID"に対して、<br>
	 * 以下の値を設定して返却します。<br>
	 * <table>
	 *   <thead>
	 *     <tr>
	 *       <th>ユーザーID先頭4桁</th>
	 *       <th>RESULT値</th>
	 *       <th>SYSID値</th>
	 *       <th>備考</th>
	 *     </tr>
	 *   </thead>
	 *   <tbody>
	 *     <tr>
	 *       <td>T000〜T009</td>
	 *       <td>ResultConstants.VALID_USER</td>
	 *       <td>"9999"</td>
	 *       <td>認証成功</td>
	 *     </tr>
	 *     <tr>
	 *       <td>T010〜T019</td>
	 *       <td>ResultConstants.EXPIRED_ACCOUNT</td>
	 *       <td>""(空文字)</td>
	 *       <td>アカウント有効期限切れ</td>
	 *     </tr>
	 *     <tr>
	 *       <td>T020〜T029</td>
	 *       <td>ResultConstants.INACTIVE_ACCOUNT</td>
	 *       <td>""(空文字)</td>
	 *       <td>アカウント無効</td>
	 *     </tr>
	 *     <tr>
	 *       <td>T030〜T039</td>
	 *       <td>ResultConstants.ADMIN_LOCKOUT</td>
	 *       <td>""(空文字)</td>
	 *       <td>アカウントのロック</td>
	 *     </tr>
	 *     <tr>
	 *       <td>T040〜T049</td>
	 *       <td>ResultConstants.INVALID_PASSWORD</td>
	 *       <td>""(空文字)</td>
	 *       <td>パスワード無効</td>
	 *     </tr>
	 *     <tr>
	 *       <td>T050〜T059</td>
	 *       <td>ResultConstants.EXPIRED_PASSWORD</td>
	 *       <td>""(空文字)</td>
	 *       <td>パスワードの有効期限切れ</td>
	 *     </tr>
	 *     <tr>
	 *       <td>T060〜T069</td>
	 *       <td>ResultConstants.EXPIRED_PASSWORD_FORCED</td>
	 *       <td>""(空文字)</td>
	 *       <td>管理者による強制的なパスワード有効期限切れ</td>
	 *     </tr>
	 *     <tr>
	 *       <td>T070〜T079</td>
	 *       <td>ResultConstants.EXPIRED_PASSWORD_NEW_USER</td>
	 *       <td>""(空文字)</td>
	 *       <td>アカウント作成後、一度もパスワード設定されていない</td>
	 *     </tr>
	 *     <tr>
	 *       <td>上記以外</td>
	 *       <td>ResultConstants.UNKNOWN_USER</td>
	 *       <td>""(空文字)</td>
	 *       <td>ユーザーが存在しない</td>
	 *     </tr>
	 *   </tbody>
	 * </table>
	 * @param vlObj Viewロジックインスタンス
	 * @param userId ユーザーID
	 * @param password パスワード
	 * @return
	 */
	public static HashMap<String, String> getAxMCertifyResult(JCCWebBusinessLogic vlObj, String userId, String password)
	{
// MOD 20120723 案件番号「ANK-0024-02-00 【お客さまID非通知対応】はぴeの料金系」の対応 START
//		return JCCAxMNinsho.getAxMCertifyResult(vlObj, userId, password);
		return JCCAxMNinsho.getAxMCertifyResult(vlObj, userId, password, true);
// MOD 20120723 案件番号「ANK-0024-02-00 【お客さまID非通知対応】はぴeの料金系」の対応 END
	}

// ADD 20120723 案件番号「ANK-0024-02-00 【お客さまID非通知対応】はぴeの料金系」の対応 START
	/**
	 * AxMシステムに対して、認証処理を要求し結果を返却します。
	 * <br>
	 * 返却値のHashMapには、認証結果及びSYSIDが設定されており、<br>
	 * それぞれ、認証結果取得時のKEYは"RESULT",SYSID取得時のKEYは"SYSID"です。<br>
	 * アプリケーションプロパティファイルに、AXM_TEST_MODE=ON が設定されていると、<br>
	 * 本処理はテストモードとして以下のように動作します。<br>
	 * テストモードでは、ユーザーIDの先頭4ケタを見て、返却値のHashMapのKEY:"RESULT","SYSID"に対して、<br>
	 * 以下の値を設定して返却します。<br>
	 * <table>
	 *   <thead>
	 *     <tr>
	 *       <th>ユーザーID先頭4桁</th>
	 *       <th>RESULT値</th>
	 *       <th>SYSID値</th>
	 *       <th>備考</th>
	 *     </tr>
	 *   </thead>
	 *   <tbody>
	 *     <tr>
	 *       <td>T000〜T009</td>
	 *       <td>ResultConstants.VALID_USER</td>
	 *       <td>"9999"</td>
	 *       <td>認証成功</td>
	 *     </tr>
	 *     <tr>
	 *       <td>T010〜T019</td>
	 *       <td>ResultConstants.EXPIRED_ACCOUNT</td>
	 *       <td>""(空文字)</td>
	 *       <td>アカウント有効期限切れ</td>
	 *     </tr>
	 *     <tr>
	 *       <td>T020〜T029</td>
	 *       <td>ResultConstants.INACTIVE_ACCOUNT</td>
	 *       <td>""(空文字)</td>
	 *       <td>アカウント無効</td>
	 *     </tr>
	 *     <tr>
	 *       <td>T030〜T039</td>
	 *       <td>ResultConstants.ADMIN_LOCKOUT</td>
	 *       <td>""(空文字)</td>
	 *       <td>アカウントのロック</td>
	 *     </tr>
	 *     <tr>
	 *       <td>T040〜T049</td>
	 *       <td>ResultConstants.INVALID_PASSWORD</td>
	 *       <td>""(空文字)</td>
	 *       <td>パスワード無効</td>
	 *     </tr>
	 *     <tr>
	 *       <td>T050〜T059</td>
	 *       <td>ResultConstants.EXPIRED_PASSWORD</td>
	 *       <td>""(空文字)</td>
	 *       <td>パスワードの有効期限切れ</td>
	 *     </tr>
	 *     <tr>
	 *       <td>T060〜T069</td>
	 *       <td>ResultConstants.EXPIRED_PASSWORD_FORCED</td>
	 *       <td>""(空文字)</td>
	 *       <td>管理者による強制的なパスワード有効期限切れ</td>
	 *     </tr>
	 *     <tr>
	 *       <td>T070〜T079</td>
	 *       <td>ResultConstants.EXPIRED_PASSWORD_NEW_USER</td>
	 *       <td>""(空文字)</td>
	 *       <td>アカウント作成後、一度もパスワード設定されていない</td>
	 *     </tr>
	 *     <tr>
	 *       <td>上記以外</td>
	 *       <td>ResultConstants.UNKNOWN_USER</td>
	 *       <td>""(空文字)</td>
	 *       <td>ユーザーが存在しない</td>
	 *     </tr>
	 *   </tbody>
	 * </table>
	 * @param vlObj Viewロジックインスタンス
	 * @param userId ユーザーID
	 * @param password パスワード
	 * @param isCreateCookie 認証成功時のクッキー情報生成有無 true:有り、false:無し
	 * @return
	 */
	public static HashMap<String, String> getAxMCertifyResult(JCCWebBusinessLogic vlObj, String userId, String password, boolean isCreateCookie)
	{
		return JCCAxMNinsho.getAxMCertifyResult(vlObj, userId, password, isCreateCookie);
	}
// ADD 案件番号「ANK-0024-02-00 【お客さまID非通知対応】はぴeの料金系」の対応 END

	/**
	 * 規制定義ファイル情報について画面IDをキーとした格納マップを取得します。(オンライン専用)
	 * <br>
	 * @param key 取得対象の画面ID
	 * @return 規制定義情報マップ
	 */	
	public static HashMap<String, String> getMap(String key)
	{
		try
		{
			return JCCAuthorityCtrlCache.getMap(key);
		} catch(Throwable th) {
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * 権限コードリストの権限コードを1件ずつ、権限リストマップから情報を取得して、<BR>
	 * 権限有無を判定します。
	 * <br>
	 * @param vl VIEWロジックインスタンス
	 * @param lstMap 権限リストマップ
	 * @param iseiCdLst 権限コードリスト
	 * @return 権限有無 true:権限あり false:権限なし
	 */
	public static boolean judgeStatus(X31BWebBusinessLogic vl, HashMap<String, String> lstMap, String authorityCdLst)
	{
		try
		{
			return JCCAuthorityCtrlStatus.judgeStatus(vl, lstMap, authorityCdLst);
		} catch(Throwable th) {
			throw makeJCCFrameworkException(th);
		}
	}
	
	/**
	 * 権限リスト取得処理<BR>
	 * 共有フォームBeanより権限リストを取得します。
	 * <br>
	 * @param vl VIEWロジックインスタンス
	 * @param 権限リストマップ
	 */
	public static void setAuthorityList(X31BWebBusinessLogic vl, HashMap<String, String> lstMap)
	{
		try
		{
			JCCAuthorityCtrlUtil.setAuthorityList(vl, lstMap);
		} catch(Throwable th) {
			throw makeJCCFrameworkException(th);
		}
	}
	
	// パスワード暗号化／復号化対応 2012/02/26 FST start
	/**
	 * 文字列暗号化処理です。入力された文字列を暗号化して結果の文字列を返却します。
	 * (Blowfish暗号化方式)
	 *
	 * @param key 暗号化用キー
	 * @param inStr 暗号化対象の文字列
	 * @return 暗号化結果の文字列
	 * @throws JCCbatFrameworkException
	 */
	public static String getEncryptResultPassword(String inStr) throws JCCFrameworkException
	{
		try
		{
			String key = JCCWebCommon.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 = JCCWebCommon.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
	
	//2012/05/30 圧縮ファイルアクセッサー追加対応 start
	/**
	 * ファイル圧縮処理です。圧縮対象ファイルフルパスを指定し、圧縮ファイルのbyte配列を返却します。
	 * 
	 * @param filePath 圧縮ファイルのフルパス
	 * @return 圧縮ファイルのbyte配列
	 * @throws JCCbatFrameworkException
	 */
	public static byte[] createZipFile(String filePath) throws JCCFrameworkException
	{
		byte[] readData = null;
		String outDirPath = null;
		String outTmpPath = null;
		String compLevel = null;
		String zipFilePath = null;
		FileInputStream is = null;
		BufferedInputStream bis = null;
		File fl = null;
		try
		{
			// 圧縮ファイルを一時保存するディレクトリをAPLConstから取得
			outDirPath = getApplicationConst("DIR_COMP_TMP");
			if(null == outDirPath)
			{
				throw new Exception("APLConstに圧縮ファイルを一時保存するディレクトリを設定するキー[DIR_COMP_TMP]が設定されていません。");
			}
			// 圧縮レベルをAPLConstから取得
			compLevel = getApplicationConst("COMP_LEVEL");
			if(null == compLevel)
			{
				throw new Exception("APLConstに圧縮レベルを設定するキー[COMP_LEVEL]が設定されていません。");
			}
			// 一意となるディレクトリを生成してその中に圧縮ファイルを生成する
			outTmpPath = JCCFileUtil.createFileNameUid(outDirPath);
			fl = new File(outTmpPath);
			if(fl.mkdirs() == false)
			{
				throw new Exception("作業ディレクトリの作成に失敗しました");
			}
			// 圧縮ファイルのフルパスを取得
			zipFilePath = JCCCompressFileUtil.compressFile(filePath, outTmpPath, "", "0", compLevel);
			// ファイルをbyte配列化する
			is = new FileInputStream(zipFilePath);
			readData = new byte[is.available()];
			int ret = 0;
			bis = new BufferedInputStream(is, 5120);
			while(ret != -1)
			{
				ret = bis.read(readData);
				if(ret == -1)
				{
					break;
				}
			}
			return readData;
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
		finally
		{
			// ストリームのクローズ
			try
			{	
				if(null != bis)
				{
					bis.close();
				}
				if(null != is)
				{
					is.close();
				}
			}
			catch(Throwable th)
			{
				throw makeJCCFrameworkException(th);
			}
			// 一時ファイル格納パスの削除
			if(null != outTmpPath)
			{
				JCCFileUtil.removeDir(outTmpPath);
			}
		}
	}
	//2012/05/30 圧縮ファイルアクセッサー追加対応 end
	
	/**
	 * 業務規制一覧情報を取得します。
	 * <br>
	 * @param vl VIEWロジックインスタンス
	 * @return 業務規制マップ
	 */
	public static HashMap<String, Object> getBusinessControlMap(X31BWebBusinessLogic vl)
	{
		try
		{
			// セッションより業務規制一覧情報の検索結果格納用マップを取得する。
			HashMap<String,  Object> slstMap = (HashMap<String, Object>)vl.getSessionObject(JCCBusinessControl.KEY_SESSION);
			if (null == slstMap) 
			{
				return  new HashMap<String, Object>();
			}
			HashMap<String,  Object> lstMap = (HashMap<String, Object>)slstMap.get(true);
			return lstMap;
		}
		catch(Throwable th)
		{
			throw makeJCCFrameworkException(th);
		}
	}
}
