package gov.nysenate.openleg.model.entity; import com.google.common.collect.ComparisonChain; import org.apache.commons.lang3.StringUtils; import java.io.Serializable; import java.util.Objects; public class CommitteeId implements Serializable, Comparable<CommitteeId> { private static final long serialVersionUID = -4463517719215556844L; /** The chamber this committee belongs to. */ protected Chamber chamber; /** The official name of this committee according to LBDC. */ protected String name; /* --- Constructors --- */ public CommitteeId(Chamber chamber, String name) { if (name == null) { throw new IllegalArgumentException("Name cannot be null!"); } if (chamber == null) { throw new IllegalArgumentException("Chamber cannot be null!"); } this.chamber = chamber; this.name = name; } public CommitteeId(CommitteeId committeeId) { this (committeeId.getChamber(), committeeId.getName()); } /* --- Overrides --- */ @Override public String toString() { return chamber.toString() + "-" + name; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; final CommitteeId other = (CommitteeId) obj; return Objects.equals(this.chamber, other.chamber) && Objects.equals(StringUtils.lowerCase(this.name), StringUtils.lowerCase(other.name)); } @Override public int hashCode() { return Objects.hash(chamber, StringUtils.lowerCase(name)); } @Override public int compareTo(CommitteeId o) { return ComparisonChain.start() .compare(this.getChamber().name(), o.getChamber().name()) .compare(StringUtils.lowerCase(this.getName()), StringUtils.lowerCase(o.getName())) .result(); } /* --- Basic Getters/Setters --- */ public Chamber getChamber() { return chamber; } public String getName() { return name; } }