package com.p4square.ccbapi.model; import java.time.LocalDate; import java.util.Arrays; /** * GetIndividualProfilesRequest is the set of options for retrieving individual profiles. */ public class GetIndividualProfilesRequest { // Used with individual_profiles private LocalDate modifiedSince; private Boolean includeInactive; private int page; private int perPage; // Used with individual_profile_from_id private int id; // Used with individual_profile_from_login_password private String login; private char[] password; // Used with individual_profile_from_micr private String routingNumber; private String accountNumber; public int getId() { return id; } /** * Request the IndividualProfile for the given individual id. * * This option is mutually exclusive with {@link #withLoginPassword(String, char[])} * and {@link #withMICR(String, String)}. * * @param id The id. * @return this. */ public GetIndividualProfilesRequest withIndividualId(final int id) { this.id = id; this.password = new char[0]; this.login = this.accountNumber = this.routingNumber = null; return this; } public String getLogin() { return login; } public char[] getPassword() { return password; } /** * Request the IndividualProfile for the given login and password. * * This option is mutually exclusive with {@link #withIndividualId(int)} * and {@link #withMICR(String, String)}. * * @param login The individual's login. * @param password The individual's password. * @return this. */ public GetIndividualProfilesRequest withLoginPassword(final String login, final char[] password) { this.login = login; this.password = password; this.id = 0; this.accountNumber = this.routingNumber = null; return this; } public String getRoutingNumber() { return routingNumber; } public String getAccountNumber() { return accountNumber; } /** * Request the IndividualProfile for the given bank account information. * * This option is mutually exclusive with {@link #withIndividualId(int)} * and {@link #withLoginPassword(String, char[])}. * * @param routingNumber The individual's bank routing number. * @param accountNumber The individual's bank account number. * @return this. */ public GetIndividualProfilesRequest withMICR(final String routingNumber, final String accountNumber) { this.routingNumber = routingNumber; this.accountNumber = accountNumber; return this; } public LocalDate getModifiedSince() { return modifiedSince; } /** * Request only IndividualProfiles modified since a given date. * * This option is only applicable when requesting all individuals. * * @param modifiedSince The date. * @return this. */ public GetIndividualProfilesRequest withModifiedSince(final LocalDate modifiedSince) { this.modifiedSince = modifiedSince; return this; } public Boolean getIncludeInactive() { return includeInactive; } public GetIndividualProfilesRequest withIncludeInactive(final boolean includeInactive) { this.includeInactive = includeInactive; return this; } public int getPage() { return page; } /** * Select the page of results when perPage is also specified. * * This option is only applicable when requesting all individuals. * * Defaults to 1 if {@link #withPerPage(int)} is specified on the request. * * @param page The starting page number. * @return this. */ public GetIndividualProfilesRequest withPage(final int page) { this.page = page; return this; } public int getPerPage() { return perPage; } /** * Limit the number of IndividualProfiles returned. * * This option is only applicable when requesting all individuals. * * Defaults to 25 if {@link #withPage(int)} is specified on the request. * * @param perPage The maximum number to return. * @return this. */ public GetIndividualProfilesRequest withPerPage(int perPage) { this.perPage = perPage; return this; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } GetIndividualProfilesRequest that = (GetIndividualProfilesRequest) o; if (getPage() != that.getPage()) { return false; } if (getPerPage() != that.getPerPage()) { return false; } if (getId() != that.getId()) { return false; } if (getModifiedSince() != null ? !getModifiedSince().equals(that.getModifiedSince()) : that.getModifiedSince() != null) { return false; } if (getIncludeInactive() != null ? !getIncludeInactive().equals(that.getIncludeInactive()) : that.getIncludeInactive() != null) { return false; } if (getLogin() != null ? !getLogin().equals(that.getLogin()) : that.getLogin() != null) { return false; } if (getPassword() != null ? !Arrays.equals(getPassword(), that.getPassword()) : that.getPassword() != null) { return false; } if (getRoutingNumber() != null ? !getRoutingNumber().equals(that.getRoutingNumber()) : that.getRoutingNumber() != null) { return false; } return getAccountNumber() != null ? getAccountNumber().equals(that.getAccountNumber()) : that.getAccountNumber() == null; } @Override public int hashCode() { int result = getModifiedSince() != null ? getModifiedSince().hashCode() : 0; result = 31 * result + (getIncludeInactive() != null ? getIncludeInactive().hashCode() : 0); result = 31 * result + getPage(); result = 31 * result + getPerPage(); result = 31 * result + getId(); result = 31 * result + (getLogin() != null ? getLogin().hashCode() : 0); result = 31 * result + (getPassword() != null ? Arrays.hashCode(getPassword()) : 0); result = 31 * result + (getRoutingNumber() != null ? getRoutingNumber().hashCode() : 0); result = 31 * result + (getAccountNumber() != null ? getAccountNumber().hashCode() : 0); return result; } }