/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：JKKPrintDataUtil
 *   ソースファイル名：JKKPrintDataUtil.java
 *   作成者          ：富士通
 *   日付            ：2012年02月28日
 *＜機能概要＞
 *   サービス層編集部品です。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v3.00.00    2012/02/28   FJ          新規作成
 *  v11.00.00    2014/10/23   FJ)伊藤     【ANK-2332-00-00】,【ANK-2333-00-00】開通証明書発行対応・ID登録証のサンキューレター同梱
 *  v59.00.00	 2022/04/12   FJ)北川     【ANK-3745-00-00】宛名印字ラベル、解約レター送付先住所の建物名部屋番号分割対応
 **********************************************************************/

package com.fujitsu.futurity.bp.custom.common;


import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;

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.common.x01.sc.AttachmentFileMapKeys;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;

import eo.common.util.JPCCommonUtil;
import eo.common.util.JZMAdOutputEdit;


/**
 * サービス層印刷編集部品<p>
 * <BR>
 * @author 富士通
 */
public class JKKPrintDataUtil extends JPCCommonUtil 
{

	/** ダブルクォーテーション */
	private static final char DBL_QUOT_STR = '\"';

	/** 区切り文字の定数 */
	private static final String DELIMITER_STR = ",";

	/** ブランクを確認するための正規表現 */
	private static final String BLANK_CHECK = "[ ]*";

	/** 空文字を定義 */
	private static final String BLANK = "";

	/** 〒番号マーク */
	private static final String POST_MARK = "〒";

	/** ページ内のデータ数 */
	private static final int IN_PAGE_DATA_CNT = 7;

	/** UTF-8 */
	private static final String UTF_8 = "UTF-8";

	/** 出力対象項目名 */
	private static final String ITEM_NAME = "output_chohyo";
	//ANK-3745-00-00 ADD START
	/** 半角スペース */
	protected static final String HANKAKU_SPACE = " ";

	/** 全角スペース */
	protected static final String ZENKAKU_SPACE = "　";
	//ANK-3745-00-00 ADD END

	/***********************************************************************************/
	/** 住所定義                                                                      **/
	/***********************************************************************************/
	/** 住所定義１ */
	private static final String[] ADDR_LIST1 = {
		"tchisho_sohus_pcd",		// 通知書選択リスト.通知書送付先郵便番号
		"tchisho_sohus_state_nm",	// 通知書選択リスト.通知書送付先都道府県名
		"tchisho_sohus_city_nm",	// 通知書選択リスト.通知書送付先市区町村名
		"tchisho_sohus_oaztsu_nm",	// 通知書選択リスト.通知書送付先大字通称名
		"tchisho_sohus_azcho_nm",	// 通知書選択リスト.通知書送付先字丁目名
		"tchisho_sohus_bnchigo",	// 通知書選択リスト.通知書送付先番地号
		"tchisho_sohus_adrttm",		// 通知書選択リスト.通知書送付先住所補記・建物名
		"tchisho_sohus_adrrm",		// 通知書選択リスト.通知書送付先住所補記・部屋番号 
	};
	/** 住所定義２ */
	private static final String[] ADDR_LIST2 = {
		"pcd",						// 通知書選択リスト.郵便番号
		"state_nm",					// 通知書選択リスト.都道府県名
		"city_nm",					// 通知書選択リスト.市区町村名
		"oaztsu_nm",				// 通知書選択リスト.大字通称名
		"azcho_nm",					// 通知書選択リスト.字丁目名
		"tchisho_sohus_bnchigo",	// 通知書選択リスト.通知書送付先番地号
		"tchisho_sohus_adrttm",		// 通知書選択リスト.通知書送付先住所補記・建物名
		"tchisho_sohus_adrrm",		// 通知書選択リスト.通知書送付先住所補記・部屋番号 
	};

