package com.braintreegateway; import com.braintreegateway.exceptions.NotFoundException; import com.braintreegateway.util.Http; import com.braintreegateway.util.NodeWrapper; import java.util.ArrayList; import java.util.List; /** * Provides methods to create, delete, find, and update {@link Customer} * objects. This class does not need to be instantiated directly. Instead, use * {@link BraintreeGateway#customer()} to get an instance of this class: * * <pre> * BraintreeGateway gateway = new BraintreeGateway(...); * gateway.customer().create(...) * </pre> * * For more detailed information on {@link Customer Customers}, see <a href="http://www.braintreepayments.com/gateway/customer-api" target="_blank">http://www.braintreepaymentsolutions.com/gateway/customer-api</a> */ public class CustomerGateway { private Configuration configuration; private Http http; public CustomerGateway(Http http, Configuration configuration) { this.configuration = configuration; this.http = http; } /** * Finds all Customers and returns a {@link ResourceCollection}. * * @return a {@link ResourceCollection}. */ public ResourceCollection<Customer> all() { NodeWrapper response = http.post(configuration.getMerchantPath() + "/customers/advanced_search_ids"); return new ResourceCollection<Customer>(new CustomerPager(this, new CustomerSearchRequest()), response); } List<Customer> fetchCustomers(CustomerSearchRequest query, List<String> ids) { query.ids().in(ids); NodeWrapper response = http.post(configuration.getMerchantPath() + "/customers/advanced_search", query); List<Customer> items = new ArrayList<Customer>(); for (NodeWrapper node : response.findAll("customer")) { items.add(new Customer(node)); } return items; } /** * Please use gateway.transparentRedirect().confirmCustomer() instead */ @Deprecated public Result<Customer> confirmTransparentRedirect(String queryString) { TransparentRedirectRequest trRequest = new TransparentRedirectRequest(configuration, queryString); NodeWrapper node = http.post(configuration.getMerchantPath() + "/customers/all/confirm_transparent_redirect_request", trRequest); return new Result<Customer>(node, Customer.class); } /** * Creates a {@link Customer}. * * @param request * the request. * @return a {@link Result}. */ public Result<Customer> create(CustomerRequest request) { NodeWrapper node = http.post(configuration.getMerchantPath() + "/customers", request); return new Result<Customer>(node, Customer.class); } /** * Deletes a {@link Customer} by id. * * @param id * the id of the {@link Customer}. * @return a {@link Result}. */ public Result<Customer> delete(String id) { http.delete(configuration.getMerchantPath() + "/customers/" + id); return new Result<Customer>(); } /** * Finds a {@link Customer} by id. * * @param id * the id of the {@link Customer}. * @return the {@link Customer} or raises a * {@link com.braintreegateway.exceptions.NotFoundException}. */ public Customer find(String id) { if(id == null || id.trim().equals("")) throw new NotFoundException(); return new Customer(http.get(configuration.getMerchantPath() + "/customers/" + id)); } /** * Finds all Transactions that match the query and returns a {@link ResourceCollection}. * See: <a href="http://www.braintreepayments.com/gateway/transaction-api#searching" target="_blank">http://www.braintreepaymentsolutions.com/gateway/transaction-api#searching</a> * @return a {@link ResourceCollection}. */ public ResourceCollection<Customer> search(CustomerSearchRequest query) { NodeWrapper node = http.post(configuration.getMerchantPath() + "/customers/advanced_search_ids", query); return new ResourceCollection<Customer>(new CustomerPager(this, query), node); } /** * Please use gateway.transparentRedirect().url() instead */ @Deprecated public String transparentRedirectURLForCreate() { return configuration.getBaseURL() + configuration.getMerchantPath() + "/customers/all/create_via_transparent_redirect_request"; } /** * Please use gateway.transparentRedirect().url() instead */ @Deprecated public String transparentRedirectURLForUpdate() { return configuration.getBaseURL() + configuration.getMerchantPath() + "/customers/all/update_via_transparent_redirect_request"; } /** * Updates a {@link Customer}. * * @param id * the id of the {@link Customer}. * @param request * the request. * @return a {@link Result}. */ public Result<Customer> update(String id, CustomerRequest request) { NodeWrapper node = http.put(configuration.getMerchantPath() + "/customers/" + id, request); return new Result<Customer>(node, Customer.class); } }