/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKBPActCommon
*	ソースファイル名：JKKBPActCommon.java
*	作成者			：富士通
*	日付			：2010年08月27日
*＜機能概要＞
*	顧客契約ファミリーパック用ＢＰ共通アクセッサー部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00    2013/01/15   FJ          新規作成 ANK-1276-00-00
*   
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.text.ParseException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadOnly;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.values.MessageID;
import com.fujitsu.futurity.common.JSYLogBase;
import com.fujitsu.futurity.common.JSYbpmLog;
import com.fujitsu.futurity.model.base.CAANMsg;

import eo.common.constant.JKKFamiilyPackConst;
import eo.common.util.JKKCommonActUtil;

/**
 * ファミリーパックＢＰ共通アクセッサー部品
 * <br>
 * @author 富士通
 */
@SuppressWarnings("unchecked")
public class JKKBPActCommon extends JPCBPCommon
{

	/**
	 * null値変換処理
	 * <br>
	 * @param arg 引数
	 * @return 引数がnullの場合はnull、null以外の場合は引数を返却する。
	 */
	public static String nvl(String arg)
	{
		return JKKCommonActUtil.nvl(arg, null);
	}

	/**
	 * null値変換処理
	 * <br>
	 * @param arg1 引数１
	 * @param arg2 引数２
	 * @return 引数１がnullの場合は引数２、null以外の場合は引数１を返却する。
	 */
	public static String nvl(String arg1, String arg2)
	{
		return JKKCommonActUtil.nvl(arg1, arg2);
	}

	/**
	 * サービス(SC)項目値取得処理
	 * <br>
	 * @param param リクエストパラメータ
	 * @param scName 取得対象のSC名
	 * @param itemName 取得対象の項目名
	 * @return 取得値がnullの場合はnull、null以外の場合は取得値を返却する。
	 * @throws RequestParameterException RequestParameter用例外クラス 
	 */
	public static String getBPValueString(IRequestParameterReadOnly param, String scName, String itemName) throws RequestParameterException
	{
		return JKKCommonActUtil.getMapValueString((Map<Object, Object>)param.getData(scName), itemName, null);
	}

	/**
	 * サービス(SC)項目値取得処理
	 * <br>
	 * @param param リクエストパラメータ
	 * @param scName 取得対象のSC名
	 * @param itemName 取得対象の項目名
	 * @param value 指定値
	 * @return 取得値がnullの場合は指定値、null以外の場合は取得値を返却する。
	 * @throws RequestParameterException RequestParameter用例外クラス 
	 */
	public static String getBPValueString(IRequestParameterReadOnly param, String scName, String itemName, String value)
			throws RequestParameterException
	{
		return JKKCommonActUtil.getMapValueString((Map<Object, Object>)param.getData(scName), itemName, value);
	}

	/**
	 * オンライン日付(翌月月初)取得処理
	 * <br>
	 * @param arg null or 年月(yyyyMM) or 年月日(yyyyMMdd)
	 * @return String 月末日の年月日
	 * @throws ParseException 
	 */
	public static String getBeginOfNextMonthOnlineDate(String arg) throws ParseException
	{
		return JKKCommonActUtil.getBeginOfNextMonthDate(null == arg ? JKKBPActCommon.getOpeDate(null) : arg);
	}

	/**
	 * 指定日付(翌月月初)取得処理
	 * 指定した年月の翌月月初の年月日を返却します。
	 * <br>
	 * @param arg 年月(yyyyMM) or 年月日(yyyyMMdd)
	 * @return String 月末日付(yyyyMMdd)
	 * @throws ParseException 
	 */
	public static String getBeginOfNextMonthDate(String arg) throws ParseException
	{
		return JKKCommonActUtil.getBeginOfNextMonthDate(arg);
	}

	/**
	 * オンライン日付(当月月末)取得処理
	 * <br>
	 * @param arg null or 年月(yyyyMM) or 年月日(yyyyMMdd)
	 * @return String 月末日の年月日
	 */
	public static String getEndOfMonthOnlineDate(String arg)
	{
		return JKKCommonActUtil.getEndOfMonthDate(null == arg ? JKKBPActCommon.getOpeDate(null) : arg);
	}

	/**
	 * 指定日付(月末)取得処理
	 * 指定した年月の月末日の年月日を返却します。
	 * <br>
	 * @param arg 年月(yyyyMM) or 年月日(yyyyMMdd)
	 * @return String 月末日付(yyyyMMdd)
	 */
	public static String getEndOfMonthDate(String arg)
	{
		return JKKCommonActUtil.getEndOfMonthDate(arg);
	}