	/***********************************************************************************/
	/** ID速報書　項目定義                                                            **/
	/***********************************************************************************/
	/** ID速報書 (3点セット) */
	private static final String[] KKLST0070101 =
	{
		"cust_nm",
		"svc_sta_ymd",
		"seiri_no",
		"eoid",
		"eoid_pwd_kana",
		"shk_eoid_pwd",
		"grp_join_cd",
		"grp_join_cd_pwd_kana",
		"grp_join_cd_pwd",
		"prc_grp_cd_nm_net",
		"isp_ninsho_id_kana",
		"isp_ninsho_id",
		"isp_ninsho_id_pwd_kana",
		"isp_ninsho_id_pwd",
		"mlad",
		"pop_id_pwd_kana",
		"pop_server_nm",
		"web_id",
		"web_id_pwd_kana",
		"web_id_pwd",
		"ftp_server_nm",
		"telno1",
		"telno2",
		"telno_tchi1",
		"telno_tchi2",
		"adpt_saskm1",
		"adpt_saskm2",
		"tel_op_sette_rmts_pwd2",
		"prc_grp_cd_nm_tv",
		"ssid_ieee_kana",			// 非表示項目
		"ssid_ieee",				// 非表示項目
		"ssid_wpa_aes_kana",		// 非表示項目
		"ssid_wpa_aes",				// 非表示項目
		"ssid_wep_kana",			// 非表示項目
		"ssid_wep",					// 非表示項目
		"angoka_key_kana",			// 非表示項目
		"angoka_key",				// 非表示項目
		"shk_eoid",
		"pop_id_pwd",
		"smtp_server_nm",
		"tel_op_sette_rmts_pwd1"
	};

	/** ID速報書 (マンションプライベート) */
	private static final String[] KKLST0070102 =
	{
		"cust_nm",
		"svc_sta_ymd",
		"seiri_no",
		"eoid",
		"shk_eoid",
		"eoid_pwd_kana",
		"shk_eoid_pwd",
		"grp_join_cd",
		"grp_join_cd_pwd_kana",
		"grp_join_cd_pwd",
		"prc_grp_cd_nm_net",
		"isp_ninsho_id_kana",		// 非表示項目
		"isp_ninsho_id",			// 非表示項目
		"isp_ninsho_id_pwd_kana",	// 非表示項目
		"isp_ninsho_id_pwd",		// 非表示項目
		"mlad",
		"pop_id_pwd_kana",
		"pop_id_pwd",
		"pop_server_nm",
		"web_id",
		"web_id_pwd_kana",
		"web_id_pwd",
		"telno1",
		"telno2",
		"telno_tchi1",				// 非表示項目
		"telno_tchi2",				// 非表示項目
		"adpt_saskm1",				// 非表示項目
		"adpt_saskm2",				// 非表示項目
		"tel_op_sette_rmts_pwd1",	// 非表示項目
		"tel_op_sette_rmts_pwd2",	// 非表示項目
		"prc_grp_cd_nm_tv",			// 非表示項目
		"ssid_ieee_kana",			// 非表示項目
		"ssid_ieee",				// 非表示項目
		"ssid_wpa_aes_kana",		// 非表示項目
		"ssid_wpa_aes",				// 非表示項目
		"ssid_wep_kana",			// 非表示項目
		"ssid_wep",					// 非表示項目
		"angoka_key_kana",			// 非表示項目
		"angoka_key",
		"smtp_server_nm",
		"ftp_server_nm"
	};

	/** ID速報書 (eoモバイル) */
	private static final String[] KKLST0070103 =
	{
		"cust_nm",
		"svc_sta_ymd",
		"seiri_no",
		"eoid",
		"shk_eoid",
		"eoid_pwd_kana",
		"shk_eoid_pwd",
		"grp_join_cd",
		"grp_join_cd_pwd_kana",
		"grp_join_cd_pwd",
		"prc_grp_cd_nm_net",
		"isp_ninsho_id_kana",		// 非表示項目
		"isp_ninsho_id",			// 非表示項目
		"isp_ninsho_id_pwd_kana",	// 非表示項目
		"isp_ninsho_id_pwd",		// 非表示項目
		"mlad",
		"pop_id_pwd_kana",
		"pop_id_pwd",
		"pop_server_nm",
		"smtp_server_nm",
		"web_id",
		"web_id_pwd_kana",
		"web_id_pwd",
		"ftp_server_nm",
		"telno1",					// 非表示項目
		"telno2",					// 非表示項目
		"telno_tchi1",				// 非表示項目
		"telno_tchi2",				// 非表示項目
		"adpt_saskm1",				// 非表示項目
		"adpt_saskm2",				// 非表示項目
		"tel_op_sette_rmts_pwd1",	// 非表示項目
		"tel_op_sette_rmts_pwd2",	// 非表示項目
		"prc_grp_cd_nm_tv",			// 非表示項目
		"ssid_ieee_kana",
		"ssid_ieee",
		"ssid_wpa_aes_kana",
		"ssid_wpa_aes",
		"ssid_wep_kana",
		"ssid_wep",
		"angoka_key_kana",
		"angoka_key"
	};

