package gov.nysenate.openleg.model.agenda; import gov.nysenate.openleg.model.base.BaseLegislativeContent; import gov.nysenate.openleg.model.base.SessionYear; import gov.nysenate.openleg.model.entity.CommitteeId; import java.io.Serializable; import java.time.LocalDateTime; import java.util.HashMap; import java.util.Map; import java.util.Objects; /** * Votes during committee meetings are sent via these agenda vote addenda. */ public class AgendaVoteAddendum extends BaseLegislativeContent implements Serializable { private static final long serialVersionUID = -4592278008570984247L; /** Reference to the parent agenda. */ private AgendaId agendaId; /** Each addendum has a character designator. */ private String id; /** Committee vote information keyed by the committee id. */ private Map<CommitteeId, AgendaVoteCommittee> committeeVoteMap; /** --- Constructors --- */ public AgendaVoteAddendum() { super(); this.committeeVoteMap = new HashMap<>(); } public AgendaVoteAddendum(AgendaId agendaId, String addendumId, LocalDateTime pubDate) { this(); this.setAgendaId(agendaId); this.setId(addendumId); this.setYear(agendaId.getYear()); this.setSession(SessionYear.of(this.getYear())); this.setModifiedDateTime(pubDate); this.setPublishedDateTime(pubDate); } /** --- Functional Getters/Setters --- */ public void putCommittee(AgendaVoteCommittee committee) { this.committeeVoteMap.put(committee.getCommitteeId(), committee); } public void removeCommittee(CommitteeId committeeId) { this.committeeVoteMap.remove(committeeId); } /** --- Overrides --- */ @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; final AgendaVoteAddendum other = (AgendaVoteAddendum) obj; return Objects.equals(this.agendaId, other.agendaId) && Objects.equals(this.id, other.id) && Objects.equals(this.committeeVoteMap, other.committeeVoteMap); } @Override public int hashCode() { return Objects.hash(agendaId, id, committeeVoteMap); } /** --- Basic Getters/Setters --- */ public AgendaId getAgendaId() { return agendaId; } public void setAgendaId(AgendaId agendaId) { this.agendaId = agendaId; } public String getId() { return id; } public void setId(String id) { this.id = id; } public Map<CommitteeId, AgendaVoteCommittee> getCommitteeVoteMap () { return committeeVoteMap; } public void setCommitteeVoteMap (Map<CommitteeId, AgendaVoteCommittee> committeeVoteMap) { this.committeeVoteMap = committeeVoteMap; } }