/********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************
 *＜プログラム内容＞
 *  システム名      ：eo顧客基幹システム
 *  モジュール名    ：住所変更・開始日補正処理コモンコンポーネントパターン別マッピングクラス
 *  ソースファイル名：JKKAdChgStaYmdModMapPatternCC.java
 *  作成者          ：FJ
 *  日付            ：2014年04月15日
 *＜機能概要＞
 *  工事案件コモンコンポーネント部品におけるパターン別マッピングクラス
 *＜修正履歴＞
 *  バージョン  修正日      修正者      修正内容
*  v8.00.00		2014/04/15	FJ)寺田			新規作成(ANK-1683-00-00)
 ********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.HashMap;

import com.fujitsu.futurity.bp.custom.constant.JKKAdChgStaYmdModConstCC;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.sun.enterprise.tools.common.util.StringUtils;

import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0021C060CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081C320CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg;


/**
 * 住所変更・開始日補正処理コモンコンポーネントマッピングパターン.
 * <br>
 * @author FJ
 */
public class JKKAdChgStaYmdModMapPatternCC  {

	/** ユーザ任意文字列 */
	private static ThreadLocal<String> useFixedText = new ThreadLocal<String>() {
		// 領域への設定はinitialValue()ではなくset()を使用する為、initialValue()は実装しない
	};

	/**
	 * コンストラクタ.
	 * <br>
	 * @param  fixedText  ユーザ任意文字列
	 */
	public JKKAdChgStaYmdModMapPatternCC( String fixedText ) {
		useFixedText.set( fixedText );
	}

	/**
	 * スレッドローカル領域の解放.
	 * <br>
	 */
	public void release() {
		if ( useFixedText.get() != null ) {
			useFixedText.remove();
		}
	}

	/**
	 * マップ情報取得.
	 * <br>
	 * @param   inMapping  導出元マッピング
	 * @param   mapKey     キー情報
	 * @return  マップ情報
	 */
	@SuppressWarnings( "unchecked" )
	private HashMap getMapInfo( HashMap inMapping, String mapKey ) {
		HashMap resultMap = null;

		if ( inMapping.containsKey( mapKey ) ) {
			resultMap = (HashMap)( inMapping.get( mapKey ) );
		}

		return resultMap;
	}

	/**
	 * マップ情報格納(HashMapより取得).
	 * <br>
	 * @param  outMapping  引数マッピング情報
	 * @param  outMapKey   引数マッピング用キー情報
	 * @param  inMapping   導出元マッピング情報
	 * @param  inMapKey    導出元マッピング用キー情報
	 */
	@SuppressWarnings( "unchecked" )
	private void putMappingFromHashMap( HashMap outMapping, String outMapKey, HashMap inMapping, String inMapKey ) {
		if ( inMapping != null ) {
			if ( inMapping.containsKey( inMapKey ) ) {
				if ( StringUtils.isEmpty( inMapping.get( inMapKey ).toString() ) ) {
					outMapping.put( outMapKey , new String() );
				} else {
					outMapping.put( outMapKey , inMapping.get( inMapKey ) );
				}
			} else {
				outMapping.put( outMapKey , new String() );
			}
		} else {
			outMapping.put( outMapKey , new String() );
		}
	}

	/**
	 * マップ情報格納(パラメータより取得).
	 * <br>
	 * @param  outMapping  引数マッピング情報
	 * @param  outMapKey   引数マッピング用キー情報
	 * @param  param       モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param  inMapKey    導出元マッピング用キー情報
	 * @param  Exception   例外が発生した場合
	 */
	@SuppressWarnings( "unchecked" )
	private void putMappingFromParam( HashMap outMapping, String outMapKey, IRequestParameterReadWrite param, String inMapKey ) throws RequestParameterException {
		HashMap paramMap = (HashMap)( param.getData( useFixedText.get() ) );

		if ( paramMap.containsKey( inMapKey ) ) {
			if ( StringUtils.isEmpty( paramMap.get( inMapKey ).toString() ) ) {
				outMapping.put( outMapKey, new String() );
			} else {
				outMapping.put( outMapKey, paramMap.get( inMapKey ).toString() );
			}
		} else {
			outMapping.put( outMapKey, new String() );
		}
	}

