/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JCHCHSV0007MappingParts
*   ソースファイル名：JCHCHSV0007MappingParts.java
*   作成者          ：富士通
*   日付            ：2011年08月10日
*＜機能概要＞
*   料金変更サービスのBPマッピング呼出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/08/10	富士通		新規作成
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.HashMap;

import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadOnly;

import eo.common.constant.JACStrConst;

/**
 * 料金変更サービスにおけるBP-サービスIFマッピング処理で呼び出される部品です。<p>
 * <BR>
 * @author 富士通
 */
public class JCHCHSV0019MappingParts {

	/** 最大長(料金コースコード) */
	private static final int MAX_LEN_PCRS_CD = 3;

	/** 最大長(料金サービスコード) */
	private static final int MAX_LEN_PRC_SVC_CD = 12;

	/**
	 * 請求一意照会サービスインターフェイスの上りに
	 * マッピングする請求番号を請求一覧照会サービスインターフェース
	 * の下り明細の先頭行から取得します。
	 * <br>
	 * @param param リクエストパラメータ操作クラス
	 * @return seiky_no
	 * @throws RequestParameterException 
	 */
	public static String getSeikyNo_CHSV001906SC_UP(IRequestParameterReadOnly param) throws RequestParameterException {

		// 請求一意照会マップ取得
		HashMap dataMap = null;
		String strSeikNo = null;

		// ＫＥＹ＿請求番号取得
		try
		{
			dataMap = (HashMap)param.getData("CHSV001906SC");

			// 判定
			if(dataMap.get("key_seiky_no") != null && !JACStrConst.KARA_MOJI.equals(dataMap.get("key_seiky_no")))
			{
				return dataMap.get("key_seiky_no").toString();
			}
		}
		catch (RequestParameterException ex)
		{
			throw ex;
		}

		// 請求番号（請求一覧照会より取得）
		strSeikNo = JCHBPCommon.getBPListValueString(param,"CHSV001905SC", "ECH0051B010CBSMsg1List", 0, "seiky_no");

		return strSeikNo;
	}

	/**
	 * 請求一意照会サービスインターフェイスの上りに
	 * マッピングする請求番号を請求一覧照会サービスインターフェース
	 * の下り明細の先頭行から取得します。
	 * <br>
	 * @param param リクエストパラメータ操作クラス
	 * @return seiky_no
	 * @throws RequestParameterException 
	 */
	public static String getSeikyYm_CHSV001906SC_UP(IRequestParameterReadOnly param) throws RequestParameterException {

		// 請求一意照会マップ取得
		HashMap dataMap = null;
		String strSeikNo = null;

		// ＫＥＹ＿請求番号取得
		try
		{
			dataMap = (HashMap)param.getData("CHSV001906SC");

			// 判定
			if(dataMap.get("key_seiky_ym") != null && !JACStrConst.KARA_MOJI.equals(dataMap.get("key_seiky_ym")))
			{
				return dataMap.get("key_seiky_ym").toString();
			}
		}
		catch (RequestParameterException ex)
		{
			throw ex;
		}

		// 請求番号（請求一覧照会より取得）
		strSeikNo = JCHBPCommon.getBPListValueString(param,"CHSV001905SC", "ECH0051B010CBSMsg1List", 0, "seiky_ym");

		return strSeikNo;
	}

	/**
	 * 債権一覧照会サービスインターフェイスの上りに
	 * マッピングする請求年月を請求一覧照会サービスインターフェース
	 * の下り明細の先頭行から取得します。
	 * <br>
	 * @param param リクエストパラメータ操作クラス
	 * @return seiky_ym
	 * @throws RequestParameterException 
	 */
	public static String getSeikyYm_CHSV001907SC_UP(IRequestParameterReadOnly param) throws RequestParameterException {

		// 債権一意照会マップ取得
		HashMap dataMap = null;
		String strSeikYm = null;

		// ＫＥＹ＿請求年月取得
		try
		{
			dataMap = (HashMap)param.getData("CHSV001907SC");

			// 判定
			if(dataMap.get("key_seiky_ym") != null && !JACStrConst.KARA_MOJI.equals(dataMap.get("key_seiky_ym")))
			{
				return dataMap.get("key_seiky_ym").toString();
			}
		}
		catch (RequestParameterException ex)
		{
			throw ex;
		}

		// 請求年月（請求一覧照会より取得）
		strSeikYm = JCHBPCommon.getBPListValueString(param, "CHSV001905SC", "ECH0051B010CBSMsg1List", 0, "seiky_ym");

		return strSeikYm;
	}

