package jp.terasoluna.batch.functionsample.b002;

import jp.terasoluna.fw.batch.blogic.AbstractTransactionBLogic;
import jp.terasoluna.fw.batch.blogic.vo.BLogicParam;
import jp.terasoluna.fw.dao.UpdateDAO;
import jp.terasoluna.fw.file.dao.FileLineIterator;
import jp.terasoluna.fw.file.dao.FileQueryDAO;

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>
 * 
 * 事前準備：C:\tmp配下にinput.csvファイルを配置すること<br><br>
 * サンプル内容：ファイルを読み込み、DBに更新するサンプル。
 * 
 */
public class B002001BLogic extends AbstractTransactionBLogic {

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

	private static final int BATCH_NORMAL_END = 0;

	@Autowired
	@Qualifier("csvFileQueryDAO")
	private FileQueryDAO csvFileQueryDAO = null;

	@Autowired
	@Qualifier("updateDAO")
	private UpdateDAO updateDAO = null;

	@Override
	public int doMain(BLogicParam arg0) {
		
		//EMPLOYEEテーブルの初期化
		updateDAO.execute("B002001.deleteEmployees", null);
		
		
		FileLineIterator<CsvRecord> recordIterator = csvFileQueryDAO.execute(
				"C:\\tmp\\input.csv", CsvRecord.class);

		try {

			while (recordIterator.hasNext()) {
				CsvRecord record = recordIterator.next();
				log.info("ID:" + record.getId() + " FIMILYNAME:"
						+ record.getFamilyName() + " FIRSTNAME:"
						+ record.getFamilyName() + " AGE:" + record.getAge());

				updateDAO.execute("B002001.insertEmployees", record);

			}
		} finally {
			// ファイルのクローズ
			recordIterator.closeFile();
		}

		// 正常終了
		return BATCH_NORMAL_END;
	}

}
