package gov.nysenate.openleg.service.entity.member.data;
import com.google.common.collect.TreeMultimap;
import gov.nysenate.openleg.dao.base.LimitOffset;
import gov.nysenate.openleg.dao.base.SortOrder;
import gov.nysenate.openleg.model.base.SessionYear;
import gov.nysenate.openleg.model.entity.Chamber;
import gov.nysenate.openleg.model.entity.FullMember;
import gov.nysenate.openleg.model.entity.SessionMember;
import gov.nysenate.openleg.model.entity.MemberNotFoundEx;
import gov.nysenate.openleg.processor.base.ParseError;
import java.util.List;
public interface MemberService
{
/**
* Retrieves Member using a unique member id and session year.
*
* @param memberId int
* @param sessionYear SessionYear
* @return Member
* @throws MemberNotFoundEx If no matching member was found.
*/
public SessionMember getMemberById(int memberId, SessionYear sessionYear) throws MemberNotFoundEx;
/**
* Retrieves map of session year -> Member for a given member id.
*
* @param id int
* @return Map<Integer, Member>
*/
public TreeMultimap<SessionYear, SessionMember> getMemberById(int id) throws MemberNotFoundEx;
/**
* Retrieve a member by session member id
* If the specified session member id points to an alternate alias,
* then the primary session member will be returned instead
*
* @param sessionMemberId
* @return Member
* @throws MemberNotFoundEx if no session member exists with sessionMemberId
*/
public SessionMember getMemberBySessionId(int sessionMemberId) throws MemberNotFoundEx;
/**
* Retrieve Member (which can represent either a senator or assemblymember) using the LBDC shortname,
* the session year, and the chamber (Senate/Assembly).
*
* @param lbdcShortName String - The short name of the member as represented in the source data.
* @param sessionYear SessionYear - The session year in which this member was active.
* @param chamber Chamber
* @return Member
* @throws MemberNotFoundEx If no matching member was found.
*/
public SessionMember getMemberByShortName(String lbdcShortName, SessionYear sessionYear, Chamber chamber) throws MemberNotFoundEx;
/**
* This functions in the same way as {@link #getMemberByShortName(String, gov.nysenate.openleg.model.base.SessionYear, gov.nysenate.openleg.model.entity.Chamber)}
* with the exception that, instead of throwing an exception when a member is not found,
* this method creates a new Member in storage and returns that
* This should only be used in the processor layer
*
* @param lbdcShortName String - The short name of the member as represented in the source data.
* @param sessionYear SessionYear - The session year in which this member was active.
* @param chamber Chamber
* @return Member
* @throws ParseError - if the provided short name does not match specification
*/
public SessionMember getMemberByShortNameEnsured(String lbdcShortName, SessionYear sessionYear, Chamber chamber) throws ParseError;
/**
* Retrieves all members from all years and both chambers.
* Useful for rebuilding the search index.
* @return
*/
public List<SessionMember> getAllMembers(SortOrder sortOrder, LimitOffset limOff);
/**
* @return List<FullMember> - a list of all members containing all linked session members
*/
public List<FullMember> getAllFullMembers();
/**
* Adds the given members to the data store
* This method should only be used for administrative purposes
* because it will trigger cache and search index rebuilds
* @param members List<Member>
*/
public void updateMembers(List<SessionMember> members);
}