
com.squareup.square.AsyncSubscriptionsClient Maven / Gradle / Ivy
Show all versions of square Show documentation
/**
* This file was auto-generated by Fern from our API Definition.
*/
package com.squareup.square;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.squareup.square.core.ClientOptions;
import com.squareup.square.core.MediaTypes;
import com.squareup.square.core.ObjectMappers;
import com.squareup.square.core.QueryStringMapper;
import com.squareup.square.core.RequestOptions;
import com.squareup.square.core.SquareApiException;
import com.squareup.square.core.SquareException;
import com.squareup.square.core.SyncPagingIterable;
import com.squareup.square.types.BulkSwapPlanRequest;
import com.squareup.square.types.BulkSwapPlanResponse;
import com.squareup.square.types.CancelSubscriptionResponse;
import com.squareup.square.types.CancelSubscriptionsRequest;
import com.squareup.square.types.ChangeBillingAnchorDateRequest;
import com.squareup.square.types.ChangeBillingAnchorDateResponse;
import com.squareup.square.types.CreateSubscriptionRequest;
import com.squareup.square.types.CreateSubscriptionResponse;
import com.squareup.square.types.DeleteActionSubscriptionsRequest;
import com.squareup.square.types.DeleteSubscriptionActionResponse;
import com.squareup.square.types.GetSubscriptionResponse;
import com.squareup.square.types.GetSubscriptionsRequest;
import com.squareup.square.types.ListEventsSubscriptionsRequest;
import com.squareup.square.types.ListSubscriptionEventsResponse;
import com.squareup.square.types.PauseSubscriptionRequest;
import com.squareup.square.types.PauseSubscriptionResponse;
import com.squareup.square.types.ResumeSubscriptionRequest;
import com.squareup.square.types.ResumeSubscriptionResponse;
import com.squareup.square.types.SearchSubscriptionsRequest;
import com.squareup.square.types.SearchSubscriptionsResponse;
import com.squareup.square.types.SubscriptionEvent;
import com.squareup.square.types.SwapPlanRequest;
import com.squareup.square.types.SwapPlanResponse;
import com.squareup.square.types.UpdateSubscriptionRequest;
import com.squareup.square.types.UpdateSubscriptionResponse;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Headers;
import okhttp3.HttpUrl;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.ResponseBody;
import org.jetbrains.annotations.NotNull;
public class AsyncSubscriptionsClient {
protected final ClientOptions clientOptions;
public AsyncSubscriptionsClient(ClientOptions clientOptions) {
this.clientOptions = clientOptions;
}
/**
* Enrolls a customer in a subscription.
* If you provide a card on file in the request, Square charges the card for
* the subscription. Otherwise, Square sends an invoice to the customer's email
* address. The subscription starts immediately, unless the request includes
* the optional start_date
. Each individual subscription is associated with a particular location.
* For more information, see Create a subscription.
*/
public CompletableFuture create(CreateSubscriptionRequest request) {
return create(request, null);
}
/**
* Enrolls a customer in a subscription.
* If you provide a card on file in the request, Square charges the card for
* the subscription. Otherwise, Square sends an invoice to the customer's email
* address. The subscription starts immediately, unless the request includes
* the optional start_date
. Each individual subscription is associated with a particular location.
* For more information, see Create a subscription.
*/
public CompletableFuture create(
CreateSubscriptionRequest request, RequestOptions requestOptions) {
HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl())
.newBuilder()
.addPathSegments("v2/subscriptions")
.build();
RequestBody body;
try {
body = RequestBody.create(
ObjectMappers.JSON_MAPPER.writeValueAsBytes(request), MediaTypes.APPLICATION_JSON);
} catch (JsonProcessingException e) {
throw new SquareException("Failed to serialize request", e);
}
Request okhttpRequest = new Request.Builder()
.url(httpUrl)
.method("POST", body)
.headers(Headers.of(clientOptions.headers(requestOptions)))
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "application/json")
.build();
OkHttpClient client = clientOptions.httpClient();
if (requestOptions != null && requestOptions.getTimeout().isPresent()) {
client = clientOptions.httpClientWithTimeout(requestOptions);
}
CompletableFuture future = new CompletableFuture<>();
client.newCall(okhttpRequest).enqueue(new Callback() {
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
try (ResponseBody responseBody = response.body()) {
if (response.isSuccessful()) {
future.complete(ObjectMappers.JSON_MAPPER.readValue(
responseBody.string(), CreateSubscriptionResponse.class));
return;
}
String responseBodyString = responseBody != null ? responseBody.string() : "{}";
future.completeExceptionally(new SquareApiException(
"Error with status code " + response.code(),
response.code(),
ObjectMappers.JSON_MAPPER.readValue(responseBodyString, Object.class)));
return;
} catch (IOException e) {
future.completeExceptionally(new SquareException("Network error executing HTTP request", e));
}
}
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
future.completeExceptionally(new SquareException("Network error executing HTTP request", e));
}
});
return future;
}
/**
* Schedules a plan variation change for all active subscriptions under a given plan
* variation. For more information, see Swap Subscription Plan Variations.
*/
public CompletableFuture bulkSwapPlan(BulkSwapPlanRequest request) {
return bulkSwapPlan(request, null);
}
/**
* Schedules a plan variation change for all active subscriptions under a given plan
* variation. For more information, see Swap Subscription Plan Variations.
*/
public CompletableFuture bulkSwapPlan(
BulkSwapPlanRequest request, RequestOptions requestOptions) {
HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl())
.newBuilder()
.addPathSegments("v2/subscriptions/bulk-swap-plan")
.build();
RequestBody body;
try {
body = RequestBody.create(
ObjectMappers.JSON_MAPPER.writeValueAsBytes(request), MediaTypes.APPLICATION_JSON);
} catch (JsonProcessingException e) {
throw new SquareException("Failed to serialize request", e);
}
Request okhttpRequest = new Request.Builder()
.url(httpUrl)
.method("POST", body)
.headers(Headers.of(clientOptions.headers(requestOptions)))
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "application/json")
.build();
OkHttpClient client = clientOptions.httpClient();
if (requestOptions != null && requestOptions.getTimeout().isPresent()) {
client = clientOptions.httpClientWithTimeout(requestOptions);
}
CompletableFuture future = new CompletableFuture<>();
client.newCall(okhttpRequest).enqueue(new Callback() {
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
try (ResponseBody responseBody = response.body()) {
if (response.isSuccessful()) {
future.complete(
ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), BulkSwapPlanResponse.class));
return;
}
String responseBodyString = responseBody != null ? responseBody.string() : "{}";
future.completeExceptionally(new SquareApiException(
"Error with status code " + response.code(),
response.code(),
ObjectMappers.JSON_MAPPER.readValue(responseBodyString, Object.class)));
return;
} catch (IOException e) {
future.completeExceptionally(new SquareException("Network error executing HTTP request", e));
}
}
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
future.completeExceptionally(new SquareException("Network error executing HTTP request", e));
}
});
return future;
}
/**
* Searches for subscriptions.
* Results are ordered chronologically by subscription creation date. If
* the request specifies more than one location ID,
* the endpoint orders the result
* by location ID, and then by creation date within each location. If no locations are given
* in the query, all locations are searched.
* You can also optionally specify customer_ids
to search by customer.
* If left unset, all customers
* associated with the specified locations are returned.
* If the request specifies customer IDs, the endpoint orders results
* first by location, within location by customer ID, and within
* customer by subscription creation date.
*/
public CompletableFuture search() {
return search(SearchSubscriptionsRequest.builder().build());
}
/**
* Searches for subscriptions.
* Results are ordered chronologically by subscription creation date. If
* the request specifies more than one location ID,
* the endpoint orders the result
* by location ID, and then by creation date within each location. If no locations are given
* in the query, all locations are searched.
* You can also optionally specify customer_ids
to search by customer.
* If left unset, all customers
* associated with the specified locations are returned.
* If the request specifies customer IDs, the endpoint orders results
* first by location, within location by customer ID, and within
* customer by subscription creation date.
*/
public CompletableFuture search(SearchSubscriptionsRequest request) {
return search(request, null);
}
/**
* Searches for subscriptions.
* Results are ordered chronologically by subscription creation date. If
* the request specifies more than one location ID,
* the endpoint orders the result
* by location ID, and then by creation date within each location. If no locations are given
* in the query, all locations are searched.
* You can also optionally specify customer_ids
to search by customer.
* If left unset, all customers
* associated with the specified locations are returned.
* If the request specifies customer IDs, the endpoint orders results
* first by location, within location by customer ID, and within
* customer by subscription creation date.
*/
public CompletableFuture search(
SearchSubscriptionsRequest request, RequestOptions requestOptions) {
HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl())
.newBuilder()
.addPathSegments("v2/subscriptions/search")
.build();
RequestBody body;
try {
body = RequestBody.create(
ObjectMappers.JSON_MAPPER.writeValueAsBytes(request), MediaTypes.APPLICATION_JSON);
} catch (JsonProcessingException e) {
throw new SquareException("Failed to serialize request", e);
}
Request okhttpRequest = new Request.Builder()
.url(httpUrl)
.method("POST", body)
.headers(Headers.of(clientOptions.headers(requestOptions)))
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "application/json")
.build();
OkHttpClient client = clientOptions.httpClient();
if (requestOptions != null && requestOptions.getTimeout().isPresent()) {
client = clientOptions.httpClientWithTimeout(requestOptions);
}
CompletableFuture future = new CompletableFuture<>();
client.newCall(okhttpRequest).enqueue(new Callback() {
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
try (ResponseBody responseBody = response.body()) {
if (response.isSuccessful()) {
future.complete(ObjectMappers.JSON_MAPPER.readValue(
responseBody.string(), SearchSubscriptionsResponse.class));
return;
}
String responseBodyString = responseBody != null ? responseBody.string() : "{}";
future.completeExceptionally(new SquareApiException(
"Error with status code " + response.code(),
response.code(),
ObjectMappers.JSON_MAPPER.readValue(responseBodyString, Object.class)));
return;
} catch (IOException e) {
future.completeExceptionally(new SquareException("Network error executing HTTP request", e));
}
}
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
future.completeExceptionally(new SquareException("Network error executing HTTP request", e));
}
});
return future;
}
/**
* Retrieves a specific subscription.
*/
public CompletableFuture get(GetSubscriptionsRequest request) {
return get(request, null);
}
/**
* Retrieves a specific subscription.
*/
public CompletableFuture get(
GetSubscriptionsRequest request, RequestOptions requestOptions) {
HttpUrl.Builder httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl())
.newBuilder()
.addPathSegments("v2/subscriptions")
.addPathSegment(request.getSubscriptionId());
if (request.getInclude().isPresent()) {
QueryStringMapper.addQueryParameter(
httpUrl, "include", request.getInclude().get(), false);
}
Request.Builder _requestBuilder = new Request.Builder()
.url(httpUrl.build())
.method("GET", null)
.headers(Headers.of(clientOptions.headers(requestOptions)))
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "application/json");
Request okhttpRequest = _requestBuilder.build();
OkHttpClient client = clientOptions.httpClient();
if (requestOptions != null && requestOptions.getTimeout().isPresent()) {
client = clientOptions.httpClientWithTimeout(requestOptions);
}
CompletableFuture future = new CompletableFuture<>();
client.newCall(okhttpRequest).enqueue(new Callback() {
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
try (ResponseBody responseBody = response.body()) {
if (response.isSuccessful()) {
future.complete(ObjectMappers.JSON_MAPPER.readValue(
responseBody.string(), GetSubscriptionResponse.class));
return;
}
String responseBodyString = responseBody != null ? responseBody.string() : "{}";
future.completeExceptionally(new SquareApiException(
"Error with status code " + response.code(),
response.code(),
ObjectMappers.JSON_MAPPER.readValue(responseBodyString, Object.class)));
return;
} catch (IOException e) {
future.completeExceptionally(new SquareException("Network error executing HTTP request", e));
}
}
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
future.completeExceptionally(new SquareException("Network error executing HTTP request", e));
}
});
return future;
}
/**
* Updates a subscription by modifying or clearing subscription
field values.
* To clear a field, set its value to null
.
*/
public CompletableFuture update(UpdateSubscriptionRequest request) {
return update(request, null);
}
/**
* Updates a subscription by modifying or clearing subscription
field values.
* To clear a field, set its value to null
.
*/
public CompletableFuture update(
UpdateSubscriptionRequest request, RequestOptions requestOptions) {
HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl())
.newBuilder()
.addPathSegments("v2/subscriptions")
.addPathSegment(request.getSubscriptionId())
.build();
RequestBody body;
try {
body = RequestBody.create(
ObjectMappers.JSON_MAPPER.writeValueAsBytes(request), MediaTypes.APPLICATION_JSON);
} catch (JsonProcessingException e) {
throw new SquareException("Failed to serialize request", e);
}
Request okhttpRequest = new Request.Builder()
.url(httpUrl)
.method("PUT", body)
.headers(Headers.of(clientOptions.headers(requestOptions)))
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "application/json")
.build();
OkHttpClient client = clientOptions.httpClient();
if (requestOptions != null && requestOptions.getTimeout().isPresent()) {
client = clientOptions.httpClientWithTimeout(requestOptions);
}
CompletableFuture future = new CompletableFuture<>();
client.newCall(okhttpRequest).enqueue(new Callback() {
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
try (ResponseBody responseBody = response.body()) {
if (response.isSuccessful()) {
future.complete(ObjectMappers.JSON_MAPPER.readValue(
responseBody.string(), UpdateSubscriptionResponse.class));
return;
}
String responseBodyString = responseBody != null ? responseBody.string() : "{}";
future.completeExceptionally(new SquareApiException(
"Error with status code " + response.code(),
response.code(),
ObjectMappers.JSON_MAPPER.readValue(responseBodyString, Object.class)));
return;
} catch (IOException e) {
future.completeExceptionally(new SquareException("Network error executing HTTP request", e));
}
}
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
future.completeExceptionally(new SquareException("Network error executing HTTP request", e));
}
});
return future;
}
/**
* Deletes a scheduled action for a subscription.
*/
public CompletableFuture deleteAction(DeleteActionSubscriptionsRequest request) {
return deleteAction(request, null);
}
/**
* Deletes a scheduled action for a subscription.
*/
public CompletableFuture deleteAction(
DeleteActionSubscriptionsRequest request, RequestOptions requestOptions) {
HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl())
.newBuilder()
.addPathSegments("v2/subscriptions")
.addPathSegment(request.getSubscriptionId())
.addPathSegments("actions")
.addPathSegment(request.getActionId())
.build();
Request.Builder _requestBuilder = new Request.Builder()
.url(httpUrl)
.method("DELETE", null)
.headers(Headers.of(clientOptions.headers(requestOptions)))
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "application/json");
Request okhttpRequest = _requestBuilder.build();
OkHttpClient client = clientOptions.httpClient();
if (requestOptions != null && requestOptions.getTimeout().isPresent()) {
client = clientOptions.httpClientWithTimeout(requestOptions);
}
CompletableFuture future = new CompletableFuture<>();
client.newCall(okhttpRequest).enqueue(new Callback() {
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
try (ResponseBody responseBody = response.body()) {
if (response.isSuccessful()) {
future.complete(ObjectMappers.JSON_MAPPER.readValue(
responseBody.string(), DeleteSubscriptionActionResponse.class));
return;
}
String responseBodyString = responseBody != null ? responseBody.string() : "{}";
future.completeExceptionally(new SquareApiException(
"Error with status code " + response.code(),
response.code(),
ObjectMappers.JSON_MAPPER.readValue(responseBodyString, Object.class)));
return;
} catch (IOException e) {
future.completeExceptionally(new SquareException("Network error executing HTTP request", e));
}
}
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
future.completeExceptionally(new SquareException("Network error executing HTTP request", e));
}
});
return future;
}
/**
* Changes the billing anchor date
* for a subscription.
*/
public CompletableFuture changeBillingAnchorDate(
ChangeBillingAnchorDateRequest request) {
return changeBillingAnchorDate(request, null);
}
/**
* Changes the billing anchor date
* for a subscription.
*/
public CompletableFuture changeBillingAnchorDate(
ChangeBillingAnchorDateRequest request, RequestOptions requestOptions) {
HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl())
.newBuilder()
.addPathSegments("v2/subscriptions")
.addPathSegment(request.getSubscriptionId())
.addPathSegments("billing-anchor")
.build();
RequestBody body;
try {
body = RequestBody.create(
ObjectMappers.JSON_MAPPER.writeValueAsBytes(request), MediaTypes.APPLICATION_JSON);
} catch (JsonProcessingException e) {
throw new SquareException("Failed to serialize request", e);
}
Request okhttpRequest = new Request.Builder()
.url(httpUrl)
.method("POST", body)
.headers(Headers.of(clientOptions.headers(requestOptions)))
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "application/json")
.build();
OkHttpClient client = clientOptions.httpClient();
if (requestOptions != null && requestOptions.getTimeout().isPresent()) {
client = clientOptions.httpClientWithTimeout(requestOptions);
}
CompletableFuture future = new CompletableFuture<>();
client.newCall(okhttpRequest).enqueue(new Callback() {
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
try (ResponseBody responseBody = response.body()) {
if (response.isSuccessful()) {
future.complete(ObjectMappers.JSON_MAPPER.readValue(
responseBody.string(), ChangeBillingAnchorDateResponse.class));
return;
}
String responseBodyString = responseBody != null ? responseBody.string() : "{}";
future.completeExceptionally(new SquareApiException(
"Error with status code " + response.code(),
response.code(),
ObjectMappers.JSON_MAPPER.readValue(responseBodyString, Object.class)));
return;
} catch (IOException e) {
future.completeExceptionally(new SquareException("Network error executing HTTP request", e));
}
}
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
future.completeExceptionally(new SquareException("Network error executing HTTP request", e));
}
});
return future;
}
/**
* Schedules a CANCEL
action to cancel an active subscription. This
* sets the canceled_date
field to the end of the active billing period. After this date,
* the subscription status changes from ACTIVE to CANCELED.
*/
public CompletableFuture cancel(CancelSubscriptionsRequest request) {
return cancel(request, null);
}
/**
* Schedules a CANCEL
action to cancel an active subscription. This
* sets the canceled_date
field to the end of the active billing period. After this date,
* the subscription status changes from ACTIVE to CANCELED.
*/
public CompletableFuture cancel(
CancelSubscriptionsRequest request, RequestOptions requestOptions) {
HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl())
.newBuilder()
.addPathSegments("v2/subscriptions")
.addPathSegment(request.getSubscriptionId())
.addPathSegments("cancel")
.build();
Request.Builder _requestBuilder = new Request.Builder()
.url(httpUrl)
.method("POST", RequestBody.create("", null))
.headers(Headers.of(clientOptions.headers(requestOptions)))
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "application/json");
Request okhttpRequest = _requestBuilder.build();
OkHttpClient client = clientOptions.httpClient();
if (requestOptions != null && requestOptions.getTimeout().isPresent()) {
client = clientOptions.httpClientWithTimeout(requestOptions);
}
CompletableFuture future = new CompletableFuture<>();
client.newCall(okhttpRequest).enqueue(new Callback() {
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
try (ResponseBody responseBody = response.body()) {
if (response.isSuccessful()) {
future.complete(ObjectMappers.JSON_MAPPER.readValue(
responseBody.string(), CancelSubscriptionResponse.class));
return;
}
String responseBodyString = responseBody != null ? responseBody.string() : "{}";
future.completeExceptionally(new SquareApiException(
"Error with status code " + response.code(),
response.code(),
ObjectMappers.JSON_MAPPER.readValue(responseBodyString, Object.class)));
return;
} catch (IOException e) {
future.completeExceptionally(new SquareException("Network error executing HTTP request", e));
}
}
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
future.completeExceptionally(new SquareException("Network error executing HTTP request", e));
}
});
return future;
}
/**
* Lists all events for a specific subscription.
*/
public CompletableFuture> listEvents(ListEventsSubscriptionsRequest request) {
return listEvents(request, null);
}
/**
* Lists all events for a specific subscription.
*/
public CompletableFuture> listEvents(
ListEventsSubscriptionsRequest request, RequestOptions requestOptions) {
HttpUrl.Builder httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl())
.newBuilder()
.addPathSegments("v2/subscriptions")
.addPathSegment(request.getSubscriptionId())
.addPathSegments("events");
if (request.getCursor().isPresent()) {
QueryStringMapper.addQueryParameter(
httpUrl, "cursor", request.getCursor().get(), false);
}
if (request.getLimit().isPresent()) {
QueryStringMapper.addQueryParameter(
httpUrl, "limit", request.getLimit().get().toString(), false);
}
Request.Builder _requestBuilder = new Request.Builder()
.url(httpUrl.build())
.method("GET", null)
.headers(Headers.of(clientOptions.headers(requestOptions)))
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "application/json");
Request okhttpRequest = _requestBuilder.build();
OkHttpClient client = clientOptions.httpClient();
if (requestOptions != null && requestOptions.getTimeout().isPresent()) {
client = clientOptions.httpClientWithTimeout(requestOptions);
}
CompletableFuture> future = new CompletableFuture<>();
client.newCall(okhttpRequest).enqueue(new Callback() {
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
try (ResponseBody responseBody = response.body()) {
if (response.isSuccessful()) {
ListSubscriptionEventsResponse parsedResponse = ObjectMappers.JSON_MAPPER.readValue(
responseBody.string(), ListSubscriptionEventsResponse.class);
Optional startingAfter = parsedResponse.getCursor();
ListEventsSubscriptionsRequest nextRequest = ListEventsSubscriptionsRequest.builder()
.from(request)
.cursor(startingAfter)
.build();
List result =
parsedResponse.getSubscriptionEvents().orElse(Collections.emptyList());
future.complete(
new SyncPagingIterable(startingAfter.isPresent(), result, () -> {
try {
return listEvents(nextRequest, requestOptions)
.get();
} catch (InterruptedException | ExecutionException e) {
throw new RuntimeException(e);
}
}));
return;
}
String responseBodyString = responseBody != null ? responseBody.string() : "{}";
future.completeExceptionally(new SquareApiException(
"Error with status code " + response.code(),
response.code(),
ObjectMappers.JSON_MAPPER.readValue(responseBodyString, Object.class)));
return;
} catch (IOException e) {
future.completeExceptionally(new SquareException("Network error executing HTTP request", e));
}
}
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
future.completeExceptionally(new SquareException("Network error executing HTTP request", e));
}
});
return future;
}
/**
* Schedules a PAUSE
action to pause an active subscription.
*/
public CompletableFuture pause(PauseSubscriptionRequest request) {
return pause(request, null);
}
/**
* Schedules a PAUSE
action to pause an active subscription.
*/
public CompletableFuture pause(
PauseSubscriptionRequest request, RequestOptions requestOptions) {
HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl())
.newBuilder()
.addPathSegments("v2/subscriptions")
.addPathSegment(request.getSubscriptionId())
.addPathSegments("pause")
.build();
RequestBody body;
try {
body = RequestBody.create(
ObjectMappers.JSON_MAPPER.writeValueAsBytes(request), MediaTypes.APPLICATION_JSON);
} catch (JsonProcessingException e) {
throw new SquareException("Failed to serialize request", e);
}
Request okhttpRequest = new Request.Builder()
.url(httpUrl)
.method("POST", body)
.headers(Headers.of(clientOptions.headers(requestOptions)))
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "application/json")
.build();
OkHttpClient client = clientOptions.httpClient();
if (requestOptions != null && requestOptions.getTimeout().isPresent()) {
client = clientOptions.httpClientWithTimeout(requestOptions);
}
CompletableFuture future = new CompletableFuture<>();
client.newCall(okhttpRequest).enqueue(new Callback() {
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
try (ResponseBody responseBody = response.body()) {
if (response.isSuccessful()) {
future.complete(ObjectMappers.JSON_MAPPER.readValue(
responseBody.string(), PauseSubscriptionResponse.class));
return;
}
String responseBodyString = responseBody != null ? responseBody.string() : "{}";
future.completeExceptionally(new SquareApiException(
"Error with status code " + response.code(),
response.code(),
ObjectMappers.JSON_MAPPER.readValue(responseBodyString, Object.class)));
return;
} catch (IOException e) {
future.completeExceptionally(new SquareException("Network error executing HTTP request", e));
}
}
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
future.completeExceptionally(new SquareException("Network error executing HTTP request", e));
}
});
return future;
}
/**
* Schedules a RESUME
action to resume a paused or a deactivated subscription.
*/
public CompletableFuture resume(ResumeSubscriptionRequest request) {
return resume(request, null);
}
/**
* Schedules a RESUME
action to resume a paused or a deactivated subscription.
*/
public CompletableFuture resume(
ResumeSubscriptionRequest request, RequestOptions requestOptions) {
HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl())
.newBuilder()
.addPathSegments("v2/subscriptions")
.addPathSegment(request.getSubscriptionId())
.addPathSegments("resume")
.build();
RequestBody body;
try {
body = RequestBody.create(
ObjectMappers.JSON_MAPPER.writeValueAsBytes(request), MediaTypes.APPLICATION_JSON);
} catch (JsonProcessingException e) {
throw new SquareException("Failed to serialize request", e);
}
Request okhttpRequest = new Request.Builder()
.url(httpUrl)
.method("POST", body)
.headers(Headers.of(clientOptions.headers(requestOptions)))
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "application/json")
.build();
OkHttpClient client = clientOptions.httpClient();
if (requestOptions != null && requestOptions.getTimeout().isPresent()) {
client = clientOptions.httpClientWithTimeout(requestOptions);
}
CompletableFuture future = new CompletableFuture<>();
client.newCall(okhttpRequest).enqueue(new Callback() {
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
try (ResponseBody responseBody = response.body()) {
if (response.isSuccessful()) {
future.complete(ObjectMappers.JSON_MAPPER.readValue(
responseBody.string(), ResumeSubscriptionResponse.class));
return;
}
String responseBodyString = responseBody != null ? responseBody.string() : "{}";
future.completeExceptionally(new SquareApiException(
"Error with status code " + response.code(),
response.code(),
ObjectMappers.JSON_MAPPER.readValue(responseBodyString, Object.class)));
return;
} catch (IOException e) {
future.completeExceptionally(new SquareException("Network error executing HTTP request", e));
}
}
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
future.completeExceptionally(new SquareException("Network error executing HTTP request", e));
}
});
return future;
}
/**
* Schedules a SWAP_PLAN
action to swap a subscription plan variation in an existing subscription.
* For more information, see Swap Subscription Plan Variations.
*/
public CompletableFuture swapPlan(SwapPlanRequest request) {
return swapPlan(request, null);
}
/**
* Schedules a SWAP_PLAN
action to swap a subscription plan variation in an existing subscription.
* For more information, see Swap Subscription Plan Variations.
*/
public CompletableFuture swapPlan(SwapPlanRequest request, RequestOptions requestOptions) {
HttpUrl httpUrl = HttpUrl.parse(this.clientOptions.environment().getUrl())
.newBuilder()
.addPathSegments("v2/subscriptions")
.addPathSegment(request.getSubscriptionId())
.addPathSegments("swap-plan")
.build();
RequestBody body;
try {
body = RequestBody.create(
ObjectMappers.JSON_MAPPER.writeValueAsBytes(request), MediaTypes.APPLICATION_JSON);
} catch (JsonProcessingException e) {
throw new SquareException("Failed to serialize request", e);
}
Request okhttpRequest = new Request.Builder()
.url(httpUrl)
.method("POST", body)
.headers(Headers.of(clientOptions.headers(requestOptions)))
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "application/json")
.build();
OkHttpClient client = clientOptions.httpClient();
if (requestOptions != null && requestOptions.getTimeout().isPresent()) {
client = clientOptions.httpClientWithTimeout(requestOptions);
}
CompletableFuture future = new CompletableFuture<>();
client.newCall(okhttpRequest).enqueue(new Callback() {
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
try (ResponseBody responseBody = response.body()) {
if (response.isSuccessful()) {
future.complete(
ObjectMappers.JSON_MAPPER.readValue(responseBody.string(), SwapPlanResponse.class));
return;
}
String responseBodyString = responseBody != null ? responseBody.string() : "{}";
future.completeExceptionally(new SquareApiException(
"Error with status code " + response.code(),
response.code(),
ObjectMappers.JSON_MAPPER.readValue(responseBodyString, Object.class)));
return;
} catch (IOException e) {
future.completeExceptionally(new SquareException("Network error executing HTTP request", e));
}
}
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
future.completeExceptionally(new SquareException("Network error executing HTTP request", e));
}
});
return future;
}
}