	/** ID速報書 (メールアドレス) */
	private static final String[] KKLST0070104 =
	{
		"cust_nm",
		"svc_sta_ymd",
		"seiri_no",
		"eoid",
		"shk_eoid",
		"eoid_pwd_kana",
		"shk_eoid_pwd",
		"grp_join_cd",
		"grp_join_cd_pwd_kana",
		"grp_join_cd_pwd",
		"prc_grp_cd_nm_net",
		"isp_ninsho_id_kana",		// 非表示項目
		"isp_ninsho_id",			// 非表示項目
		"isp_ninsho_id_pwd_kana",	// 非表示項目
		"isp_ninsho_id_pwd",		// 非表示項目
		"mlad",
		"pop_id_pwd_kana",
		"pop_id_pwd",
		"pop_server_nm",
		"smtp_server_nm",
		"web_id",					// 非表示項目
		"web_id_pwd_kana",			// 非表示項目
		"web_id_pwd",				// 非表示項目
		"ftp_server_nm",			// 非表示項目
		"telno1",					// 非表示項目
		"telno2",					// 非表示項目
		"telno_tchi1",				// 非表示項目
		"telno_tchi2",				// 非表示項目
		"adpt_saskm1",				// 非表示項目
		"adpt_saskm2",				// 非表示項目
		"tel_op_sette_rmts_pwd1",	// 非表示項目
		"tel_op_sette_rmts_pwd2",	// 非表示項目
		"prc_grp_cd_nm_tv",			// 非表示項目
		"ssid_ieee_kana",			// 非表示項目
		"ssid_ieee",				// 非表示項目
		"ssid_wpa_aes_kana",		// 非表示項目
		"ssid_wpa_aes",				// 非表示項目
		"ssid_wep_kana",			// 非表示項目
		"ssid_wep",					// 非表示項目
		"angoka_key_kana",			// 非表示項目
		"angoka_key"				// 非表示項目
	};

	/** ID速報書 (ADSL（フレッツ）) */
	private static final String[] KKLST0070105 =
	{
		"cust_nm",
		"svc_sta_ymd",
		"seiri_no",
		"eoid",
		"shk_eoid",
		"eoid_pwd_kana",
		"shk_eoid_pwd",
		"grp_join_cd",
		"grp_join_cd_pwd_kana",
		"grp_join_cd_pwd",
		"prc_grp_cd_nm_net",
		"isp_ninsho_id_kana",
		"isp_ninsho_id",
		"isp_ninsho_id_pwd_kana",
		"isp_ninsho_id_pwd",
		"mlad",
		"pop_id_pwd_kana",
		"pop_id_pwd",
		"pop_server_nm",
		"smtp_server_nm",
		"web_id",
		"web_id_pwd_kana",
		"web_id_pwd",
		"ftp_server_nm", 
		"telno1",					// 非表示項目
		"telno2",					// 非表示項目
		"telno_tchi1",				// 非表示項目
		"telno_tchi2",				// 非表示項目
		"adpt_saskm1",				// 非表示項目
		"adpt_saskm2",				// 非表示項目
		"tel_op_sette_rmts_pwd1",	// 非表示項目
		"tel_op_sette_rmts_pwd2",	// 非表示項目
		"prc_grp_cd_nm_tv",			// 非表示項目
		"ssid_ieee_kana",			// 非表示項目
		"ssid_ieee",				// 非表示項目
		"ssid_wpa_aes_kana",		// 非表示項目
		"ssid_wpa_aes",				// 非表示項目
		"ssid_wep_kana",			// 非表示項目
		"ssid_wep",					// 非表示項目
		"angoka_key_kana",			// 非表示項目
		"angoka_key"				// 非表示項目
	};

