package com.fullcontact.api.libs.fullcontact4j.http.name; import com.fullcontact.api.libs.fullcontact4j.FCConstants; import com.fullcontact.api.libs.fullcontact4j.FullContactApi; import com.fullcontact.api.libs.fullcontact4j.enums.Casing; import com.fullcontact.api.libs.fullcontact4j.http.FCRequest; import retrofit.Callback; import java.util.Map; public class NameDeduceRequest extends FCRequest<NameResponse> { protected NameDeduceRequest(Map<String, String> params) { super(params); } @Override protected void makeRequest(FullContactApi api, Callback<NameResponse> callback) { api.getDeducedName(params, callback); } public static class Builder extends BaseBuilder<Builder, NameDeduceRequest> { @Override protected NameDeduceRequest createInstance() { return new NameDeduceRequest(params); } public Builder email(String email) { params.put(FCConstants.PARAM_NAME_EMAIL, email); return this; } public Builder username(String username) { params.put(FCConstants.PARAM_NAME_USERNAME, username); return this; } public Builder casing(Casing casing) { params.put(FCConstants.PARAM_NAME_CASING, casing.name().toLowerCase()); return this; } @Override protected void validate() { String email = params.get(FCConstants.PARAM_NAME_EMAIL); String username = params.get(FCConstants.PARAM_NAME_USERNAME); boolean hasEmail = email != null && !email.isEmpty(); boolean hasUsername = username != null && !username.isEmpty(); //if both email and username are present, or neither of them are... if(hasEmail == hasUsername) { throw new IllegalArgumentException("Request must specify exactly one: email or username"); } } protected Builder self() { return this; } } }