/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JCRBPCommon
*   ソースファイル名：JCRBPCommon.java
*   作成者          ：富士通
*   日付            ：2011年07月14日
*＜機能概要＞
*   ＢＰ共通アクセッサー部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/07/14   富士通    新規作成
*   v6.00.00    2013/10/03   FJ)日野   【OM-2013-0002825】
*
**********************************************************************/

package com.fujitsu.futurity.bp.custom.common;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadOnly;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.jcc.util.JCCDateUtil;

import eo.common.util.JCRUtilCommon;



/**
 * ＢＰ共通アクセッサー部品です。<p>
 * サービスで実装します。<p>
 * <BR>
 * @author 富士通
 */
public class JCRBPCommon extends JCCBPCommon
{

	/**
	 * <p>
	 * サービスIFの明細項目から値を取得し、カンマ区切り文字列に変換します
	 * </p>
	 * @param parentTemplate 取得対象のサービスインターフェイス
	 * @param listName 取得対象のリスト名
	 * @param itemName 取得対象の項目名
	 * @return 変換後の文字列
	 */
	public static String editArrayToString(CAANMsg parentTemplate, String listName, String itemName)
	{
		JCRDataEditUtil util = new JCRDataEditUtil();
		return util.editArrayToString(parentTemplate, listName, itemName);

	}
	
	/**
	 * <p>
	 * サービスIFの明細項目から値を取得し、カンマ区切り文字列に変換します（取得数制限あり）
	 * </p>
	 * @param parentTemplate 取得対象のサービスインターフェイス
	 * @param listName 取得対象のリスト名
	 * @param itemName 取得対象の項目名
	 * @param chkVal 必須で取得する値
	 * @param iCnt 値の取得数
	 * @return 変換後の文字列
	 */
	public static String editArrayToString(CAANMsg parentTemplate, String listName, String itemName, String chkVal, int iCnt)
	{
		JCRDataEditUtil util = new JCRDataEditUtil();
		return util.editArrayToString(parentTemplate, listName, itemName, chkVal, iCnt);

	}
	
   /**
    * 
    * @param param リクエストパラメータ
    * @param listNm リスト名
    * @param hashNm ハッシュテーブル名
    * @param itemNm 検索項目名
    * @param retItemNm 返却項目名
    * @param hashNm2 ハッシュテーブル名
    * @param searchItem 検索項目名
    * @return 検索結果
    * @throws RequestParameterException
    */
	public static String getListData(IRequestParameterReadOnly param, String listNm, String hashNm
											, String itemNm, String retItemNm, String hashNm2, String searchItem) throws RequestParameterException
	{
		return JCRDataEditUtil.getListData(param, listNm, hashNm,  itemNm, retItemNm, hashNm2, searchItem);
	}
	
	/**
	 * 
	 * リストに出力するデータを作成します
	 * 
	 * @param param リクエストパラメータ
	 * @param scNm  サービスコンポーネント名
	 * @param listNm リスト名
	 * @param scNm2 サービスコンポーネント名
	 * @param keyItem 取得項目名
	 * @param address1 住所項目名１
	 * @param address2 住所項目名２
	 * @param address3 住所項目名３
	 * @param keyItem2 取得項目名
	 * @param barCode バーコード項目名
	 * @return リスト出力用データ
	 * @throws RequestParameterException
	 * @throws UnsupportedEncodingException 
	 */
	public static byte[] makeListData(IRequestParameterReadOnly param, String scNm,
											String listNm , String scNm2, String[] keyItem, String[] address1, String[] address2, String[] address3, String[] keyItem2, String[] barCode) throws RequestParameterException, UnsupportedEncodingException
	{
		return JCRDataEditUtil.makeListData(param, scNm, listNm, scNm2, keyItem, address1, address2, address3, barCode, keyItem2);
	}

	/**
	 * 
	 * @param param リクエストパラメータ
	 * @param scNm サービスコンポーネント名
	 * @param listNm リスト名
	 * @param scNm2 サービスコンポーネント名
	 * @param zipCode 郵便番号項目名
	 * @param address1 住所項目名１
	 * @param address2 住所項目名２
	 * @param address3 住所項目名３
	 * @param sohusnm 送付先名
	 * @param barCode バーコード項目名
	 * @return ラベル出力用データ
	 * @throws RequestParameterException
	 * @throws UnsupportedEncodingException 
	 */
	public static byte[] makeLabelData(IRequestParameterReadOnly param,String scNm, String listNm, String scNm2, 
			String zipCode, String[] address1, String[] address2, String[] address3, String sohusnm, String[] barCode) throws RequestParameterException, UnsupportedEncodingException
	{
		return JCRDataEditUtil.makeLabelData(param, scNm, listNm, scNm2, zipCode, address1, address2, address3, sohusnm, barCode);
	}