	/**
	 * 引数マッピング生成 : EKK0011D020 申込内容承認登録.
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   inMapping  導出元マッピング
	 * @param   Exception  例外が発生した場合
	 * @return  引数マッピング情報
	 */
	@SuppressWarnings( "unchecked" )
	public HashMap mapPattern_EKK0011D020( IRequestParameterReadWrite param, HashMap inMapping ) throws RequestParameterException {
		HashMap outMapping = new HashMap();

		/** 引数マッピング情報生成 */
		// param.SYSID ⇒ kk0011_d020_map.SYSID
		putMappingFromParam( outMapping, EKK0011D020CBSMsg.SYSID, param, JKKAdChgStaYmdModConstCC.SYSID );
		// 申込種別コード ⇒ kk0011_d020_map.申込種別コード
		outMapping.put( EKK0011D020CBSMsg.MSKM_SBT_CD, JKKAdChgStaYmdModConstCC.MSKM_SBT_CD_VALUE_00027 );
		// システム運用年月日時分秒 ⇒ kk0011_d020_map.申込受付年月日時分秒
		outMapping.put( EKK0011D020CBSMsg.MSKM_UK_DTM, JCCBPCommon.getOpeDateTimeStamp(null) );
		// システム運用年月日 ⇒ kk0011_d020_map.申込年月日
		outMapping.put( EKK0011D020CBSMsg.MSKM_YMD, JPCBPCommon.getOnlineOpeDate(null) );
		// コンシューマ営業用申込状態識別コード ⇒ kk0011_d020_map.コンシューマ営業用申込状態識別コード
		outMapping.put( EKK0011D020CBSMsg.CONSMBSN_MSKM_STAT_SKBT_CD, JKKAdChgStaYmdModConstCC.CONSMBSN_MSKM_STAT_SKBT_CD_VALUE_04 );

		return outMapping;
	}

	/**
	 * 引数マッピング生成 : EKK0021C060 申込明細照査・後続業務依頼.
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   inMapping  導出元マッピング
	 * @param   Exception  例外が発生した場合
	 * @return  引数マッピング情報
	 */
	@SuppressWarnings( "unchecked" )
	public HashMap mapPattern_EKK0021C060( IRequestParameterReadWrite param, HashMap inMapping ) throws RequestParameterException {
		HashMap outMapping = new HashMap();

		/** マッピング情報取得 */
		// EKK0081A010 サービス契約一意照会
		HashMap kk0081_a010_map = getMapInfo( inMapping, JKKAdChgStaYmdModMapperCC.EKK0081A010_MAP );

		/** 引数マッピング情報生成 */
		// kk0081_a010_map.申込明細番号 ⇒ kk0021_c060_map.申込明細番号
		putMappingFromHashMap( outMapping, EKK0021C060CBSMsg.MSKM_DTL_NO, kk0081_a010_map, EKK0081A010CBSMsg1List.MSKM_DTL_NO );
		// システム運用年月日 ⇒ kk0021_c060_map.後続業務依頼年月日
		outMapping.put( EKK0021C060CBSMsg.KZKWRK_REQYMD, JPCBPCommon.getOnlineOpeDate(null) );
		// kk0081_a010_map.最終更新年月日時分秒 ⇒ kk0021_c060_map.更新年月日時分秒(更新前)
		putMappingFromHashMap( outMapping, EKK0021C060CBSMsg.UPD_DTM_BF, kk0081_a010_map, EKK0081A010CBSMsg1List.LAST_UPD_DTM );

		return outMapping;
	}