	/**
	 * オンライン日付日付(月末加減算)取得処理
	 * 指定した年月の月末日の年月日を返却します。
	 * <br>
	 * @param arg 年月(yyyyMM) or 年月日(yyyyMMdd)
	 * @return String 月末加減算日付(yyyyMMdd)
	 */
	public static String getEndOfMonthAddOnlineDate(String arg0, int arg1)
	{
		return JKKCommonActUtil.getEndOfMonthAddDate((null == arg0 ? JKKBPActCommon.getOpeDate(null) : arg0), arg1);
	}

	/**
	 * 指定日付(月末加減算)取得処理
	 * 指定した年月の月末日の年月日を返却します。
	 * <br>
	 * @param arg 年月(yyyyMM) or 年月日(yyyyMMdd)
	 * @return String 月末加減算日付(yyyyMMdd)
	 */
	public static String getEndOfMonthAddDate(String arg0, int arg1)
	{
		return JKKCommonActUtil.getEndOfMonthAddDate(arg0, arg1);
	}

	/**
	 * バイト配列変換 
	 * 引数の文字列をバイト配列に変換します。
	 * @param str 変換する文字列
	 * @param encoding 変換するエンコーディング
	 * @return 変換されたバイト配列
	 */
	public static byte[] toBytes(String str, String encoding)
	{
		return JDKStirngToBytes.toBytes(str, encoding);
	}

	/**
	 * CSVカラム取得 
	 * 引数の値を文字列に変換後、カンマとダブルクォーテーションを付加して返却します。
	 * @param obj 処理対象オブジェクト
	 * @param topFlg Trueの場合、上1桁目にカンマを付加しない
	 * @return String カンマとダブルクォーテーションを付加した後の文字列
	 */
	public static String getChohyoCsvCol(Object obj, boolean topFlg)
	{
		String val = "";
		if (!JKKCommonActUtil.isNull(obj))
		{
			val = (String)obj;
		}

		if (topFlg == false)
		{
			return JKKFamiilyPackConst.COMMA + JKKCommonActUtil.getStringToDblQuote(val);
		}

		return JKKCommonActUtil.getStringToDblQuote(val);
	}

	/**
	 * 料金シミュレーションＣＣ呼出
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @return リクエストパラメータ
	 * @throws Throwable
	 */
	public static IRequestParameterReadWrite getSrcSimulation(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
			throws Throwable
	{
		JACPrcSimulation cc = new JACPrcSimulation();
		return cc.getPrcSimulation(handle, param, fixedText);
	}

	/**
	 * 初期費用一覧照会部品呼出
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @return リクエストパラメータ
	 * @throws Exception 
	 * @throws Throwable
	 */
	public static IRequestParameterReadWrite getResultData(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		JKKInitialCostShokaiUtil costShokai = new JKKInitialCostShokaiUtil();
		return costShokai.getResultData(handle, param, fixedText);
	}

	/**
	 * オブジェクトに値が設定されているか判定します。
	 * <br>
	 * @param arg0 判定するオブジェクト
	 * @return オブジェクトに値が設定されていない場合はtrue
	 */
	public static boolean isNull(Object arg0)
	{
		return JKKCommonActUtil.isNull(arg0);
	}

	/**
	 * サービスコンポーネント実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 * 
	 * @param param リクエストパラメータ
	 * @param templates テンプレート
	 * @param returnCode リターンコード
	 * @return リクエストパラメータ管理クラス
	 * @throws RequestParameterException
	 */
	public static IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)
			throws RequestParameterException
	{
		return JKKBaseUtil.editErrorInfo(param, templates, returnCode);
	}

	/**
	 * サービスIF実行
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param templateId テンプレートID
	 * @param templateIdDetail テンプレートID(明細)
	 * @param inColumnList IN項目リスト
	 * @param errorColumn エラー項目
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception
	 */
	protected static IRequestParameterReadWrite executeSC(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			String templateId, String templateIdDetail, List<String> inColumnList, String errorColumn) throws Exception
	{
		return JKKBaseUtil.executeSC(handle, param, fixedText, templateId, templateIdDetail, inColumnList, errorColumn);
	}

	/**
	 * サービスIF実行
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param templateId テンプレートID
	 * @param templateIdDetailList テンプレートID(明細)リスト
	 * @param inColumnList
	 * @param errorColumn エラー項目
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception
	 */
	protected static IRequestParameterReadWrite executeSC(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			String templateId, List<String> templateIdDetailList, List<String> inColumnList, String errorColumn) throws Exception
	{
		return JKKBaseUtil.executeSC(handle, param, fixedText, templateId, templateIdDetailList, inColumnList, errorColumn);
	}