	/**
	 * クエリ項目に関連するカテゴリーレベルを返却します
	 * 
	 * @param itemName クエリ項目
	 * @return カテゴリーレベル
	 */
	public static String getCtgrLv(String itemName)
	{
		return JCRDataEditUtil.getCtgrLv(itemName);
	}

	/**
	 * クエリ項目に関連するコード種別コードを返却します
	 * 
	 * @param itemName クエリ項目
	 * @return コード種別コード
	 */
	public static String getCdSbtCd(String itemName)
	{
		return JCRDataEditUtil.getCdSbtCd(itemName);
	}

	/**
	 * クエリ項目がカテゴリーか判定します
	 * 
	 * @param queryItem クエリ項目
	 * @return true:カテゴリー false:カテゴリー以外
	 */
	public static boolean judgeCtgr(String queryItem)
	{
		return JCRDataEditUtil.judgeCtgr(queryItem);
	}

	/**
	 * クエリ項目がワークグループか判定します
	 * 
	 * @param queryItem クエリ項目
	 * @return true:ワークグループ false:ワークグループ以外
	 */
	public static boolean judgeWkgrp(String queryItem)
	{
		return JCRDataEditUtil.judgeWkgrp(queryItem);
	}

	/**
	 * クエリ項目がコード種別コードか判定します
	 * 
	 * @param queryItem クエリ項目
	 * @return true:コード種別コード false:コード種別コード以外
	 */
	public static boolean judgeCdSbtCd(String queryItem)
	{
		return JCRDataEditUtil.judgeCdSbtCd(queryItem);
	}

	/**
	 * クエリ項目がキューBOXか判定します
	 * 
	 * @param queryItem クエリ項目
	 * @return true:キューBOX false:キューBOX以外
	 */
	public static boolean judgeQbox(String queryItem)
	{
		return JCRDataEditUtil.judgeQbox(queryItem);
	}

	/**
	 * クエリ項目が集約局か判定します
	 * 
	 * @param queryItem クエリ項目
	 * @return true:集約局 false:集約局以外
	 */
	public static boolean judgeSyuyakkyok(String queryItem)
	{
		return JCRDataEditUtil.judgeSyuyakkyok(queryItem);
	}

	/**
	 * あいまい検索ｅｏＩＤ時のｅｏＩＤを設定します
	 * 
	 * @param param リクエストパラメータ
	 * @param searchEoIdMapId あいまい検索マップID
	 * @return eoID
	 * @throws RequestParameterException
	 */
	public static String getFuzzyEoID(IRequestParameterReadOnly param, String searchEoIdMapId) throws RequestParameterException
	{
		return JCRDataEditUtil.getFuzzyEoID(param, searchEoIdMapId);
	}

	/**
	 * 日付に対し、時間の加減算を行い、結果の日付を返します。
	 * <br>
	 * @param workMap 作業領域
	 * @param workMapNm 作業領域名
	 * @param keyItem 取得項目名
	 * @param date 加減算する日付 （８桁、１４桁、１７桁）
	 * @param flag 加算、減算の選択 （true：加算　false：減算）
	 * @return 加減算された日付
	 * @throws RequestParameterException
	 */
	public static String addTime(Map<String, HashMap<String, String>> workMap, String workMapNm, 
									String keyItem, String date, boolean flag) throws RequestParameterException
	{
		// 作業領域データがnullの場合、加減算する日付を返す
		HashMap<String, String> dataMap = (HashMap<String, String>)workMap.get(workMapNm);
		if (dataMap == null)
		{
			return date;
		}

		// 加減算する時間がnullの場合、加減算する日付を返す
		String time = (String)dataMap.get(keyItem);
		if (JCRUtilCommon.isNull(time))
		{
			return date;
		}
		
		return JCCDateUtil.addTime(date, time, flag);
	}
}
