package rewardsadmin.app.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;
import org.springframework.transaction.annotation.Transactional;
import rewardsadmin.app.Reward;
import rewardsadmin.app.RewardLookupService;
import common.datetime.SimpleDate;
import common.money.MonetaryAmount;
/**
* A JDBC-based implementation of the reward lookup service. Uses Spring JDBC to query rewards against a data source.
*/
public class JdbcRewardLookupService extends SimpleJdbcDaoSupport implements RewardLookupService {
/**
* Maps rows in returned JDBC result sets to Reward objects.
*/
private ParameterizedRowMapper<Reward> rewardMapper = new RewardMapper();
@SuppressWarnings("deprecation")
@Transactional
public Reward lookupReward(String confirmationNumber) {
return getSimpleJdbcTemplate()
.queryForObject(
"select CONFIRMATION_NUMBER, ACCOUNT_NUMBER, DINING_MERCHANT_NUMBER, REWARD_DATE, REWARD_AMOUNT from T_REWARD where CONFIRMATION_NUMBER = ?",
rewardMapper, confirmationNumber);
}
/**
* Enapsulates the lgoic to map a row in a ResultSet to a Reward object.
*/
private static class RewardMapper implements ParameterizedRowMapper<Reward> {
public Reward mapRow(ResultSet rs, int rowNum) throws SQLException {
return new Reward(rs.getString(1), rs.getString(2), rs.getString(3), SimpleDate.valueOf(rs.getDate(4)),
new MonetaryAmount(rs.getDouble(5)));
}
}
}