package gov.nysenate.openleg.dao.common; import gov.nysenate.openleg.dao.base.SqlBaseDao; import gov.nysenate.openleg.model.bill.BillVote; import gov.nysenate.openleg.model.bill.BillVoteCode; import gov.nysenate.openleg.model.bill.BillVoteId; import gov.nysenate.openleg.model.entity.SessionMember; import gov.nysenate.openleg.model.entity.MemberNotFoundEx; import gov.nysenate.openleg.service.entity.member.data.MemberService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.jdbc.core.RowCallbackHandler; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.TreeMap; /** * Iterates through the result set of a bill vote query and returns a collection of BillVotes. */ public class BillVoteRowHandler extends SqlBaseDao implements RowCallbackHandler { private static final Logger logger = LoggerFactory.getLogger(BillVoteRowHandler.class); private static final BillVoteIdRowMapper voteIdRowMapper = new BillVoteIdRowMapper(); private final TreeMap<BillVoteId, BillVote> billVoteMap = new TreeMap<>(); private final MemberService memberService; public BillVoteRowHandler(MemberService memberService) { this.memberService = memberService; } public TreeMap<BillVoteId, BillVote> getBillVoteMap() { return billVoteMap; } public List<BillVote> getBillVotes() { return new ArrayList<>(billVoteMap.values()); } @Override public void processRow(ResultSet rs) throws SQLException { BillVoteId billVoteId = voteIdRowMapper.mapRow(rs, 1); if (!billVoteMap.containsKey(billVoteId)) { logger.trace("Encountered bill vote id {}", billVoteId); BillVote billVote = new BillVote(billVoteId); SqlBaseDao.setModPubDatesFromResultSet(billVote, rs); billVoteMap.put(billVote.getVoteId(), billVote); } BillVote billVote = billVoteMap.get(billVoteId); try { SessionMember voter = memberService.getMemberBySessionId(rs.getInt("session_member_id")); BillVoteCode voteCode = BillVoteCode.getValue(rs.getString("vote_code")); billVote.addMemberVote(voteCode, voter); } catch (MemberNotFoundEx memberNotFoundEx) { logger.error("Failed to add member vote since member could not be found!", memberNotFoundEx); } } }