	/**
	 * 機能コード設定
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param funcCode 機能コード
	 * @throws RequestParameterException
	 */
	protected static void setFuncCode(IRequestParameterReadWrite param, String fixedText, String funcCode) throws RequestParameterException
	{
		JKKBaseUtil.setFuncCode(param, fixedText, funcCode);
	}

	/**
	 * 機能コード取得
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return 機能コード
	 * @throws RequestParameterException
	 */
	protected static String getFuncCode(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		return JKKBaseUtil.getFuncCode(param, fixedText);
	}

	/**
	 * 一時領域のテンプレート値取得
	 * 
	 * <br>
	 * @param dataMap ユーザデータ
	 * @param parentKey テンプレート取得キー
	 * @param columnKey 項目キー
	 * @return 一時領域のテンプレート値
	 */
	protected static String getTemplateValue(HashMap<String, Object> dataMap, String parentKey, String columnKey)
	{
		return JKKBaseUtil.getTemplateValue(dataMap, parentKey, columnKey);
	}

	/**
	 * 一時領域のテンプレート値取得(明細部)
	 * 
	 * <br>
	 * @param dataMap ユーザデータ
	 * @param parentKey テンプレート取得キー
	 * @param listKey  テンプレート取得キー(明細部)
	 * @param columnKey 項目キー
	 * @param index 配列番号
	 * @return 一時領域のテンプレート値(明細部)
	 */
	protected static String getTemplateListValue(HashMap dataMap, String parentKey, String listKey, String columnKey, int index)
	{
		return JKKBaseUtil.getTemplateListValue(dataMap, parentKey, listKey, columnKey, index);
	}

	/**
	 * 一時領域のテンプレートマップ取得(明細部)
	 * <br>
	 * @param dataMap ユーザデータ
	 * @param parentKey テンプレート取得キー
	 * @param listKey  テンプレート取得キー(明細部)
	 * @param index 配列番号
	 * @return 一時領域のテンプレートマップ
	 */
	protected static HashMap getTemplateListMap(HashMap dataMap, String parentKey, String listKey, int index)
	{
		return JKKBaseUtil.getTemplateListMap(dataMap, parentKey, listKey, index);
	}

	/**
	 * 一時領域のテンプレート明細リスト取得
	 * <br>
	 * @param dataMap ユーザデータ
	 * @param parentKey テンプレート取得キー
	 * @param listKey  テンプレート取得キー(明細部)
	 * @return 一時領域のテンプレート明細リスト
	 */
	protected static List<HashMap> getTemplateList(HashMap dataMap, String parentKey, String listKey)
	{
		return JKKBaseUtil.getTemplateList(dataMap, parentKey, listKey);
	}

	/**
	 * 最大のSC実行結果取得キー取得
	 * <br>
	 * @param dataMap ユーザデータ
	 * @param parentBaseKey テンプレート取得キー(通番なし)
	 * @return 最大のSC実行結果取得キー
	 */
	protected static String getMaxTempTempleteKey(HashMap dataMap, String parentBaseKey)
	{
		return JKKBaseUtil.getMaxTempTempleteKey(dataMap, parentBaseKey);
	}

	/**
	 * 一時領域のテンプレート明細存在チェック
	 * <br>
	 * @param dataMap ユーザデータ
	 * @param parentKey テンプレート取得キー
	 * @param listKey  テンプレート取得キー(明細部)
	 * @return true:存在 false:未存在
	 */
	protected static boolean isExistsTemplateDetail(HashMap dataMap, String parentKey, String listKey)
	{
		return JKKBaseUtil.isExistsTemplateDetail(dataMap, parentKey, listKey);
	}

	/**
	 * 一時領域の一括削除
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @throws RequestParameterException
	 */
	protected static void deleteTempArea(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		JKKBaseUtil.deleteTempArea(param, fixedText);
	}

	/**
	 * ユーザーデータの初期化
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param columnList 項目リスト
	 * @throws RequestParameterException
	 */
	protected static void initData(IRequestParameterReadWrite param, String fixedText, List<String> columnList) throws RequestParameterException
	{
		JKKBaseUtil.initData(param, fixedText, columnList);
	}

	/**
	 * 検索エラーなし設定
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @throws RequestParameterException
	 */
	protected static void ignoreSearchError(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		JKKBaseUtil.ignoreSearchError(param, fixedText);
	}