	/** ID速報書 (ADSL（eAccess）) */
	private static final String[] KKLST0070106 =
	{
		"cust_nm",
		"svc_sta_ymd",
		"seiri_no",
		"eoid",
		"shk_eoid",
		"eoid_pwd_kana",
		"shk_eoid_pwd",
		"grp_join_cd",
		"grp_join_cd_pwd_kana",
		"grp_join_cd_pwd",
		"prc_grp_cd_nm_net",
		"isp_ninsho_id_kana",
		"isp_ninsho_id",
		"isp_ninsho_id_pwd_kana",	// 非表示項目
		"isp_ninsho_id_pwd",		// 非表示項目
		"mlad",
		"pop_id_pwd_kana",
		"pop_id_pwd",
		"pop_server_nm",
		"smtp_server_nm",
		"web_id",
		"web_id_pwd_kana",
		"web_id_pwd",
		"ftp_server_nm",
		"telno1",					// 非表示項目
		"telno2",					// 非表示項目
		"telno_tchi1",				// 非表示項目
		"telno_tchi2",				// 非表示項目
		"adpt_saskm1",				// 非表示項目
		"adpt_saskm2",				// 非表示項目
		"tel_op_sette_rmts_pwd1",	// 非表示項目
		"tel_op_sette_rmts_pwd2",	// 非表示項目
		"prc_grp_cd_nm_tv",			// 非表示項目
		"ssid_ieee_kana",			// 非表示項目
		"ssid_ieee",				// 非表示項目
		"ssid_wpa_aes_kana",		// 非表示項目
		"ssid_wpa_aes",				// 非表示項目
		"ssid_wep_kana",			// 非表示項目
		"ssid_wep",					// 非表示項目
		"angoka_key_kana",			// 非表示項目
		"angoka_key"				// 非表示項目
	};

	// 20141023 ANK-2332-00-00, ANK-2333-00-00 Add Start
	/** ID速報書 (3点セット) A3判 */
	private static final String[] KKLST0070108 =
	{
		"cust_nm",
		"svc_sta_ymd",
		"seiri_no",
		"eoid",
		"eoid_pwd_kana",
		"shk_eoid_pwd",
		"grp_join_cd",
		"grp_join_cd_pwd_kana",
		"grp_join_cd_pwd",
		"prc_grp_cd_nm_net",
		"isp_ninsho_id_kana",
		"isp_ninsho_id",
		"isp_ninsho_id_pwd_kana",
		"isp_ninsho_id_pwd",
		"mlad",
		"pop_id_pwd_kana",
		"pop_server_nm",
		"web_id",
		"web_id_pwd_kana",
		"web_id_pwd",
		"ftp_server_nm",
		"telno1",
		"telno2",
		"telno_tchi1",
		"telno_tchi2",
		"adpt_saskm1",
		"adpt_saskm2",
		"tel_op_sette_rmts_pwd2",
		"prc_grp_cd_nm_tv",
		"ssid_ieee_kana",			// 非表示項目
		"ssid_ieee",				// 非表示項目
		"ssid_wpa_aes_kana",		// 非表示項目
		"ssid_wpa_aes",				// 非表示項目
		"ssid_wep_kana",			// 非表示項目
		"ssid_wep",					// 非表示項目
		"angoka_key_kana",			// 非表示項目
		"angoka_key",				// 非表示項目
		"shk_eoid",
		"pop_id_pwd",
		"smtp_server_nm",
		"tel_op_sette_rmts_pwd1",
		// 下段分
		"seiri_no2",			// 整理番号
		"cust_nm2",				// ご契約者名
		"mskm_ymd_net",			// ｅｏ光ネット申込日
		"prc_grp_cd_nm_net2",	// ｅｏ光ネットサービス名称
		"mskm_ymd_tel",			// ｅｏ光電話申込日
		"prc_grp_cd_nm_tel2",	// ｅｏ光電話サービス名称
		"mskm_ymd_tv",			// ｅｏ光テレビ申込日
		"prc_grp_cd_nm_tv2"		// ｅｏ光テレビサービス名称
	};

