/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：プロジェクト共通
*   モジュール名    ：JTUBatCommon
*   ソースファイル名：JTUBatCommon.java
*   作成者          ：富士通
*   日付            ：2011年05月10日
*＜機能概要＞
*   バッチ部品のアクセッサークラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者		修正内容
*   v3.00.00    2011/05/10   FJ) 北村	新規作成
*	v4.00.00    2012/06/12   FJ) 北村	住所編集部品呼出部品追加
*	v4.01.00    2012/06/22   FJ) 北村	住所コードチェック部品追加
*	v4.02.00    2012/08/03   FJ) 北村	【TAI-2012-0000094】JBSbatSQLAccessを複数回実行回避対応
*	v5.00.00    2013/09/10   FJ) 高橋	【OM-2013-0001899】
**********************************************************************/
package eo.business.common;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;

import eo.common.constant.JTUStrConst;
import eo.common.util.JTUStringUtil;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.application.JCCbatFrameworkException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonItem;

/**
 * 電話手続システム用バッチ共通アクセッサー部品です。<p>
 * ジョブで実装します。
 * <BR>
 * @author 富士通
 */
public class JTUBatCommon extends JCCBatCommon
{
	
	/**
	 * 値がNullの場合、指定した値を設定する。
	 * <br>
	 * @param checkValue 調整する文字列
	 * @param setValue 設定する値
	 * @return String 設定後の値
	 */
	public static String changeNullValue(Object checkValue, String setValue) 
	{
		return JTUBatStringUtil.changeNullValue(checkValue, setValue);
	}
	
	/**
	 * 電話番号を市外局番、市内局番、加入者番号に分割する。
	 * 
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @param tln 電話番号。数字だけで構成された9桁以上の文字列。
	 * @param dbKyokuNo テーブルアクセスクラス
	 * @return 分割した番号を格納した配列。
	 * @throws Exception
	 */
	public String[] splitTln(JBSbatCommonItem commonItem, String tln, JBSbatSQLAccess dbKyokuNo) throws Exception 
	{
		JTUBatStringUtil stringUtil = new JTUBatStringUtil();
		return stringUtil.splitTln(commonItem, tln, dbKyokuNo);
	}
	
	/**
	 * 電話番号を市外局番、市内局番、加入者番号に分割し、ハイフン編集を行う。
	 * 
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @param tln 電話番号。数字だけで構成された9桁以上の文字列。
	 * @param dbKyokuNo テーブルアクセスクラス
	 * @return 分割した番号をハイフン編集した文字列。
	 * @throws Exception
	 */
	public static String editTln(JBSbatCommonItem commonItem, String tln, JBSbatSQLAccess dbKyokuNo) throws Exception
	{
		JTUBatStringUtil stringUtil = new JTUBatStringUtil();
		return stringUtil.editTln(commonItem, tln, dbKyokuNo);
	}
	
	/**
	 * 日付記号("/",":"," ")削除処理
	 * <br>
	 * @param dateValue 日付書式に変換された文字列
	 * @return String 日付記号を削除した文字列
	 */
	public static String toFormatDateCutSymbl(String dateValue) 
	{
		return JTUBatStringUtil.toFormatDateCutSymbl(dateValue);
	}
	
	/**
	 * ファイルのリネーム処理を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で対象ファイル名、出力ファイル名、出力ディレクトリを設定します。<br>
	 *
	 * 2.引数を元に対象ファイル名を出力ファイル名にリネームします。<br>
	 * 
	 * </pre>
	 * <p>
	 * @param fileName1    対象ファイル名。
	 * @param fileName2    出力ファイル名。
	 * @param fileDir      出力ディレクトリ。
	 * @throws Exception      業務サービス内で発生した例外全般。
	 */
	public static void updateFileName(String fileName1, String fileName2, String fileDir) throws Exception
	{
		JTUBatFileUtil.updateFileName(fileName1, fileName2, fileDir);
	}
	
	/**
	 * ファイルのリネーム処理を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で対象ファイル名、出力ファイル名、出力ディレクトリを設定します。<br>
	 *
	 * 2.引数を元に対象ファイル名を出力ファイル名にリネームします。<br>
	 * 
	 * </pre>
	 * <p>
	 * @param filePath1    対象ファイルパス。
	 * @param filePath2    出力ファイルパス。
	 * @throws Exception      業務サービス内で発生した例外全般。
	 */
	public static void updateFileName(String filePath1, String filePath2) throws Exception
	{
		JTUBatFileUtil.updateFileName(filePath1, filePath2);
	}
	
