/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JCCCrecardNmChgeCC
*	ソースファイル名：JCCCrecardNmChgeCC.java
*	作成者			：FJ
*	日付			：2025/04/25
*＜機能概要＞
*	クレジットカード名称変換の共通コンポーネント
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*   v75.00.00   2025/04/25  FJ）中川    【ANK-4619-00-00】3Dセキュア対応
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.HashMap;

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;

import eo.common.util.JKKStringConverter;
import eo.common.util.JKKStringUtil;

/**
 * クレジットカード名称変換の共通コンポーネントクラスです。
 * <br>
 * @author 富士通
 *
 */
public class JCCCrecardNmChgeCC extends AbstractCommonComponent
{
	
	/**
	 * クレジットカード名称変換を行う。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @return リクエストパラメータ
	 * @throws Throwable 例外が発生した場合
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite execute(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
	throws Throwable
	{
		String dataMapKey = fixedText;
		
		// クレジットカード名称変換CCマップ
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		if (ccMsg == null)
		{
			return param;
		}
		
		// 入力カナ名(変更前)
		String inKanaBf = (String)ccMsg.get("in_kana_bf");
		
		// 入力カナ名(変更後)
		String inKanaAf = (String)ccMsg.get("in_kana_af");
		
		// 入力ローマ字(変更前)
		String inRomajiBf = (String)ccMsg.get("in_romaji_bf");
		
		// 入力ローマ字(変更後)
		String inRomajiAf = (String)ccMsg.get("in_romaji_af");
		
		// 出力カナ名
		String outKana = inKanaAf;
		
		// 入力ローマ字(変更後)が未設定の場合、処理を終了する。
		if (JKKStringUtil.isNullBlank(inRomajiAf))
		{
			ccMsg.put("out_kana", outKana);
			ccMsg.put("out_romaji", inRomajiAf);
			return param;
		}
		
		// 入力ローマ字(変更前)と入力ローマ字(変更後)が異なっており、かつ入力カナ名(変更前)と入力カナ名(変更後)が同一、もしくは入力カナ名(変更後)が空欄の場合
		// もしくは入力ローマ字(変更前)と入力ローマ字(変更後)が同一で、かつ入力カナ名(変更後)が空欄の場合
		if ((!(inRomajiAf.equals(inRomajiBf))
				&& (!(JKKStringUtil.isNullBlank(inKanaBf)) && !(JKKStringUtil.isNullBlank(inKanaAf)) && inKanaBf.equals(inKanaAf))
				|| JKKStringUtil.isNullBlank(inKanaAf))
				|| (inRomajiAf.equals(inRomajiBf) && JKKStringUtil.isNullBlank(inKanaAf)))
		{
			// 入力ローマ字(変更後)を全角に変換して出力カナ名に設定する。
			outKana = JKKStringConverter.convertFullMark(inRomajiAf);
		}
		
		// 出力カナ名、出力ローマ字をCCマップに設定する。
		ccMsg.put("out_kana", outKana);
		ccMsg.put("out_romaji", inRomajiAf);
		
		return param;
	}
}