/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：CNW01001SFLogic
*	ソースファイル名：CNW01001SFLogic.java
*	作成者			：EK908988
*	日付			：2011年08月03日
*＜機能概要＞
*	会員種別毎集計参照のViewロジックです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*	ｖ3.00.00	2012/10/22	FJ)小林		【ST4-2012-0000046】性能対応
*
********************************************************************************/

package eo.web.webview.CNW00901SF;

import java.util.EventObject;
import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CID;
import com.fujitsu.futurity.web.x31.X31CMessageResult;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;
import com.fujitsu.futurity.web.x33.X33SException;

import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CNW00901SF.CNW00901SFConst;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JCNScreenConst;
import eo.web.webview.common.JCNWebConst;
import eo.web.webview.mapping.CNSV0034_CNSV0034OPDBMapper;
import eo.web.webview.mapping.CNSV0035_CNSV0035OPDBMapper;
import eo.common.constant.JPCModelConstant;

/**
 * 会員種別毎集計参照のViewロジック<p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class CNW00901SFLogic extends JCCWebBusinessLogic
{
	// 集計単位
	private static final String SHUK_TANI_DAY = "1";
	private static final String SHUK_TANI_WEK = "2";
	private static final String SHUK_TANI_MON = "3";

	// 改行コード
	private static final String STR_CRLF = "\r\n";
	// ダウンロードファイル名
	private static final String CSV_FILE_NAME = "会員種別毎集計_";
	// 拡張子
	private static final String KAKUTYO_CSV = ".csv";

	/**
	 * 親クラスX31BWebBusinessLogicのreceiveMessageWebを
	 * オーバーライドして自動生成されたメソッドです。
	 * @param arg0 (I) イベント情報
	 * @param arg1 (I) WebFWでは使用しません
	 * @param arg2 (I) WebFWでは使用しません
	 * @return 処理結果（true:正常終了、false:エラー）
	 * @throws X33SException X33SException
	 */
	@Override
	protected boolean receiveMessageWeb(X31CID arg0, Object arg1,
			EventObject arg2) throws X33SException
	{
		// TODO 自動生成されたメソッドスタブ
		return false;
	}

	/**
	 * 会員種別毎集計参照の初期表示を行います。<br>
	 * 
	 * @return 処理結果（true:正常終了、false:エラー）
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public boolean action_init() throws Exception
	{
		// 共通Bean取得
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		
		// 親画面のBean取得
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// マッピングクラスに渡すため、配列に作り変える
		X31SDataBeanAccess[] paramBean = {bean};
		
		// ユースケースID格納用マップ生成
		HashMap paramMap = new HashMap();
		// ユースケースID設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CNSV0034");

		// マッピングクラスのインスタンス作成
		CNSV0034_CNSV0034OPDBMapper mapper = new CNSV0034_CNSV0034OPDBMapper();
		HashMap dataMap = new HashMap();
		mapper.setCNSV003401SC(paramBean, dataMap, "1");
		mapper.setCNSV003402SC(paramBean, dataMap, "1");

		// 検索結果格納用マップ生成
		HashMap outputMap = new HashMap();

		// SQL呼出し
		X31CMessageResult msgResult = invokeService(paramMap, dataMap, outputMap);

		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
		// beanのクリア
		bean.getDataBeanArray(CNW00901SFConst.CONT_SVC_LIST).clearArray();
		bean.getDataBeanArray(CNW00901SFConst.MEMBER_SBT_LIST).clearArray();
		bean.getDataBeanArray(CNW00901SFConst.MEMBER_SBT_SHUK_LIST).clearArray();

		// 検索結果の取り出し
		mapper.getCNSV003401SC(paramBean, outputMap);
		mapper.getCNSV003402SC(paramBean, outputMap);

		// ボタン表示設定
		bean.sendMessageBoolean(CNW00901SFConst.CONT_SVC_ALLSEL_CTRL, X31CWebConst.DATABEAN_SET_VALUE, true);
		bean.sendMessageBoolean(CNW00901SFConst.CONT_SVC_ALLDSL_CTRL, X31CWebConst.DATABEAN_SET_VALUE, true);
		bean.sendMessageBoolean(CNW00901SFConst.MEMBER_SBT_ALLSEL_CTRL, X31CWebConst.DATABEAN_SET_VALUE, true);
		bean.sendMessageBoolean(CNW00901SFConst.MEMBER_SBT_ALLDSL_CTRL, X31CWebConst.DATABEAN_SET_VALUE, true);
		bean.sendMessageBoolean(CNW00901SFConst.SEARCH_CTRL, X31CWebConst.DATABEAN_SET_VALUE, true);
		bean.sendMessageBoolean(CNW00901SFConst.CLEAR_CTRL, X31CWebConst.DATABEAN_SET_VALUE, true);
		bean.sendMessageBoolean(CNW00901SFConst.DOWNLOAD_CTRL, X31CWebConst.DATABEAN_SET_VALUE, true);
		
		// ラジオボタン設定（日別）
		bean.sendMessageString(CNW00901SFConst.SHUK_SELECT_VALUE, X31CWebConst.DATABEAN_SET_VALUE, "1");
		// 一覧表示設定
		bean.sendMessageBoolean(CNW00901SFConst.LIST_DSP_CTRL, X31CWebConst.DATABEAN_SET_VALUE, false);
		bean.sendMessageBoolean(CNW00901SFConst.DOWNLOAD_DSP_CTRL, X31CWebConst.DATABEAN_SET_VALUE, true);

		// 検索エラーフラグの取得
		String searchError = JCCWebCommon.getSearchErrFlg("CNSV003401SC", outputMap);
		if (JPCModelConstant.SEARCH_ERR_FLG_ZERO.equals(searchError))
		{
			// 検索結果０件
			JCCWebCommon.setMessageInfo(this, JCNWebConst.SEARCH_ERR_MESSAGE_ZERO);
			// ボタン非表示
			bean.sendMessageBoolean(CNW00901SFConst.CONT_SVC_ALLSEL_CTRL, X31CWebConst.DATABEAN_SET_VALUE, false);
			bean.sendMessageBoolean(CNW00901SFConst.CONT_SVC_ALLDSL_CTRL, X31CWebConst.DATABEAN_SET_VALUE, false);
			bean.sendMessageBoolean(CNW00901SFConst.MEMBER_SBT_ALLSEL_CTRL, X31CWebConst.DATABEAN_SET_VALUE, false);
			bean.sendMessageBoolean(CNW00901SFConst.MEMBER_SBT_ALLDSL_CTRL, X31CWebConst.DATABEAN_SET_VALUE, false);
			bean.sendMessageBoolean(CNW00901SFConst.SEARCH_CTRL, X31CWebConst.DATABEAN_SET_VALUE, false);
			bean.sendMessageBoolean(CNW00901SFConst.CLEAR_CTRL, X31CWebConst.DATABEAN_SET_VALUE, false);
			bean.sendMessageBoolean(CNW00901SFConst.DOWNLOAD_CTRL, X31CWebConst.DATABEAN_SET_VALUE, false);
		}

		// 遷移元画面IDの取得
		String nextScreenId = JCCWebCommon.getScreenId(this);
		if (nextScreenId != null)
		{
			// 戻るボタンに切替
			bean.sendMessageBoolean(CNW00901SFConst.CLOSE_CTRL, X31CWebConst.DATABEAN_SET_VALUE, false);
		}

		// 遷移先の画面IDを共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, JCNScreenConst.SCREEN_ID_CNW00901);
		
		// 遷移先の画面名を共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, JCNScreenConst.SCREEN_NAME_CNW00901);

		return true;
	}

	/**
	 * 会員種別毎集計参照の検索ボタン押下時の処理を行います。<br>
	 * 
	 * @return 処理結果（true:正常終了、false:エラー）
	 * @throws Exception
	 */
	public boolean action_search() throws Exception
	{
		// 共通Bean取得
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		
		// 親画面のBean取得
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// マッピングクラスに渡すため、配列に作り変える
		X31SDataBeanAccess[] paramBean = {bean};
		
		// ユースケースID格納用マップ生成
		HashMap paramMap = new HashMap();
		// ユースケースID設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CNSV0035");

		// マッピングクラスのインスタンス作成
		CNSV0035_CNSV0035OPDBMapper mapper = new CNSV0035_CNSV0035OPDBMapper();
		HashMap dataMap = new HashMap();
		mapper.setCNSV003501SC(paramBean, dataMap, "1");
		mapper.setCNSV003502SC(paramBean, dataMap, "1");
//		mapper.setCNSV003503SC(paramBean, dataMap, "1");
//		mapper.setCNSV003504SC(paramBean, dataMap, "2");
//		mapper.setCNSV003505SC(paramBean, dataMap, "3");
//		mapper.setCNSV003506SC(paramBean, dataMap, "1");
		mapper.setCNSV003507SC(paramBean, dataMap, "2");
		mapper.setCNSV003508SC(paramBean, dataMap, "3");
		mapper.setCNSV003509SC(paramBean, dataMap, "1");

		// 検索結果格納用マップ生成
		HashMap outputMap = new HashMap();

		// SQL呼出し
		X31CMessageResult msgResult = invokeService(paramMap, dataMap, outputMap);

		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
		// beanのクリア
		bean.getDataBeanArray(CNW00901SFConst.MEMBER_SBT_SHUK_LIST).clearArray();

		// 検索結果の取り出し
		mapper.getCNSV003501SC(paramBean, outputMap);

		bean.sendMessageBoolean(CNW00901SFConst.LIST_DSP_CTRL, X31CWebConst.DATABEAN_SET_VALUE, true);
		bean.sendMessageBoolean(CNW00901SFConst.DOWNLOAD_DSP_CTRL, X31CWebConst.DATABEAN_SET_VALUE, true);

		// 遷移先の画面IDを共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, JCNScreenConst.SCREEN_ID_CNW00901);
		
		// 遷移先の画面名を共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, JCNScreenConst.SCREEN_NAME_CNW00901);

		return true;
	}
	
	/**
	 * 会員種別毎集計参照のダウンロードボタン押下時の処理を行います。<br>
	 * 
	 * @return 処理結果（true:正常終了、false:エラー）
	 * @throws Exception
	 */
	public boolean action_download() throws Exception
	{
		// 共通Bean取得
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		
		// 親画面のBean取得
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// マッピングクラスに渡すため、配列に作り変える
		X31SDataBeanAccess[] paramBean = {bean};
		
		// ユースケースID格納用マップ生成
		HashMap paramMap = new HashMap();
		// ユースケースID設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CNSV0035");

		// マッピングクラスのインスタンス作成
		CNSV0035_CNSV0035OPDBMapper mapper = new CNSV0035_CNSV0035OPDBMapper();
		HashMap dataMap = new HashMap();
		mapper.setCNSV003501SC(paramBean, dataMap, "2");
		mapper.setCNSV003502SC(paramBean, dataMap, "1");
//		mapper.setCNSV003503SC(paramBean, dataMap, "1");
//		mapper.setCNSV003504SC(paramBean, dataMap, "2");
//		mapper.setCNSV003505SC(paramBean, dataMap, "3");
//		mapper.setCNSV003506SC(paramBean, dataMap, "1");
		mapper.setCNSV003507SC(paramBean, dataMap, "2");
		mapper.setCNSV003508SC(paramBean, dataMap, "3");
		mapper.setCNSV003509SC(paramBean, dataMap, "1");

		// 検索結果格納用マップ生成
		HashMap outputMap = new HashMap();

		// SQL呼出し
		X31CMessageResult msgResult = invokeService(paramMap, dataMap, outputMap);

		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
		// beanのクリア
		bean.getDataBeanArray(CNW00901SFConst.MEMBER_SBT_SHUK_LIST).clearArray();

		// 検索結果の取り出し
		mapper.getCNSV003502SC(paramBean, outputMap);

		bean.sendMessageBoolean(CNW00901SFConst.LIST_DSP_CTRL, X31CWebConst.DATABEAN_SET_VALUE, true);
		bean.sendMessageBoolean(CNW00901SFConst.DOWNLOAD_DSP_CTRL, X31CWebConst.DATABEAN_SET_VALUE, false);

		// 遷移先の画面IDを共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, JCNScreenConst.SCREEN_ID_CNW00901);
		
		// 遷移先の画面名を共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, JCNScreenConst.SCREEN_NAME_CNW00901);

		String fileName = CSV_FILE_NAME + JCCWebCommon.getSysDateTime() + KAKUTYO_CSV;
		
		// ファイルのダウンロード
		JCCWebCommon.setTempDownloadFile(this, createFile().getBytes("Windows-31J"), fileName);

		return true;
	}
	
	/**
	 * 会員種別毎集計参照の戻る押下時の処理を行います。<br>
	 * 
	 * @return 処理結果（true:正常終了、false:エラー）
	 * @throws Exception
	 */
	public boolean action_back() throws Exception
	{
		// 共通Bean取得
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// 親画面のBean取得
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// 次画面移送用のマップ作成
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// 移送データ設定

		// 遷移元の画面ID取得
		String nextScreenId = JCCWebCommon.getScreenId(this);
		String nextScreenNm = "";

		// 画面情報を設定
		JCCWebCommon.setScreenInfo(this, nextScreenId, dataMap);
		JCCWebCommon.setScreenId(this, nextScreenId, JCNScreenConst.SCREEN_ID_CNW00901);

		// 遷移先の画面IDを共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, nextScreenId);
		
		// 遷移先の画面名を共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, nextScreenNm);

		return true;
	}

	/**
	 * ダウンロードファイル生成処理
	 * 
	 * @return
	 */
	private String createFile()
	{
		// 親画面のBean取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccessArray beanArray = bean.getDataBeanArray(CNW00901SFConst.MEMBER_SBT_SHUK_LIST);
		
		// 集計単位の取得
		String tani = bean.sendMessageString(CNW00901SFConst.SHUK_SELECT_VALUE, X31CWebConst.DATABEAN_GET_VALUE);
		// 購入者数の算出
		boolean buyFlag = bean.sendMessageBoolean(CNW00901SFConst.KNSHA_SELECT_VALUE, X31CWebConst.DATABEAN_GET_VALUE);
		
		// ヘッダ部作成
		String fileHeader = createHeader(tani, buyFlag);

		// 明細部作成
		StringBuffer body = new StringBuffer();

		for (int i = 0; i < beanArray.getCount(); i++)
		{
			String bodyStr = "";
			X31SDataBeanAccess subbean = beanArray.getDataBean(i);
			if (SHUK_TANI_DAY.equals(tani))
			{
				// 日別
				bodyStr = join(",",
						addQuart(subbean.sendMessageString(CNW00901SFConst.MEMBER_SBT_NM_03, X31CWebConst.DATABEAN_GET_VALUE)),
						addQuart(subbean.sendMessageString(CNW00901SFConst.CONT_SVC_CD_03, X31CWebConst.DATABEAN_GET_VALUE)),
						addQuart(subbean.sendMessageString(CNW00901SFConst.CONT_SVC_NM_03, X31CWebConst.DATABEAN_GET_VALUE)),
						addQuart(subbean.sendMessageString(CNW00901SFConst.DATE_FROM_03, X31CWebConst.DATABEAN_GET_VALUE)),
						addQuart(subbean.sendMessageString(CNW00901SFConst.DOW_03, X31CWebConst.DATABEAN_GET_VALUE)),
						subbean.sendMessageString(CNW00901SFConst.NEW_CNT_03, X31CWebConst.DATABEAN_GET_VALUE),
						subbean.sendMessageString(CNW00901SFConst.DSL_CNT_03, X31CWebConst.DATABEAN_GET_VALUE),
						subbean.sendMessageString(CNW00901SFConst.RUIKEI_CNT_03, X31CWebConst.DATABEAN_GET_VALUE),
						subbean.sendMessageString(CNW00901SFConst.ZOUGEN_CNT_03, X31CWebConst.DATABEAN_GET_VALUE),
						subbean.sendMessageString(CNW00901SFConst.SALSE_CNT_03, X31CWebConst.DATABEAN_GET_VALUE),
						subbean.sendMessageString(CNW00901SFConst.SALSE_AMNT_03, X31CWebConst.DATABEAN_GET_VALUE)
						);
			}
			else if (SHUK_TANI_WEK.equals(tani))
			{
				// 週別
				bodyStr = join(",",
						addQuart(subbean.sendMessageString(CNW00901SFConst.MEMBER_SBT_NM_03, X31CWebConst.DATABEAN_GET_VALUE)),
						addQuart(subbean.sendMessageString(CNW00901SFConst.CONT_SVC_CD_03, X31CWebConst.DATABEAN_GET_VALUE)),
						addQuart(subbean.sendMessageString(CNW00901SFConst.CONT_SVC_NM_03, X31CWebConst.DATABEAN_GET_VALUE)),
						addQuart(subbean.sendMessageString(CNW00901SFConst.DATE_FROM_03, X31CWebConst.DATABEAN_GET_VALUE)),
						addQuart(subbean.sendMessageString(CNW00901SFConst.DATE_TO_03, X31CWebConst.DATABEAN_GET_VALUE)),
						subbean.sendMessageString(CNW00901SFConst.NEW_CNT_03, X31CWebConst.DATABEAN_GET_VALUE),
						subbean.sendMessageString(CNW00901SFConst.DSL_CNT_03, X31CWebConst.DATABEAN_GET_VALUE),
						subbean.sendMessageString(CNW00901SFConst.RUIKEI_CNT_03, X31CWebConst.DATABEAN_GET_VALUE),
						subbean.sendMessageString(CNW00901SFConst.ZOUGEN_CNT_03, X31CWebConst.DATABEAN_GET_VALUE),
						subbean.sendMessageString(CNW00901SFConst.SALSE_CNT_03, X31CWebConst.DATABEAN_GET_VALUE),
						subbean.sendMessageString(CNW00901SFConst.SALSE_AMNT_03, X31CWebConst.DATABEAN_GET_VALUE)
						);
			}
			else
			{
				// 月別
				bodyStr = join(",",
						addQuart(subbean.sendMessageString(CNW00901SFConst.MEMBER_SBT_NM_03, X31CWebConst.DATABEAN_GET_VALUE)),
						addQuart(subbean.sendMessageString(CNW00901SFConst.CONT_SVC_CD_03, X31CWebConst.DATABEAN_GET_VALUE)),
						addQuart(subbean.sendMessageString(CNW00901SFConst.CONT_SVC_NM_03, X31CWebConst.DATABEAN_GET_VALUE)),
						addQuart(subbean.sendMessageString(CNW00901SFConst.DATE_FROM_03, X31CWebConst.DATABEAN_GET_VALUE)),
						subbean.sendMessageString(CNW00901SFConst.NEW_CNT_03, X31CWebConst.DATABEAN_GET_VALUE),
						subbean.sendMessageString(CNW00901SFConst.DSL_CNT_03, X31CWebConst.DATABEAN_GET_VALUE),
						subbean.sendMessageString(CNW00901SFConst.RUIKEI_CNT_03, X31CWebConst.DATABEAN_GET_VALUE),
						subbean.sendMessageString(CNW00901SFConst.ZOUGEN_CNT_03, X31CWebConst.DATABEAN_GET_VALUE),
						subbean.sendMessageString(CNW00901SFConst.SALSE_CNT_03, X31CWebConst.DATABEAN_GET_VALUE),
						subbean.sendMessageString(CNW00901SFConst.SALSE_AMNT_03, X31CWebConst.DATABEAN_GET_VALUE)
						);
			}
			if (buyFlag)
			{
				// 購入者算出
				bodyStr = join(",",
						bodyStr,
						subbean.sendMessageString(CNW00901SFConst.KNSHA_CNT_03, X31CWebConst.DATABEAN_GET_VALUE)
						);
			}
			// 改行コード付与
			bodyStr = join(",", bodyStr, STR_CRLF);
			body.append(bodyStr);
		}

		return join(STR_CRLF, fileHeader, body.toString());
	}
	
	private static String createHeader(String summary, boolean flag)
	{
		String header = "";
		if (SHUK_TANI_DAY.equals(summary))
		{
			// 日別
			header = join(",",
					addQuart("会員種別"),
					addQuart("コンテンツサービスID"),
					addQuart("コンテンツサービス名"),
					addQuart("日付"),
					addQuart("曜日"),
					addQuart("新規契約数"),
					addQuart("解約数"),
					addQuart("累計数"),
					addQuart("増減"),
					addQuart("売上件数"),
					addQuart("売上金額")
					);
		}
		else if (SHUK_TANI_WEK.equals(summary))
		{
			// 週別
			header = join(",",
					addQuart("会員種別"),
					addQuart("コンテンツサービスID"),
					addQuart("コンテンツサービス名"),
					addQuart("週開始日"),
					addQuart("週終了日"),
					addQuart("新規契約数"),
					addQuart("解約数"),
					addQuart("累計数"),
					addQuart("増減"),
					addQuart("売上件数"),
					addQuart("売上金額")
					);
		}
		else
		{
			// 月別
			header = join(",",
					addQuart("会員種別"),
					addQuart("コンテンツサービスID"),
					addQuart("コンテンツサービス名"),
					addQuart("年月"),
					addQuart("新規契約数"),
					addQuart("解約数"),
					addQuart("累計数"),
					addQuart("増減"),
					addQuart("売上件数"),
					addQuart("売上金額")
					);
		}
		if (flag)
		{
			header = join(",", header, addQuart("購入者数"));
		}
		
		return header;
	}
	
	/**
	 * 指定された文字列の配列をseparatorで結合します。
	 * @param separator 結合文字列
	 * @param strs 結合する文字列
	 * @return 結合された文字列
	 */
	public static String join(String separator, String...strs)
	{
		StringBuffer sb = new StringBuffer();
		
		boolean isFirst = true;
		for (String str : strs)
		{
			if (!isFirst)
			{
				sb.append(separator);
			}
			
			sb.append(str);
			isFirst = false;
		}
		
		return sb.toString();
	}

	private static String addQuart(String str)
	{
		return String.format("\"%s\"", str);
	}
}
