/**
 * 
 */
package org.springframework.samples.kyuriboard.dao.ibatis;

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.DataRetrievalFailureException;

/**
 * @author DAMI(archy712@naver.com)
 *
 */
public class SqlMapSequenceDao extends SqlMapClientDaoSupport {
	
	/**
	 * 씨퀀스의 다음 ID를 얻어오고, 해당 시퀀스의 번호를 1 증가 시킨다.
	 * @param name 해당 시퀀스 명
	 * @return 시퀀스의 증가된 값
	 * @throws DataAccessException 해당 시퀀스 Row를 찾을 수 없슴.
	 */
	public int getNextId(String name) throws DataAccessException {
		Sequence sequence = new Sequence(name, -1);
		sequence = (Sequence) getSqlMapClientTemplate().queryForObject("getSequence", sequence);
		if (sequence == null) {
			throw new DataRetrievalFailureException("Could not get next value of sequence [" + name + "] : sequence does not exist");
		}
		Object parameterObject = new Sequence(name, sequence.getNextId() + 1);
		getSqlMapClientTemplate().update("updateSequence", parameterObject, 1);
		return sequence.getNextId();
	}

}
