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.LocalDate; import java.time.LocalDateTime; import java.util.HashMap; import java.util.Map; import java.util.Objects; /** * Info for an Agenda is constructed via a series of addenda that are either * added, updated, or removed from the parent Agenda container. */ public class AgendaInfoAddendum extends BaseLegislativeContent implements Serializable { private static final long serialVersionUID = 8661290465080663674L; /** Reference to the parent agenda. */ private AgendaId agendaId; /** Each addendum has a character designator. */ private String id; /** The week this agenda is for. */ private LocalDate weekOf; /** Committee information including bills up for consideration. */ private Map<CommitteeId, AgendaInfoCommittee> committeeInfoMap; /** --- Constructors --- */ public AgendaInfoAddendum() { super(); this.committeeInfoMap = new HashMap<>(); } public AgendaInfoAddendum(AgendaId agendaId, String addendumId, LocalDate weekOf, LocalDateTime pubDate) { this(); this.setAgendaId(agendaId); this.setId(addendumId); this.setWeekOf(weekOf); this.setYear(agendaId.getYear()); this.setSession(SessionYear.of(this.getYear())); this.setModifiedDateTime(pubDate); this.setPublishedDateTime(pubDate); } /** --- Functional Getters/Setters --- */ public void putCommittee(AgendaInfoCommittee infoCommittee) { this.committeeInfoMap.put(infoCommittee.getCommitteeId(), infoCommittee); } public AgendaInfoCommittee getCommittee(CommitteeId committeeId) { return this.committeeInfoMap.get(committeeId); } public void removeCommittee(CommitteeId committeeId) { this.committeeInfoMap.remove(committeeId); } /** --- Overrides --- */ @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; final AgendaInfoAddendum other = (AgendaInfoAddendum) obj; return Objects.equals(this.year, other.year) && Objects.equals(this.agendaId, other.agendaId) && Objects.equals(this.id, other.id) && Objects.equals(this.weekOf, other.weekOf) && Objects.equals(this.committeeInfoMap, other.committeeInfoMap); } @Override public int hashCode() { return Objects.hash(year, agendaId, id, weekOf, committeeInfoMap); } /** --- 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 LocalDate getWeekOf() { return weekOf; } public void setWeekOf(LocalDate weekOf) { this.weekOf = weekOf; } public Map<CommitteeId, AgendaInfoCommittee> getCommitteeInfoMap() { return committeeInfoMap; } public void setCommitteeInfoMap(Map<CommitteeId, AgendaInfoCommittee> committeeInfoMap) { this.committeeInfoMap = committeeInfoMap; } }