	/** ID速報書 (マンションプライベート) A3版 */
	private static final String[] KKLST0070109 =
	{
		"cust_nm",
		"svc_sta_ymd",
		"seiri_no",
		"eoid",
		"shk_eoid",
		"eoid_pwd_kana",
		"shk_eoid_pwd",
		"grp_join_cd",
		"grp_join_cd_pwd_kana",
		"grp_join_cd_pwd",
		"prc_grp_cd_nm_net",
		"isp_ninsho_id_kana",		// 非表示項目
		"isp_ninsho_id",			// 非表示項目
		"isp_ninsho_id_pwd_kana",	// 非表示項目
		"isp_ninsho_id_pwd",		// 非表示項目
		"mlad",
		"pop_id_pwd_kana",
		"pop_id_pwd",
		"pop_server_nm",
		"web_id",
		"web_id_pwd_kana",
		"web_id_pwd",
		"telno1",
		"telno2",
		"telno_tchi1",				// 非表示項目
		"telno_tchi2",				// 非表示項目
		"adpt_saskm1",				// 非表示項目
		"adpt_saskm2",				// 非表示項目
		"tel_op_sette_rmts_pwd1",	// 非表示項目
		"tel_op_sette_rmts_pwd2",	// 非表示項目
		"prc_grp_cd_nm_tv",			// 非表示項目
		"ssid_ieee_kana",			// 非表示項目
		"ssid_ieee",				// 非表示項目
		"ssid_wpa_aes_kana",		// 非表示項目
		"ssid_wpa_aes",				// 非表示項目
		"ssid_wep_kana",			// 非表示項目
		"ssid_wep",					// 非表示項目
		"angoka_key_kana",			// 非表示項目
		"angoka_key",
		"smtp_server_nm",
		"ftp_server_nm",
		// 下段分
		"seiri_no2",			// 整理番号
		"cust_nm2",				// ご契約者名
		"mskm_ymd_net",			// ｅｏ光ネット申込日
		"prc_grp_cd_nm_net2"	// ｅｏ光ネットサービス名称
	};
	// 20141023 ANK-2332-00-00, ANK-2333-00-00 Add End

	/***********************************************************************************/
	/** ID速報書　項目定義取得                                                        **/
	/***********************************************************************************/
	/** 定義リスト取得 ID速報書 (3点セット) */
	public static String[] getKKLST0070101()
	{
		return KKLST0070101;
	}
	/** 定義リスト取得 ID速報書 (マンションプライベート) */
	public static String[] getKKLST0070102()
	{
		return KKLST0070102;
	}
	/** 定義リスト取得 ID速報書 (eoモバイル) */
	public static String[] getKKLST0070103()
	{
		return KKLST0070103;
	}
	/** 定義リスト取得 ID速報書 (メールアドレス) */
	public static String[] getKKLST0070104()
	{
		return KKLST0070104;
	}
	/** 定義リスト取得 ID速報書 (ADSL（フレッツ）) */
	public static String[] getKKLST0070105()
	{
		return KKLST0070105;
	}
	/** 定義リスト取得 ID速報書 (ADSL（eAccess）) */
	public static String[] getKKLST0070106()
	{
		return KKLST0070106;
	}
	// 20141017 ANK-2332-00-00, ANK-2333-00-00 Add Start
	/** 定義リスト取得 ID速報書 (3点セット) A3版 */
	public static String[] getKKLST0070108()
	{
		return KKLST0070108;
	}
	/** 定義リスト取得 ID速報書 (マンションプライベート) A3版 */
	public static String[] getKKLST0070109()
	{
		return KKLST0070109;
	}
	// 20141017 ANK-2332-00-00, ANK-2333-00-00 Add End
	
	
	
	/**
	 * <p>
	 * 新しいサービス層編集部品を生成します。<br>
	 * </p>
	 */
	public JKKPrintDataUtil()
	{
	}

	/**
	 * 有効な住所データかどうかを返す。<br>
	 * <br>
	 * @param	addrList	住所データ
	 * @return				住所データが有効⇒true  無効⇒false
	 */
	private static boolean isValidAddress(String[] addrList) 
	{
		StringBuilder temp = new StringBuilder();
		for (int i = 0; i < 5; i++) 
		{
			temp.append(addrList[i]);
		}

		return !temp.toString().matches(BLANK_CHECK);
	}

	/**
	 * 住所情報取得<br>
	 * <br>
	 * @param	row			入力情報
	 * @return				住所情報
	 */
	private static String[] getAddrList(HashMap<String, String> row)
	{
		// 
		String[] addrList = new String[ADDR_LIST1.length];

		// 住所を取得する
		for (int i = 0; i < ADDR_LIST1.length; i++)
		{
			addrList[i] = row.get(ADDR_LIST1[i]);
			if (addrList[i] == null)
			{
				addrList[i] = BLANK;
			}
		}

		// 住所の有効性を判定
		if (!isValidAddress(addrList))
		{
			// 通知書送付先名が入っていいない場合は、LIST2の項目より住所を取得
			for (int i = 0; i < ADDR_LIST2.length; i++)
			{
				addrList[i] = row.get(ADDR_LIST2[i]);
				if (addrList[i] == null)
				{
					addrList[i] = BLANK;
				}
			}
		}

		return addrList;
	}

