/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JKKBatOutputUtil
*	ソースファイル名	：JKKBatOutputUtil.java
*	作成者				：富士通　
*	作成日				：2011年04月19日
*＜機能概要＞
*　ファイル出力部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/04/19   富士通		新規作成
*********************************************************************/
package eo.business.common;

import java.io.File;
import java.util.ArrayList;

import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatOutputFileUtil;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.log.JBSbatLogPrintControl;
import eo.framework.util.JBSbatAplConst;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* <dd>クラス名		：ファイル出力部品
* <dd>クラス説明	：フレームワークで処理できないファイルの出力処理を行う。
* @version  	1.00 2011/04/18
* @author 富士通
*/
public class JKKBatOutputUtil 
{

	/**
	 * ファイル出力処理
	 * ファイル定義を元に編集を行い、指定されたディレクトリ、ファイル名で出力を行う。
	 * @param cmnItem 業務共通電文
	 * @param outputBean　編集対象情報
	 * @param fileId ファイルID
	 * @param directory 出力ディレクトリ(「/」で終わっていること)
	 * @param fileName 出力ファイル名
	 * @return true：正常終了 false：入力チェックエラー
	 * @throws Exception
	 */
	public static boolean editOutFile(JBSbatCommonItem cmnItem, JBSbatOutputItem outputBean, String fileId, 
			String directory, String fileName) throws Exception 
	{
		// ログ部品の取得
		JBSbatLogPrintControl log = cmnItem.getLogPrint();
		log.printDebugLog("ファイル出力処理を行います。");
		try 
		{
			// 編集対象情報がnull、またはファイルID、出力ディレクトリ、出力ファイルが空文字となる場合、リターン
			if (outputBean == null || JBSbatStringUtil.Rtrim(fileId).equals("")
					|| JBSbatStringUtil.Rtrim(directory).equals("")
					|| JBSbatStringUtil.Rtrim(fileName).equals("")) 
			{

				log.printDebugLog("入力パラメータが正しくありません。");
				return false;
			}
			
			// ディレクトリが存在しない場合
			if(new File(directory).exists() == false) 
			{
				log.printDebugLog("出力ディレクトリが存在しません。");
				return false;
			}

			// 定義ファイル名
			String fileDefName = fileId + ".def";
			// 出力ファイル名(fullPath)
			String outFileName = directory + fileName;
			
			// 出力ファイルユーティリティの生成
			JBSbatOutputFileUtil outFileObj = new JBSbatOutputFileUtil(outFileName);
			
			//定義ファイル名(fullPath)を取得する。
			String fileDefNameFull = JBSbatAplConst.getAplConstValue("OTD") + fileDefName;
			// 定義ファイルオブジェクトを生成する
			JBSbatDefFileUtil outFileDef = new JBSbatDefFileUtil(fileDefNameFull,outFileObj);
			
			//Writerオブジェクトを生成する。
			outFileObj.createWriter();
			
			// 出力結果リストを取得する
			ArrayList<?> outBeanList = outputBean.getOutMapList(); // 出力結果リスト

			// 出力結果レコードの出力および次レコード処理用情報を設定する
			for (int i = 0; i < outBeanList.size(); i++) 
			{
				JBSbatServiceInterfaceMap svcBeanIf = (JBSbatServiceInterfaceMap)outBeanList.get(i);
				// ファイルに出力する
				outFileObj.print(svcBeanIf,outFileDef);
			}
			
			// ファイルをクローズする.
			outFileObj.close();
			
			log.printDebugLog("ファイル出力処理が終了しました。");
			return true;
			
		} 
		catch(Exception e) 
		{
			//例外メッセージの取得
			String message = e.getMessage();
			log.printDebugLog("システムエラーが発生しました。（" + message +"）");
			throw e;
		}
	}
	
}
