package com.braintreegateway; import com.braintreegateway.exceptions.NotFoundException; import com.braintreegateway.util.Http; import com.braintreegateway.util.NodeWrapper; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; /** * Provides methods to interact with {@link Subscription Subscriptions}. * Including create, find, update, cancel, etc. * This class does not need to be instantiated directly. * Instead, use {@link BraintreeGateway#subscription()} to get an instance of this class: * * <pre> * BraintreeGateway gateway = new BraintreeGateway(...); * gateway.subscription().create(...) * </pre> * * For more detailed information on {@link Subscription Subscriptions}, see <a href="http://www.braintreepayments.com/gateway/subscription-api" target="_blank">http://www.braintreepaymentsolutions.com/gateway/subscription-api</a> */ public class SubscriptionGateway { private Http http; private Configuration configuration; public SubscriptionGateway(Http http, Configuration configuration) { this.http = http; this.configuration = configuration; } /** * Cancels the {@link Subscription} with the given id. * @param id of the {@link Subscription} to cancel. * @return a {@link Result}. */ public Result<Subscription> cancel(String id) { NodeWrapper node = http.put(configuration.getMerchantPath() + "/subscriptions/" + id + "/cancel"); return new Result<Subscription>(node, Subscription.class); } /** * Creates a {@link Subscription}. * @param request the request. * @return a {@link Result}. */ public Result<Subscription> create(SubscriptionRequest request) { NodeWrapper node = http.post(configuration.getMerchantPath() + "/subscriptions", request); return new Result<Subscription>(node, Subscription.class); } public Result<Subscription> delete(String customerId, String id) { http.delete(configuration.getMerchantPath() + "/subscriptions/" + id); return new Result<Subscription>(); } /** * Finds a {@link Subscription} by id. * @param id the id of the {@link Subscription}. * @return the {@link Subscription} or raises a {@link com.braintreegateway.exceptions.NotFoundException}. */ public Subscription find(String id) { if(id == null || id.trim().equals("")) throw new NotFoundException(); return new Subscription(http.get(configuration.getMerchantPath() + "/subscriptions/" + id)); } /** * Updates a {@link Subscription}. * @param id the id of the {@link Subscription}. * @param request the request. * @return a {@link Result}. */ public Result<Subscription> update(String id, SubscriptionRequest request) { NodeWrapper node = http.put(configuration.getMerchantPath() + "/subscriptions/" + id, request); return new Result<Subscription>(node, Subscription.class); } /** * Search for a {@link Subscription}. * @param searchRequest the {@link SubscriptionSearchRequest}. * @return a {@link Result}. */ public ResourceCollection<Subscription> search(SubscriptionSearchRequest searchRequest) { NodeWrapper node = http.post(configuration.getMerchantPath() + "/subscriptions/advanced_search_ids", searchRequest); return new ResourceCollection<Subscription>(new SubscriptionPager(this, searchRequest), node); } List<Subscription> fetchSubscriptions(SubscriptionSearchRequest search, List<String> ids) { search.ids().in(ids); NodeWrapper response = http.post(configuration.getMerchantPath() + "/subscriptions/advanced_search", search); List<Subscription> items = new ArrayList<Subscription>(); for (NodeWrapper node : response.findAll("subscription")) { items.add(new Subscription(node)); } return items; } private Result<Transaction> retryCharge(SubscriptionTransactionRequest txnRequest) { NodeWrapper response = http.post(configuration.getMerchantPath() + "/transactions", txnRequest); return new Result<Transaction>(response, Transaction.class); } public Result<Transaction> retryCharge(String subscriptionId) { return retryCharge(new SubscriptionTransactionRequest(). subscriptionId(subscriptionId)); } public Result<Transaction> retryCharge(String subscriptionId, BigDecimal amount) { return retryCharge(new SubscriptionTransactionRequest(). subscriptionId(subscriptionId). amount(amount)); } }