	/**
	 * 住所シールに渡すデータを作成する。<br>
	 * <br>
	 * @param	inMap		入力データ
	 * @param	listKey		行データが設定されているキー文字
	 * @return				CSVデータのbyte[]値
	 * @throws	UnsupportedEncodingException
	 */
	public static byte[] createAddrLabelPrintData(HashMap inMap, String listKey) throws UnsupportedEncodingException
	{
		StringBuilder buff = new StringBuilder();

		ArrayList<HashMap<String, String>> rowsData = (ArrayList<HashMap<String, String>>)inMap.get(listKey);
		Iterator<HashMap<String, String>> iter = rowsData.iterator();

		// ユーザＩＤ
		String userId = (String)inMap.get("user_id");
		// ユーザ名
		String userNm = (String)inMap.get("user_nm");
		// ＩＰアドレス
		String ipAddr = (String)inMap.get("ip_address");

		while (iter.hasNext())
		{
			HashMap<String, String> row = iter.next();

			// 住所情報取得
			String[] addrList = getAddrList(row);

			// 部品を使って住所を作成
			String addr = JZMAdOutputEdit.getPtn01(addrList[1], addrList[2], addrList[3], addrList[4], addrList[5], addrList[6], addrList[7]);
			//ANK-3745-00-00 ADD START
			if (StringUtils.isNotBlank(addrList[7]))
			{
			//部屋番号の文字数を取得
			int digit = addr.length();
			int digit_adrrm = trimSpace(addrList[7]).length();

			StringBuilder sb = new StringBuilder (addr);
				//住所情報の総桁が134文字以下の場合、部屋番号の前に全角スペースを挿入
				if (digit < 135)
				{
				sb.insert(digit - digit_adrrm, "　");

				addr = sb.toString();
				}
			}
			//ANK-3745-00-00 ADD END
			// ▼▼▼▼▼ ST4-2013-0000103 2013/02/06 ADD START ▼▼▼▼▼
			String[] result = new String[5];
			// 住所を「２７文字」だけ切り出す
			result[0] = getStr(addr, 27, 0);
			result[1] = getStr(addr, 27, 1);
			result[2] = getStr(addr, 27, 2);
			result[3] = getStr(addr, 27, 3);
			result[4] = getStr(addr, 27, 4);
			// ▲▲▲▲▲  ST4-2013-0000103 2013/02/06 ADD E N D ▲▲▲▲▲

			// 契約者名取得
			String keiShaNm = row.get("tchisho_sohus_nm");

			// ************************************************
			// 定義体の順番にファイルデータを追加
			// ************************************************

			// 郵便番号
			appendData(buff, addrList[0]);

			// 住所
			for (int i = 0; i < 5; i++)
			{
				appendData(buff, result[i]);
			}

			// 契約者名
			appendData(buff, cutStr(keiShaNm, 15));

			// 操作ユーザＩＤ
			appendData(buff, userId);

			// 操作ユーザ名
			appendData(buff, cutStr(userNm, 8));

			// ＩＰアドレス
			appendData(buff, ipAddr);

			// 改行コード
			buff.append(System.getProperty("line.separator"));
		}

		return buff.toString().getBytes(UTF_8);
	}