	/**
	 * 引数マッピング生成 : EKK0081C320 サービス契約サービス開始日変更２.
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   inMapping  導出元マッピング
	 * @param   Exception  例外が発生した場合
	 * @return  引数マッピング情報
	 */
	@SuppressWarnings( "unchecked" )
	public HashMap mapPattern_EKK0081C320( IRequestParameterReadWrite param, HashMap inMapping ) throws RequestParameterException {
		HashMap outMapping = new HashMap();

		/** マッピング情報取得 */
		// EKK0081A010 サービス契約一意照会
		HashMap kk0081_a010_map = getMapInfo( inMapping, JKKAdChgStaYmdModMapperCC.EKK0081A010_MAP );

		/** 引数マッピング情報生成 */
		// kk0081_a010_map.サービス契約番号 ⇒ kk0081_c320_map.サービス契約番号
		putMappingFromHashMap( outMapping, EKK0081C320CBSMsg.SVC_KEI_NO, kk0081_a010_map, EKK0081A010CBSMsg1List.SVC_KEI_NO );
		// kk0081_a010_map.世代登録年月日時分秒 ⇒ kk0081_c320_map.世代登録年月日時分秒
		putMappingFromHashMap( outMapping, EKK0081C320CBSMsg.GENE_ADD_DTM, kk0081_a010_map, EKK0081A010CBSMsg1List.GENE_ADD_DTM );
		// param.サービス開始年月日 ⇒ kk0081_c320_map.サービス開始年月日
		putMappingFromParam( outMapping, EKK0081C320CBSMsg.SVC_STA_YMD, param, JKKAdChgStaYmdModConstCC.SVC_STA_YMD );
		// kk0081_a010_map.最終更新年月日時分秒 ⇒ kk0081_c320_map.更新年月日時分秒(更新前)
		putMappingFromHashMap( outMapping, EKK0081C320CBSMsg.UPD_DTM_BF, kk0081_a010_map, EKK0081A010CBSMsg1List.LAST_UPD_DTM );

		return outMapping;
	}

	/**
	 * 引数マッピング生成 : EKK1091D010 進捗登録.
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   inMapping  導出元マッピング
	 * @param   Exception  例外が発生した場合
	 * @return  引数マッピング情報
	 */
	@SuppressWarnings( "unchecked" )
	public HashMap mapPattern_EKK1091D010( IRequestParameterReadWrite param, HashMap inMapping ) throws RequestParameterException {
		HashMap outMapping = new HashMap();

		/** マッピング情報取得 */
		// EKK0081A010 サービス契約一意照会
		HashMap kk0081_a010_map = getMapInfo( inMapping, JKKAdChgStaYmdModMapperCC.EKK0081A010_MAP );

		// 特記事項用サービス開始日取得
		HashMap paramMap = (HashMap)( param.getData( useFixedText.get() ) );
		String svcStaYmd =  paramMap.get( JKKAdChgStaYmdModConstCC.SVC_STA_YMD ).toString();
		svcStaYmd = svcStaYmd.substring(0, 4) + "/" + 
					svcStaYmd.substring(4, 6) + "/" + 
					svcStaYmd.substring(6, 8);
		String svcStaYmdBf = kk0081_a010_map.get( EKK0081A010CBSMsg1List.SVC_STA_YMD ).toString();
		svcStaYmdBf = svcStaYmdBf.substring(0, 4) + "/" + 
						svcStaYmdBf.substring(4, 6) + "/" + 
						svcStaYmdBf.substring(6, 8);

		/** 引数マッピング情報生成 */
		// kk0081_a010_map.申込明細番号 ⇒ kk1091_d010_map.申込明細番号
		putMappingFromHashMap( outMapping, EKK1091D010CBSMsg.MSKM_DTL_NO, kk0081_a010_map, EKK0081A010CBSMsg1List.MSKM_DTL_NO );
		// kk0081_a010_map.サービス契約番号 ⇒ kk1091_d010_map.サービス契約番号
		putMappingFromHashMap( outMapping, EKK1091D010CBSMsg.SVC_KEI_NO, kk0081_a010_map, EKK0081A010CBSMsg1List.SVC_KEI_NO );
		// 異動区分 ⇒ kk1091_d010_map.異動区分
		outMapping.put( EKK1091D010CBSMsg.IDO_DIV, JKKAdChgStaYmdModConstCC.IDO_DIV_VALUE_00084 );
		// システム運用年月日時分秒 ⇒ kk1091_d010_map.異動年月日時分秒
		outMapping.put( EKK1091D010CBSMsg.IDO_DTM, JCCBPCommon.getOpeDateTimeStamp(null) );
		// 進捗ステータス ⇒ kk1091_d010_map.進捗ステータス
		outMapping.put( EKK1091D010CBSMsg.PRG_STAT, JKKAdChgStaYmdModConstCC.PRG_STAT_VALUE_1007 );
		// 特記事項 ⇒ kk1091_d010_map.進捗特記事項1
		outMapping.put( EKK1091D010CBSMsg.PRG_TKJK_1, "サービス開始日：(修正前)" + svcStaYmdBf + " (修正後)" + svcStaYmd );

		return outMapping;
	}
}