	/**
	 * 請求一意照会サービスインターフェイスの上りに
	 * マッピングする請求番号を請求一覧照会サービスインターフェース
	 * の下り明細の先頭行から取得します。
	 * <br>
	 * @param param リクエストパラメータ操作クラス
	 * @return seiky_no
	 * @throws RequestParameterException 
	 */
	public static String getSeikyYm_CHSV001908SC_UP(IRequestParameterReadOnly param) throws RequestParameterException {

		// 請求一意照会マップ取得
		HashMap dataMap = null;
		String strSeikNo = null;

		// ＫＥＹ＿請求番号取得
		try
		{
			dataMap = (HashMap)param.getData("CHSV001908SC");

			// 判定
			if(dataMap.get("key_seiky_ym") != null && !JACStrConst.KARA_MOJI.equals(dataMap.get("key_seiky_ym")))
			{
				return dataMap.get("key_seiky_ym").toString();
			}
		}
		catch (RequestParameterException ex)
		{
			throw ex;
		}

		// 請求番号（請求一覧照会より取得）
		strSeikNo = JCHBPCommon.getBPListValueString(param,"CHSV001905SC", "ECH0051B010CBSMsg1List", 0, "seiky_ym");

		return strSeikNo;
	}

	/**
	 * 請求内訳一覧照会サービスインターフェイスの上りに
	 * マッピングする請求年月を請求一覧照会サービスインターフェース
	 * の下り明細の先頭行から取得します。
	 * <br>
	 * @param param リクエストパラメータ操作クラス
	 * @return seiky_ym
	 * @throws RequestParameterException 
	 */
	public static String getSeikyYm_CHSV001912SC_UP(IRequestParameterReadOnly param) throws RequestParameterException {

		HashMap dataMap = null;
		String strSeikYm = null;

		// ＫＥＹ＿請求年月取得
		try
		{
			dataMap = (HashMap)param.getData("CHSV001912SC");

			// 判定
			if(dataMap.get("key_seiky_ym") != null && !JACStrConst.KARA_MOJI.equals(dataMap.get("key_seiky_ym")))
			{
				return dataMap.get("key_seiky_ym").toString();
			}
		}
		catch (RequestParameterException ex)
		{
			throw ex;
		}

		// 請求年月（請求一覧照会より取得）
		strSeikYm = JCHBPCommon.getBPListValueString(param, "CHSV001905SC", "ECH0051B010CBSMsg1List", 0, "seiky_ym");

		return strSeikYm;
	}

	/**
	 * 料金項目出力名称一覧照会サービスインターフェイスの上りに
	 * マッピングする料金コースコードを料金項目出力名称一覧照会マップ(ユーザリクエスト値)、
	 * または料金コース一覧照会（サービス契約番号）サービスインターフェース
	 * の下り明細の先頭行から取得する。
	 * ユーザリクエスト値、料金コース一覧照会の何れからも取得できない場合は、
	 * 指定値がないものとして、空文字(料金コースコードの最大桁)を取得する。
	 * <br>
	 * @param param             リクエストパラメータ操作クラス
	 * @param scNamePrcKmk      料金項目出力名称一覧照会SC名
	 * @param itemNamePcrsCdKey 料金コースコードキー項目名(料金項目出力名称一覧照会)
	 * @param scNamePcrs        料金コース一覧照会SC名
	 * @param listNamePcrs      料金コース一覧照会明細名
	 * @param itemNamePcrsCd    料金コースコード項目名(料金コース一覧照会)
	 * @return 料金コースコード 
	 * @throws RequestParameterException 
	 */
	public static String getPcrsCd(IRequestParameterReadOnly param, String scNamePrcKmk, String itemNamePcrsCdKey,
									String scNamePcrs, String listNamePcrs, String itemNamePcrsCd) throws RequestParameterException {
		String pcrsCd = null;
		
		// 料金項目出力名称一覧照会マップより料金コースコードを取得する
		HashMap dataMap = (HashMap)param.getData(scNamePrcKmk);
		if (dataMap != null)
		{
			String keyPcrsCd = (String)dataMap.get(itemNamePcrsCdKey);
			if (keyPcrsCd != null && "".equals(keyPcrsCd) == false)
			{
				pcrsCd = keyPcrsCd;
			}
		}
		
		// マップより取得できなかった場合、料金コース一覧照会下り先頭行より料金コースコードを取得する
		if (pcrsCd == null)
		{
			try
			{
				pcrsCd = JPCBPCommon.getBPListValueString(param, scNamePcrs, listNamePcrs, 0, itemNamePcrsCd);
			}
			catch (NullPointerException ex)
			{
				pcrsCd = null;
			}
		}
		
		// マップ、料金コース一覧より取得できなかった場合、半角スペース文字を返却する
		if (pcrsCd == null)
		{
			pcrsCd = padLeft("", JACStrConst.SPACE_1, MAX_LEN_PCRS_CD);
		}
		
		return pcrsCd;
	}
	