	/**
	 * ID通知書発送依頼リストに渡すデータを作成する。<br>
	 * <br>
	 * @param	inMap		入力データ
	 * @param	listKey		行データが設定されているキー文字
	 * @return				CSVデータのbyte[]値
	 * @throws	UnsupportedEncodingException
	 */
	public static byte[] createIdRequestListPrintData(HashMap inMap, String listKey) throws UnsupportedEncodingException
	{
		StringBuilder buff = new StringBuilder();

		int index = 0;

		ArrayList<HashMap<String, String>> rowsData = (ArrayList<HashMap<String, String>>)inMap.get(listKey);
		Iterator<HashMap<String, String>> iter = rowsData.iterator();

		// ユーザＩＤ
		String userId = (String)inMap.get("user_id");
		// ユーザ名
		String userNm = (String)inMap.get("user_nm");
		// ＩＰアドレス
		String ipAddr = (String)inMap.get("ip_address");

		while (iter.hasNext())
		{
			HashMap<String, String> row = iter.next();

			// 住所情報取得
			String[] addrList = getAddrList(row);

			// 部品を使って住所を作成
			String addr = JZMAdOutputEdit.getPtn01(addrList[1], addrList[2], addrList[3], addrList[4], addrList[5], addrList[6], addrList[7]);

			// 住所を「１２７文字」だけ切り出す
			addr = POST_MARK + addrList[0] + " " + addr;

			// 契約者名取得
			String keiShaNm = row.get("tchisho_sohus_nm");

			// ＳＹＳＩＤ取得
			String sysid = row.get("sysid");

			// ************************************************
			// 定義体の順番にファイルデータを追加
			// ************************************************

			// 契約者名
			appendData(buff, cutStr(keiShaNm, 45));

			// ＳＹＳＩＤ
			appendData(buff, sysid);

			// 住所
			appendData(buff, cutStr(addr, 127));

			// 7行毎に改行を入れる
			index++;

			if (index == IN_PAGE_DATA_CNT)
			{
				// ユーザＩＤ
				appendData(buff, userId);

				// ユーザ名
				appendData(buff, cutStr(userNm, 8));

				// ＩＰアドレス
				appendData(buff, ipAddr);

				// 改行コード
				buff.append(System.getProperty("line.separator"));

				index = 0;
			}
		}

		if (index > 0)
		{
			for (int i = index; i < IN_PAGE_DATA_CNT; i++)
			{
				buff.append(DBL_QUOT_STR).append(DBL_QUOT_STR).append(DELIMITER_STR);
				buff.append(DBL_QUOT_STR).append(DBL_QUOT_STR).append(DELIMITER_STR);
				buff.append(DBL_QUOT_STR).append(DBL_QUOT_STR).append(DELIMITER_STR);
			}

			// ユーザＩＤ
			appendData(buff, userId);

			// ユーザ名
			appendData(buff, cutStr(userNm, 8));

			// ＩＰアドレス
			appendData(buff, ipAddr);

			// 改行コード
			buff.append(System.getProperty("line.separator"));
		}

		return buff.toString().getBytes(UTF_8);
	}

	/**
	 * ID速報書に渡すデータを作成する。<br>
	 * <br>
	 * @param	param
	 * @param	paramHash		帳票マップ
	 * @param	fixedText		ユーザ定義
	 * @param	chohyoId		定義体ID
	 * @return
	 * @throws	RequestParameterException
	 * @throws	UnsupportedEncodingException
	 */
	@SuppressWarnings("unchecked")
	public static byte[] makeListData(
			IRequestParameterReadOnly param,
			HashMap<String, Object> paramHash,
			String fixedText,
			String chohyoId
	) throws RequestParameterException, UnsupportedEncodingException
	{
		StringBuilder retItem = new StringBuilder();

		if (paramHash == null)
		{
			return null;
		}

		// 定義体IDよりキーリストを取得する
		String[] teigi = getKeyArray(chohyoId);

		if (teigi != null)
		{
			// 定義体IDに定義されている項目数分繰り返す
			for (int i = 0; i < teigi.length; i++)
			{
				setStringBuilder(retItem, paramHash, teigi[i]);
			}
		}

		return retItem.toString().getBytes(UTF_8);
	}

	/**
	 * 帳票マップより定義項目の値を取得する。<br>
	 * <br>
	 * @param	retItem			返却文字列
	 * @param	inMap			帳票マップ
	 * @param	teigiKey		定義キー
	 */
	private static void setStringBuilder(StringBuilder retItem, Map<String, Object> inMap, String teigiKey)
	{
		String appendItem = "";

		if (inMap.get(teigiKey) != null && !"".equals((String)inMap.get(teigiKey)))
		{
			appendItem = (String)inMap.get(teigiKey);
		}

		retItem.append(appendItem).append(DELIMITER_STR);
	}

	/**
	 * 帳票定義体を取得する。<br>
	 * <br>
	 * @param	key
	 * @return
	 */
	private static String[] getKeyArray(String key)
	{
		if (key == null || "".equals(key))
		{
			return null;
		}
		
		if ("KKLST0070101".equals(key))
		{
			return getKKLST0070101();
		}
		else if ("KKLST0070102".equals(key))
		{
			return getKKLST0070102();
		}
		else if ("KKLST0070103".equals(key))
		{
			return getKKLST0070103();
		}
		else if ("KKLST0070104".equals(key))
		{
			return getKKLST0070104();
		}
		else if ("KKLST0070105".equals(key))
		{
			return getKKLST0070105();
		}
		else if ("KKLST0070106".equals(key))
		{
			return getKKLST0070106();
		}
		// 20141023 ANK-2332-00-00, ANK-2333-00-00 Add Start
		else if ("KKLST0070108".equals(key))
		{
			return getKKLST0070108();
		}
		else if ("KKLST0070109".equals(key))
		{
			return getKKLST0070109();
		}
		// 20141023 ANK-2332-00-00, ANK-2333-00-00 Add End
		
		return null;
	}

