/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUBaseCC
*   ソースファイル名：JFUBaseCC.java
*   作成者          ：富士通
*   日付            ：2011年08月23日
*＜機能概要＞
*   フロント基底コモンコンポーネント部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/08/23   FJ）中谷    新規作成
*   v3.00.00    2012/03/01   FJ) 中谷    変更【ANK-0041-00-00】申込完了メール対応(サービスIF実行メソッド(複数明細対応)追加)
*   v3.00.01    2012/03/28   FJ) 中谷    変更【ANK-0033-00-00】コース変更中のファミリーＰ申込受付(メソッド(isBlank)追加)
*   
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.HashMap;
import java.util.List;

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.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.model.base.CAANMsg;

/**
 * フロント基底コモンコンポーネント部品
 * 
 * <br>
 * @author 富士通
 */
@SuppressWarnings("unchecked")
public abstract class JFUBaseCC extends AbstractCommonComponent
{
	/** テンポラリテンプレート領域キー識別子 */
	protected static final String TEMP_TEMPLATE_PRIFIX = "TEMP_TEMPLATE_";
	/** テンポラリテンプレート領域キー識別子区切文字 */
	protected static final String TEMP_TEMPLATE_PRIFIX_SEP = "_";
	/** 空文字 */
	protected static final String BLANK = "";
	/** リターンコード(正常)  */
	protected static final int RETURN_CODE_NORMAL = 0;
	/** SC呼出制御キー(検索エラーなし) */
	protected static final String IGNORE_SEARCH_ERR = "ignore_search_err";
	/** 検索処理パターン(一括) */
	protected static final String SEARCH_TYPE_IKT = "1";

