package jp.terasoluna.batch.functionsample.b002;

import java.util.ArrayList;
import java.util.List;

import jp.terasoluna.fw.batch.blogic.BLogic;
import jp.terasoluna.fw.batch.blogic.vo.BLogicParam;
import jp.terasoluna.fw.dao.QueryDAO;
import jp.terasoluna.fw.file.dao.FileLineWriter;
import jp.terasoluna.fw.file.dao.FileUpdateDAO;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

/**
 * ファイル-DB関連ジョブのサンプル<br>
 * <br>
 * 
 * 事前準備：EMPLOYEEテーブルを作成しておくこと<br><br>
 * サンプル内容： DBを参照し、ファイル(C:\\tmp\\result002002.csv)に書き出すサンプル。
 * 
 */
public class B002002BLogic implements BLogic {

	private Log log = LogFactory.getLog(B002002BLogic.class);

	private static final int BATCH_NORMAL_END = 0;
	
	
	
	@Autowired
	@Qualifier("queryDAO")
	private QueryDAO queryDAO = null;
	
	@Autowired
	@Qualifier("csvFileUpdateDAO")
	private FileUpdateDAO csvFileUpdateDAO = null;


	public int execute(BLogicParam arg0) {

		List<CsvRecord> record = queryDAO.executeForObjectList("B002002.selectEmployees", null);
		
		FileLineWriter<CsvRecord> fileLineWriter = csvFileUpdateDAO.execute(
				"C:\\tmp\\result002002.csv", CsvRecord.class);

		List<String> header = new ArrayList<String>();
		header.add("header");
		List<String> footer = new ArrayList<String>();
		footer.add("footer");

		try {
			// ヘッダ部の出力
			fileLineWriter.printHeaderLine(header);

			for(CsvRecord i : record){
				
				log.info("ID:" + i.getId() + " FIMILYNAME:"
						+ i.getFamilyName() + " FIRSTNAME:"
						+ i.getFirstName() + " AGE:" + i.getAge());

				// データ部の出力
				fileLineWriter.printDataLine(i);
			}
			
			// フッダ部の出力
			fileLineWriter.printTrailerLine(footer);
		} finally {
			// ファイルのクローズ
			fileLineWriter.closeFile();
		}

		// 正常終了
		return BATCH_NORMAL_END;
	}

}