	/**
	 * 関連チェックエラー情報設定
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param templateId テンプレートID
	 * @param errColumn エラー項目
	 * @param fixedText サービスメッセージ
	 * @throws RequestParameterException 
	 */
	protected static void setRelationErrorInfo(IRequestParameterReadWrite param, String templateId, String errColumn, String fixedText)
			throws RequestParameterException
	{
		JKKBaseUtil.setRelationErrorInfo(param, templateId, errColumn, fixedText);
	}

	/**
	 * マップのコピー
	 * 
	 * <br>
	 * @param dest 先のマップ
	 * @param org 元のマップ
	 */
	protected static void copyProperties(HashMap<String, Object> dest, HashMap<String, Object> org)
	{
		JKKBaseUtil.copyProperties(dest, org);
	}

	/**
	 * チェック処理
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param templateId テンプレートID
	 * @param templateIdDetail テンプレートID(明細)
	 * @param inColumnList IN項目リスト
	 * @return チェック処理用マップ
	 * @throws Exception 
	 */
	protected static HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			String templateId, String templateIdDetail, List<String> inColumnList) throws Exception
	{
		return JKKBaseUtil.getInvokeCBS(handle, param, fixedText, templateId, templateIdDetail, inColumnList);
	}

	/**
	 * デバッグログを出力します。
	 * @param cls クラス
	 * @param debugMsg メッセージ
	 */
	public static void printBpDebugLog(Class cls, String debugMsg)
	{
		JSYbpmLog.println(JSYLogBase.DEBUG, cls, debugMsg, MessageID.DEB_X21_DEBUG_MSG, new String[] { JKKFamiilyPackConst.EMPTY, JKKFamiilyPackConst.EMPTY },
				JKKFamiilyPackConst.EMPTY);
	}

	/**
	 * 宅内機器型式取得処理です。<br>
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @return リクエストパラメータ
	 * @throws Exception 
	 * @throws Throwable
	 */
	public static List<HashMap> getTaknkiki(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		JKKGetTaknkikiModelInfoUtil taknkikiModel = new JKKGetTaknkikiModelInfoUtil();
		/* ユーザデータ情報 */
		HashMap inMap = (HashMap)param.getData(fixedText);

		return taknkikiModel.getTaknkiki(handle, param, inMap);
	}

	/**
	 * 宅内機器型式リスト取得処理(STB用)です。<br>
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @return リクエストパラメータ
	 * @throws Exception 
	 * @throws Throwable
	 */
	public static List<HashMap> getTaknkikiStbList(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		JKKGetTaknkikiModelInfoUtil taknkikiModel = new JKKGetTaknkikiModelInfoUtil();
		/* ユーザデータ情報 */
		HashMap inMap = (HashMap)param.getData(fixedText);

		return taknkikiModel.getTaknkikiStbList(handle, param, inMap);
	}

	/**
	 * サービス契約(HTなど、日割系)のサービス課金終了日を返します。
	 * 
	 * <br>
	 * @param arg パラメータ
	 * @return サービス課金終了日
	 */
	public static String getSvcChrgEndYmdSvcKeiHt(String arg)
	{
		return JKKBaseUtil.getSvcChrgEndYmdSvcKeiHt(arg);
	}
	
	/**
	 * オプションサービス契約(TV以外、月額系)のサービス課金終了日を返します。
	 * 
	 * <br>
	 * @param arg パラメータ
	 * @return サービス課金終了日
	 */
	public static String getSvcChrgEndYmdOp(String arg)
	{
		return JKKBaseUtil.getSvcChrgEndYmdOp(arg);
	}

	/**
	 * オプションサービス契約(TV、月額系)のサービス課金終了日を返します。
	 * 
	 * <br>
	 * @param arg パラメータ
	 * @return サービス課金終了日
	 */
	public static String getSvcChrgEndYmdOpTv(String arg)
	{
		return JKKBaseUtil.getSvcChrgEndYmdOpTv(arg);
	}

	/**
	 * 機器提供サービス契約(レンタル、月額系)のサービス課金終了日を返します。
	 * 
	 * <br>
	 * @param arg パラメータ
	 * @return サービス課金終了日
	 */
	public static String getSvcChrgEndYmdKiki(String arg)
	{
		return JKKBaseUtil.getSvcChrgEndYmdKiki(arg);
	}

	/**
	 * 割引サービス契約(HTなど、日割系)のサービス課金終了日を返します。
	 * 
	 * <br>
	 * @param arg パラメータ
	 * @return サービス課金終了日
	 */
	public static String getSvcChrgEndYmdWribHt(String arg)
	{
		return JKKBaseUtil.getSvcChrgEndYmdWribHt(arg);
	}
}
