/********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************
 *＜プログラム内容＞
 *  システム名      ：eo顧客基幹システム
 *  モジュール名    ：eo光ネット引継コンポーネント部品クラス
 *  ソースファイル名：JKKKaisenUseAdchgCC.java
 *  作成者          ：FJ
 *  日付            ：2012年8月27日
 *＜機能概要＞
 *  住所変更に伴うeo光ネットの
 *  引継処理を行う部品クラス。
 *＜修正履歴＞
 *  バージョン  修正日      修正者      修正内容
 *  v1.00.00    2012/8/20  FJ          新規作成
 *
 ********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JKKAdchgConstCC;
import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;


/**
 * eo光ネット引継コンポーネント部品クラス.
 * <br>
 * @author FJ
 */
public class JKKKaisenUseAdchgCC extends AbstractCommonComponent {

	/** セッションハンドル保持域 */
	private static ThreadLocal<SessionHandle> keepSesHandle = new ThreadLocal<SessionHandle>()
	{
		// 保持域への設定はinitialValue()ではなくset()を使用する為、
		// initialValue()は実装しない
	};

	/**
	 * コンストラクタ.
	 * <br>
	 */
	public JKKKaisenUseAdchgCC() {
	}

	/**
	 * eo光ネット引継
	 * <br>
	 * @param   handle     セッションマネージャなどを持ったハンドル情報
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Throwable  例外が発生した場合
	 * @return  リクエストパラメータ(param)に戻り値を追加して返却する
	 */
	public IRequestParameterReadWrite kaisenUseAdchg(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable {

		try {

			/** 事前準備 */
			HashMap<String, String> condMap;
			HashMap<String, Object> paramMap = (HashMap<String, Object>)param.getData(fixedText);
			HashMap<String, Object> reqMap;
			Map<?, ?> resMap;
			
			// 住所変更登録コモンコンポーネントマッピングクラスインスタンスを取得
			JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();

			// SCリクエストInvokerを取得
			ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

			/** リソース保持 */
			// セッションハンドルをローカル変数に保持
			keepSesHandle.set(handle);
			
			// ・EKK0241D010 回線対象サービス契約登録
			condMap = new HashMap<String, String>();
			condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_NO, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_SVC_KEI_NO));
			condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_KAIS_UCWK_NO, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_NEW_KEI_KAIS_UCWK_NO));
			reqMap = mapper.setEKK0241D010( param, fixedText, condMap);
			resMap = scCall.run(reqMap, keepSesHandle.get());
			mapper.getEKK0241D010(param, fixedText, resMap);
			mapper.scResultCheck(param);


			} finally {
				
			// ・セッションハンドル保持域
			if( keepSesHandle.get() != null ){
				keepSesHandle.remove();
			}
		}

		return param;
	}

}