	/**
	 * チェック対象値がコード名称管理マスタに存在することをチェックします。
	 * <br>
	 * @param commonItem バッチ共通パラメータ電文
	 * @param value チェック対象の値
	 * @param groupCode コード種別
	 * @param dbCdNmKanri テーブルアクセスクラス
	 * @return チェックOKの場合true, チェックNGの場合false
	 * @throws Exception
	 */
	public static boolean isCodeMaster(JBSbatCommonItem commonItem, String value, String groupCode, JBSbatSQLAccess dbCdNmKanri) throws Exception 
	{
		JTUBatCheckUtil checkUtil = new JTUBatCheckUtil();
		return checkUtil.isCodeMaster(commonItem, value, groupCode, dbCdNmKanri);
	}
	
	/**
	 * 文字列を指定されたサイズ分取得します。
	 * <br>
	 * @param arg0 調整前の文字列
	 * @param arg1 指定サイズ（バイト数）
	 * @param arg2 文字コード（ＯＳ準拠の場合は""（空）を指定）
	 * @return String 調整後の文字列
	 * @throws UnsupportedEncodingException 文字列サイズ調整処理にて、例外が発生した場合
	 */
	public static String cutStrValue(String arg0, int arg1, String arg2) throws UnsupportedEncodingException
	{
		return JTUBatStringUtil.cutStrValue(arg0, arg1, arg2);
	}
	
	/**
	 * FTPクライアントのPUT処理です。<br>
	 * FTPクライアントのPUTを行います。<br>
	 * 
	 * @param arg0 業務共通電文
	 * @param arg1 FTP転送対象のファイルリスト(ローカルのフルパス)
	 * @param arg2 FTP転送依頼するインターフェイスID
	 * @param arg3 ESB種別。1:ISI(定数JCCModelCommon.ISI) 2:III(定数JCCModelCommon.III)
	 * @throws Exception
	 */
	public static void putFTP(JBSbatCommonItem arg0, ArrayList<String> arg1,
			String arg2, int arg3) throws Exception
	{
		// 処理結果詳細を格納したHashMap
		HashMap<String, Object> resultDtl = new HashMap<String, Object>();
		
		if(!putFTP(arg0, arg1, arg2, arg3, resultDtl))
		{
			ArrayList<HashMap<String, Object>> errDtlAry = new ArrayList<HashMap<String, Object>>();
			HashMap<String, Object> errDtlMap = new HashMap<String, Object>();
			if(Integer.parseInt(resultDtl.get("ERR_KBN").toString()) == JTUStrConst.FTP_SEND_CONNECT_ERR)
			{
				errDtlMap = (HashMap<String, Object>)resultDtl.get("CONNECT_ERR");
			}
			else if(Integer.parseInt(resultDtl.get("ERR_KBN").toString()) == JTUStrConst.FTP_SEND_FILE_ERR)
			{
				errDtlAry = (ArrayList)resultDtl.get("FILE_ERR");
				errDtlMap = errDtlAry.get(0);
			}
			
			// FTP転送失敗した場合
			throw new JBSbatBusinessException("ETUB0240CH", new String[]{
												(String)errDtlMap.get("ERR_CD"), 
												(String)errDtlMap.get("ERR_MESSAGE")});
		}
	}
	
	/**
	 * 日付オブジェクトを指定された形式の文字列に編集します。
	 * <br>
	 * @param arg0 編集する日付オブジェクト
	 * @param arg1 java.util.Date型の日付書式
	 * @param arg2 編集する文字列の日付書式
	 * @return String 指定された形式に編集された文字列
	 */
	public static String toFormatDate(String arg0, String arg1, String arg2) 
	{
		return JTUBatStringUtil.toFormatDate(arg0, arg1, arg2);
	}
	
	/**
	 * 件数、フラグファイル作成処理<br>
	 * <p>
	 * @param cntTargetFile    件数調査ファイル(フルパス)
	 * @param cntFlgFile    件数フラグファイル名(拡張子なし)
	 * @param defFileId    定義ファイルID
	 * @return fileList   出力ファイルリスト
	 * @throws Exception    業務サービス内で発生した例外全般。
	 */
	public static ArrayList<String> createCntFlgFile(String cntTargetFile, String cntFlgFile, String defFileId) throws Exception
	{
		return JTUBatFileUtil.createCntFlgFile(cntTargetFile, cntFlgFile, defFileId);
	}
	