	/**
	 * サービスコンポーネント実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 * 
	 * @param param リクエストパラメータ
	 * @param templates テンプレート
	 * @param returnCode リターンコード
	 * @return リクエストパラメータ管理クラス
	 * @throws RequestParameterException
	 */
	public final IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)
			throws RequestParameterException
	{
		return JFUBPCommon.editErrorInfo(param, templates, returnCode);
	}

	/**
	 * チェック処理
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	public abstract HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception;

	/**
	 * チェック処理
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param templateId テンプレートID
	 * @param templateIdDetail テンプレートID(明細)
	 * @param inColumnList IN項目リスト
	 * @return チェック処理用マップ
	 * @throws Exception 
	 */
	protected HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String templateId,
			String templateIdDetail, List<String> inColumnList) throws Exception
	{
		return JFUBPCommon.getInvokeCBS(handle, param, fixedText, templateId, templateIdDetail, inColumnList);
	}

	/**
	 * サービスIF実行
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param templateId テンプレートID
	 * @param templateIdDetail テンプレートID(明細)
	 * @param inColumnList IN項目リスト
	 * @param errorColumn エラー項目
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception
	 */
	protected IRequestParameterReadWrite executeSC(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String templateId,
			String templateIdDetail, List<String> inColumnList, String errorColumn) throws Exception
	{
		return JFUBPCommon.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 IRequestParameterReadWrite executeSC(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String templateId,
			List<String> templateIdDetailList, List<String> inColumnList, String errorColumn) throws Exception
	{
		return JFUBPCommon.executeSC(handle, param, fixedText, templateId, templateIdDetailList, inColumnList, errorColumn);
	}

	/**
	 * 機能コード設定
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param funcCode 機能コード
	 * @throws RequestParameterException
	 */
	protected void setFuncCode(IRequestParameterReadWrite param, String fixedText, String funcCode) throws RequestParameterException
	{
		// ユーザデータに機能コードを設定
		JFUBPCommon.setFuncCode(param, fixedText, funcCode);
	}

	/**
	 * 機能コード取得
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return 機能コード
	 * @throws RequestParameterException
	 */
	protected String getFuncCode(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		// 機能コード
		return JFUBPCommon.getFuncCode(param, fixedText);
	}

	/**
	 * 一時領域のテンプレート値取得
	 * 
	 * <br>
	 * @param dataMap ユーザデータ
	 * @param parentKey テンプレート取得キー
	 * @param columnKey 項目キー
	 * @return 一時領域のテンプレート値
	 */
	protected String getTemplateValue(HashMap dataMap, String parentKey, String columnKey)
	{
		// 機能コード
		return JFUBPCommon.getTemplateValue(dataMap, parentKey, columnKey);
	}

	/**
	 * 一時領域のテンプレート値取得(明細部)
	 * 
	 * <br>
	 * @param dataMap ユーザデータ
	 * @param parentKey テンプレート取得キー
	 * @param listKey  テンプレート取得キー(明細部)
	 * @param columnKey 項目キー
	 * @param index 配列番号
	 * @return 一時領域のテンプレート値(明細部)
	 */
	protected String getTemplateListValue(HashMap dataMap, String parentKey, String listKey, String columnKey, int index)
	{
		return JFUBPCommon.getTemplateListValue(dataMap, parentKey, listKey, columnKey, index);
	}

	/**
	 * 一時領域のテンプレートマップ取得(明細部)
	 * <br>
	 * @param dataMap ユーザデータ
	 * @param parentKey テンプレート取得キー
	 * @param listKey  テンプレート取得キー(明細部)
	 * @param index 配列番号
	 * @return 一時領域のテンプレートマップ
	 */
	protected HashMap getTemplateListMap(HashMap dataMap, String parentKey, String listKey, int index)
	{
		return JFUBPCommon.getTemplateListMap(dataMap, parentKey, listKey, index);
	}

	/**
	 * 一時領域のテンプレート明細リスト取得
	 * <br>
	 * @param dataMap ユーザデータ
	 * @param parentKey テンプレート取得キー
	 * @param listKey  テンプレート取得キー(明細部)
	 * @return 一時領域のテンプレート明細リスト
	 */
	protected List<HashMap> getTemplateList(HashMap dataMap, String parentKey, String listKey)
	{
		return JFUBPCommon.getTemplateList(dataMap, parentKey, listKey);
	}

	/**
	 * 最大のSC実行結果取得キー取得
	 * <br>
	 * @param dataMap ユーザデータ
	 * @param parentBaseKey テンプレート取得キー(通番なし)
	 * @return 最大のSC実行結果取得キー
	 */
	protected String getMaxTempTempleteKey(HashMap dataMap, String parentBaseKey)
	{
		return JFUBPCommon.getMaxTempTempleteKey(dataMap, parentBaseKey);
	}

	/**
	 * 一時領域のテンプレート明細存在チェック
	 * <br>
	 * @param dataMap ユーザデータ
	 * @param parentKey テンプレート取得キー
	 * @param listKey  テンプレート取得キー(明細部)
	 * @return true:存在 false:未存在
	 */
	protected boolean isExistsTemplateDetail(HashMap dataMap, String parentKey, String listKey)
	{
		return JFUBPCommon.isExistsTemplateDetail(dataMap, parentKey, listKey);
	}

	/**
	 * 一時領域の一括削除
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @throws RequestParameterException
	 */
	protected void deleteTempArea(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		JFUBPCommon.deleteTempArea(param, fixedText);
	}

	/**
	 * ユーザーデータの初期化
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param columnList 項目リスト
	 * @throws RequestParameterException
	 */
	protected void initData(IRequestParameterReadWrite param, String fixedText, List<String> columnList) throws RequestParameterException
	{
		JFUBPCommon.initData(param, fixedText, columnList);
	}

	/**
	 * 検索エラーなし設定
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @throws RequestParameterException
	 */
	protected void ignoreSearchError(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		JFUBPCommon.ignoreSearchError(param, fixedText);
	}

	/**
	 * 関連チェックエラー情報設定
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param templateId テンプレートID
	 * @param errColumn エラー項目
	 * @param fixedText サービスメッセージ
	 * @throws RequestParameterException 
	 */
	protected void setRelationErrorInfo(IRequestParameterReadWrite param, String templateId, String errColumn, String fixedText)
			throws RequestParameterException
	{
		JFUBPCommon.setRelationErrorInfo(param, templateId, errColumn, fixedText);
	}

	/**
	 * マップのコピー
	 * 
	 * <br>
	 * @param dest 先のマップ
	 * @param org 元のマップ
	 */
	protected void copyProperties(HashMap dest, HashMap org)
	{
		JFUBPCommon.copyProperties(dest, org);
	}
}