	/**
	 * ダウンロード用データファイルを設定する。<br>
	 * <br>
	 * @param	param		モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param	scNm		SC名
	 * @param	listNm		リスト名
	 * @param	index		ファイルの順番
	 * @param	file		ファイルデータ
	 */
	public static void putDownloadDataFile(IRequestParameterReadWrite param, String scNm, String listNm, int index, Object file) 
	{
		HashMap<Object, Object> map = new HashMap<Object, Object>();
		ArrayList<HashMap<Object, Object>> list = new ArrayList<HashMap<Object, Object>>(); 
		map.put(AttachmentFileMapKeys.IDENTIFY_CD, scNm);
		map.put(AttachmentFileMapKeys.LIST_NAME, listNm);
		map.put(AttachmentFileMapKeys.ITEM_NAME, ITEM_NAME);
		map.put(AttachmentFileMapKeys.INDEX, Integer.toString(index));
		map.put(AttachmentFileMapKeys.FILE, file);
		list.add(map);
		param.setControlMapData(SCControlMapKeys.ATTACHMENT_FILE_DOWN, list);
	}

	/***********************************************************************************/
	/** 共通メソッド                                                                  **/
	/***********************************************************************************/
	/**
	 * 文字列が指定文字列長より長い場合、指定文字列長で切り取ります。<br>
	 * <br>
	 * @param	str			文字列
	 * @param	length		指定文字列長
	 * @return				切り取った文字列
	 */
	private static String cutStr(String str, int length)
	{
		String retStr = str;

		// 入力文字列が空ではない場合
		if (str != null && ! "".equals(str))
		{
			// 入力文字列が、指定文字列長よりも長い場合
			if (str.length() > length)
			{
				// カット
				retStr = str.substring(0, length);
			}
		}

		// 切り取った文字列を返却する
		return retStr;
	}

	/**
	 * 文字列を指定文字列長で分割します。<br>
	 * <br>
	 * @param	str			文字列
	 * @param	length		指定文字列長
	 * @param	index		インデックス
	 * @return				切り取った文字列
	 */
	private static String getStr(String str, int length, int index)
	{
		String ret = "";

		// ＳＴＡＲＴ
		int staIndex = length * index;
		// ＥＮＤ
		int endIndex = length * (index + 1);

		if (str == null)
		{
			ret = "";
		}
		else
		{
			if (str.length() < staIndex)
			{
				ret = "";
			}
			else if ((staIndex <= str.length()) && (str.length() <= endIndex))
			{
				ret = str.substring(staIndex, str.length());
			}
			else
			{
				ret = str.substring(staIndex, endIndex);
			}
		}

		return ret;
	}

	/**
	 * <br>
	 * <br>
	 * @param	buff
	 * @param	appStr
	 */
	private static void appendData(StringBuilder buff, String appStr)
	{
		buff.append(getStringValue(appStr)).append(DELIMITER_STR);
	}

	/**
	 * 「"（ダブルコーテーション）」で括られた文字列を返します。<br>
	 * <br>
	 * @param	val			入力文字列
	 * @return				編集後の文字列
	 */
	private static String getStringValue(String val)
	{
		if (val == null)
		{
			return BLANK;
		}
		StringBuilder result = new StringBuilder();
		result.append(DBL_QUOT_STR);
		for (int i = 0; i < val.length(); i++)
		{
			char oneCh = val.charAt(i);
			if (oneCh == DBL_QUOT_STR)
			{
				result.append(oneCh);
			}
			result.append(oneCh);
		}
		result.append(DBL_QUOT_STR);
		return result.toString();
	}
	//ANK-3745-00-00 ADD START
	/**
	 * 半角スペースを全角スペースに置換し、前後の全角スペースを削除します。
	 * @param arg0
	 * @return 処理後の文字列
	 */
	private static String trimSpace(String arg0)
	{
		if(isNull(arg0))
		{
			return arg0;
		}
		return arg0.replace(ZENKAKU_SPACE, HANKAKU_SPACE).trim().replace(HANKAKU_SPACE, ZENKAKU_SPACE);
	}
	//ANK-3745-00-00 ADD END

}