	/**
	 * 件数、フラグファイル作成処理<br>
	 * <p>
	 * @param fileRecordCnt    ファイルレコード件数
	 * @param cntFlgFile    件数フラグファイル名(拡張子なし)
	 * @param encode    文字コード（ＯＳ準拠の場合は""（空）を指定）
	 * @param linefeed    改行コード（ＯＳ準拠の場合は""（空）を指定）
	 * @return fileList   出力ファイルリスト
	 * @throws Exception    業務サービス内で発生した例外全般。
	 */
	public static ArrayList<String> createCntFlgFile(int fileRecordCnt, String cntFlgFile, String encode, String linefeed) throws Exception
	{
		return JTUBatFileUtil.createCntFlgFile(fileRecordCnt, cntFlgFile, encode, linefeed);
	}
	
	/**
	 * 自社通信事業者コード取得部品
	 * <br>
	 * @param commonItem バッチ共通パラメータ電文
	 * @param dbTushinJgyosha テーブルアクセスクラス
	 * @return 通信事業者コード
	 * @throws Exception      業務サービス内で発生した例外全般。
	 */
	public static String getJishaTsjgsCd(JBSbatCommonItem commonItem, JBSbatSQLAccess dbTushinJgyosha) throws Exception 
	{
		JTUBatGetValueUtil getValueUtil = new JTUBatGetValueUtil();
		return getValueUtil.getJishaTsjgsCd(commonItem, dbTushinJgyosha);
	}
	
	/**
	 * 業務パラメータ設定値取得部品
	 * <br>
	 * @param commonItem バッチ共通パラメータ電文
	 * @param workParamSetteValue 業務パラメータID
	 * @param dbWorkParamKnri テーブルアクセスクラス
	 * @return 業務パラメータ設定値
	 * @throws Exception      業務サービス内で発生した例外全般。
	 */
	public static String getWorkParamSetteValue(JBSbatCommonItem commonItem, String workParamSetteValue, JBSbatSQLAccess dbWorkParamKnri) throws Exception 
	{
		JTUBatGetValueUtil getValueUtil = new JTUBatGetValueUtil();
		return getValueUtil.getWorkParamSetteValue(commonItem, workParamSetteValue, dbWorkParamKnri);
	}
	
	/**
	 * 住所編集パターン01を返します。
	 * <br>
	 * @param stateNm 都道府県名
	 * @param cityNm 市区町村名
	 * @param oaztsuNm 大字通称名
	 * @param azchoNm 字丁目名
	 * @param bnchigo 番地号
	 * @param adrttm 住所補記・建物名
	 * @param adrrm 住所補記・部屋番号
	 * @return 引数の連結値
	 */
	public static String getPtn01(String stateNm, String cityNm, String oaztsuNm, String azchoNm, String bnchigo, String adrttm, String adrrm) 
	{
		return JTUStringUtil.getPtn01(stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm);
	}
	
	/**
	 * 住所コードチェック処理
	 * <br>
	 * @param adCd 住所コード
	 * @return チェックOKの場合true, チェックNGの場合false
	 */
	public static boolean isAdCd(String adCd)
	{
		return JTUBatCheckUtil.isAdCd(adCd);
	}
	
	/**
	 * ファイル登録処理<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.ファイル登録処理を呼び出す。<br>
	 * </pre>
	 * <p>
	 * @param commonItem    バッチ共通パラメータ電文
	 * @param trnKanriNo    処理管理番号
	 * @param dataCnt    データ件数
	 * @param fileCd    ファイルコード
	 * @param fileDir    ファイルディレクトリ
	 * @param fileName    ファイル名
	 * @param fileDelYmd    ファイル削除年月日
	 * @param dbDlFileKanri    テーブルアクセスクラス
	 * @param isCompress    圧縮実行フラグ
	 * @throws JCCbatFrameworkException, Exception      業務サービス内で発生した例外全般。
	 */
	public static void createFile(JBSbatCommonItem commonItem, String trnKanriNo, Long dataCnt,
									String fileCd, String fileDir, String fileName, String fileDelYmd,
									JBSbatSQLAccess dbDlFileKanri, boolean isCompress) throws JCCbatFrameworkException, Exception
	{
		JTUBatFileUtil fileUtil = new JTUBatFileUtil();
		fileUtil.createFile(commonItem, trnKanriNo, dataCnt, fileCd, fileDir, fileName, fileDelYmd, dbDlFileKanri, isCompress);
	}
	
	/**
	 * 半角英数字を全角に変換した結果を
	 * 「変換された文字列」として、返却します。
	 * <br>
	 * @param convStr 変換する文字列
	 * @return String 変換された文字列
	 * @throws UnsupportedEncodingException 
	 */
	public static String convertHalfToZen(String convStr) throws Exception
	{
		return JTUBatStringUtil.convertHalfToZen(convStr);
	}
}