	/**
	 * 料金項目出力名称一覧照会サービスインターフェイスの上りに
	 * マッピングする料金サービスコードを料金項目出力名称一覧照会マップ(ユーザリクエスト値)、
	 * または料金サービス一覧照会(キャンペーン情報一覧照会)サービスインターフェース
	 * の下り明細の先頭行から取得する。
	 * ユーザリクエスト値、料金サービス一覧照会の何れからも取得できない場合は、
	 * 指定値がないものとして、空文字(料金サービスコードの最大桁)を取得する。
	 * <br>
	 * @param param               リクエストパラメータ操作クラス
	 * @param scNamePrcKmk        料金項目出力名称一覧照会SC名
	 * @param itemNamePrcSvcCdKey 料金コースコードキー項目名(料金項目出力名称一覧照会)
	 * @param scNamePrcSvc        料金サービス一覧照会SC名
	 * @param listNamePrcSvc      料金サービス一覧照会明細名
	 * @param itemNamePrcSvcCd    料金サービスコード項目名(料金サービス一覧照会)
	 * @return 料金サービスコード 
	 * @throws RequestParameterException 
	 */
	public static String getPrcSvcCd(IRequestParameterReadOnly param, String scNamePrcKmk, String itemNamePrcSvcCdKey,
									String scNamePrcSvc, String listNamePrcSvc, String itemNamePrcSvcCd) throws RequestParameterException {
		String prcSvcCd = null;
		
		// 料金項目出力名称一覧照会マップより料金サービスコードを取得する
		HashMap dataMap = (HashMap)param.getData(scNamePrcKmk);
		if (dataMap != null)
		{
			String keyPrcSvcCd = (String)dataMap.get(itemNamePrcSvcCdKey);
			if (keyPrcSvcCd != null && "".equals(keyPrcSvcCd) == false)
			{
				prcSvcCd = keyPrcSvcCd;
			}
		}
		
		// マップより取得できなかった場合、料金コース一覧照会下り先頭行より料金コースコードを取得する
		if (prcSvcCd == null)
		{
			try
			{
				prcSvcCd = JPCBPCommon.getBPListValueString(param, scNamePrcSvc, listNamePrcSvc, 0, itemNamePrcSvcCd);
			}
			catch (NullPointerException ex)
			{
				prcSvcCd = null;
			}
		}
		
		// マップ、料金コース一覧より取得できなかった場合、半角スペース文字を返却する
		if (prcSvcCd == null)
		{
			prcSvcCd = padLeft("", JACStrConst.SPACE_1, MAX_LEN_PRC_SVC_CD);
		}
		
		return prcSvcCd;
	}
	
	/**
	 * 指定された文字列に対して、指定された長さになるまで左側に文字を埋めます。
	 * <br>
	 * @param source   対象文字列
	 * @param value    埋める文字
	 * @param length   長さ
	 * @return         結果文字列  
	 */
	private static String padLeft(String source, String value, int length)
	{
		StringBuffer editor = new StringBuffer(source);
		
		int len = 0;
		if (source != null)
		{
			len = source.length();
		}
		
		if (len < length)
		{
			int padLen = length - len;
			for (int i = 0; i < padLen; i++)
			{
				editor.insert(0, value);
			}
		}
		
		return editor.toString();
	}
}
