package jp.terasoluna.batch.functionsample.b003;

import java.sql.Timestamp;

import jp.terasoluna.fw.dao.UpdateDAO;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * ジョブ管理テーブルに１行追加する処理
 * 
 */
public class BatchEntryServiceImpl implements BatchEntryService {

	/**
	 * ログ
	 */
	private static Log log = LogFactory.getLog(BatchEntryServiceImpl.class);

	/**
	 * 更新系DAO
	 */
	protected UpdateDAO updateDAO = null;

	/**
	 * 更新系DAOを設定する。
	 * 
	 * @param updateDAO
	 */
	public void setUpdateDAO(UpdateDAO updateDAO) {
		this.updateDAO = updateDAO;
	}

	
	private CommonBean commonBean;

	/**
	 * @param commonBean the commonBean to set
	 */
	public void setCommonBean(CommonBean commonBean) {
		this.commonBean = commonBean;
	}

	/**
	 * ジョブ管理テーブルを登録する
	 * 
	 * @param param
	 *            登録パラメータ
	 * @return BatchEntryResult 登録結果
	 */
	public BatchEntryResult writeJobTable(BatchEntryParam param) {

		if (log.isDebugEnabled()) {
			log.debug(param.toString());
		}

		// 返却オブジェクト
		BatchEntryResult result = new BatchEntryResult();

		// ステータス（ジョブの状態） 設定
		param.setCurAppStatus("0");

		// ジョブシステムコード採番
		String jobSysCd = this.commonBean.executeGetSysCodeVariablePrecision(
				"JOB_CONTROL", 10);

		if (jobSysCd != null) {
			// ジョブシステムコード設定
			param.setJobSysCd(jobSysCd);

			// システム時刻取得処理
			Timestamp currentTime = this.commonBean.executeGetCurrentTime();

			param.setAddDateTime(currentTime);
			param.setUpdDateTime(currentTime);

			int updateCnt = 0;

			// 更新SQL実行処理
			updateCnt = executeUpdateSql("B003002.insertJobTable",
					param);

			if (updateCnt == 1) {
				// 正常終了
				result.setEndCode(BATCH_ENTRY_END_CODE_NORMAL);
			} else {
				// 異常終了
				result.setEndCode(BATCH_ENTRY_END_CODE_ABNORMAL);
			}

			// ジョブシステムコード設定
			result.setJobSysCd(jobSysCd);
		} else {
			// 異常終了
			result.setEndCode(BATCH_ENTRY_END_CODE_ABNORMAL);
		}

		if (log.isDebugEnabled()) {
			log.debug(result.toString());
		}

		return result;
	}

	/**
	 * 更新SQL実行処理.<br>
	 * 
	 * @param sqlId
	 *            SQL-ID
	 * @param param
	 *            パラメータオブジェクト
	 * @return 処理件数
	 */
	protected int executeUpdateSql(String sqlId, Object param) {
		return this.updateDAO.execute(sqlId, param);
	}

}
