From bcf87632e162d0bd958cf0aea51ea85040020129 Mon Sep 17 00:00:00 2001 From: Crankshaft Robot Date: Thu, 28 May 2015 16:05:26 +0000 Subject: [PATCH 01/20] Crankshaft Build #BU000000Y4QD6V @ 2015-05-28 16:05:25 +0000 --- .../com/gocardless/resources/Customer.java | 8 -------- .../gocardless/services/CustomerService.java | 18 ------------------ 2 files changed, 26 deletions(-) diff --git a/src/main/java/com/gocardless/resources/Customer.java b/src/main/java/com/gocardless/resources/Customer.java index 61b99bcb..8f9ae8d5 100644 --- a/src/main/java/com/gocardless/resources/Customer.java +++ b/src/main/java/com/gocardless/resources/Customer.java @@ -20,7 +20,6 @@ private Customer() { private String addressLine2; private String addressLine3; private String city; - private String companyName; private String countryCode; private String createdAt; private String email; @@ -59,13 +58,6 @@ public String getCity() { return city; } - /** - * Company Name. - */ - public String getCompanyName() { - return companyName; - } - /** * [ISO 3166-1](http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements) * alpha-2 code. diff --git a/src/main/java/com/gocardless/services/CustomerService.java b/src/main/java/com/gocardless/services/CustomerService.java index 4daa2483..3652fbd6 100644 --- a/src/main/java/com/gocardless/services/CustomerService.java +++ b/src/main/java/com/gocardless/services/CustomerService.java @@ -75,7 +75,6 @@ public static final class CustomerCreateRequest extends PostRequest { private String addressLine2; private String addressLine3; private String city; - private String companyName; private String countryCode; private String email; private String familyName; @@ -116,14 +115,6 @@ public CustomerCreateRequest withCity(String city) { return this; } - /** - * Company Name. - */ - public CustomerCreateRequest withCompanyName(String companyName) { - this.companyName = companyName; - return this; - } - /** * [ISO 3166-1](http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements) * alpha-2 code. @@ -438,7 +429,6 @@ public static final class CustomerUpdateRequest extends PutRequest { private String addressLine2; private String addressLine3; private String city; - private String companyName; private String countryCode; private String email; private String familyName; @@ -479,14 +469,6 @@ public CustomerUpdateRequest withCity(String city) { return this; } - /** - * Company Name. - */ - public CustomerUpdateRequest withCompanyName(String companyName) { - this.companyName = companyName; - return this; - } - /** * [ISO 3166-1](http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements) * alpha-2 code. From 731814882df94c7c33e8cc1b1ec37a3bd6411c13 Mon Sep 17 00:00:00 2001 From: Crankshaft Robot Date: Thu, 28 May 2015 16:11:32 +0000 Subject: [PATCH 02/20] Crankshaft Build #BU000000Y5ERNN @ 2015-05-28 16:11:32 +0000 --- .../com/gocardless/resources/Customer.java | 8 ++++++++ .../gocardless/services/CustomerService.java | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/main/java/com/gocardless/resources/Customer.java b/src/main/java/com/gocardless/resources/Customer.java index 8f9ae8d5..61b99bcb 100644 --- a/src/main/java/com/gocardless/resources/Customer.java +++ b/src/main/java/com/gocardless/resources/Customer.java @@ -20,6 +20,7 @@ private Customer() { private String addressLine2; private String addressLine3; private String city; + private String companyName; private String countryCode; private String createdAt; private String email; @@ -58,6 +59,13 @@ public String getCity() { return city; } + /** + * Company Name. + */ + public String getCompanyName() { + return companyName; + } + /** * [ISO 3166-1](http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements) * alpha-2 code. diff --git a/src/main/java/com/gocardless/services/CustomerService.java b/src/main/java/com/gocardless/services/CustomerService.java index 3652fbd6..4daa2483 100644 --- a/src/main/java/com/gocardless/services/CustomerService.java +++ b/src/main/java/com/gocardless/services/CustomerService.java @@ -75,6 +75,7 @@ public static final class CustomerCreateRequest extends PostRequest { private String addressLine2; private String addressLine3; private String city; + private String companyName; private String countryCode; private String email; private String familyName; @@ -115,6 +116,14 @@ public CustomerCreateRequest withCity(String city) { return this; } + /** + * Company Name. + */ + public CustomerCreateRequest withCompanyName(String companyName) { + this.companyName = companyName; + return this; + } + /** * [ISO 3166-1](http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements) * alpha-2 code. @@ -429,6 +438,7 @@ public static final class CustomerUpdateRequest extends PutRequest { private String addressLine2; private String addressLine3; private String city; + private String companyName; private String countryCode; private String email; private String familyName; @@ -469,6 +479,14 @@ public CustomerUpdateRequest withCity(String city) { return this; } + /** + * Company Name. + */ + public CustomerUpdateRequest withCompanyName(String companyName) { + this.companyName = companyName; + return this; + } + /** * [ISO 3166-1](http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements) * alpha-2 code. From 56db4613cbc1a8592dab99fab90fbf2ca1641218 Mon Sep 17 00:00:00 2001 From: Crankshaft Robot Date: Tue, 2 Jun 2015 15:10:14 +0000 Subject: [PATCH 03/20] Crankshaft Build #BU000000YRVX43 @ 2015-06-02 15:10:14 +0000 --- src/main/java/com/gocardless/resources/CreditorBankAccount.java | 2 +- src/main/java/com/gocardless/resources/CustomerBankAccount.java | 2 +- .../com/gocardless/services/CreditorBankAccountService.java | 2 +- .../com/gocardless/services/CustomerBankAccountService.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/gocardless/resources/CreditorBankAccount.java b/src/main/java/com/gocardless/resources/CreditorBankAccount.java index a91b097b..7c73f307 100644 --- a/src/main/java/com/gocardless/resources/CreditorBankAccount.java +++ b/src/main/java/com/gocardless/resources/CreditorBankAccount.java @@ -35,7 +35,7 @@ private CreditorBankAccount() { /** * Name of the account holder, as known by the bank. Usually this is the same as the name stored with * the linked [creditor](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditors). - * This field cannot exceed 18 characters. + * This field will be transliterated, upcased and truncated to 18 characters. */ public String getAccountHolderName() { return accountHolderName; diff --git a/src/main/java/com/gocardless/resources/CustomerBankAccount.java b/src/main/java/com/gocardless/resources/CustomerBankAccount.java index bdc6b4e4..033e94ab 100644 --- a/src/main/java/com/gocardless/resources/CustomerBankAccount.java +++ b/src/main/java/com/gocardless/resources/CustomerBankAccount.java @@ -36,7 +36,7 @@ private CustomerBankAccount() { /** * Name of the account holder, as known by the bank. Usually this matches the name of the linked * [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers). This field - * cannot exceed 18 characters. + * will be transliterated, upcased and truncated to 18 characters. */ public String getAccountHolderName() { return accountHolderName; diff --git a/src/main/java/com/gocardless/services/CreditorBankAccountService.java b/src/main/java/com/gocardless/services/CreditorBankAccountService.java index 32dc5ada..ad9725ea 100644 --- a/src/main/java/com/gocardless/services/CreditorBankAccountService.java +++ b/src/main/java/com/gocardless/services/CreditorBankAccountService.java @@ -108,7 +108,7 @@ public static final class CreditorBankAccountCreateRequest extends /** * Name of the account holder, as known by the bank. Usually this is the same as the name stored with * the linked [creditor](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditors). - * This field cannot exceed 18 characters. + * This field will be transliterated, upcased and truncated to 18 characters. */ public CreditorBankAccountCreateRequest withAccountHolderName(String accountHolderName) { this.accountHolderName = accountHolderName; diff --git a/src/main/java/com/gocardless/services/CustomerBankAccountService.java b/src/main/java/com/gocardless/services/CustomerBankAccountService.java index 73dc35c7..0e24a47e 100644 --- a/src/main/java/com/gocardless/services/CustomerBankAccountService.java +++ b/src/main/java/com/gocardless/services/CustomerBankAccountService.java @@ -140,7 +140,7 @@ public static final class CustomerBankAccountCreateRequest extends /** * Name of the account holder, as known by the bank. Usually this matches the name of the linked * [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers). This field - * cannot exceed 18 characters. + * will be transliterated, upcased and truncated to 18 characters. */ public CustomerBankAccountCreateRequest withAccountHolderName(String accountHolderName) { this.accountHolderName = accountHolderName; From dc65cfe886633def5095cbaf6d2985d2a8640671 Mon Sep 17 00:00:00 2001 From: Crankshaft Robot Date: Fri, 12 Jun 2015 10:56:37 +0000 Subject: [PATCH 04/20] Crankshaft Build #BU0000010C23DE @ 2015-06-12 10:56:37 +0000 --- src/main/java/com/gocardless/services/PayoutService.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gocardless/services/PayoutService.java b/src/main/java/com/gocardless/services/PayoutService.java index f472a0c0..96dac4a2 100644 --- a/src/main/java/com/gocardless/services/PayoutService.java +++ b/src/main/java/com/gocardless/services/PayoutService.java @@ -45,7 +45,8 @@ public PayoutListRequest> all() { } /** - * Retrieves the details of a single payout. + * Retrieves the details of a single payout. For an example of how to reconcile the transactions in a + * payout, see [this guide](#events-fetching-events-for-a-payout). */ public PayoutGetRequest get(String identity) { return new PayoutGetRequest<>(httpClient, GetRequest.jsonExecutor(), identity); @@ -165,7 +166,8 @@ public String toString() { /** * Request class for {@link PayoutService#get }. * - * Retrieves the details of a single payout. + * Retrieves the details of a single payout. For an example of how to reconcile the transactions in a + * payout, see [this guide](#events-fetching-events-for-a-payout). */ public static final class PayoutGetRequest extends GetRequest { @PathParam From 52353fde39e6d7af920b690a3af8b9e52bc23f5c Mon Sep 17 00:00:00 2001 From: Crankshaft Robot Date: Tue, 16 Jun 2015 14:07:25 +0000 Subject: [PATCH 05/20] Crankshaft Build #BU0000011M0XQS @ 2015-06-16 14:07:25 +0000 --- .../services/CreditorBankAccountService.java | 15 +++++-- .../services/CustomerBankAccountService.java | 15 +++++-- .../gocardless/services/HelperService.java | 41 +++++++++++++------ 3 files changed, 50 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/gocardless/services/CreditorBankAccountService.java b/src/main/java/com/gocardless/services/CreditorBankAccountService.java index ad9725ea..11c362a9 100644 --- a/src/main/java/com/gocardless/services/CreditorBankAccountService.java +++ b/src/main/java/com/gocardless/services/CreditorBankAccountService.java @@ -116,7 +116,9 @@ public CreditorBankAccountCreateRequest withAccountHolderName(String accountHold } /** - * 8 digit, valid UK bank account number. + * Bank account number. See [local + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for + * more information. */ public CreditorBankAccountCreateRequest withAccountNumber(String accountNumber) { this.accountNumber = accountNumber; @@ -124,7 +126,9 @@ public CreditorBankAccountCreateRequest withAccountNumber(String accountNumber) } /** - * Bank identifier code + * Bank code. See [local + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for + * more information. */ public CreditorBankAccountCreateRequest withBankCode(String bankCode) { this.bankCode = bankCode; @@ -132,7 +136,9 @@ public CreditorBankAccountCreateRequest withBankCode(String bankCode) { } /** - * Branch identifier code + * Branch code. See [local + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for + * more information. */ public CreditorBankAccountCreateRequest withBranchCode(String branchCode) { this.branchCode = branchCode; @@ -158,7 +164,8 @@ public CreditorBankAccountCreateRequest withCurrency(String currency) { } /** - * International Bank Account Number + * International Bank Account Number. Alternatively you can provide [local + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details). */ public CreditorBankAccountCreateRequest withIban(String iban) { this.iban = iban; diff --git a/src/main/java/com/gocardless/services/CustomerBankAccountService.java b/src/main/java/com/gocardless/services/CustomerBankAccountService.java index 0e24a47e..92374367 100644 --- a/src/main/java/com/gocardless/services/CustomerBankAccountService.java +++ b/src/main/java/com/gocardless/services/CustomerBankAccountService.java @@ -148,7 +148,9 @@ public CustomerBankAccountCreateRequest withAccountHolderName(String accountHold } /** - * 8 digit, valid UK bank account number. + * Bank account number. See [local + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for + * more information. */ public CustomerBankAccountCreateRequest withAccountNumber(String accountNumber) { this.accountNumber = accountNumber; @@ -156,7 +158,9 @@ public CustomerBankAccountCreateRequest withAccountNumber(String accountNumber) } /** - * Bank identifier code + * Bank code. See [local + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for + * more information. */ public CustomerBankAccountCreateRequest withBankCode(String bankCode) { this.bankCode = bankCode; @@ -164,7 +168,9 @@ public CustomerBankAccountCreateRequest withBankCode(String bankCode) { } /** - * Branch identifier code + * Branch code. See [local + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for + * more information. */ public CustomerBankAccountCreateRequest withBranchCode(String branchCode) { this.branchCode = branchCode; @@ -190,7 +196,8 @@ public CustomerBankAccountCreateRequest withCurrency(String currency) { } /** - * International Bank Account Number + * International Bank Account Number. Alternatively you can provide [local + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details). */ public CustomerBankAccountCreateRequest withIban(String iban) { this.iban = iban; diff --git a/src/main/java/com/gocardless/services/HelperService.java b/src/main/java/com/gocardless/services/HelperService.java index 85f4c13f..573d1330 100644 --- a/src/main/java/com/gocardless/services/HelperService.java +++ b/src/main/java/com/gocardless/services/HelperService.java @@ -104,7 +104,7 @@ public static final class HelperMandateRequest extends PostRequest { private String signedAt; /** - * Name of the account holder, as known by the bank. Usually this matches the name of the linked + * Name of the account holder, as known by the bank. Usually this matches the name of the * [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers). This field * cannot exceed 18 characters. */ @@ -114,7 +114,9 @@ public HelperMandateRequest withAccountHolderName(String accountHolderName) { } /** - * 8 digit, valid UK bank account number. + * Bank account number. See [local + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for + * more information. */ public HelperMandateRequest withAccountNumber(String accountNumber) { this.accountNumber = accountNumber; @@ -122,7 +124,9 @@ public HelperMandateRequest withAccountNumber(String accountNumber) { } /** - * Bank identifier code. + * Bank code. See [local + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for + * more information. */ public HelperMandateRequest withBankCode(String bankCode) { this.bankCode = bankCode; @@ -130,7 +134,7 @@ public HelperMandateRequest withBankCode(String bankCode) { } /** - * Bank Identifier Code + * SWIFT BIC. Optional (will be derived from the `iban` or local details if not provided). */ public HelperMandateRequest withBic(String bic) { this.bic = bic; @@ -138,7 +142,9 @@ public HelperMandateRequest withBic(String bic) { } /** - * Branch identifier code. + * Branch code. See [local + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for + * more information. */ public HelperMandateRequest withBranchCode(String branchCode) { this.branchCode = branchCode; @@ -155,7 +161,8 @@ public HelperMandateRequest withCountryCode(String countryCode) { } /** - * International Bank Account Number + * International Bank Account Number. Alternatively you can provide [local + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details). */ public HelperMandateRequest withIban(String iban) { this.iban = iban; @@ -176,7 +183,7 @@ public HelperMandateRequest withLinks(String key, String value) { } /** - * Mandate reference (normally set by GoCardless) + * Unique 6 to 18 character reference. This may be left blank at the point of signing. */ public HelperMandateRequest withMandateReference(String mandateReference) { this.mandateReference = mandateReference; @@ -184,7 +191,8 @@ public HelperMandateRequest withMandateReference(String mandateReference) { } /** - * Direct Debit scheme + * Direct Debit scheme. Can be supplied or automatically detected from the customer's bank account + * details (if provided). */ public HelperMandateRequest withScheme(String scheme) { this.scheme = scheme; @@ -192,7 +200,7 @@ public HelperMandateRequest withScheme(String scheme) { } /** - * Will render a form with this date and no signature field. + * If provided, this endpoint will render a form with this date and no signature field. */ public HelperMandateRequest withSignedAt(String signedAt) { this.signedAt = signedAt; @@ -250,7 +258,9 @@ public static final class HelperModulusCheckRequest extends PostRequest private String iban; /** - * 8 digit, valid UK bank account number. + * Bank account number. See [local + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for + * more information. */ public HelperModulusCheckRequest withAccountNumber(String accountNumber) { this.accountNumber = accountNumber; @@ -258,7 +268,9 @@ public HelperModulusCheckRequest withAccountNumber(String accountNumber) { } /** - * Bank identifier code. + * Bank code. See [local + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for + * more information. */ public HelperModulusCheckRequest withBankCode(String bankCode) { this.bankCode = bankCode; @@ -266,7 +278,9 @@ public HelperModulusCheckRequest withBankCode(String bankCode) { } /** - * Branch identifier code. + * Branch code. See [local + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for + * more information. */ public HelperModulusCheckRequest withBranchCode(String branchCode) { this.branchCode = branchCode; @@ -283,7 +297,8 @@ public HelperModulusCheckRequest withCountryCode(String countryCode) { } /** - * International Bank Account Number + * International Bank Account Number. Alternatively you can provide [local + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details). */ public HelperModulusCheckRequest withIban(String iban) { this.iban = iban; From 212ef70bc18b8fda7ce18bba1b69448d3e46819c Mon Sep 17 00:00:00 2001 From: Crankshaft Robot Date: Tue, 16 Jun 2015 16:39:11 +0000 Subject: [PATCH 06/20] Crankshaft Build #BU00000122K1D8 @ 2015-06-16 16:39:11 +0000 --- .../resources/CreditorBankAccount.java | 2 +- .../services/CreditorBankAccountService.java | 20 ++++++---------- .../services/CustomerBankAccountService.java | 24 +++++++++---------- .../gocardless/services/HelperService.java | 12 +++++----- .../gocardless/services/MandateService.java | 4 ++-- 5 files changed, 28 insertions(+), 34 deletions(-) diff --git a/src/main/java/com/gocardless/resources/CreditorBankAccount.java b/src/main/java/com/gocardless/resources/CreditorBankAccount.java index 7c73f307..77f2d908 100644 --- a/src/main/java/com/gocardless/resources/CreditorBankAccount.java +++ b/src/main/java/com/gocardless/resources/CreditorBankAccount.java @@ -57,7 +57,7 @@ public String getBankName() { /** * [ISO 3166-1](http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements) - * alpha-2 code. Currently only GB is supported. + * alpha-2 code. Defaults to the country code of the `iban` if supplied, otherwise is required. */ public String getCountryCode() { return countryCode; diff --git a/src/main/java/com/gocardless/services/CreditorBankAccountService.java b/src/main/java/com/gocardless/services/CreditorBankAccountService.java index 11c362a9..860671bd 100644 --- a/src/main/java/com/gocardless/services/CreditorBankAccountService.java +++ b/src/main/java/com/gocardless/services/CreditorBankAccountService.java @@ -39,9 +39,6 @@ public CreditorBankAccountService(HttpClient httpClient) { /** * Creates a new creditor bank account object. - * - * Bank account details may be supplied using the - * IBAN (international bank account number) or [local details](#ui-compliance-local-bank-details). */ public CreditorBankAccountCreateRequest create() { return new CreditorBankAccountCreateRequest(httpClient); @@ -88,9 +85,6 @@ public CreditorBankAccountDisableRequest disable(String identity) { * Request class for {@link CreditorBankAccountService#create }. * * Creates a new creditor bank account object. - * - * Bank account details may be supplied using the - * IBAN (international bank account number) or [local details](#ui-compliance-local-bank-details). */ public static final class CreditorBankAccountCreateRequest extends PostRequest { @@ -116,9 +110,9 @@ public CreditorBankAccountCreateRequest withAccountHolderName(String accountHold } /** - * Bank account number. See [local + * Bank account number - see [local * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for - * more information. + * more information. Alternatively you can provide an `iban`. */ public CreditorBankAccountCreateRequest withAccountNumber(String accountNumber) { this.accountNumber = accountNumber; @@ -126,9 +120,9 @@ public CreditorBankAccountCreateRequest withAccountNumber(String accountNumber) } /** - * Bank code. See [local + * Bank code - see [local * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for - * more information. + * more information. Alternatively you can provide an `iban`. */ public CreditorBankAccountCreateRequest withBankCode(String bankCode) { this.bankCode = bankCode; @@ -136,9 +130,9 @@ public CreditorBankAccountCreateRequest withBankCode(String bankCode) { } /** - * Branch code. See [local + * Branch code - see [local * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for - * more information. + * more information. Alternatively you can provide an `iban`. */ public CreditorBankAccountCreateRequest withBranchCode(String branchCode) { this.branchCode = branchCode; @@ -147,7 +141,7 @@ public CreditorBankAccountCreateRequest withBranchCode(String branchCode) { /** * [ISO 3166-1](http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements) - * alpha-2 code. Currently only GB is supported. + * alpha-2 code. Defaults to the country code of the `iban` if supplied, otherwise is required. */ public CreditorBankAccountCreateRequest withCountryCode(String countryCode) { this.countryCode = countryCode; diff --git a/src/main/java/com/gocardless/services/CustomerBankAccountService.java b/src/main/java/com/gocardless/services/CustomerBankAccountService.java index 92374367..a34f1daa 100644 --- a/src/main/java/com/gocardless/services/CustomerBankAccountService.java +++ b/src/main/java/com/gocardless/services/CustomerBankAccountService.java @@ -39,10 +39,10 @@ public CustomerBankAccountService(HttpClient httpClient) { } /** - * Creates a new bank account object associated to a customer id. + * Creates a new customer bank account object. * - * There are three different ways - * to supply bank account details: + * There are three different ways to supply bank + * account details: * * - [Local * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) @@ -107,10 +107,10 @@ public CustomerBankAccountDisableRequest disable(String identity) { /** * Request class for {@link CustomerBankAccountService#create }. * - * Creates a new bank account object associated to a customer id. + * Creates a new customer bank account object. * - * There are three different ways - * to supply bank account details: + * There are three different ways to supply bank + * account details: * * - [Local * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) @@ -148,9 +148,9 @@ public CustomerBankAccountCreateRequest withAccountHolderName(String accountHold } /** - * Bank account number. See [local + * Bank account number - see [local * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for - * more information. + * more information. Alternatively you can provide an `iban`. */ public CustomerBankAccountCreateRequest withAccountNumber(String accountNumber) { this.accountNumber = accountNumber; @@ -158,9 +158,9 @@ public CustomerBankAccountCreateRequest withAccountNumber(String accountNumber) } /** - * Bank code. See [local + * Bank code - see [local * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for - * more information. + * more information. Alternatively you can provide an `iban`. */ public CustomerBankAccountCreateRequest withBankCode(String bankCode) { this.bankCode = bankCode; @@ -168,9 +168,9 @@ public CustomerBankAccountCreateRequest withBankCode(String bankCode) { } /** - * Branch code. See [local + * Branch code - see [local * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for - * more information. + * more information. Alternatively you can provide an `iban`. */ public CustomerBankAccountCreateRequest withBranchCode(String branchCode) { this.branchCode = branchCode; diff --git a/src/main/java/com/gocardless/services/HelperService.java b/src/main/java/com/gocardless/services/HelperService.java index 573d1330..d3ecd8f2 100644 --- a/src/main/java/com/gocardless/services/HelperService.java +++ b/src/main/java/com/gocardless/services/HelperService.java @@ -114,7 +114,7 @@ public HelperMandateRequest withAccountHolderName(String accountHolderName) { } /** - * Bank account number. See [local + * Bank account number - see [local * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for * more information. */ @@ -124,7 +124,7 @@ public HelperMandateRequest withAccountNumber(String accountNumber) { } /** - * Bank code. See [local + * Bank code - see [local * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for * more information. */ @@ -142,7 +142,7 @@ public HelperMandateRequest withBic(String bic) { } /** - * Branch code. See [local + * Branch code - see [local * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for * more information. */ @@ -258,7 +258,7 @@ public static final class HelperModulusCheckRequest extends PostRequest private String iban; /** - * Bank account number. See [local + * Bank account number - see [local * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for * more information. */ @@ -268,7 +268,7 @@ public HelperModulusCheckRequest withAccountNumber(String accountNumber) { } /** - * Bank code. See [local + * Bank code - see [local * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for * more information. */ @@ -278,7 +278,7 @@ public HelperModulusCheckRequest withBankCode(String bankCode) { } /** - * Branch code. See [local + * Branch code - see [local * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for * more information. */ diff --git a/src/main/java/com/gocardless/services/MandateService.java b/src/main/java/com/gocardless/services/MandateService.java index b56b6fa6..484fe3b2 100644 --- a/src/main/java/com/gocardless/services/MandateService.java +++ b/src/main/java/com/gocardless/services/MandateService.java @@ -38,7 +38,7 @@ public MandateService(HttpClient httpClient) { } /** - * Creates a new mandate object + * Creates a new mandate object. */ public MandateCreateRequest create() { return new MandateCreateRequest(httpClient); @@ -116,7 +116,7 @@ public MandateReinstateRequest reinstate(String identity) { /** * Request class for {@link MandateService#create }. * - * Creates a new mandate object + * Creates a new mandate object. */ public static final class MandateCreateRequest extends PostRequest { private Links links; From c0ff6fb4c76bda3669f76e5b19100fdbac15b729 Mon Sep 17 00:00:00 2001 From: Crankshaft Robot Date: Fri, 19 Jun 2015 20:52:43 +0000 Subject: [PATCH 07/20] Crankshaft Build #BU0000012NW3ZD @ 2015-06-19 20:52:43 +0000 --- src/main/java/com/gocardless/resources/Event.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/gocardless/resources/Event.java b/src/main/java/com/gocardless/resources/Event.java index b326211f..30f80564 100644 --- a/src/main/java/com/gocardless/resources/Event.java +++ b/src/main/java/com/gocardless/resources/Event.java @@ -105,8 +105,7 @@ public String getCause() { /** * Human readable description of the cause. _Note:_ Changes to event descriptions are not considered - * breaking, so your integration should not parse these messages, using `details[cause]` and/or - * `details[reason_code]` instead. + * breaking. */ public String getDescription() { return description; From 09bed1d47340cab95efc441310146e912038361f Mon Sep 17 00:00:00 2001 From: Crankshaft Robot Date: Tue, 23 Jun 2015 09:41:01 +0000 Subject: [PATCH 08/20] Crankshaft Build #BU000001391EJ8 @ 2015-06-23 09:41:01 +0000 --- src/main/java/com/gocardless/resources/Customer.java | 6 +++--- .../com/gocardless/services/CustomerService.java | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/gocardless/resources/Customer.java b/src/main/java/com/gocardless/resources/Customer.java index 61b99bcb..d59d9cad 100644 --- a/src/main/java/com/gocardless/resources/Customer.java +++ b/src/main/java/com/gocardless/resources/Customer.java @@ -60,7 +60,7 @@ public String getCity() { } /** - * Company Name. + * Customer's company name. Required unless a `given_name` and `family_name` are provided. */ public String getCompanyName() { return companyName; @@ -90,14 +90,14 @@ public String getEmail() { } /** - * Customer's surname. + * Customer's surname. Required unless a `company_name` is provided. */ public String getFamilyName() { return familyName; } /** - * Customer's first name. + * Customer's first name. Required unless a `company_name` is provided. */ public String getGivenName() { return givenName; diff --git a/src/main/java/com/gocardless/services/CustomerService.java b/src/main/java/com/gocardless/services/CustomerService.java index 4daa2483..c39558bb 100644 --- a/src/main/java/com/gocardless/services/CustomerService.java +++ b/src/main/java/com/gocardless/services/CustomerService.java @@ -117,7 +117,7 @@ public CustomerCreateRequest withCity(String city) { } /** - * Company Name. + * Customer's company name. Required unless a `given_name` and `family_name` are provided. */ public CustomerCreateRequest withCompanyName(String companyName) { this.companyName = companyName; @@ -142,7 +142,7 @@ public CustomerCreateRequest withEmail(String email) { } /** - * Customer's surname. + * Customer's surname. Required unless a `company_name` is provided. */ public CustomerCreateRequest withFamilyName(String familyName) { this.familyName = familyName; @@ -150,7 +150,7 @@ public CustomerCreateRequest withFamilyName(String familyName) { } /** - * Customer's first name. + * Customer's first name. Required unless a `company_name` is provided. */ public CustomerCreateRequest withGivenName(String givenName) { this.givenName = givenName; @@ -480,7 +480,7 @@ public CustomerUpdateRequest withCity(String city) { } /** - * Company Name. + * Customer's company name. Required unless a `given_name` and `family_name` are provided. */ public CustomerUpdateRequest withCompanyName(String companyName) { this.companyName = companyName; @@ -505,7 +505,7 @@ public CustomerUpdateRequest withEmail(String email) { } /** - * Customer's surname. + * Customer's surname. Required unless a `company_name` is provided. */ public CustomerUpdateRequest withFamilyName(String familyName) { this.familyName = familyName; @@ -513,7 +513,7 @@ public CustomerUpdateRequest withFamilyName(String familyName) { } /** - * Customer's first name. + * Customer's first name. Required unless a `company_name` is provided. */ public CustomerUpdateRequest withGivenName(String givenName) { this.givenName = givenName; From 3c7ccd23abd332a18db8ff51a7a4139f304c580d Mon Sep 17 00:00:00 2001 From: Crankshaft Robot Date: Tue, 23 Jun 2015 10:00:07 +0000 Subject: [PATCH 09/20] Crankshaft Build #BU0000013ND9CX @ 2015-06-23 10:00:06 +0000 --- .../services/CreditorBankAccountService.java | 14 ++-- .../services/CustomerBankAccountService.java | 30 ++++----- .../gocardless/services/HelperService.java | 66 +++++++++---------- 3 files changed, 52 insertions(+), 58 deletions(-) diff --git a/src/main/java/com/gocardless/services/CreditorBankAccountService.java b/src/main/java/com/gocardless/services/CreditorBankAccountService.java index 860671bd..0cdae151 100644 --- a/src/main/java/com/gocardless/services/CreditorBankAccountService.java +++ b/src/main/java/com/gocardless/services/CreditorBankAccountService.java @@ -111,8 +111,8 @@ public CreditorBankAccountCreateRequest withAccountHolderName(String accountHold /** * Bank account number - see [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for - * more information. Alternatively you can provide an `iban`. + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more + * information. Alternatively you can provide an `iban`. */ public CreditorBankAccountCreateRequest withAccountNumber(String accountNumber) { this.accountNumber = accountNumber; @@ -121,8 +121,8 @@ public CreditorBankAccountCreateRequest withAccountNumber(String accountNumber) /** * Bank code - see [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for - * more information. Alternatively you can provide an `iban`. + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more + * information. Alternatively you can provide an `iban`. */ public CreditorBankAccountCreateRequest withBankCode(String bankCode) { this.bankCode = bankCode; @@ -131,8 +131,8 @@ public CreditorBankAccountCreateRequest withBankCode(String bankCode) { /** * Branch code - see [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for - * more information. Alternatively you can provide an `iban`. + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more + * information. Alternatively you can provide an `iban`. */ public CreditorBankAccountCreateRequest withBranchCode(String branchCode) { this.branchCode = branchCode; @@ -159,7 +159,7 @@ public CreditorBankAccountCreateRequest withCurrency(String currency) { /** * International Bank Account Number. Alternatively you can provide [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details). + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details). */ public CreditorBankAccountCreateRequest withIban(String iban) { this.iban = iban; diff --git a/src/main/java/com/gocardless/services/CustomerBankAccountService.java b/src/main/java/com/gocardless/services/CustomerBankAccountService.java index a34f1daa..bed1e6b4 100644 --- a/src/main/java/com/gocardless/services/CustomerBankAccountService.java +++ b/src/main/java/com/gocardless/services/CustomerBankAccountService.java @@ -45,17 +45,17 @@ public CustomerBankAccountService(HttpClient httpClient) { * account details: * * - [Local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) * - * - - * IBAN + * - IBAN * + * * - [Customer Bank Account * Tokens](https://developer.gocardless.com/pro/2015-04-29/#js-flow-create-a-customer-bank-account-token) * * * For more information on the different fields required in each country, see [local bank - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details). + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details). */ public CustomerBankAccountCreateRequest create() { return new CustomerBankAccountCreateRequest(httpClient); @@ -113,17 +113,17 @@ public CustomerBankAccountDisableRequest disable(String identity) { * account details: * * - [Local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) * - * - - * IBAN + * - IBAN * + * * - [Customer Bank Account * Tokens](https://developer.gocardless.com/pro/2015-04-29/#js-flow-create-a-customer-bank-account-token) * * * For more information on the different fields required in each country, see [local bank - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details). + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details). */ public static final class CustomerBankAccountCreateRequest extends PostRequest { @@ -149,8 +149,8 @@ public CustomerBankAccountCreateRequest withAccountHolderName(String accountHold /** * Bank account number - see [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for - * more information. Alternatively you can provide an `iban`. + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more + * information. Alternatively you can provide an `iban`. */ public CustomerBankAccountCreateRequest withAccountNumber(String accountNumber) { this.accountNumber = accountNumber; @@ -159,8 +159,8 @@ public CustomerBankAccountCreateRequest withAccountNumber(String accountNumber) /** * Bank code - see [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for - * more information. Alternatively you can provide an `iban`. + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more + * information. Alternatively you can provide an `iban`. */ public CustomerBankAccountCreateRequest withBankCode(String bankCode) { this.bankCode = bankCode; @@ -169,8 +169,8 @@ public CustomerBankAccountCreateRequest withBankCode(String bankCode) { /** * Branch code - see [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for - * more information. Alternatively you can provide an `iban`. + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more + * information. Alternatively you can provide an `iban`. */ public CustomerBankAccountCreateRequest withBranchCode(String branchCode) { this.branchCode = branchCode; @@ -197,7 +197,7 @@ public CustomerBankAccountCreateRequest withCurrency(String currency) { /** * International Bank Account Number. Alternatively you can provide [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details). + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details). */ public CustomerBankAccountCreateRequest withIban(String iban) { this.iban = iban; diff --git a/src/main/java/com/gocardless/services/HelperService.java b/src/main/java/com/gocardless/services/HelperService.java index d3ecd8f2..03ae8229 100644 --- a/src/main/java/com/gocardless/services/HelperService.java +++ b/src/main/java/com/gocardless/services/HelperService.java @@ -32,13 +32,12 @@ public HelperService(HttpClient httpClient) { * * Bank account details may either be supplied using the IBAN (international bank * account number), or [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details). For - * more information on the different fields required in each country, please see the [local bank - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) - * section. + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details). For more + * information on the different fields required in each country, please see the [local bank + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) section. * - * To generate a mandate in a foreign language, set your `Accept-Language` header to - * the relevant [ISO + * To + * generate a mandate in a foreign language, set your `Accept-Language` header to the relevant [ISO * 639-1](http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes#Partial_ISO_639_table) language code. * Currently Dutch, English, French, German, Italian, Portuguese and Spanish are supported. * @@ -55,11 +54,9 @@ public HelperMandateRequest mandate() { * * Bank * account details may either be supplied using the IBAN (international bank account number), or - * [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details). For - * more information on the different fields required in each country, please see the [local bank - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) - * section. + * [local details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details). For more + * information on the different fields required in each country, please see the [local bank + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) section. */ public HelperModulusCheckRequest modulusCheck() { return new HelperModulusCheckRequest(httpClient); @@ -76,13 +73,12 @@ public HelperModulusCheckRequest modulusCheck() { * * Bank account details may either be supplied using the IBAN (international bank * account number), or [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details). For - * more information on the different fields required in each country, please see the [local bank - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) - * section. + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details). For more + * information on the different fields required in each country, please see the [local bank + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) section. * - * To generate a mandate in a foreign language, set your `Accept-Language` header to - * the relevant [ISO + * To + * generate a mandate in a foreign language, set your `Accept-Language` header to the relevant [ISO * 639-1](http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes#Partial_ISO_639_table) language code. * Currently Dutch, English, French, German, Italian, Portuguese and Spanish are supported. * @@ -115,8 +111,8 @@ public HelperMandateRequest withAccountHolderName(String accountHolderName) { /** * Bank account number - see [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for - * more information. + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more + * information. */ public HelperMandateRequest withAccountNumber(String accountNumber) { this.accountNumber = accountNumber; @@ -125,8 +121,8 @@ public HelperMandateRequest withAccountNumber(String accountNumber) { /** * Bank code - see [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for - * more information. + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more + * information. */ public HelperMandateRequest withBankCode(String bankCode) { this.bankCode = bankCode; @@ -143,8 +139,8 @@ public HelperMandateRequest withBic(String bic) { /** * Branch code - see [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for - * more information. + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more + * information. */ public HelperMandateRequest withBranchCode(String branchCode) { this.branchCode = branchCode; @@ -162,7 +158,7 @@ public HelperMandateRequest withCountryCode(String countryCode) { /** * International Bank Account Number. Alternatively you can provide [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details). + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details). */ public HelperMandateRequest withIban(String iban) { this.iban = iban; @@ -244,11 +240,9 @@ protected String getRequestEnvelope() { * * Bank * account details may either be supplied using the IBAN (international bank account number), or - * [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details). For - * more information on the different fields required in each country, please see the [local bank - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) - * section. + * [local details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details). For more + * information on the different fields required in each country, please see the [local bank + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) section. */ public static final class HelperModulusCheckRequest extends PostRequest { private String accountNumber; @@ -259,8 +253,8 @@ public static final class HelperModulusCheckRequest extends PostRequest /** * Bank account number - see [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for - * more information. + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more + * information. */ public HelperModulusCheckRequest withAccountNumber(String accountNumber) { this.accountNumber = accountNumber; @@ -269,8 +263,8 @@ public HelperModulusCheckRequest withAccountNumber(String accountNumber) { /** * Bank code - see [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for - * more information. + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more + * information. */ public HelperModulusCheckRequest withBankCode(String bankCode) { this.bankCode = bankCode; @@ -279,8 +273,8 @@ public HelperModulusCheckRequest withBankCode(String bankCode) { /** * Branch code - see [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details) for - * more information. + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more + * information. */ public HelperModulusCheckRequest withBranchCode(String branchCode) { this.branchCode = branchCode; @@ -298,7 +292,7 @@ public HelperModulusCheckRequest withCountryCode(String countryCode) { /** * International Bank Account Number. Alternatively you can provide [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-compliance-local-bank-details). + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details). */ public HelperModulusCheckRequest withIban(String iban) { this.iban = iban; From 96793400c4559f677572432e914d1c2d90d4e926 Mon Sep 17 00:00:00 2001 From: Crankshaft Robot Date: Tue, 23 Jun 2015 12:12:36 +0000 Subject: [PATCH 10/20] Crankshaft Build #BU00000146X5R6 @ 2015-06-23 12:12:36 +0000 --- .../com/gocardless/resources/RedirectFlow.java | 14 +++++++++----- .../gocardless/services/RedirectFlowService.java | 13 +++++++++---- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/gocardless/resources/RedirectFlow.java b/src/main/java/com/gocardless/resources/RedirectFlow.java index 2145db72..c4191f4e 100644 --- a/src/main/java/com/gocardless/resources/RedirectFlow.java +++ b/src/main/java/com/gocardless/resources/RedirectFlow.java @@ -66,14 +66,15 @@ public String getCreatedAt() { } /** - * A description of the item the customer is paying for + * A description of the item the customer is paying for. This will be shown on the hosted payment + * pages. */ public String getDescription() { return description; } /** - * Unique identifier, beginning with "RE" + * Unique identifier, beginning with "RE". */ public String getId() { return id; @@ -84,7 +85,8 @@ public Links getLinks() { } /** - * The URI to redirect the customer to to setup their mandate + * The URL of the hosted payment pages for this redirect flow. This is the URL you should redirect + * your customer to. */ public String getRedirectUrl() { return redirectUrl; @@ -99,14 +101,16 @@ public Scheme getScheme() { } /** - * The customer's session ID + * The customer's session ID must be provided when the redirect flow is set up and again when it is + * completed. This allows integrators to ensure that the user who was originally sent to the + * GoCardless payment pages is the one who has completed them. */ public String getSessionToken() { return sessionToken; } /** - * The URI to redirect to upon success mandate setup + * The URL to redirect to upon successful mandate setup. */ public String getSuccessRedirectUrl() { return successRedirectUrl; diff --git a/src/main/java/com/gocardless/services/RedirectFlowService.java b/src/main/java/com/gocardless/services/RedirectFlowService.java index 9622d9e1..257ee15e 100644 --- a/src/main/java/com/gocardless/services/RedirectFlowService.java +++ b/src/main/java/com/gocardless/services/RedirectFlowService.java @@ -109,7 +109,8 @@ public static final class RedirectFlowCreateRequest extends PostRequest Date: Thu, 25 Jun 2015 09:00:31 +0000 Subject: [PATCH 11/20] Crankshaft Build #BU0000014PFXG8 @ 2015-06-25 09:00:31 +0000 --- .../com/gocardless/resources/Creditor.java | 6 +-- .../resources/CreditorBankAccount.java | 10 ++-- .../com/gocardless/resources/Customer.java | 4 +- .../resources/CustomerBankAccount.java | 10 ++-- .../java/com/gocardless/resources/Event.java | 16 +++--- .../com/gocardless/resources/Mandate.java | 6 +-- .../com/gocardless/resources/Payment.java | 25 ++++----- .../java/com/gocardless/resources/Payout.java | 8 +-- .../gocardless/resources/RedirectFlow.java | 14 ++--- .../java/com/gocardless/resources/Refund.java | 22 ++++---- .../gocardless/resources/Subscription.java | 50 +++++++++--------- .../services/CreditorBankAccountService.java | 12 ++--- .../gocardless/services/CreditorService.java | 10 ++-- .../services/CustomerBankAccountService.java | 16 +++--- .../gocardless/services/CustomerService.java | 4 +- .../com/gocardless/services/EventService.java | 10 ++-- .../gocardless/services/HelperService.java | 2 +- .../gocardless/services/MandateService.java | 14 ++--- .../gocardless/services/PaymentService.java | 16 +++--- .../gocardless/services/PayoutService.java | 4 +- .../services/RedirectFlowService.java | 26 +++++----- .../gocardless/services/RefundService.java | 26 +++++----- .../services/SubscriptionService.java | 52 +++++++++---------- 23 files changed, 182 insertions(+), 181 deletions(-) diff --git a/src/main/java/com/gocardless/resources/Creditor.java b/src/main/java/com/gocardless/resources/Creditor.java index ce693489..dfb156d8 100644 --- a/src/main/java/com/gocardless/resources/Creditor.java +++ b/src/main/java/com/gocardless/resources/Creditor.java @@ -3,7 +3,7 @@ /** * Represents a creditor resource returned from the API. * - * Each [payment](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payments) taken + * Each [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments) taken * through the API is linked to a "creditor", to whom the payment is then paid out. In most cases * your organisation will have a single "creditor", but the API also supports collecting payments on * behalf of others. @@ -115,7 +115,7 @@ private Links() { /** * ID of the [bank - * account](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditor-bank-accounts) + * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditor-bank-accounts) * which is set up to receive payouts in EUR. */ public String getDefaultEurPayoutAccount() { @@ -124,7 +124,7 @@ public String getDefaultEurPayoutAccount() { /** * ID of the [bank - * account](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditor-bank-accounts) + * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditor-bank-accounts) * which is set up to receive payouts in GBP. */ public String getDefaultGbpPayoutAccount() { diff --git a/src/main/java/com/gocardless/resources/CreditorBankAccount.java b/src/main/java/com/gocardless/resources/CreditorBankAccount.java index 77f2d908..65aea850 100644 --- a/src/main/java/com/gocardless/resources/CreditorBankAccount.java +++ b/src/main/java/com/gocardless/resources/CreditorBankAccount.java @@ -6,9 +6,9 @@ * Represents a creditor bank account resource returned from the API. * * Creditor Bank Accounts hold the bank details of a - * [creditor](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditor). These are the - * bank accounts which your - * [payouts](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payouts) will be sent + * [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditor). These are + * the bank accounts which your + * [payouts](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payouts) will be sent * to. * * Note that creditor bank accounts must be unique, and so you will encounter a @@ -34,7 +34,7 @@ private CreditorBankAccount() { /** * Name of the account holder, as known by the bank. Usually this is the same as the name stored with - * the linked [creditor](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditors). + * the linked [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors). * This field will be transliterated, upcased and truncated to 18 characters. */ public String getAccountHolderName() { @@ -113,7 +113,7 @@ private Links() { private String creditor; /** - * ID of the [creditor](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditors) + * ID of the [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors) * that owns this bank account. */ public String getCreditor() { diff --git a/src/main/java/com/gocardless/resources/Customer.java b/src/main/java/com/gocardless/resources/Customer.java index d59d9cad..d7c0b14a 100644 --- a/src/main/java/com/gocardless/resources/Customer.java +++ b/src/main/java/com/gocardless/resources/Customer.java @@ -7,9 +7,9 @@ * * Customer objects hold the contact details for a customer. A customer can have several [customer * bank - * accounts](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customer-bank-accounts), + * accounts](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-accounts), * which in turn can have several Direct Debit - * [mandates](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates). + * [mandates](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates). */ public class Customer { private Customer() { diff --git a/src/main/java/com/gocardless/resources/CustomerBankAccount.java b/src/main/java/com/gocardless/resources/CustomerBankAccount.java index 033e94ab..1077855a 100644 --- a/src/main/java/com/gocardless/resources/CustomerBankAccount.java +++ b/src/main/java/com/gocardless/resources/CustomerBankAccount.java @@ -6,10 +6,10 @@ * Represents a customer bank account resource returned from the API. * * Customer Bank Accounts hold the bank details of a - * [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers). They always - * belong to a [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers), + * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers). They always + * belong to a [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers), * and may be linked to several Direct Debit - * [mandates](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates). + * [mandates](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates). * * Note * that customer bank accounts must be unique, and so you will encounter a `bank_account_exists` @@ -35,7 +35,7 @@ private CustomerBankAccount() { /** * Name of the account holder, as known by the bank. Usually this matches the name of the linked - * [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers). This field + * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers). This field * will be transliterated, upcased and truncated to 18 characters. */ public String getAccountHolderName() { @@ -114,7 +114,7 @@ private Links() { private String customer; /** - * ID of the [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers) + * ID of the [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers) * that owns this bank account. */ public String getCustomer() { diff --git a/src/main/java/com/gocardless/resources/Event.java b/src/main/java/com/gocardless/resources/Event.java index 30f80564..0c327d59 100644 --- a/src/main/java/com/gocardless/resources/Event.java +++ b/src/main/java/com/gocardless/resources/Event.java @@ -172,7 +172,7 @@ private Links() { /** * If `resource_type` is `mandates`, this is the ID of the - * [mandate](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates) which has been + * [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates) which has been * updated. */ public String getMandate() { @@ -181,7 +181,7 @@ public String getMandate() { /** * This is only included for mandate transfer events, when it is the ID of the [customer bank - * account](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customer-bank-accounts) + * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-accounts) * which the mandate is being transferred to. */ public String getNewCustomerBankAccount() { @@ -199,7 +199,7 @@ public String getParentEvent() { /** * If `resource_type` is `payments`, this is the ID of the - * [payment](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payments) which has been + * [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments) which has been * updated. */ public String getPayment() { @@ -208,7 +208,7 @@ public String getPayment() { /** * If `resource_type` is `payouts`, this is the ID of the - * [payout](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payouts) which has been + * [payout](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payouts) which has been * updated. */ public String getPayout() { @@ -217,7 +217,7 @@ public String getPayout() { /** * This is only included for mandate transfer events, when it is the ID of the [customer bank - * account](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customer-bank-accounts) + * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-accounts) * which the mandate is being transferred from. */ public String getPreviousCustomerBankAccount() { @@ -226,7 +226,7 @@ public String getPreviousCustomerBankAccount() { /** * If `resource_type` is `refunds`, this is the ID of the - * [refund](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-refunds) which has been + * [refund](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-refunds) which has been * updated. */ public String getRefund() { @@ -235,8 +235,8 @@ public String getRefund() { /** * If `resource_type` is `subscription`, this is the ID of the - * [subscription](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-subscriptions) which - * has been updated. + * [subscription](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-subscriptions) + * which has been updated. */ public String getSubscription() { return subscription; diff --git a/src/main/java/com/gocardless/resources/Mandate.java b/src/main/java/com/gocardless/resources/Mandate.java index fa091b43..031efbe0 100644 --- a/src/main/java/com/gocardless/resources/Mandate.java +++ b/src/main/java/com/gocardless/resources/Mandate.java @@ -8,7 +8,7 @@ * Represents a mandate resource returned from the API. * * Mandates represent the Direct Debit mandate with a - * [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers). + * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers). * * * GoCardless will notify you via a @@ -119,7 +119,7 @@ private Links() { /** * ID of the associated - * [creditor](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditors). + * [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors). */ public String getCreditor() { return creditor; @@ -127,7 +127,7 @@ public String getCreditor() { /** * ID of the associated [customer bank - * account](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customer-bank-accounts) + * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-accounts) * which the mandate is created and submits payments against. */ public String getCustomerBankAccount() { diff --git a/src/main/java/com/gocardless/resources/Payment.java b/src/main/java/com/gocardless/resources/Payment.java index b026436a..d346f779 100644 --- a/src/main/java/com/gocardless/resources/Payment.java +++ b/src/main/java/com/gocardless/resources/Payment.java @@ -8,10 +8,10 @@ * Represents a payment resource returned from the API. * * Payment objects represent payments from a - * [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers) to a - * [creditor](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditors), taken + * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers) to a + * [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors), taken * against a Direct Debit - * [mandate](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates). + * [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates). * * * GoCardless will notify you via a @@ -43,8 +43,8 @@ public Integer getAmount() { } /** - * Amount [refunded](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-refunds) in pence - * or cents. + * Amount [refunded](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-refunds) in + * pence or cents. */ public Integer getAmountRefunded() { return amountRefunded; @@ -53,7 +53,7 @@ public Integer getAmountRefunded() { /** * A future date on which the payment should be collected. If not specified, the payment will be * collected as soon as possible. This must be on or after the - * [mandate](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates)'s + * [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates)'s * `next_possible_charge_date`, and will be rolled-forwards by GoCardless if it is not a working day. */ public String getChargeDate() { @@ -155,7 +155,7 @@ private Links() { private String subscription; /** - * ID of [creditor](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditors) to + * ID of [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors) to * which the collected payment will be sent. */ public String getCreditor() { @@ -163,7 +163,7 @@ public String getCreditor() { } /** - * ID of the [mandate](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates) + * ID of the [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates) * against which this payment should be collected. */ public String getMandate() { @@ -171,7 +171,7 @@ public String getMandate() { } /** - * ID of [payout](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payouts) which + * ID of [payout](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payouts) which * contains the funds from this payment.
**Note**: this property will not be present until the * payment has been successfully collected. */ @@ -180,9 +180,10 @@ public String getPayout() { } /** - * ID of [subscription](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-subscriptions) - * from which this payment was created.
**Note**: this property will only be present if this - * payment is part of a subscription. + * ID of + * [subscription](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-subscriptions) from + * which this payment was created.
**Note**: this property will only be present if this payment + * is part of a subscription. */ public String getSubscription() { return subscription; diff --git a/src/main/java/com/gocardless/resources/Payout.java b/src/main/java/com/gocardless/resources/Payout.java index 26c9bdb8..fe877f12 100644 --- a/src/main/java/com/gocardless/resources/Payout.java +++ b/src/main/java/com/gocardless/resources/Payout.java @@ -6,9 +6,9 @@ * Represents a payout resource returned from the API. * * Payouts represent transfers from GoCardless to a - * [creditor](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditors). Each payout + * [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors). Each payout * contains the funds collected from one or many - * [payments](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payments). Payouts are + * [payments](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments). Payouts are * created automatically after a payment has been successfully collected. */ public class Payout { @@ -92,7 +92,7 @@ private Links() { private String creditorBankAccount; /** - * ID of [creditor](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditors) who + * ID of [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors) who * will receive this payout, i.e. the owner of the `creditor_bank_account`. */ public String getCreditor() { @@ -101,7 +101,7 @@ public String getCreditor() { /** * ID of [bank - * account](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditor-bank-accounts) + * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditor-bank-accounts) * which this will be sent to. */ public String getCreditorBankAccount() { diff --git a/src/main/java/com/gocardless/resources/RedirectFlow.java b/src/main/java/com/gocardless/resources/RedirectFlow.java index c4191f4e..8d08504d 100644 --- a/src/main/java/com/gocardless/resources/RedirectFlow.java +++ b/src/main/java/com/gocardless/resources/RedirectFlow.java @@ -23,13 +23,13 @@ * 3. You * [complete](https://developer.gocardless.com/pro/2015-04-29/#complete-a-redirect-flow) the redirect * flow, which creates a - * [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers), [customer + * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers), [customer * bank - * account](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customer-bank-accounts), - * and [mandate](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates), and + * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-accounts), + * and [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates), and * returns the ID of the mandate. You may wish to create a - * [subscription](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-subscriptions) or - * [payment](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payments) at this + * [subscription](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-subscriptions) or + * [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments) at this * point. * * It is recommended that you link the redirect flow to your user object as soon as it is @@ -131,7 +131,7 @@ private Links() { private String mandate; /** - * The [creditor](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditors) for whom + * The [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors) for whom * the mandate will be created. The `name` of the creditor will be displayed on the payment page. */ public String getCreditor() { @@ -139,7 +139,7 @@ public String getCreditor() { } /** - * ID of [mandate](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates) created + * ID of [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates) created * by this redirect flow.
**Note**: this property will not be present until the redirect flow has * been successfully completed. */ diff --git a/src/main/java/com/gocardless/resources/Refund.java b/src/main/java/com/gocardless/resources/Refund.java index b0ab4f4c..488340ec 100644 --- a/src/main/java/com/gocardless/resources/Refund.java +++ b/src/main/java/com/gocardless/resources/Refund.java @@ -6,18 +6,18 @@ * Represents a refund resource returned from the API. * * Refund objects represent (partial) refunds of a - * [payment](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payment) back to the - * [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers). + * [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payment) back to the + * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers). * - * The API - * allows you to create, show, list and update your refunds. + * The + * API allows you to create, show, list and update your refunds. * - * GoCardless will notify you via a - * [webhook](https://developer.gocardless.com/pro/2015-04-29/#webhooks) whenever a refund is created, - * and will update the `amount_refunded` property of the payment. + * GoCardless will notify you via + * a [webhook](https://developer.gocardless.com/pro/2015-04-29/#webhooks) whenever a refund is + * created, and will update the `amount_refunded` property of the payment. * - * _Note:_ A payment that has - * been (partially) refunded can still receive a late failure or chargeback from the banks. + * _Note:_ A payment + * that has been (partially) refunded can still receive a late failure or chargeback from the banks. */ public class Refund { private Refund() { @@ -49,7 +49,7 @@ public String getCreatedAt() { /** * [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217#Active_codes) currency code. This is set to the * currency of the refund's - * [payment](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payments). + * [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments). */ public String getCurrency() { return currency; @@ -82,7 +82,7 @@ private Links() { private String payment; /** - * ID of the [payment](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payments) + * ID of the [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments) * against which the refund is being made. */ public String getPayment() { diff --git a/src/main/java/com/gocardless/resources/Subscription.java b/src/main/java/com/gocardless/resources/Subscription.java index 30a04d20..000c6728 100644 --- a/src/main/java/com/gocardless/resources/Subscription.java +++ b/src/main/java/com/gocardless/resources/Subscription.java @@ -9,38 +9,38 @@ * Represents a subscription resource returned from the API. * * Subscriptions create - * [payments](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payments) according to a - * schedule. + * [payments](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments) according to + * a schedule. * * #### Recurrence Rules * - * The following rules apply when specifying recurrence: - * + * The following rules apply when specifying + * recurrence: * - The first payment must be charged within 1 year. - * - When neither `month` nor `day_of_month` are - * present, the subscription will recur from the `start_at` based on the `interval_unit`. - * - If - * `month` or `day_of_month` are present, the recurrence rules will be applied from the `start_at`, - * and the following validations apply: + * - When neither `month` nor + * `day_of_month` are present, the subscription will recur from the `start_at` based on the + * `interval_unit`. + * - If `month` or `day_of_month` are present, the recurrence rules will be + * applied from the `start_at`, and the following validations apply: * - * | interval_unit | month - * | day_of_month | - * | :-------------- | - * :--------------------------------------------- | :-------------------------------------- | + * | interval_unit | month + * | day_of_month | * | - * yearly | optional (required if `day_of_month` provided) | optional (required if `month` - * provided) | - * | monthly | invalid | required - * | - * | weekly | invalid | - * invalid | + * :-------------- | :--------------------------------------------- | + * :-------------------------------------- | + * | yearly | optional (required if + * `day_of_month` provided) | optional (required if `month` provided) | + * | monthly | invalid + * | required | + * | weekly + * | invalid | invalid | + * * * Examples: * - * | interval_unit | interval | - * month | day_of_month | valid? | - * | - * :-------------- | :--------- | :------ | :------------- | + * | interval_unit | interval | month | day_of_month | valid? + * | + * | :-------------- | :--------- | :------ | :------------- | * :------------------------------------------------- | * | yearly | 1 | january | * -1 | valid | @@ -199,7 +199,7 @@ public String getPaymentReference() { /** * The date on which the first payment should be charged. Must be within one year of creation and on - * or after the [mandate](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates)'s + * or after the [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates)'s * `next_possible_charge_date`. When blank, this will be set as the mandate's * `next_possible_charge_date`. */ @@ -261,7 +261,7 @@ private Links() { /** * ID of the associated - * [mandate](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates) which the + * [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates) which the * subscription will create payments against. */ public String getMandate() { diff --git a/src/main/java/com/gocardless/services/CreditorBankAccountService.java b/src/main/java/com/gocardless/services/CreditorBankAccountService.java index 0cdae151..e4dcd46e 100644 --- a/src/main/java/com/gocardless/services/CreditorBankAccountService.java +++ b/src/main/java/com/gocardless/services/CreditorBankAccountService.java @@ -15,9 +15,9 @@ * Service class for working with creditor bank account resources. * * Creditor Bank Accounts hold the bank details of a - * [creditor](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditor). These are the - * bank accounts which your - * [payouts](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payouts) will be sent + * [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditor). These are + * the bank accounts which your + * [payouts](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payouts) will be sent * to. * * Note that creditor bank accounts must be unique, and so you will encounter a @@ -101,7 +101,7 @@ public static final class CreditorBankAccountCreateRequest extends /** * Name of the account holder, as known by the bank. Usually this is the same as the name stored with - * the linked [creditor](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditors). + * the linked [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors). * This field will be transliterated, upcased and truncated to 18 characters. */ public CreditorBankAccountCreateRequest withAccountHolderName(String accountHolderName) { @@ -172,7 +172,7 @@ public CreditorBankAccountCreateRequest withLinks(Links links) { } /** - * ID of the [creditor](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditors) + * ID of the [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors) * that owns this bank account. */ public CreditorBankAccountCreateRequest withLinksCreditor(String creditor) { @@ -241,7 +241,7 @@ public static class Links { private String creditor; /** - * ID of the [creditor](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditors) + * ID of the [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors) * that owns this bank account. */ public Links withCreditor(String creditor) { diff --git a/src/main/java/com/gocardless/services/CreditorService.java b/src/main/java/com/gocardless/services/CreditorService.java index 261f09fb..723d9daf 100644 --- a/src/main/java/com/gocardless/services/CreditorService.java +++ b/src/main/java/com/gocardless/services/CreditorService.java @@ -12,7 +12,7 @@ /** * Service class for working with creditor resources. * - * Each [payment](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payments) taken + * Each [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments) taken * through the API is linked to a "creditor", to whom the payment is then paid out. In most cases * your organisation will have a single "creditor", but the API also supports collecting payments on * behalf of others. @@ -363,7 +363,7 @@ public CreditorUpdateRequest withLinks(Links links) { /** * ID of the [bank - * account](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditor-bank-accounts) + * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditor-bank-accounts) * which is set up to receive payouts in EUR. */ public CreditorUpdateRequest withLinksDefaultEurPayoutAccount(String defaultEurPayoutAccount) { @@ -376,7 +376,7 @@ public CreditorUpdateRequest withLinksDefaultEurPayoutAccount(String defaultEurP /** * ID of the [bank - * account](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditor-bank-accounts) + * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditor-bank-accounts) * which is set up to receive payouts in GBP. */ public CreditorUpdateRequest withLinksDefaultGbpPayoutAccount(String defaultGbpPayoutAccount) { @@ -461,7 +461,7 @@ public static class Links { /** * ID of the [bank - * account](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditor-bank-accounts) + * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditor-bank-accounts) * which is set up to receive payouts in EUR. */ public Links withDefaultEurPayoutAccount(String defaultEurPayoutAccount) { @@ -471,7 +471,7 @@ public Links withDefaultEurPayoutAccount(String defaultEurPayoutAccount) { /** * ID of the [bank - * account](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditor-bank-accounts) + * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditor-bank-accounts) * which is set up to receive payouts in GBP. */ public Links withDefaultGbpPayoutAccount(String defaultGbpPayoutAccount) { diff --git a/src/main/java/com/gocardless/services/CustomerBankAccountService.java b/src/main/java/com/gocardless/services/CustomerBankAccountService.java index bed1e6b4..b8837d69 100644 --- a/src/main/java/com/gocardless/services/CustomerBankAccountService.java +++ b/src/main/java/com/gocardless/services/CustomerBankAccountService.java @@ -15,10 +15,10 @@ * Service class for working with customer bank account resources. * * Customer Bank Accounts hold the bank details of a - * [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers). They always - * belong to a [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers), + * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers). They always + * belong to a [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers), * and may be linked to several Direct Debit - * [mandates](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates). + * [mandates](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates). * * Note * that customer bank accounts must be unique, and so you will encounter a `bank_account_exists` @@ -139,7 +139,7 @@ public static final class CustomerBankAccountCreateRequest extends /** * Name of the account holder, as known by the bank. Usually this matches the name of the linked - * [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers). This field + * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers). This field * will be transliterated, upcased and truncated to 18 characters. */ public CustomerBankAccountCreateRequest withAccountHolderName(String accountHolderName) { @@ -210,7 +210,7 @@ public CustomerBankAccountCreateRequest withLinks(Links links) { } /** - * ID of the [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers) + * ID of the [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers) * that owns this bank account. */ public CustomerBankAccountCreateRequest withLinksCustomer(String customer) { @@ -223,7 +223,7 @@ public CustomerBankAccountCreateRequest withLinksCustomer(String customer) { /** * ID of a [customer bank account - * token](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customer-bank-account-tokens) + * token](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-account-tokens) * to use in place of bank account parameters. */ public CustomerBankAccountCreateRequest withLinksCustomerBankAccountToken( @@ -285,7 +285,7 @@ public static class Links { private String customerBankAccountToken; /** - * ID of the [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers) + * ID of the [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers) * that owns this bank account. */ public Links withCustomer(String customer) { @@ -295,7 +295,7 @@ public Links withCustomer(String customer) { /** * ID of a [customer bank account - * token](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customer-bank-account-tokens) + * token](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-account-tokens) * to use in place of bank account parameters. */ public Links withCustomerBankAccountToken(String customerBankAccountToken) { diff --git a/src/main/java/com/gocardless/services/CustomerService.java b/src/main/java/com/gocardless/services/CustomerService.java index c39558bb..33755745 100644 --- a/src/main/java/com/gocardless/services/CustomerService.java +++ b/src/main/java/com/gocardless/services/CustomerService.java @@ -15,9 +15,9 @@ * * Customer objects hold the contact details for a customer. A customer can have several [customer * bank - * accounts](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customer-bank-accounts), + * accounts](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-accounts), * which in turn can have several Direct Debit - * [mandates](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates). + * [mandates](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates). */ public class CustomerService { private HttpClient httpClient; diff --git a/src/main/java/com/gocardless/services/EventService.java b/src/main/java/com/gocardless/services/EventService.java index ad1ee442..ed9b92a6 100644 --- a/src/main/java/com/gocardless/services/EventService.java +++ b/src/main/java/com/gocardless/services/EventService.java @@ -166,7 +166,7 @@ public EventListRequest withLimit(Integer limit) { } /** - * ID of a [mandate](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates). If + * ID of a [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates). If * specified, this endpoint will return all events for the given mandate. */ public EventListRequest withMandate(String mandate) { @@ -184,7 +184,7 @@ public EventListRequest withParentEvent(String parentEvent) { } /** - * ID of a [payment](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payments). If + * ID of a [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments). If * specified, this endpoint will return all events for the given payment. */ public EventListRequest withPayment(String payment) { @@ -193,7 +193,7 @@ public EventListRequest withPayment(String payment) { } /** - * ID of a [payout](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payouts). If + * ID of a [payout](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payouts). If * specified, this endpoint will return all events for the given payout. */ public EventListRequest withPayout(String payout) { @@ -202,7 +202,7 @@ public EventListRequest withPayout(String payout) { } /** - * ID of a [refund](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-refunds). If + * ID of a [refund](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-refunds). If * specified, this endpoint will return all events for the given refund. */ public EventListRequest withRefund(String refund) { @@ -229,7 +229,7 @@ public EventListRequest withResourceType(ResourceType resourceType) { } /** - * ID of a [subscription](#api-endpoints-subscriptions). If specified, this endpoint will return all + * ID of a [subscription](#core-endpoints-subscriptions). If specified, this endpoint will return all * events for the given subscription. */ public EventListRequest withSubscription(String subscription) { diff --git a/src/main/java/com/gocardless/services/HelperService.java b/src/main/java/com/gocardless/services/HelperService.java index 03ae8229..c410c8eb 100644 --- a/src/main/java/com/gocardless/services/HelperService.java +++ b/src/main/java/com/gocardless/services/HelperService.java @@ -101,7 +101,7 @@ public static final class HelperMandateRequest extends PostRequest { /** * Name of the account holder, as known by the bank. Usually this matches the name of the - * [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers). This field + * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers). This field * cannot exceed 18 characters. */ public HelperMandateRequest withAccountHolderName(String accountHolderName) { diff --git a/src/main/java/com/gocardless/services/MandateService.java b/src/main/java/com/gocardless/services/MandateService.java index 484fe3b2..7b8d723f 100644 --- a/src/main/java/com/gocardless/services/MandateService.java +++ b/src/main/java/com/gocardless/services/MandateService.java @@ -18,7 +18,7 @@ * Service class for working with mandate resources. * * Mandates represent the Direct Debit mandate with a - * [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers). + * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers). * * * GoCardless will notify you via a @@ -131,7 +131,7 @@ public MandateCreateRequest withLinks(Links links) { /** * ID of the associated - * [creditor](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditors). + * [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors). */ public MandateCreateRequest withLinksCreditor(String creditor) { if (links == null) { @@ -143,7 +143,7 @@ public MandateCreateRequest withLinksCreditor(String creditor) { /** * ID of the associated [customer bank - * account](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customer-bank-accounts) + * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-accounts) * which the mandate is created and submits payments against. */ public MandateCreateRequest withLinksCustomerBankAccount(String customerBankAccount) { @@ -223,7 +223,7 @@ public static class Links { /** * ID of the associated - * [creditor](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditors). + * [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors). */ public Links withCreditor(String creditor) { this.creditor = creditor; @@ -232,7 +232,7 @@ public Links withCreditor(String creditor) { /** * ID of the associated [customer bank - * account](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customer-bank-accounts) + * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-accounts) * which the mandate is created and submits payments against. */ public Links withCustomerBankAccount(String customerBankAccount) { @@ -273,7 +273,7 @@ public MandateListRequest withBefore(String before) { } /** - * ID of a [creditor](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditors). If + * ID of a [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors). If * specified, this endpoint will return all mandates for the given creditor. Cannot be used in * conjunction with `customer_bank_account` */ @@ -292,7 +292,7 @@ public MandateListRequest withCustomer(String customer) { /** * ID of a [customer bank - * account](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customer-bank-accounts). + * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-accounts). * If specified, this endpoint will return all mandates for the given bank account. Cannot be used in * conjunction with `creditor` */ diff --git a/src/main/java/com/gocardless/services/PaymentService.java b/src/main/java/com/gocardless/services/PaymentService.java index f7fc4417..5e71ca6a 100644 --- a/src/main/java/com/gocardless/services/PaymentService.java +++ b/src/main/java/com/gocardless/services/PaymentService.java @@ -15,10 +15,10 @@ * Service class for working with payment resources. * * Payment objects represent payments from a - * [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers) to a - * [creditor](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditors), taken + * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers) to a + * [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors), taken * against a Direct Debit - * [mandate](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates). + * [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates). * * * GoCardless will notify you via a @@ -42,7 +42,7 @@ public PaymentService(HttpClient httpClient) { * * This fails with a * `mandate_is_inactive` error if the linked - * [mandate](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates) is cancelled. + * [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates) is cancelled. * Payments can be created against `pending_submission` mandates, but they will not be submitted * until the mandate becomes active. */ @@ -111,7 +111,7 @@ public PaymentRetryRequest retry(String identity) { * * This fails with a * `mandate_is_inactive` error if the linked - * [mandate](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates) is cancelled. + * [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates) is cancelled. * Payments can be created against `pending_submission` mandates, but they will not be submitted * until the mandate becomes active. */ @@ -135,7 +135,7 @@ public PaymentCreateRequest withAmount(Integer amount) { /** * A future date on which the payment should be collected. If not specified, the payment will be * collected as soon as possible. This must be on or after the - * [mandate](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates)'s + * [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates)'s * `next_possible_charge_date`, and will be rolled-forwards by GoCardless if it is not a working day. */ public PaymentCreateRequest withChargeDate(String chargeDate) { @@ -166,7 +166,7 @@ public PaymentCreateRequest withLinks(Links links) { } /** - * ID of the [mandate](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates) + * ID of the [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates) * against which this payment should be collected. */ public PaymentCreateRequest withLinksMandate(String mandate) { @@ -236,7 +236,7 @@ public static class Links { private String mandate; /** - * ID of the [mandate](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates) + * ID of the [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates) * against which this payment should be collected. */ public Links withMandate(String mandate) { diff --git a/src/main/java/com/gocardless/services/PayoutService.java b/src/main/java/com/gocardless/services/PayoutService.java index 96dac4a2..df14e6f6 100644 --- a/src/main/java/com/gocardless/services/PayoutService.java +++ b/src/main/java/com/gocardless/services/PayoutService.java @@ -14,9 +14,9 @@ * Service class for working with payout resources. * * Payouts represent transfers from GoCardless to a - * [creditor](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditors). Each payout + * [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors). Each payout * contains the funds collected from one or many - * [payments](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payments). Payouts are + * [payments](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments). Payouts are * created automatically after a payment has been successfully collected. */ public class PayoutService { diff --git a/src/main/java/com/gocardless/services/RedirectFlowService.java b/src/main/java/com/gocardless/services/RedirectFlowService.java index 257ee15e..9a6c2c3f 100644 --- a/src/main/java/com/gocardless/services/RedirectFlowService.java +++ b/src/main/java/com/gocardless/services/RedirectFlowService.java @@ -29,13 +29,13 @@ * 3. You * [complete](https://developer.gocardless.com/pro/2015-04-29/#complete-a-redirect-flow) the redirect * flow, which creates a - * [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers), [customer + * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers), [customer * bank - * account](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customer-bank-accounts), - * and [mandate](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates), and + * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-accounts), + * and [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates), and * returns the ID of the mandate. You may wish to create a - * [subscription](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-subscriptions) or - * [payment](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payments) at this + * [subscription](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-subscriptions) or + * [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments) at this * point. * * It is recommended that you link the redirect flow to your user object as soon as it is @@ -79,10 +79,10 @@ public RedirectFlowGetRequest get(String identity) { /** * This creates a - * [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers), [customer + * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers), [customer * bank - * account](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customer-bank-accounts), - * and [mandate](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates) using the + * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-accounts), + * and [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates) using the * details supplied by your customer and returns the ID of the created mandate. * * This will return @@ -123,7 +123,7 @@ public RedirectFlowCreateRequest withLinks(Links links) { } /** - * The [creditor](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditors) for whom + * The [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors) for whom * the mandate will be created. The `name` of the creditor will be displayed on the payment page. */ public RedirectFlowCreateRequest withLinksCreditor(String creditor) { @@ -199,7 +199,7 @@ public static class Links { private String creditor; /** - * The [creditor](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditors) for whom + * The [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors) for whom * the mandate will be created. The `name` of the creditor will be displayed on the payment page. */ public Links withCreditor(String creditor) { @@ -251,10 +251,10 @@ protected Class getResponseClass() { * Request class for {@link RedirectFlowService#complete }. * * This creates a - * [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers), [customer + * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers), [customer * bank - * account](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customer-bank-accounts), - * and [mandate](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates) using the + * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-accounts), + * and [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates) using the * details supplied by your customer and returns the ID of the created mandate. * * This will return diff --git a/src/main/java/com/gocardless/services/RefundService.java b/src/main/java/com/gocardless/services/RefundService.java index 3968d6e0..8073ef97 100644 --- a/src/main/java/com/gocardless/services/RefundService.java +++ b/src/main/java/com/gocardless/services/RefundService.java @@ -14,18 +14,18 @@ * Service class for working with refund resources. * * Refund objects represent (partial) refunds of a - * [payment](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payment) back to the - * [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers). + * [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payment) back to the + * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers). * - * The API - * allows you to create, show, list and update your refunds. + * The + * API allows you to create, show, list and update your refunds. * - * GoCardless will notify you via a - * [webhook](https://developer.gocardless.com/pro/2015-04-29/#webhooks) whenever a refund is created, - * and will update the `amount_refunded` property of the payment. + * GoCardless will notify you via + * a [webhook](https://developer.gocardless.com/pro/2015-04-29/#webhooks) whenever a refund is + * created, and will update the `amount_refunded` property of the payment. * - * _Note:_ A payment that has - * been (partially) refunded can still receive a late failure or chargeback from the banks. + * _Note:_ A payment + * that has been (partially) refunded can still receive a late failure or chargeback from the banks. */ public class RefundService { private HttpClient httpClient; @@ -47,7 +47,7 @@ public RefundService(HttpClient httpClient) { * * - * `refund_payment_invalid_state` error if the linked - * [payment](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payments) isn't either + * [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments) isn't either * `confirmed` or `paid_out`. * * - `total_amount_confirmation_invalid` if the confirmation amount @@ -100,7 +100,7 @@ public RefundUpdateRequest update(String identity) { * * - * `refund_payment_invalid_state` error if the linked - * [payment](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payments) isn't either + * [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments) isn't either * `confirmed` or `paid_out`. * * - `total_amount_confirmation_invalid` if the confirmation amount @@ -132,7 +132,7 @@ public RefundCreateRequest withLinks(Links links) { } /** - * ID of the [payment](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payments) + * ID of the [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments) * against which the refund is being made. */ public RefundCreateRequest withLinksPayment(String payment) { @@ -200,7 +200,7 @@ public static class Links { private String payment; /** - * ID of the [payment](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payments) + * ID of the [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments) * against which the refund is being made. */ public Links withPayment(String payment) { diff --git a/src/main/java/com/gocardless/services/SubscriptionService.java b/src/main/java/com/gocardless/services/SubscriptionService.java index c8236f30..0c22da2c 100644 --- a/src/main/java/com/gocardless/services/SubscriptionService.java +++ b/src/main/java/com/gocardless/services/SubscriptionService.java @@ -15,38 +15,38 @@ * Service class for working with subscription resources. * * Subscriptions create - * [payments](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payments) according to a - * schedule. + * [payments](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments) according to + * a schedule. * * #### Recurrence Rules * - * The following rules apply when specifying recurrence: - * + * The following rules apply when specifying + * recurrence: * - The first payment must be charged within 1 year. - * - When neither `month` nor `day_of_month` are - * present, the subscription will recur from the `start_at` based on the `interval_unit`. - * - If - * `month` or `day_of_month` are present, the recurrence rules will be applied from the `start_at`, - * and the following validations apply: + * - When neither `month` nor + * `day_of_month` are present, the subscription will recur from the `start_at` based on the + * `interval_unit`. + * - If `month` or `day_of_month` are present, the recurrence rules will be + * applied from the `start_at`, and the following validations apply: * - * | interval_unit | month - * | day_of_month | - * | :-------------- | - * :--------------------------------------------- | :-------------------------------------- | + * | interval_unit | month + * | day_of_month | * | - * yearly | optional (required if `day_of_month` provided) | optional (required if `month` - * provided) | - * | monthly | invalid | required - * | - * | weekly | invalid | - * invalid | + * :-------------- | :--------------------------------------------- | + * :-------------------------------------- | + * | yearly | optional (required if + * `day_of_month` provided) | optional (required if `month` provided) | + * | monthly | invalid + * | required | + * | weekly + * | invalid | invalid | + * * * Examples: * - * | interval_unit | interval | - * month | day_of_month | valid? | - * | - * :-------------- | :--------- | :------ | :------------- | + * | interval_unit | interval | month | day_of_month | valid? + * | + * | :-------------- | :--------- | :------ | :------------- | * :------------------------------------------------- | * | yearly | 1 | january | * -1 | valid | @@ -222,7 +222,7 @@ public SubscriptionCreateRequest withLinks(Links links) { /** * ID of the associated - * [mandate](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates) which the + * [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates) which the * subscription will create payments against. */ public SubscriptionCreateRequest withLinksMandate(String mandate) { @@ -283,7 +283,7 @@ public SubscriptionCreateRequest withPaymentReference(String paymentReference) { /** * The date on which the first payment should be charged. Must be within one year of creation and on - * or after the [mandate](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates)'s + * or after the [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates)'s * `next_possible_charge_date`. When blank, this will be set as the mandate's * `next_possible_charge_date`. */ @@ -352,7 +352,7 @@ public static class Links { /** * ID of the associated - * [mandate](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates) which the + * [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates) which the * subscription will create payments against. */ public Links withMandate(String mandate) { From e0e4c713a3e7d1c82864d9281d77a5fa1f0936c0 Mon Sep 17 00:00:00 2001 From: Crankshaft Robot Date: Thu, 25 Jun 2015 16:17:09 +0000 Subject: [PATCH 12/20] Crankshaft Build #BU00000151NY4G @ 2015-06-25 16:17:09 +0000 --- .../com/gocardless/resources/Creditor.java | 25 +++--- .../resources/CreditorBankAccount.java | 26 +++--- .../com/gocardless/resources/Customer.java | 9 +- .../resources/CustomerBankAccount.java | 27 +++--- .../java/com/gocardless/resources/Event.java | 32 +++---- .../com/gocardless/resources/Mandate.java | 18 ++-- .../com/gocardless/resources/Payment.java | 41 ++++----- .../java/com/gocardless/resources/Payout.java | 19 ++-- .../gocardless/resources/RedirectFlow.java | 35 +++----- .../java/com/gocardless/resources/Refund.java | 21 ++--- .../gocardless/resources/Subscription.java | 67 +++++++------- .../services/CreditorBankAccountService.java | 51 +++++------ .../gocardless/services/CreditorService.java | 40 ++++----- .../services/CustomerBankAccountService.java | 88 +++++++------------ .../gocardless/services/CustomerService.java | 14 +-- .../com/gocardless/services/EventService.java | 24 +++-- .../gocardless/services/HelperService.java | 67 ++++++-------- .../gocardless/services/MandateService.java | 45 ++++------ .../gocardless/services/PaymentService.java | 37 +++----- .../gocardless/services/PayoutService.java | 16 ++-- .../services/RedirectFlowService.java | 69 ++++++--------- .../gocardless/services/RefundService.java | 48 ++++------ .../services/SubscriptionService.java | 80 ++++++++--------- 23 files changed, 353 insertions(+), 546 deletions(-) diff --git a/src/main/java/com/gocardless/resources/Creditor.java b/src/main/java/com/gocardless/resources/Creditor.java index dfb156d8..8fbacc7b 100644 --- a/src/main/java/com/gocardless/resources/Creditor.java +++ b/src/main/java/com/gocardless/resources/Creditor.java @@ -3,13 +3,13 @@ /** * Represents a creditor resource returned from the API. * - * Each [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments) taken - * through the API is linked to a "creditor", to whom the payment is then paid out. In most cases - * your organisation will have a single "creditor", but the API also supports collecting payments on - * behalf of others. + * Each [payment](#core-endpoints-payments) taken through the API is linked to a "creditor", to whom + * the payment is then paid out. In most cases your organisation will have a single "creditor", but + * the API also supports collecting payments on behalf of others. * - * Please get in touch if you wish to use this endpoint. Currently, for Anti - * Money Laundering reasons, any creditors you add must be directly related to your organisation. + * Please get in touch if you + * wish to use this endpoint. Currently, for Anti Money Laundering reasons, any creditors you add + * must be directly related to your organisation. */ public class Creditor { private Creditor() { @@ -65,8 +65,7 @@ public String getCountryCode() { } /** - * Fixed [timestamp](https://developer.gocardless.com/pro/2015-04-29/#overview-time-zones-dates), - * recording when this resource was created. + * Fixed [timestamp](#overview-time-zones-dates), recording when this resource was created. */ public String getCreatedAt() { return createdAt; @@ -114,18 +113,16 @@ private Links() { private String logo; /** - * ID of the [bank - * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditor-bank-accounts) - * which is set up to receive payouts in EUR. + * ID of the [bank account](#core-endpoints-creditor-bank-accounts) which is set up to receive + * payouts in EUR. */ public String getDefaultEurPayoutAccount() { return defaultEurPayoutAccount; } /** - * ID of the [bank - * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditor-bank-accounts) - * which is set up to receive payouts in GBP. + * ID of the [bank account](#core-endpoints-creditor-bank-accounts) which is set up to receive + * payouts in GBP. */ public String getDefaultGbpPayoutAccount() { return defaultGbpPayoutAccount; diff --git a/src/main/java/com/gocardless/resources/CreditorBankAccount.java b/src/main/java/com/gocardless/resources/CreditorBankAccount.java index 65aea850..fd15c2f6 100644 --- a/src/main/java/com/gocardless/resources/CreditorBankAccount.java +++ b/src/main/java/com/gocardless/resources/CreditorBankAccount.java @@ -5,16 +5,14 @@ /** * Represents a creditor bank account resource returned from the API. * - * Creditor Bank Accounts hold the bank details of a - * [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditor). These are - * the bank accounts which your - * [payouts](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payouts) will be sent - * to. + * Creditor Bank Accounts hold the bank details of a [creditor](#core-endpoints-creditor). These are + * the bank accounts which your [payouts](#core-endpoints-payouts) will be sent to. * - * Note that creditor bank accounts must be unique, and so you will encounter a - * `bank_account_exists` error if you try to create a duplicate bank account. You may wish to handle - * this by updating the existing record instead, the ID of which will be provided as - * `links[creditor_bank_account]` in the error response. + * Note that + * creditor bank accounts must be unique, and so you will encounter a `bank_account_exists` error if + * you try to create a duplicate bank account. You may wish to handle this by updating the existing + * record instead, the ID of which will be provided as `links[creditor_bank_account]` in the error + * response. */ public class CreditorBankAccount { private CreditorBankAccount() { @@ -34,8 +32,8 @@ private CreditorBankAccount() { /** * Name of the account holder, as known by the bank. Usually this is the same as the name stored with - * the linked [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors). - * This field will be transliterated, upcased and truncated to 18 characters. + * the linked [creditor](#core-endpoints-creditors). This field will be transliterated, upcased and + * truncated to 18 characters. */ public String getAccountHolderName() { return accountHolderName; @@ -64,8 +62,7 @@ public String getCountryCode() { } /** - * Fixed [timestamp](https://developer.gocardless.com/pro/2015-04-29/#overview-time-zones-dates), - * recording when this resource was created. + * Fixed [timestamp](#overview-time-zones-dates), recording when this resource was created. */ public String getCreatedAt() { return createdAt; @@ -113,8 +110,7 @@ private Links() { private String creditor; /** - * ID of the [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors) - * that owns this bank account. + * ID of the [creditor](#core-endpoints-creditors) that owns this bank account. */ public String getCreditor() { return creditor; diff --git a/src/main/java/com/gocardless/resources/Customer.java b/src/main/java/com/gocardless/resources/Customer.java index d7c0b14a..58b90933 100644 --- a/src/main/java/com/gocardless/resources/Customer.java +++ b/src/main/java/com/gocardless/resources/Customer.java @@ -6,10 +6,8 @@ * Represents a customer resource returned from the API. * * Customer objects hold the contact details for a customer. A customer can have several [customer - * bank - * accounts](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-accounts), - * which in turn can have several Direct Debit - * [mandates](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates). + * bank accounts](#core-endpoints-customer-bank-accounts), which in turn can have several Direct + * Debit [mandates](#core-endpoints-mandates). */ public class Customer { private Customer() { @@ -75,8 +73,7 @@ public String getCountryCode() { } /** - * Fixed [timestamp](https://developer.gocardless.com/pro/2015-04-29/#overview-time-zones-dates), - * recording when this resource was created. + * Fixed [timestamp](#overview-time-zones-dates), recording when this resource was created. */ public String getCreatedAt() { return createdAt; diff --git a/src/main/java/com/gocardless/resources/CustomerBankAccount.java b/src/main/java/com/gocardless/resources/CustomerBankAccount.java index 1077855a..5aba869d 100644 --- a/src/main/java/com/gocardless/resources/CustomerBankAccount.java +++ b/src/main/java/com/gocardless/resources/CustomerBankAccount.java @@ -5,17 +5,14 @@ /** * Represents a customer bank account resource returned from the API. * - * Customer Bank Accounts hold the bank details of a - * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers). They always - * belong to a [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers), - * and may be linked to several Direct Debit - * [mandates](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates). + * Customer Bank Accounts hold the bank details of a [customer](#core-endpoints-customers). They + * always belong to a [customer](#core-endpoints-customers), and may be linked to several Direct + * Debit [mandates](#core-endpoints-mandates). * - * Note - * that customer bank accounts must be unique, and so you will encounter a `bank_account_exists` - * error if you try to create a duplicate bank account. You may wish to handle this by updating the - * existing record instead, the ID of which will be provided as links[customer_bank_account] in the - * error response. + * Note that customer bank accounts must be unique, + * and so you will encounter a `bank_account_exists` error if you try to create a duplicate bank + * account. You may wish to handle this by updating the existing record instead, the ID of which will + * be provided as links[customer_bank_account] in the error response. */ public class CustomerBankAccount { private CustomerBankAccount() { @@ -35,8 +32,8 @@ private CustomerBankAccount() { /** * Name of the account holder, as known by the bank. Usually this matches the name of the linked - * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers). This field - * will be transliterated, upcased and truncated to 18 characters. + * [customer](#core-endpoints-customers). This field will be transliterated, upcased and truncated to + * 18 characters. */ public String getAccountHolderName() { return accountHolderName; @@ -65,8 +62,7 @@ public String getCountryCode() { } /** - * Fixed [timestamp](https://developer.gocardless.com/pro/2015-04-29/#overview-time-zones-dates), - * recording when this resource was created. + * Fixed [timestamp](#overview-time-zones-dates), recording when this resource was created. */ public String getCreatedAt() { return createdAt; @@ -114,8 +110,7 @@ private Links() { private String customer; /** - * ID of the [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers) - * that owns this bank account. + * ID of the [customer](#core-endpoints-customers) that owns this bank account. */ public String getCustomer() { return customer; diff --git a/src/main/java/com/gocardless/resources/Event.java b/src/main/java/com/gocardless/resources/Event.java index 0c327d59..a28179dd 100644 --- a/src/main/java/com/gocardless/resources/Event.java +++ b/src/main/java/com/gocardless/resources/Event.java @@ -31,8 +31,7 @@ public String getAction() { } /** - * Fixed [timestamp](https://developer.gocardless.com/pro/2015-04-29/#overview-time-zones-dates), - * recording when this resource was created. + * Fixed [timestamp](#overview-time-zones-dates), recording when this resource was created. */ public String getCreatedAt() { return createdAt; @@ -171,9 +170,8 @@ private Links() { private String subscription; /** - * If `resource_type` is `mandates`, this is the ID of the - * [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates) which has been - * updated. + * If `resource_type` is `mandates`, this is the ID of the [mandate](#core-endpoints-mandates) which + * has been updated. */ public String getMandate() { return mandate; @@ -181,8 +179,7 @@ public String getMandate() { /** * This is only included for mandate transfer events, when it is the ID of the [customer bank - * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-accounts) - * which the mandate is being transferred to. + * account](#core-endpoints-customer-bank-accounts) which the mandate is being transferred to. */ public String getNewCustomerBankAccount() { return newCustomerBankAccount; @@ -198,18 +195,16 @@ public String getParentEvent() { } /** - * If `resource_type` is `payments`, this is the ID of the - * [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments) which has been - * updated. + * If `resource_type` is `payments`, this is the ID of the [payment](#core-endpoints-payments) which + * has been updated. */ public String getPayment() { return payment; } /** - * If `resource_type` is `payouts`, this is the ID of the - * [payout](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payouts) which has been - * updated. + * If `resource_type` is `payouts`, this is the ID of the [payout](#core-endpoints-payouts) which has + * been updated. */ public String getPayout() { return payout; @@ -217,17 +212,15 @@ public String getPayout() { /** * This is only included for mandate transfer events, when it is the ID of the [customer bank - * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-accounts) - * which the mandate is being transferred from. + * account](#core-endpoints-customer-bank-accounts) which the mandate is being transferred from. */ public String getPreviousCustomerBankAccount() { return previousCustomerBankAccount; } /** - * If `resource_type` is `refunds`, this is the ID of the - * [refund](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-refunds) which has been - * updated. + * If `resource_type` is `refunds`, this is the ID of the [refund](#core-endpoints-refunds) which has + * been updated. */ public String getRefund() { return refund; @@ -235,8 +228,7 @@ public String getRefund() { /** * If `resource_type` is `subscription`, this is the ID of the - * [subscription](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-subscriptions) - * which has been updated. + * [subscription](#core-endpoints-subscriptions) which has been updated. */ public String getSubscription() { return subscription; diff --git a/src/main/java/com/gocardless/resources/Mandate.java b/src/main/java/com/gocardless/resources/Mandate.java index 031efbe0..b12874ac 100644 --- a/src/main/java/com/gocardless/resources/Mandate.java +++ b/src/main/java/com/gocardless/resources/Mandate.java @@ -7,13 +7,10 @@ /** * Represents a mandate resource returned from the API. * - * Mandates represent the Direct Debit mandate with a - * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers). + * Mandates represent the Direct Debit mandate with a [customer](#core-endpoints-customers). * * - * GoCardless will notify you via a - * [webhook](https://developer.gocardless.com/pro/2015-04-29/#webhooks) whenever the status of a - * mandate changes. + * GoCardless will notify you via a [webhook](#webhooks) whenever the status of a mandate changes. */ public class Mandate { private Mandate() { @@ -30,8 +27,7 @@ private Mandate() { private Status status; /** - * Fixed [timestamp](https://developer.gocardless.com/pro/2015-04-29/#overview-time-zones-dates), - * recording when this resource was created. + * Fixed [timestamp](#overview-time-zones-dates), recording when this resource was created. */ public String getCreatedAt() { return createdAt; @@ -118,17 +114,15 @@ private Links() { private String customerBankAccount; /** - * ID of the associated - * [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors). + * ID of the associated [creditor](#core-endpoints-creditors). */ public String getCreditor() { return creditor; } /** - * ID of the associated [customer bank - * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-accounts) - * which the mandate is created and submits payments against. + * ID of the associated [customer bank account](#core-endpoints-customer-bank-accounts) which the + * mandate is created and submits payments against. */ public String getCustomerBankAccount() { return customerBankAccount; diff --git a/src/main/java/com/gocardless/resources/Payment.java b/src/main/java/com/gocardless/resources/Payment.java index d346f779..52141e9c 100644 --- a/src/main/java/com/gocardless/resources/Payment.java +++ b/src/main/java/com/gocardless/resources/Payment.java @@ -7,16 +7,12 @@ /** * Represents a payment resource returned from the API. * - * Payment objects represent payments from a - * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers) to a - * [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors), taken - * against a Direct Debit - * [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates). + * Payment objects represent payments from a [customer](#core-endpoints-customers) to a + * [creditor](#core-endpoints-creditors), taken against a Direct Debit + * [mandate](#core-endpoints-mandates). * - * - * GoCardless will notify you via a - * [webhook](https://developer.gocardless.com/pro/2015-04-29/#webhooks) whenever the state of a - * payment changes. + * GoCardless will notify you via a [webhook](#webhooks) + * whenever the state of a payment changes. */ public class Payment { private Payment() { @@ -43,8 +39,7 @@ public Integer getAmount() { } /** - * Amount [refunded](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-refunds) in - * pence or cents. + * Amount [refunded](#core-endpoints-refunds) in pence or cents. */ public Integer getAmountRefunded() { return amountRefunded; @@ -52,8 +47,7 @@ public Integer getAmountRefunded() { /** * A future date on which the payment should be collected. If not specified, the payment will be - * collected as soon as possible. This must be on or after the - * [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates)'s + * collected as soon as possible. This must be on or after the [mandate](#core-endpoints-mandates)'s * `next_possible_charge_date`, and will be rolled-forwards by GoCardless if it is not a working day. */ public String getChargeDate() { @@ -61,8 +55,7 @@ public String getChargeDate() { } /** - * Fixed [timestamp](https://developer.gocardless.com/pro/2015-04-29/#overview-time-zones-dates), - * recording when this resource was created. + * Fixed [timestamp](#overview-time-zones-dates), recording when this resource was created. */ public String getCreatedAt() { return createdAt; @@ -155,35 +148,31 @@ private Links() { private String subscription; /** - * ID of [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors) to - * which the collected payment will be sent. + * ID of [creditor](#core-endpoints-creditors) to which the collected payment will be sent. */ public String getCreditor() { return creditor; } /** - * ID of the [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates) - * against which this payment should be collected. + * ID of the [mandate](#core-endpoints-mandates) against which this payment should be collected. */ public String getMandate() { return mandate; } /** - * ID of [payout](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payouts) which - * contains the funds from this payment.
**Note**: this property will not be present until the - * payment has been successfully collected. + * ID of [payout](#core-endpoints-payouts) which contains the funds from this payment.
**Note**: + * this property will not be present until the payment has been successfully collected. */ public String getPayout() { return payout; } /** - * ID of - * [subscription](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-subscriptions) from - * which this payment was created.
**Note**: this property will only be present if this payment - * is part of a subscription. + * ID of [subscription](#core-endpoints-subscriptions) from which this payment was + * created.
**Note**: this property will only be present if this payment is part of a + * subscription. */ public String getSubscription() { return subscription; diff --git a/src/main/java/com/gocardless/resources/Payout.java b/src/main/java/com/gocardless/resources/Payout.java index fe877f12..60e08159 100644 --- a/src/main/java/com/gocardless/resources/Payout.java +++ b/src/main/java/com/gocardless/resources/Payout.java @@ -5,11 +5,9 @@ /** * Represents a payout resource returned from the API. * - * Payouts represent transfers from GoCardless to a - * [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors). Each payout - * contains the funds collected from one or many - * [payments](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments). Payouts are - * created automatically after a payment has been successfully collected. + * Payouts represent transfers from GoCardless to a [creditor](#core-endpoints-creditors). Each + * payout contains the funds collected from one or many [payments](#core-endpoints-payments). Payouts + * are created automatically after a payment has been successfully collected. */ public class Payout { private Payout() { @@ -32,8 +30,7 @@ public Integer getAmount() { } /** - * Fixed [timestamp](https://developer.gocardless.com/pro/2015-04-29/#overview-time-zones-dates), - * recording when this resource was created. + * Fixed [timestamp](#overview-time-zones-dates), recording when this resource was created. */ public String getCreatedAt() { return createdAt; @@ -92,17 +89,15 @@ private Links() { private String creditorBankAccount; /** - * ID of [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors) who - * will receive this payout, i.e. the owner of the `creditor_bank_account`. + * ID of [creditor](#core-endpoints-creditors) who will receive this payout, i.e. the owner of the + * `creditor_bank_account`. */ public String getCreditor() { return creditor; } /** - * ID of [bank - * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditor-bank-accounts) - * which this will be sent to. + * ID of [bank account](#core-endpoints-creditor-bank-accounts) which this will be sent to. */ public String getCreditorBankAccount() { return creditorBankAccount; diff --git a/src/main/java/com/gocardless/resources/RedirectFlow.java b/src/main/java/com/gocardless/resources/RedirectFlow.java index 8d08504d..014df95a 100644 --- a/src/main/java/com/gocardless/resources/RedirectFlow.java +++ b/src/main/java/com/gocardless/resources/RedirectFlow.java @@ -10,9 +10,8 @@ * * The overall flow is: * - * 1. You - * [create](https://developer.gocardless.com/pro/2015-04-29/#create-a-redirect-flow) a redirect flow - * for your customer, and redirect them to the returned redirect url, e.g. + * 1. You [create](#create-a-redirect-flow) a redirect + * flow for your customer, and redirect them to the returned redirect url, e.g. * `https://pay.gocardless.com/flow/RE123`. * * 2. Your customer supplies their name, email, @@ -20,25 +19,19 @@ * redirects them back to your `success_redirect_url` with `redirect_flow_id=RE123` in the * querystring. * - * 3. You - * [complete](https://developer.gocardless.com/pro/2015-04-29/#complete-a-redirect-flow) the redirect - * flow, which creates a - * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers), [customer - * bank - * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-accounts), - * and [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates), and + * 3. You [complete](#complete-a-redirect-flow) the redirect flow, which creates a + * [customer](#core-endpoints-customers), [customer bank + * account](#core-endpoints-customer-bank-accounts), and [mandate](#core-endpoints-mandates), and * returns the ID of the mandate. You may wish to create a - * [subscription](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-subscriptions) or - * [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments) at this + * [subscription](#core-endpoints-subscriptions) or [payment](#core-endpoints-payments) at this * point. * * It is recommended that you link the redirect flow to your user object as soon as it is * created, and attach the created resources to that user in the complete step. * * Redirect flows - * expire 30 minutes after they are first created. You cannot - * [complete](https://developer.gocardless.com/pro/2015-04-29/#complete-a-redirect-flow) an expired - * redirect flow. + * expire 30 minutes after they are first created. You cannot [complete](#complete-a-redirect-flow) + * an expired redirect flow. * * [View an example * integration](https://pay-sandbox.gocardless.com/AL000000AKFPFF) that uses redirect flows. @@ -58,8 +51,7 @@ private RedirectFlow() { private String successRedirectUrl; /** - * Fixed [timestamp](https://developer.gocardless.com/pro/2015-04-29/#overview-time-zones-dates), - * recording when this resource was created. + * Fixed [timestamp](#overview-time-zones-dates), recording when this resource was created. */ public String getCreatedAt() { return createdAt; @@ -131,17 +123,16 @@ private Links() { private String mandate; /** - * The [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors) for whom - * the mandate will be created. The `name` of the creditor will be displayed on the payment page. + * The [creditor](#core-endpoints-creditors) for whom the mandate will be created. The `name` of the + * creditor will be displayed on the payment page. */ public String getCreditor() { return creditor; } /** - * ID of [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates) created - * by this redirect flow.
**Note**: this property will not be present until the redirect flow has - * been successfully completed. + * ID of [mandate](#core-endpoints-mandates) created by this redirect flow.
**Note**: this + * property will not be present until the redirect flow has been successfully completed. */ public String getMandate() { return mandate; diff --git a/src/main/java/com/gocardless/resources/Refund.java b/src/main/java/com/gocardless/resources/Refund.java index 488340ec..8db07d6d 100644 --- a/src/main/java/com/gocardless/resources/Refund.java +++ b/src/main/java/com/gocardless/resources/Refund.java @@ -5,15 +5,13 @@ /** * Represents a refund resource returned from the API. * - * Refund objects represent (partial) refunds of a - * [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payment) back to the - * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers). + * Refund objects represent (partial) refunds of a [payment](#core-endpoints-payment) back to the + * [customer](#core-endpoints-customers). * - * The - * API allows you to create, show, list and update your refunds. + * The API allows you to create, show, list and update + * your refunds. * - * GoCardless will notify you via - * a [webhook](https://developer.gocardless.com/pro/2015-04-29/#webhooks) whenever a refund is + * GoCardless will notify you via a [webhook](#webhooks) whenever a refund is * created, and will update the `amount_refunded` property of the payment. * * _Note:_ A payment @@ -39,8 +37,7 @@ public Integer getAmount() { } /** - * Fixed [timestamp](https://developer.gocardless.com/pro/2015-04-29/#overview-time-zones-dates), - * recording when this resource was created. + * Fixed [timestamp](#overview-time-zones-dates), recording when this resource was created. */ public String getCreatedAt() { return createdAt; @@ -48,8 +45,7 @@ public String getCreatedAt() { /** * [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217#Active_codes) currency code. This is set to the - * currency of the refund's - * [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments). + * currency of the refund's [payment](#core-endpoints-payments). */ public String getCurrency() { return currency; @@ -82,8 +78,7 @@ private Links() { private String payment; /** - * ID of the [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments) - * against which the refund is being made. + * ID of the [payment](#core-endpoints-payments) against which the refund is being made. */ public String getPayment() { return payment; diff --git a/src/main/java/com/gocardless/resources/Subscription.java b/src/main/java/com/gocardless/resources/Subscription.java index 000c6728..c4fedff7 100644 --- a/src/main/java/com/gocardless/resources/Subscription.java +++ b/src/main/java/com/gocardless/resources/Subscription.java @@ -8,39 +8,38 @@ /** * Represents a subscription resource returned from the API. * - * Subscriptions create - * [payments](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments) according to - * a schedule. + * Subscriptions create [payments](#core-endpoints-payments) according to a schedule. * - * #### Recurrence Rules + * #### + * Recurrence Rules * - * The following rules apply when specifying - * recurrence: - * - The first payment must be charged within 1 year. - * - When neither `month` nor - * `day_of_month` are present, the subscription will recur from the `start_at` based on the - * `interval_unit`. - * - If `month` or `day_of_month` are present, the recurrence rules will be - * applied from the `start_at`, and the following validations apply: + * The following rules apply when specifying recurrence: + * - The first payment + * must be charged within 1 year. + * - When neither `month` nor `day_of_month` are present, the + * subscription will recur from the `start_at` based on the `interval_unit`. + * - If `month` or + * `day_of_month` are present, the recurrence rules will be applied from the `start_at`, and the + * following validations apply: * - * | interval_unit | month - * | day_of_month | + * | interval_unit | month + * | day_of_month | + * | :-------------- | + * :--------------------------------------------- | :-------------------------------------- | * | - * :-------------- | :--------------------------------------------- | - * :-------------------------------------- | - * | yearly | optional (required if - * `day_of_month` provided) | optional (required if `month` provided) | - * | monthly | invalid - * | required | - * | weekly - * | invalid | invalid | - * + * yearly | optional (required if `day_of_month` provided) | optional (required if `month` + * provided) | + * | monthly | invalid | required + * | + * | weekly | invalid | + * invalid | * * Examples: * - * | interval_unit | interval | month | day_of_month | valid? - * | - * | :-------------- | :--------- | :------ | :------------- | + * | interval_unit | interval | + * month | day_of_month | valid? | + * | + * :-------------- | :--------- | :------ | :------------- | * :------------------------------------------------- | * | yearly | 1 | january | * -1 | valid | @@ -107,8 +106,7 @@ public Integer getCount() { } /** - * Fixed [timestamp](https://developer.gocardless.com/pro/2015-04-29/#overview-time-zones-dates), - * recording when this resource was created. + * Fixed [timestamp](#overview-time-zones-dates), recording when this resource was created. */ public String getCreatedAt() { return createdAt; @@ -190,8 +188,7 @@ public String getName() { /** * An optional payment reference. This will be set as the reference on each payment created and will * appear on your customer's bank statement. See the documentation for the [create payment - * endpoint](https://developer.gocardless.com/pro/2015-04-29/#payments-create-a-payment) for more - * details. + * endpoint](#payments-create-a-payment) for more details. */ public String getPaymentReference() { return paymentReference; @@ -199,9 +196,8 @@ public String getPaymentReference() { /** * The date on which the first payment should be charged. Must be within one year of creation and on - * or after the [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates)'s - * `next_possible_charge_date`. When blank, this will be set as the mandate's - * `next_possible_charge_date`. + * or after the [mandate](#core-endpoints-mandates)'s `next_possible_charge_date`. When blank, this + * will be set as the mandate's `next_possible_charge_date`. */ public String getStartAt() { return startAt; @@ -260,9 +256,8 @@ private Links() { private String mandate; /** - * ID of the associated - * [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates) which the - * subscription will create payments against. + * ID of the associated [mandate](#core-endpoints-mandates) which the subscription will create + * payments against. */ public String getMandate() { return mandate; diff --git a/src/main/java/com/gocardless/services/CreditorBankAccountService.java b/src/main/java/com/gocardless/services/CreditorBankAccountService.java index e4dcd46e..ff96ac4f 100644 --- a/src/main/java/com/gocardless/services/CreditorBankAccountService.java +++ b/src/main/java/com/gocardless/services/CreditorBankAccountService.java @@ -14,16 +14,14 @@ /** * Service class for working with creditor bank account resources. * - * Creditor Bank Accounts hold the bank details of a - * [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditor). These are - * the bank accounts which your - * [payouts](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payouts) will be sent - * to. + * Creditor Bank Accounts hold the bank details of a [creditor](#core-endpoints-creditor). These are + * the bank accounts which your [payouts](#core-endpoints-payouts) will be sent to. * - * Note that creditor bank accounts must be unique, and so you will encounter a - * `bank_account_exists` error if you try to create a duplicate bank account. You may wish to handle - * this by updating the existing record instead, the ID of which will be provided as - * `links[creditor_bank_account]` in the error response. + * Note that + * creditor bank accounts must be unique, and so you will encounter a `bank_account_exists` error if + * you try to create a duplicate bank account. You may wish to handle this by updating the existing + * record instead, the ID of which will be provided as `links[creditor_bank_account]` in the error + * response. */ public class CreditorBankAccountService { private HttpClient httpClient; @@ -45,9 +43,7 @@ public CreditorBankAccountCreateRequest create() { } /** - * Returns a - * [cursor-paginated](https://developer.gocardless.com/pro/2015-04-29/#overview-cursor-pagination) - * list of your creditor bank accounts. + * Returns a [cursor-paginated](#overview-cursor-pagination) list of your creditor bank accounts. */ public CreditorBankAccountListRequest> list() { return new CreditorBankAccountListRequest<>(httpClient, @@ -101,8 +97,8 @@ public static final class CreditorBankAccountCreateRequest extends /** * Name of the account holder, as known by the bank. Usually this is the same as the name stored with - * the linked [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors). - * This field will be transliterated, upcased and truncated to 18 characters. + * the linked [creditor](#core-endpoints-creditors). This field will be transliterated, upcased and + * truncated to 18 characters. */ public CreditorBankAccountCreateRequest withAccountHolderName(String accountHolderName) { this.accountHolderName = accountHolderName; @@ -110,9 +106,8 @@ public CreditorBankAccountCreateRequest withAccountHolderName(String accountHold } /** - * Bank account number - see [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more - * information. Alternatively you can provide an `iban`. + * Bank account number - see [local details](#ui-local-bank-details) for more information. + * Alternatively you can provide an `iban`. */ public CreditorBankAccountCreateRequest withAccountNumber(String accountNumber) { this.accountNumber = accountNumber; @@ -120,9 +115,8 @@ public CreditorBankAccountCreateRequest withAccountNumber(String accountNumber) } /** - * Bank code - see [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more - * information. Alternatively you can provide an `iban`. + * Bank code - see [local details](#ui-local-bank-details) for more information. Alternatively you + * can provide an `iban`. */ public CreditorBankAccountCreateRequest withBankCode(String bankCode) { this.bankCode = bankCode; @@ -130,9 +124,8 @@ public CreditorBankAccountCreateRequest withBankCode(String bankCode) { } /** - * Branch code - see [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more - * information. Alternatively you can provide an `iban`. + * Branch code - see [local details](#ui-local-bank-details) for more information. Alternatively you + * can provide an `iban`. */ public CreditorBankAccountCreateRequest withBranchCode(String branchCode) { this.branchCode = branchCode; @@ -159,7 +152,7 @@ public CreditorBankAccountCreateRequest withCurrency(String currency) { /** * International Bank Account Number. Alternatively you can provide [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details). + * details](#ui-local-bank-details). */ public CreditorBankAccountCreateRequest withIban(String iban) { this.iban = iban; @@ -172,8 +165,7 @@ public CreditorBankAccountCreateRequest withLinks(Links links) { } /** - * ID of the [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors) - * that owns this bank account. + * ID of the [creditor](#core-endpoints-creditors) that owns this bank account. */ public CreditorBankAccountCreateRequest withLinksCreditor(String creditor) { if (links == null) { @@ -241,8 +233,7 @@ public static class Links { private String creditor; /** - * ID of the [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors) - * that owns this bank account. + * ID of the [creditor](#core-endpoints-creditors) that owns this bank account. */ public Links withCreditor(String creditor) { this.creditor = creditor; @@ -254,9 +245,7 @@ public Links withCreditor(String creditor) { /** * Request class for {@link CreditorBankAccountService#list }. * - * Returns a - * [cursor-paginated](https://developer.gocardless.com/pro/2015-04-29/#overview-cursor-pagination) - * list of your creditor bank accounts. + * Returns a [cursor-paginated](#overview-cursor-pagination) list of your creditor bank accounts. */ public static final class CreditorBankAccountListRequest extends ListRequest { diff --git a/src/main/java/com/gocardless/services/CreditorService.java b/src/main/java/com/gocardless/services/CreditorService.java index 723d9daf..c0aa17a1 100644 --- a/src/main/java/com/gocardless/services/CreditorService.java +++ b/src/main/java/com/gocardless/services/CreditorService.java @@ -12,13 +12,13 @@ /** * Service class for working with creditor resources. * - * Each [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments) taken - * through the API is linked to a "creditor", to whom the payment is then paid out. In most cases - * your organisation will have a single "creditor", but the API also supports collecting payments on - * behalf of others. + * Each [payment](#core-endpoints-payments) taken through the API is linked to a "creditor", to whom + * the payment is then paid out. In most cases your organisation will have a single "creditor", but + * the API also supports collecting payments on behalf of others. * - * Please get in touch if you wish to use this endpoint. Currently, for Anti - * Money Laundering reasons, any creditors you add must be directly related to your organisation. + * Please get in touch if you + * wish to use this endpoint. Currently, for Anti Money Laundering reasons, any creditors you add + * must be directly related to your organisation. */ public class CreditorService { private HttpClient httpClient; @@ -40,9 +40,7 @@ public CreditorCreateRequest create() { } /** - * Returns a - * [cursor-paginated](https://developer.gocardless.com/pro/2015-04-29/#overview-cursor-pagination) - * list of your creditors. + * Returns a [cursor-paginated](#overview-cursor-pagination) list of your creditors. */ public CreditorListRequest> list() { return new CreditorListRequest<>(httpClient, ListRequest.pagingExecutor()); @@ -203,9 +201,7 @@ public Links withLogo(String logo) { /** * Request class for {@link CreditorService#list }. * - * Returns a - * [cursor-paginated](https://developer.gocardless.com/pro/2015-04-29/#overview-cursor-pagination) - * list of your creditors. + * Returns a [cursor-paginated](#overview-cursor-pagination) list of your creditors. */ public static final class CreditorListRequest extends ListRequest { /** @@ -362,9 +358,8 @@ public CreditorUpdateRequest withLinks(Links links) { } /** - * ID of the [bank - * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditor-bank-accounts) - * which is set up to receive payouts in EUR. + * ID of the [bank account](#core-endpoints-creditor-bank-accounts) which is set up to receive + * payouts in EUR. */ public CreditorUpdateRequest withLinksDefaultEurPayoutAccount(String defaultEurPayoutAccount) { if (links == null) { @@ -375,9 +370,8 @@ public CreditorUpdateRequest withLinksDefaultEurPayoutAccount(String defaultEurP } /** - * ID of the [bank - * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditor-bank-accounts) - * which is set up to receive payouts in GBP. + * ID of the [bank account](#core-endpoints-creditor-bank-accounts) which is set up to receive + * payouts in GBP. */ public CreditorUpdateRequest withLinksDefaultGbpPayoutAccount(String defaultGbpPayoutAccount) { if (links == null) { @@ -460,9 +454,8 @@ public static class Links { private String logo; /** - * ID of the [bank - * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditor-bank-accounts) - * which is set up to receive payouts in EUR. + * ID of the [bank account](#core-endpoints-creditor-bank-accounts) which is set up to receive + * payouts in EUR. */ public Links withDefaultEurPayoutAccount(String defaultEurPayoutAccount) { this.defaultEurPayoutAccount = defaultEurPayoutAccount; @@ -470,9 +463,8 @@ public Links withDefaultEurPayoutAccount(String defaultEurPayoutAccount) { } /** - * ID of the [bank - * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditor-bank-accounts) - * which is set up to receive payouts in GBP. + * ID of the [bank account](#core-endpoints-creditor-bank-accounts) which is set up to receive + * payouts in GBP. */ public Links withDefaultGbpPayoutAccount(String defaultGbpPayoutAccount) { this.defaultGbpPayoutAccount = defaultGbpPayoutAccount; diff --git a/src/main/java/com/gocardless/services/CustomerBankAccountService.java b/src/main/java/com/gocardless/services/CustomerBankAccountService.java index b8837d69..7caa3458 100644 --- a/src/main/java/com/gocardless/services/CustomerBankAccountService.java +++ b/src/main/java/com/gocardless/services/CustomerBankAccountService.java @@ -14,17 +14,14 @@ /** * Service class for working with customer bank account resources. * - * Customer Bank Accounts hold the bank details of a - * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers). They always - * belong to a [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers), - * and may be linked to several Direct Debit - * [mandates](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates). + * Customer Bank Accounts hold the bank details of a [customer](#core-endpoints-customers). They + * always belong to a [customer](#core-endpoints-customers), and may be linked to several Direct + * Debit [mandates](#core-endpoints-mandates). * - * Note - * that customer bank accounts must be unique, and so you will encounter a `bank_account_exists` - * error if you try to create a duplicate bank account. You may wish to handle this by updating the - * existing record instead, the ID of which will be provided as links[customer_bank_account] in the - * error response. + * Note that customer bank accounts must be unique, + * and so you will encounter a `bank_account_exists` error if you try to create a duplicate bank + * account. You may wish to handle this by updating the existing record instead, the ID of which will + * be provided as links[customer_bank_account] in the error response. */ public class CustomerBankAccountService { private HttpClient httpClient; @@ -44,27 +41,22 @@ public CustomerBankAccountService(HttpClient httpClient) { * There are three different ways to supply bank * account details: * - * - [Local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) + * - [Local details](#ui-local-bank-details) * * - IBAN * - * - * - [Customer Bank Account - * Tokens](https://developer.gocardless.com/pro/2015-04-29/#js-flow-create-a-customer-bank-account-token) - * + * - [Customer Bank + * Account Tokens](#js-flow-create-a-customer-bank-account-token) * - * For more information on the different fields required in each country, see [local bank - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details). + * For more information on the + * different fields required in each country, see [local bank details](#ui-local-bank-details). */ public CustomerBankAccountCreateRequest create() { return new CustomerBankAccountCreateRequest(httpClient); } /** - * Returns a - * [cursor-paginated](https://developer.gocardless.com/pro/2015-04-29/#overview-cursor-pagination) - * list of your bank accounts. + * Returns a [cursor-paginated](#overview-cursor-pagination) list of your bank accounts. */ public CustomerBankAccountListRequest> list() { return new CustomerBankAccountListRequest<>(httpClient, @@ -112,18 +104,15 @@ public CustomerBankAccountDisableRequest disable(String identity) { * There are three different ways to supply bank * account details: * - * - [Local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) + * - [Local details](#ui-local-bank-details) * * - IBAN * - * - * - [Customer Bank Account - * Tokens](https://developer.gocardless.com/pro/2015-04-29/#js-flow-create-a-customer-bank-account-token) - * + * - [Customer Bank + * Account Tokens](#js-flow-create-a-customer-bank-account-token) * - * For more information on the different fields required in each country, see [local bank - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details). + * For more information on the + * different fields required in each country, see [local bank details](#ui-local-bank-details). */ public static final class CustomerBankAccountCreateRequest extends PostRequest { @@ -139,8 +128,8 @@ public static final class CustomerBankAccountCreateRequest extends /** * Name of the account holder, as known by the bank. Usually this matches the name of the linked - * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers). This field - * will be transliterated, upcased and truncated to 18 characters. + * [customer](#core-endpoints-customers). This field will be transliterated, upcased and truncated to + * 18 characters. */ public CustomerBankAccountCreateRequest withAccountHolderName(String accountHolderName) { this.accountHolderName = accountHolderName; @@ -148,9 +137,8 @@ public CustomerBankAccountCreateRequest withAccountHolderName(String accountHold } /** - * Bank account number - see [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more - * information. Alternatively you can provide an `iban`. + * Bank account number - see [local details](#ui-local-bank-details) for more information. + * Alternatively you can provide an `iban`. */ public CustomerBankAccountCreateRequest withAccountNumber(String accountNumber) { this.accountNumber = accountNumber; @@ -158,9 +146,8 @@ public CustomerBankAccountCreateRequest withAccountNumber(String accountNumber) } /** - * Bank code - see [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more - * information. Alternatively you can provide an `iban`. + * Bank code - see [local details](#ui-local-bank-details) for more information. Alternatively you + * can provide an `iban`. */ public CustomerBankAccountCreateRequest withBankCode(String bankCode) { this.bankCode = bankCode; @@ -168,9 +155,8 @@ public CustomerBankAccountCreateRequest withBankCode(String bankCode) { } /** - * Branch code - see [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more - * information. Alternatively you can provide an `iban`. + * Branch code - see [local details](#ui-local-bank-details) for more information. Alternatively you + * can provide an `iban`. */ public CustomerBankAccountCreateRequest withBranchCode(String branchCode) { this.branchCode = branchCode; @@ -197,7 +183,7 @@ public CustomerBankAccountCreateRequest withCurrency(String currency) { /** * International Bank Account Number. Alternatively you can provide [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details). + * details](#ui-local-bank-details). */ public CustomerBankAccountCreateRequest withIban(String iban) { this.iban = iban; @@ -210,8 +196,7 @@ public CustomerBankAccountCreateRequest withLinks(Links links) { } /** - * ID of the [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers) - * that owns this bank account. + * ID of the [customer](#core-endpoints-customers) that owns this bank account. */ public CustomerBankAccountCreateRequest withLinksCustomer(String customer) { if (links == null) { @@ -222,9 +207,8 @@ public CustomerBankAccountCreateRequest withLinksCustomer(String customer) { } /** - * ID of a [customer bank account - * token](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-account-tokens) - * to use in place of bank account parameters. + * ID of a [customer bank account token](#core-endpoints-customer-bank-account-tokens) to use in + * place of bank account parameters. */ public CustomerBankAccountCreateRequest withLinksCustomerBankAccountToken( String customerBankAccountToken) { @@ -285,8 +269,7 @@ public static class Links { private String customerBankAccountToken; /** - * ID of the [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers) - * that owns this bank account. + * ID of the [customer](#core-endpoints-customers) that owns this bank account. */ public Links withCustomer(String customer) { this.customer = customer; @@ -294,9 +277,8 @@ public Links withCustomer(String customer) { } /** - * ID of a [customer bank account - * token](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-account-tokens) - * to use in place of bank account parameters. + * ID of a [customer bank account token](#core-endpoints-customer-bank-account-tokens) to use in + * place of bank account parameters. */ public Links withCustomerBankAccountToken(String customerBankAccountToken) { this.customerBankAccountToken = customerBankAccountToken; @@ -308,9 +290,7 @@ public Links withCustomerBankAccountToken(String customerBankAccountToken) { /** * Request class for {@link CustomerBankAccountService#list }. * - * Returns a - * [cursor-paginated](https://developer.gocardless.com/pro/2015-04-29/#overview-cursor-pagination) - * list of your bank accounts. + * Returns a [cursor-paginated](#overview-cursor-pagination) list of your bank accounts. */ public static final class CustomerBankAccountListRequest extends ListRequest { diff --git a/src/main/java/com/gocardless/services/CustomerService.java b/src/main/java/com/gocardless/services/CustomerService.java index 33755745..37b2d5f2 100644 --- a/src/main/java/com/gocardless/services/CustomerService.java +++ b/src/main/java/com/gocardless/services/CustomerService.java @@ -14,10 +14,8 @@ * Service class for working with customer resources. * * Customer objects hold the contact details for a customer. A customer can have several [customer - * bank - * accounts](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-accounts), - * which in turn can have several Direct Debit - * [mandates](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates). + * bank accounts](#core-endpoints-customer-bank-accounts), which in turn can have several Direct + * Debit [mandates](#core-endpoints-mandates). */ public class CustomerService { private HttpClient httpClient; @@ -39,9 +37,7 @@ public CustomerCreateRequest create() { } /** - * Returns a - * [cursor-paginated](https://developer.gocardless.com/pro/2015-04-29/#overview-cursor-pagination) - * list of your customers. + * Returns a [cursor-paginated](#overview-cursor-pagination) list of your customers. */ public CustomerListRequest> list() { return new CustomerListRequest<>(httpClient, ListRequest.pagingExecutor()); @@ -222,9 +218,7 @@ protected boolean hasBody() { /** * Request class for {@link CustomerService#list }. * - * Returns a - * [cursor-paginated](https://developer.gocardless.com/pro/2015-04-29/#overview-cursor-pagination) - * list of your customers. + * Returns a [cursor-paginated](#overview-cursor-pagination) list of your customers. */ public static final class CustomerListRequest extends ListRequest { private CreatedAt createdAt; diff --git a/src/main/java/com/gocardless/services/EventService.java b/src/main/java/com/gocardless/services/EventService.java index ed9b92a6..537e47b5 100644 --- a/src/main/java/com/gocardless/services/EventService.java +++ b/src/main/java/com/gocardless/services/EventService.java @@ -29,9 +29,7 @@ public EventService(HttpClient httpClient) { } /** - * Returns a - * [cursor-paginated](https://developer.gocardless.com/pro/2015-04-29/#overview-cursor-pagination) - * list of your events. + * Returns a [cursor-paginated](#overview-cursor-pagination) list of your events. */ public EventListRequest> list() { return new EventListRequest<>(httpClient, ListRequest.pagingExecutor()); @@ -51,9 +49,7 @@ public EventGetRequest get(String identity) { /** * Request class for {@link EventService#list }. * - * Returns a - * [cursor-paginated](https://developer.gocardless.com/pro/2015-04-29/#overview-cursor-pagination) - * list of your events. + * Returns a [cursor-paginated](#overview-cursor-pagination) list of your events. */ public static final class EventListRequest extends ListRequest { private String action; @@ -166,8 +162,8 @@ public EventListRequest withLimit(Integer limit) { } /** - * ID of a [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates). If - * specified, this endpoint will return all events for the given mandate. + * ID of a [mandate](#core-endpoints-mandates). If specified, this endpoint will return all events + * for the given mandate. */ public EventListRequest withMandate(String mandate) { this.mandate = mandate; @@ -184,8 +180,8 @@ public EventListRequest withParentEvent(String parentEvent) { } /** - * ID of a [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments). If - * specified, this endpoint will return all events for the given payment. + * ID of a [payment](#core-endpoints-payments). If specified, this endpoint will return all events + * for the given payment. */ public EventListRequest withPayment(String payment) { this.payment = payment; @@ -193,8 +189,8 @@ public EventListRequest withPayment(String payment) { } /** - * ID of a [payout](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payouts). If - * specified, this endpoint will return all events for the given payout. + * ID of a [payout](#core-endpoints-payouts). If specified, this endpoint will return all events for + * the given payout. */ public EventListRequest withPayout(String payout) { this.payout = payout; @@ -202,8 +198,8 @@ public EventListRequest withPayout(String payout) { } /** - * ID of a [refund](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-refunds). If - * specified, this endpoint will return all events for the given refund. + * ID of a [refund](#core-endpoints-refunds). If specified, this endpoint will return all events for + * the given refund. */ public EventListRequest withRefund(String refund) { this.refund = refund; diff --git a/src/main/java/com/gocardless/services/HelperService.java b/src/main/java/com/gocardless/services/HelperService.java index c410c8eb..1b934341 100644 --- a/src/main/java/com/gocardless/services/HelperService.java +++ b/src/main/java/com/gocardless/services/HelperService.java @@ -31,19 +31,18 @@ public HelperService(HttpClient httpClient) { * endpoint. * * Bank account details may either be supplied using the IBAN (international bank - * account number), or [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details). For more - * information on the different fields required in each country, please see the [local bank - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) section. + * account number), or [local details](#ui-local-bank-details). For more information on the different + * fields required in each country, please see the [local bank details](#ui-local-bank-details) + * section. * - * To - * generate a mandate in a foreign language, set your `Accept-Language` header to the relevant [ISO + * To generate a mandate in a foreign language, set your `Accept-Language` header to + * the relevant [ISO * 639-1](http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes#Partial_ISO_639_table) language code. * Currently Dutch, English, French, German, Italian, Portuguese and Spanish are supported. * * * _Note:_ If you want to render a PDF of an existing mandate you can also do so using the [mandate - * show endpoint](https://developer.gocardless.com/pro/2015-04-29/#mandates-get-a-single-mandate). + * show endpoint](#mandates-get-a-single-mandate). */ public HelperMandateRequest mandate() { return new HelperMandateRequest(httpClient); @@ -54,9 +53,8 @@ public HelperMandateRequest mandate() { * * Bank * account details may either be supplied using the IBAN (international bank account number), or - * [local details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details). For more - * information on the different fields required in each country, please see the [local bank - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) section. + * [local details](#ui-local-bank-details). For more information on the different fields required in + * each country, please see the [local bank details](#ui-local-bank-details) section. */ public HelperModulusCheckRequest modulusCheck() { return new HelperModulusCheckRequest(httpClient); @@ -72,19 +70,18 @@ public HelperModulusCheckRequest modulusCheck() { * endpoint. * * Bank account details may either be supplied using the IBAN (international bank - * account number), or [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details). For more - * information on the different fields required in each country, please see the [local bank - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) section. + * account number), or [local details](#ui-local-bank-details). For more information on the different + * fields required in each country, please see the [local bank details](#ui-local-bank-details) + * section. * - * To - * generate a mandate in a foreign language, set your `Accept-Language` header to the relevant [ISO + * To generate a mandate in a foreign language, set your `Accept-Language` header to + * the relevant [ISO * 639-1](http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes#Partial_ISO_639_table) language code. * Currently Dutch, English, French, German, Italian, Portuguese and Spanish are supported. * * * _Note:_ If you want to render a PDF of an existing mandate you can also do so using the [mandate - * show endpoint](https://developer.gocardless.com/pro/2015-04-29/#mandates-get-a-single-mandate). + * show endpoint](#mandates-get-a-single-mandate). */ public static final class HelperMandateRequest extends PostRequest { private String accountHolderName; @@ -101,8 +98,7 @@ public static final class HelperMandateRequest extends PostRequest { /** * Name of the account holder, as known by the bank. Usually this matches the name of the - * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers). This field - * cannot exceed 18 characters. + * [customer](#core-endpoints-customers). This field cannot exceed 18 characters. */ public HelperMandateRequest withAccountHolderName(String accountHolderName) { this.accountHolderName = accountHolderName; @@ -110,9 +106,7 @@ public HelperMandateRequest withAccountHolderName(String accountHolderName) { } /** - * Bank account number - see [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more - * information. + * Bank account number - see [local details](#ui-local-bank-details) for more information. */ public HelperMandateRequest withAccountNumber(String accountNumber) { this.accountNumber = accountNumber; @@ -120,9 +114,7 @@ public HelperMandateRequest withAccountNumber(String accountNumber) { } /** - * Bank code - see [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more - * information. + * Bank code - see [local details](#ui-local-bank-details) for more information. */ public HelperMandateRequest withBankCode(String bankCode) { this.bankCode = bankCode; @@ -138,9 +130,7 @@ public HelperMandateRequest withBic(String bic) { } /** - * Branch code - see [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more - * information. + * Branch code - see [local details](#ui-local-bank-details) for more information. */ public HelperMandateRequest withBranchCode(String branchCode) { this.branchCode = branchCode; @@ -158,7 +148,7 @@ public HelperMandateRequest withCountryCode(String countryCode) { /** * International Bank Account Number. Alternatively you can provide [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details). + * details](#ui-local-bank-details). */ public HelperMandateRequest withIban(String iban) { this.iban = iban; @@ -240,9 +230,8 @@ protected String getRequestEnvelope() { * * Bank * account details may either be supplied using the IBAN (international bank account number), or - * [local details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details). For more - * information on the different fields required in each country, please see the [local bank - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) section. + * [local details](#ui-local-bank-details). For more information on the different fields required in + * each country, please see the [local bank details](#ui-local-bank-details) section. */ public static final class HelperModulusCheckRequest extends PostRequest { private String accountNumber; @@ -252,9 +241,7 @@ public static final class HelperModulusCheckRequest extends PostRequest private String iban; /** - * Bank account number - see [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more - * information. + * Bank account number - see [local details](#ui-local-bank-details) for more information. */ public HelperModulusCheckRequest withAccountNumber(String accountNumber) { this.accountNumber = accountNumber; @@ -262,9 +249,7 @@ public HelperModulusCheckRequest withAccountNumber(String accountNumber) { } /** - * Bank code - see [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more - * information. + * Bank code - see [local details](#ui-local-bank-details) for more information. */ public HelperModulusCheckRequest withBankCode(String bankCode) { this.bankCode = bankCode; @@ -272,9 +257,7 @@ public HelperModulusCheckRequest withBankCode(String bankCode) { } /** - * Branch code - see [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more - * information. + * Branch code - see [local details](#ui-local-bank-details) for more information. */ public HelperModulusCheckRequest withBranchCode(String branchCode) { this.branchCode = branchCode; @@ -292,7 +275,7 @@ public HelperModulusCheckRequest withCountryCode(String countryCode) { /** * International Bank Account Number. Alternatively you can provide [local - * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details). + * details](#ui-local-bank-details). */ public HelperModulusCheckRequest withIban(String iban) { this.iban = iban; diff --git a/src/main/java/com/gocardless/services/MandateService.java b/src/main/java/com/gocardless/services/MandateService.java index 7b8d723f..b55c2666 100644 --- a/src/main/java/com/gocardless/services/MandateService.java +++ b/src/main/java/com/gocardless/services/MandateService.java @@ -17,13 +17,10 @@ /** * Service class for working with mandate resources. * - * Mandates represent the Direct Debit mandate with a - * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers). + * Mandates represent the Direct Debit mandate with a [customer](#core-endpoints-customers). * * - * GoCardless will notify you via a - * [webhook](https://developer.gocardless.com/pro/2015-04-29/#webhooks) whenever the status of a - * mandate changes. + * GoCardless will notify you via a [webhook](#webhooks) whenever the status of a mandate changes. */ public class MandateService { private HttpClient httpClient; @@ -45,9 +42,8 @@ public MandateCreateRequest create() { } /** - * Returns a - * [cursor-paginated](https://developer.gocardless.com/pro/2015-04-29/#overview-cursor-pagination) - * list of your mandates. Except where stated, these filters can only be used one at a time. + * Returns a [cursor-paginated](#overview-cursor-pagination) list of your mandates. Except where + * stated, these filters can only be used one at a time. */ public MandateListRequest> list() { return new MandateListRequest<>(httpClient, ListRequest.pagingExecutor()); @@ -130,8 +126,7 @@ public MandateCreateRequest withLinks(Links links) { } /** - * ID of the associated - * [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors). + * ID of the associated [creditor](#core-endpoints-creditors). */ public MandateCreateRequest withLinksCreditor(String creditor) { if (links == null) { @@ -142,9 +137,8 @@ public MandateCreateRequest withLinksCreditor(String creditor) { } /** - * ID of the associated [customer bank - * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-accounts) - * which the mandate is created and submits payments against. + * ID of the associated [customer bank account](#core-endpoints-customer-bank-accounts) which the + * mandate is created and submits payments against. */ public MandateCreateRequest withLinksCustomerBankAccount(String customerBankAccount) { if (links == null) { @@ -222,8 +216,7 @@ public static class Links { private String customerBankAccount; /** - * ID of the associated - * [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors). + * ID of the associated [creditor](#core-endpoints-creditors). */ public Links withCreditor(String creditor) { this.creditor = creditor; @@ -231,9 +224,8 @@ public Links withCreditor(String creditor) { } /** - * ID of the associated [customer bank - * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-accounts) - * which the mandate is created and submits payments against. + * ID of the associated [customer bank account](#core-endpoints-customer-bank-accounts) which the + * mandate is created and submits payments against. */ public Links withCustomerBankAccount(String customerBankAccount) { this.customerBankAccount = customerBankAccount; @@ -245,9 +237,8 @@ public Links withCustomerBankAccount(String customerBankAccount) { /** * Request class for {@link MandateService#list }. * - * Returns a - * [cursor-paginated](https://developer.gocardless.com/pro/2015-04-29/#overview-cursor-pagination) - * list of your mandates. Except where stated, these filters can only be used one at a time. + * Returns a [cursor-paginated](#overview-cursor-pagination) list of your mandates. Except where + * stated, these filters can only be used one at a time. */ public static final class MandateListRequest extends ListRequest { private String creditor; @@ -273,9 +264,8 @@ public MandateListRequest withBefore(String before) { } /** - * ID of a [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors). If - * specified, this endpoint will return all mandates for the given creditor. Cannot be used in - * conjunction with `customer_bank_account` + * ID of a [creditor](#core-endpoints-creditors). If specified, this endpoint will return all + * mandates for the given creditor. Cannot be used in conjunction with `customer_bank_account` */ public MandateListRequest withCreditor(String creditor) { this.creditor = creditor; @@ -291,10 +281,9 @@ public MandateListRequest withCustomer(String customer) { } /** - * ID of a [customer bank - * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-accounts). - * If specified, this endpoint will return all mandates for the given bank account. Cannot be used in - * conjunction with `creditor` + * ID of a [customer bank account](#core-endpoints-customer-bank-accounts). If specified, this + * endpoint will return all mandates for the given bank account. Cannot be used in conjunction with + * `creditor` */ public MandateListRequest withCustomerBankAccount(String customerBankAccount) { this.customerBankAccount = customerBankAccount; diff --git a/src/main/java/com/gocardless/services/PaymentService.java b/src/main/java/com/gocardless/services/PaymentService.java index 5e71ca6a..f36fb108 100644 --- a/src/main/java/com/gocardless/services/PaymentService.java +++ b/src/main/java/com/gocardless/services/PaymentService.java @@ -14,16 +14,12 @@ /** * Service class for working with payment resources. * - * Payment objects represent payments from a - * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers) to a - * [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors), taken - * against a Direct Debit - * [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates). + * Payment objects represent payments from a [customer](#core-endpoints-customers) to a + * [creditor](#core-endpoints-creditors), taken against a Direct Debit + * [mandate](#core-endpoints-mandates). * - * - * GoCardless will notify you via a - * [webhook](https://developer.gocardless.com/pro/2015-04-29/#webhooks) whenever the state of a - * payment changes. + * GoCardless will notify you via a [webhook](#webhooks) + * whenever the state of a payment changes. */ public class PaymentService { private HttpClient httpClient; @@ -41,8 +37,7 @@ public PaymentService(HttpClient httpClient) { * Creates a new payment object. * * This fails with a - * `mandate_is_inactive` error if the linked - * [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates) is cancelled. + * `mandate_is_inactive` error if the linked [mandate](#core-endpoints-mandates) is cancelled. * Payments can be created against `pending_submission` mandates, but they will not be submitted * until the mandate becomes active. */ @@ -51,9 +46,7 @@ public PaymentCreateRequest create() { } /** - * Returns a - * [cursor-paginated](https://developer.gocardless.com/pro/2015-04-29/#overview-cursor-pagination) - * list of your payments. + * Returns a [cursor-paginated](#overview-cursor-pagination) list of your payments. */ public PaymentListRequest> list() { return new PaymentListRequest<>(httpClient, ListRequest.pagingExecutor()); @@ -110,8 +103,7 @@ public PaymentRetryRequest retry(String identity) { * Creates a new payment object. * * This fails with a - * `mandate_is_inactive` error if the linked - * [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates) is cancelled. + * `mandate_is_inactive` error if the linked [mandate](#core-endpoints-mandates) is cancelled. * Payments can be created against `pending_submission` mandates, but they will not be submitted * until the mandate becomes active. */ @@ -134,8 +126,7 @@ public PaymentCreateRequest withAmount(Integer amount) { /** * A future date on which the payment should be collected. If not specified, the payment will be - * collected as soon as possible. This must be on or after the - * [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates)'s + * collected as soon as possible. This must be on or after the [mandate](#core-endpoints-mandates)'s * `next_possible_charge_date`, and will be rolled-forwards by GoCardless if it is not a working day. */ public PaymentCreateRequest withChargeDate(String chargeDate) { @@ -166,8 +157,7 @@ public PaymentCreateRequest withLinks(Links links) { } /** - * ID of the [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates) - * against which this payment should be collected. + * ID of the [mandate](#core-endpoints-mandates) against which this payment should be collected. */ public PaymentCreateRequest withLinksMandate(String mandate) { if (links == null) { @@ -236,8 +226,7 @@ public static class Links { private String mandate; /** - * ID of the [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates) - * against which this payment should be collected. + * ID of the [mandate](#core-endpoints-mandates) against which this payment should be collected. */ public Links withMandate(String mandate) { this.mandate = mandate; @@ -249,9 +238,7 @@ public Links withMandate(String mandate) { /** * Request class for {@link PaymentService#list }. * - * Returns a - * [cursor-paginated](https://developer.gocardless.com/pro/2015-04-29/#overview-cursor-pagination) - * list of your payments. + * Returns a [cursor-paginated](#overview-cursor-pagination) list of your payments. */ public static final class PaymentListRequest extends ListRequest { private CreatedAt createdAt; diff --git a/src/main/java/com/gocardless/services/PayoutService.java b/src/main/java/com/gocardless/services/PayoutService.java index df14e6f6..c4a37930 100644 --- a/src/main/java/com/gocardless/services/PayoutService.java +++ b/src/main/java/com/gocardless/services/PayoutService.java @@ -13,11 +13,9 @@ /** * Service class for working with payout resources. * - * Payouts represent transfers from GoCardless to a - * [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors). Each payout - * contains the funds collected from one or many - * [payments](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments). Payouts are - * created automatically after a payment has been successfully collected. + * Payouts represent transfers from GoCardless to a [creditor](#core-endpoints-creditors). Each + * payout contains the funds collected from one or many [payments](#core-endpoints-payments). Payouts + * are created automatically after a payment has been successfully collected. */ public class PayoutService { private HttpClient httpClient; @@ -32,9 +30,7 @@ public PayoutService(HttpClient httpClient) { } /** - * Returns a - * [cursor-paginated](https://developer.gocardless.com/pro/2015-04-29/#overview-cursor-pagination) - * list of your payouts. + * Returns a [cursor-paginated](#overview-cursor-pagination) list of your payouts. */ public PayoutListRequest> list() { return new PayoutListRequest<>(httpClient, ListRequest.pagingExecutor()); @@ -55,9 +51,7 @@ public PayoutGetRequest get(String identity) { /** * Request class for {@link PayoutService#list }. * - * Returns a - * [cursor-paginated](https://developer.gocardless.com/pro/2015-04-29/#overview-cursor-pagination) - * list of your payouts. + * Returns a [cursor-paginated](#overview-cursor-pagination) list of your payouts. */ public static final class PayoutListRequest extends ListRequest { private String creditor; diff --git a/src/main/java/com/gocardless/services/RedirectFlowService.java b/src/main/java/com/gocardless/services/RedirectFlowService.java index 9a6c2c3f..115cd6cc 100644 --- a/src/main/java/com/gocardless/services/RedirectFlowService.java +++ b/src/main/java/com/gocardless/services/RedirectFlowService.java @@ -16,9 +16,8 @@ * * The overall flow is: * - * 1. You - * [create](https://developer.gocardless.com/pro/2015-04-29/#create-a-redirect-flow) a redirect flow - * for your customer, and redirect them to the returned redirect url, e.g. + * 1. You [create](#create-a-redirect-flow) a redirect + * flow for your customer, and redirect them to the returned redirect url, e.g. * `https://pay.gocardless.com/flow/RE123`. * * 2. Your customer supplies their name, email, @@ -26,25 +25,19 @@ * redirects them back to your `success_redirect_url` with `redirect_flow_id=RE123` in the * querystring. * - * 3. You - * [complete](https://developer.gocardless.com/pro/2015-04-29/#complete-a-redirect-flow) the redirect - * flow, which creates a - * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers), [customer - * bank - * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-accounts), - * and [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates), and + * 3. You [complete](#complete-a-redirect-flow) the redirect flow, which creates a + * [customer](#core-endpoints-customers), [customer bank + * account](#core-endpoints-customer-bank-accounts), and [mandate](#core-endpoints-mandates), and * returns the ID of the mandate. You may wish to create a - * [subscription](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-subscriptions) or - * [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments) at this + * [subscription](#core-endpoints-subscriptions) or [payment](#core-endpoints-payments) at this * point. * * It is recommended that you link the redirect flow to your user object as soon as it is * created, and attach the created resources to that user in the complete step. * * Redirect flows - * expire 30 minutes after they are first created. You cannot - * [complete](https://developer.gocardless.com/pro/2015-04-29/#complete-a-redirect-flow) an expired - * redirect flow. + * expire 30 minutes after they are first created. You cannot [complete](#complete-a-redirect-flow) + * an expired redirect flow. * * [View an example * integration](https://pay-sandbox.gocardless.com/AL000000AKFPFF) that uses redirect flows. @@ -78,18 +71,15 @@ public RedirectFlowGetRequest get(String identity) { } /** - * This creates a - * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers), [customer - * bank - * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-accounts), - * and [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates) using the - * details supplied by your customer and returns the ID of the created mandate. + * This creates a [customer](#core-endpoints-customers), [customer bank + * account](#core-endpoints-customer-bank-accounts), and [mandate](#core-endpoints-mandates) using + * the details supplied by your customer and returns the ID of the created mandate. * - * This will return - * a `redirect_flow_incomplete` error if your customer has not yet been redirected back to your site, - * and a `redirect_flow_already_completed` error if your integration has already completed this flow. - * It will return a `bad_request` error if the `session_token` differs to the one supplied when the - * redirect flow was created. + * This will + * return a `redirect_flow_incomplete` error if your customer has not yet been redirected back to + * your site, and a `redirect_flow_already_completed` error if your integration has already completed + * this flow. It will return a `bad_request` error if the `session_token` differs to the one supplied + * when the redirect flow was created. */ public RedirectFlowCompleteRequest complete(String identity) { return new RedirectFlowCompleteRequest(httpClient, identity); @@ -123,8 +113,8 @@ public RedirectFlowCreateRequest withLinks(Links links) { } /** - * The [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors) for whom - * the mandate will be created. The `name` of the creditor will be displayed on the payment page. + * The [creditor](#core-endpoints-creditors) for whom the mandate will be created. The `name` of the + * creditor will be displayed on the payment page. */ public RedirectFlowCreateRequest withLinksCreditor(String creditor) { if (links == null) { @@ -199,8 +189,8 @@ public static class Links { private String creditor; /** - * The [creditor](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-creditors) for whom - * the mandate will be created. The `name` of the creditor will be displayed on the payment page. + * The [creditor](#core-endpoints-creditors) for whom the mandate will be created. The `name` of the + * creditor will be displayed on the payment page. */ public Links withCreditor(String creditor) { this.creditor = creditor; @@ -250,18 +240,15 @@ protected Class getResponseClass() { /** * Request class for {@link RedirectFlowService#complete }. * - * This creates a - * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers), [customer - * bank - * account](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customer-bank-accounts), - * and [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates) using the - * details supplied by your customer and returns the ID of the created mandate. + * This creates a [customer](#core-endpoints-customers), [customer bank + * account](#core-endpoints-customer-bank-accounts), and [mandate](#core-endpoints-mandates) using + * the details supplied by your customer and returns the ID of the created mandate. * - * This will return - * a `redirect_flow_incomplete` error if your customer has not yet been redirected back to your site, - * and a `redirect_flow_already_completed` error if your integration has already completed this flow. - * It will return a `bad_request` error if the `session_token` differs to the one supplied when the - * redirect flow was created. + * This will + * return a `redirect_flow_incomplete` error if your customer has not yet been redirected back to + * your site, and a `redirect_flow_already_completed` error if your integration has already completed + * this flow. It will return a `bad_request` error if the `session_token` differs to the one supplied + * when the redirect flow was created. */ public static final class RedirectFlowCompleteRequest extends PostRequest { @PathParam diff --git a/src/main/java/com/gocardless/services/RefundService.java b/src/main/java/com/gocardless/services/RefundService.java index 8073ef97..9d148ef2 100644 --- a/src/main/java/com/gocardless/services/RefundService.java +++ b/src/main/java/com/gocardless/services/RefundService.java @@ -13,15 +13,13 @@ /** * Service class for working with refund resources. * - * Refund objects represent (partial) refunds of a - * [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payment) back to the - * [customer](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-customers). + * Refund objects represent (partial) refunds of a [payment](#core-endpoints-payment) back to the + * [customer](#core-endpoints-customers). * - * The - * API allows you to create, show, list and update your refunds. + * The API allows you to create, show, list and update + * your refunds. * - * GoCardless will notify you via - * a [webhook](https://developer.gocardless.com/pro/2015-04-29/#webhooks) whenever a refund is + * GoCardless will notify you via a [webhook](#webhooks) whenever a refund is * created, and will update the `amount_refunded` property of the payment. * * _Note:_ A payment @@ -46,13 +44,12 @@ public RefundService(HttpClient httpClient) { * name="total_amount_confirmation_invalid"> * * - - * `refund_payment_invalid_state` error if the linked - * [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments) isn't either - * `confirmed` or `paid_out`. + * `refund_payment_invalid_state` error if the linked [payment](#core-endpoints-payments) isn't + * either `confirmed` or `paid_out`. * - * - `total_amount_confirmation_invalid` if the confirmation amount - * doesn't match the total amount refunded for the payment. This safeguard is there to prevent two - * processes from creating refunds without awareness of each other. + * - `total_amount_confirmation_invalid` if the confirmation + * amount doesn't match the total amount refunded for the payment. This safeguard is there to prevent + * two processes from creating refunds without awareness of each other. * * - * `number_of_refunds_exceeded` if five or more refunds have already been created against the @@ -64,9 +61,7 @@ public RefundCreateRequest create() { } /** - * Returns a - * [cursor-paginated](https://developer.gocardless.com/pro/2015-04-29/#overview-cursor-pagination) - * list of your refunds. + * Returns a [cursor-paginated](#overview-cursor-pagination) list of your refunds. */ public RefundListRequest> list() { return new RefundListRequest<>(httpClient, ListRequest.pagingExecutor()); @@ -99,13 +94,12 @@ public RefundUpdateRequest update(String identity) { * name="total_amount_confirmation_invalid"> * * - - * `refund_payment_invalid_state` error if the linked - * [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments) isn't either - * `confirmed` or `paid_out`. + * `refund_payment_invalid_state` error if the linked [payment](#core-endpoints-payments) isn't + * either `confirmed` or `paid_out`. * - * - `total_amount_confirmation_invalid` if the confirmation amount - * doesn't match the total amount refunded for the payment. This safeguard is there to prevent two - * processes from creating refunds without awareness of each other. + * - `total_amount_confirmation_invalid` if the confirmation + * amount doesn't match the total amount refunded for the payment. This safeguard is there to prevent + * two processes from creating refunds without awareness of each other. * * - * `number_of_refunds_exceeded` if five or more refunds have already been created against the @@ -132,8 +126,7 @@ public RefundCreateRequest withLinks(Links links) { } /** - * ID of the [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments) - * against which the refund is being made. + * ID of the [payment](#core-endpoints-payments) against which the refund is being made. */ public RefundCreateRequest withLinksPayment(String payment) { if (links == null) { @@ -200,8 +193,7 @@ public static class Links { private String payment; /** - * ID of the [payment](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments) - * against which the refund is being made. + * ID of the [payment](#core-endpoints-payments) against which the refund is being made. */ public Links withPayment(String payment) { this.payment = payment; @@ -213,9 +205,7 @@ public Links withPayment(String payment) { /** * Request class for {@link RefundService#list }. * - * Returns a - * [cursor-paginated](https://developer.gocardless.com/pro/2015-04-29/#overview-cursor-pagination) - * list of your refunds. + * Returns a [cursor-paginated](#overview-cursor-pagination) list of your refunds. */ public static final class RefundListRequest extends ListRequest { private String payment; diff --git a/src/main/java/com/gocardless/services/SubscriptionService.java b/src/main/java/com/gocardless/services/SubscriptionService.java index 0c22da2c..b7bd1903 100644 --- a/src/main/java/com/gocardless/services/SubscriptionService.java +++ b/src/main/java/com/gocardless/services/SubscriptionService.java @@ -14,39 +14,38 @@ /** * Service class for working with subscription resources. * - * Subscriptions create - * [payments](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-payments) according to - * a schedule. + * Subscriptions create [payments](#core-endpoints-payments) according to a schedule. * - * #### Recurrence Rules + * #### + * Recurrence Rules * - * The following rules apply when specifying - * recurrence: - * - The first payment must be charged within 1 year. - * - When neither `month` nor - * `day_of_month` are present, the subscription will recur from the `start_at` based on the - * `interval_unit`. - * - If `month` or `day_of_month` are present, the recurrence rules will be - * applied from the `start_at`, and the following validations apply: + * The following rules apply when specifying recurrence: + * - The first payment + * must be charged within 1 year. + * - When neither `month` nor `day_of_month` are present, the + * subscription will recur from the `start_at` based on the `interval_unit`. + * - If `month` or + * `day_of_month` are present, the recurrence rules will be applied from the `start_at`, and the + * following validations apply: * - * | interval_unit | month - * | day_of_month | + * | interval_unit | month + * | day_of_month | + * | :-------------- | + * :--------------------------------------------- | :-------------------------------------- | * | - * :-------------- | :--------------------------------------------- | - * :-------------------------------------- | - * | yearly | optional (required if - * `day_of_month` provided) | optional (required if `month` provided) | - * | monthly | invalid - * | required | - * | weekly - * | invalid | invalid | - * + * yearly | optional (required if `day_of_month` provided) | optional (required if `month` + * provided) | + * | monthly | invalid | required + * | + * | weekly | invalid | + * invalid | * * Examples: * - * | interval_unit | interval | month | day_of_month | valid? - * | - * | :-------------- | :--------- | :------ | :------------- | + * | interval_unit | interval | + * month | day_of_month | valid? | + * | + * :-------------- | :--------- | :------ | :------------- | * :------------------------------------------------- | * | yearly | 1 | january | * -1 | valid | @@ -94,9 +93,7 @@ public SubscriptionCreateRequest create() { } /** - * Returns a - * [cursor-paginated](https://developer.gocardless.com/pro/2015-04-29/#overview-cursor-pagination) - * list of your subscriptions. + * Returns a [cursor-paginated](#overview-cursor-pagination) list of your subscriptions. */ public SubscriptionListRequest> list() { return new SubscriptionListRequest<>(httpClient, ListRequest.pagingExecutor()); @@ -221,9 +218,8 @@ public SubscriptionCreateRequest withLinks(Links links) { } /** - * ID of the associated - * [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates) which the - * subscription will create payments against. + * ID of the associated [mandate](#core-endpoints-mandates) which the subscription will create + * payments against. */ public SubscriptionCreateRequest withLinksMandate(String mandate) { if (links == null) { @@ -273,8 +269,7 @@ public SubscriptionCreateRequest withName(String name) { /** * An optional payment reference. This will be set as the reference on each payment created and will * appear on your customer's bank statement. See the documentation for the [create payment - * endpoint](https://developer.gocardless.com/pro/2015-04-29/#payments-create-a-payment) for more - * details. + * endpoint](#payments-create-a-payment) for more details. */ public SubscriptionCreateRequest withPaymentReference(String paymentReference) { this.paymentReference = paymentReference; @@ -283,9 +278,8 @@ public SubscriptionCreateRequest withPaymentReference(String paymentReference) { /** * The date on which the first payment should be charged. Must be within one year of creation and on - * or after the [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates)'s - * `next_possible_charge_date`. When blank, this will be set as the mandate's - * `next_possible_charge_date`. + * or after the [mandate](#core-endpoints-mandates)'s `next_possible_charge_date`. When blank, this + * will be set as the mandate's `next_possible_charge_date`. */ public SubscriptionCreateRequest withStartAt(String startAt) { this.startAt = startAt; @@ -351,9 +345,8 @@ public static class Links { private String mandate; /** - * ID of the associated - * [mandate](https://developer.gocardless.com/pro/2015-04-29/#core-endpoints-mandates) which the - * subscription will create payments against. + * ID of the associated [mandate](#core-endpoints-mandates) which the subscription will create + * payments against. */ public Links withMandate(String mandate) { this.mandate = mandate; @@ -365,9 +358,7 @@ public Links withMandate(String mandate) { /** * Request class for {@link SubscriptionService#list }. * - * Returns a - * [cursor-paginated](https://developer.gocardless.com/pro/2015-04-29/#overview-cursor-pagination) - * list of your subscriptions. + * Returns a [cursor-paginated](#overview-cursor-pagination) list of your subscriptions. */ public static final class SubscriptionListRequest extends ListRequest { private String customer; @@ -529,8 +520,7 @@ public SubscriptionUpdateRequest withName(String name) { /** * An optional payment reference. This will be set as the reference on each payment created and will * appear on your customer's bank statement. See the documentation for the [create payment - * endpoint](https://developer.gocardless.com/pro/2015-04-29/#payments-create-a-payment) for more - * details. + * endpoint](#payments-create-a-payment) for more details. */ public SubscriptionUpdateRequest withPaymentReference(String paymentReference) { this.paymentReference = paymentReference; From ef111689cea3836368513c436c8e6f12fddb40ec Mon Sep 17 00:00:00 2001 From: Crankshaft Robot Date: Fri, 26 Jun 2015 08:06:17 +0000 Subject: [PATCH 13/20] Crankshaft Build #BU0000015B7HSP @ 2015-06-26 08:06:17 +0000 --- .../com/gocardless/resources/RedirectFlow.java | 16 +++++++--------- .../gocardless/services/RedirectFlowService.java | 16 +++++++--------- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/gocardless/resources/RedirectFlow.java b/src/main/java/com/gocardless/resources/RedirectFlow.java index 014df95a..69d658ca 100644 --- a/src/main/java/com/gocardless/resources/RedirectFlow.java +++ b/src/main/java/com/gocardless/resources/RedirectFlow.java @@ -5,13 +5,15 @@ /** * Represents a redirect flow resource returned from the API. * - * Redirect flows enable you to use GoCardless Pro's secure payment pages to set up mandates with - * your customers. + * Redirect flows enable you to use GoCardless Pro's [hosted payment + * pages](https://pay-sandbox.gocardless.com/AL000000AKFPFF) to set up mandates with your customers. + * These pages are fully compliant and have been translated into Dutch, French, German, Italian, + * Portuguese and Spanish. * * The overall flow is: * - * 1. You [create](#create-a-redirect-flow) a redirect - * flow for your customer, and redirect them to the returned redirect url, e.g. + * 1. You [create](#create-a-redirect-flow) a + * redirect flow for your customer, and redirect them to the returned redirect url, e.g. * `https://pay.gocardless.com/flow/RE123`. * * 2. Your customer supplies their name, email, @@ -30,11 +32,7 @@ * created, and attach the created resources to that user in the complete step. * * Redirect flows - * expire 30 minutes after they are first created. You cannot [complete](#complete-a-redirect-flow) - * an expired redirect flow. - * - * [View an example - * integration](https://pay-sandbox.gocardless.com/AL000000AKFPFF) that uses redirect flows. + * expire 30 minutes after they are first created. You cannot complete an expired redirect flow. */ public class RedirectFlow { private RedirectFlow() { diff --git a/src/main/java/com/gocardless/services/RedirectFlowService.java b/src/main/java/com/gocardless/services/RedirectFlowService.java index 115cd6cc..f1809727 100644 --- a/src/main/java/com/gocardless/services/RedirectFlowService.java +++ b/src/main/java/com/gocardless/services/RedirectFlowService.java @@ -11,13 +11,15 @@ /** * Service class for working with redirect flow resources. * - * Redirect flows enable you to use GoCardless Pro's secure payment pages to set up mandates with - * your customers. + * Redirect flows enable you to use GoCardless Pro's [hosted payment + * pages](https://pay-sandbox.gocardless.com/AL000000AKFPFF) to set up mandates with your customers. + * These pages are fully compliant and have been translated into Dutch, French, German, Italian, + * Portuguese and Spanish. * * The overall flow is: * - * 1. You [create](#create-a-redirect-flow) a redirect - * flow for your customer, and redirect them to the returned redirect url, e.g. + * 1. You [create](#create-a-redirect-flow) a + * redirect flow for your customer, and redirect them to the returned redirect url, e.g. * `https://pay.gocardless.com/flow/RE123`. * * 2. Your customer supplies their name, email, @@ -36,11 +38,7 @@ * created, and attach the created resources to that user in the complete step. * * Redirect flows - * expire 30 minutes after they are first created. You cannot [complete](#complete-a-redirect-flow) - * an expired redirect flow. - * - * [View an example - * integration](https://pay-sandbox.gocardless.com/AL000000AKFPFF) that uses redirect flows. + * expire 30 minutes after they are first created. You cannot complete an expired redirect flow. */ public class RedirectFlowService { private HttpClient httpClient; From 457c2f2050ba212e271b33c811abe435c20861b6 Mon Sep 17 00:00:00 2001 From: Crankshaft Robot Date: Tue, 30 Jun 2015 12:42:48 +0000 Subject: [PATCH 14/20] Crankshaft[BU00000191N9C5] Client - Java @ 2015-06-30 12:42:48 +0000 --- README.md | 4 + build.gradle | 3 +- .../java/com/gocardless/GoCardlessClient.java | 9 ++ .../java/com/gocardless/http/GetRequest.java | 51 +++----- .../java/com/gocardless/http/HttpClient.java | 70 ++++++---- .../java/com/gocardless/http/HttpRequest.java | 4 +- .../com/gocardless/http/HttpResponse.java | 44 +++++++ .../java/com/gocardless/http/ListRequest.java | 4 +- .../gocardless/http/LoggingInterceptor.java | 27 ++++ .../java/com/gocardless/http/PostRequest.java | 18 ++- .../java/com/gocardless/http/PutRequest.java | 18 ++- .../com/gocardless/http/ResponseParser.java | 14 +- .../com/gocardless/resources/Creditor.java | 8 -- .../resources/CreditorBankAccount.java | 2 +- .../resources/CustomerBankAccount.java | 2 +- .../java/com/gocardless/resources/Event.java | 2 +- .../com/gocardless/resources/Mandate.java | 10 +- .../gocardless/resources/ModulusCheck.java | 78 ++++++++++++ .../com/gocardless/resources/Payment.java | 2 +- .../java/com/gocardless/resources/Payout.java | 2 +- .../java/com/gocardless/resources/Refund.java | 14 +- .../gocardless/resources/Subscription.java | 15 ++- .../services/CreditorBankAccountService.java | 13 +- .../gocardless/services/CreditorService.java | 57 ++------- .../services/CustomerBankAccountService.java | 13 +- .../gocardless/services/CustomerService.java | 11 +- .../com/gocardless/services/EventService.java | 11 +- .../gocardless/services/MandateService.java | 23 ++-- .../services/ModulusCheckService.java | 120 ++++++++++++++++++ .../gocardless/services/PaymentService.java | 15 +-- .../gocardless/services/PayoutService.java | 13 +- .../services/RedirectFlowService.java | 12 +- .../gocardless/services/RefundService.java | 25 ++-- .../services/SubscriptionService.java | 22 ++-- .../com/gocardless/GoCardlessClientTest.java | 24 ++-- .../com/gocardless/http/GetRequestTest.java | 46 +++---- .../com/gocardless/http/PostRequestTest.java | 14 ++ .../com/gocardless/http/PutRequestTest.java | 13 ++ .../gocardless/http/ResponseParserTest.java | 29 +++-- .../betamax/tapes/download_a_mandate.yaml | 40 ------ .../betamax/tapes/get_a_customer_wrapped.yaml | 33 +++++ src/test/resources/fixtures/hello.txt | 1 - 42 files changed, 596 insertions(+), 340 deletions(-) create mode 100644 src/main/java/com/gocardless/http/HttpResponse.java create mode 100644 src/main/java/com/gocardless/http/LoggingInterceptor.java create mode 100644 src/main/java/com/gocardless/resources/ModulusCheck.java create mode 100644 src/main/java/com/gocardless/services/ModulusCheckService.java delete mode 100644 src/test/resources/betamax/tapes/download_a_mandate.yaml create mode 100644 src/test/resources/betamax/tapes/get_a_customer_wrapped.yaml delete mode 100644 src/test/resources/fixtures/hello.txt diff --git a/README.md b/README.md index 08bf330d..3fb331fc 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,10 @@ See the [documentation](http://gocardless.github.io/gocardless-pro-java/com/goca This library requires JDK version 7 or above. +## Logging + +All requests are logged at `INFO` level using [SLF4J](http://www.slf4j.org/). Logs will only be sent if you have an SLF4J binding on your classpath - we recommend using [Logback](http://logback.qos.ch/). + ## Documentation Full Javadoc can be found [here](http://gocardless.github.io/gocardless-pro-java/com/gocardless/package-summary.html). diff --git a/build.gradle b/build.gradle index 834cb623..78c716f9 100644 --- a/build.gradle +++ b/build.gradle @@ -15,9 +15,10 @@ configurations { } dependencies { - compile 'com.squareup.okhttp:okhttp:2.3.0' + compile 'com.squareup.okhttp:okhttp:2.4.0' compile 'com.google.code.gson:gson:2.3.1' compile 'com.google.guava:guava:18.0' + compile 'org.slf4j:slf4j-api:1.7.12' testCompile 'junit:junit:4.12' testCompile 'org.assertj:assertj-core:2.0.0' diff --git a/src/main/java/com/gocardless/GoCardlessClient.java b/src/main/java/com/gocardless/GoCardlessClient.java index 2b91d154..d77c0306 100644 --- a/src/main/java/com/gocardless/GoCardlessClient.java +++ b/src/main/java/com/gocardless/GoCardlessClient.java @@ -17,6 +17,7 @@ public class GoCardlessClient { private final EventService events; private final HelperService helpers; private final MandateService mandates; + private final ModulusCheckService modulusChecks; private final PaymentService payments; private final PayoutService payouts; private final RedirectFlowService redirectFlows; @@ -32,6 +33,7 @@ private GoCardlessClient(HttpClient httpClient) { this.events = new EventService(httpClient); this.helpers = new HelperService(httpClient); this.mandates = new MandateService(httpClient); + this.modulusChecks = new ModulusCheckService(httpClient); this.payments = new PaymentService(httpClient); this.payouts = new PayoutService(httpClient); this.redirectFlows = new RedirectFlowService(httpClient); @@ -88,6 +90,13 @@ public MandateService mandates() { return mandates; } + /** + * A service class for working with modulus check resources. + */ + public ModulusCheckService modulusChecks() { + return modulusChecks; + } + /** * A service class for working with payment resources. */ diff --git a/src/main/java/com/gocardless/http/GetRequest.java b/src/main/java/com/gocardless/http/GetRequest.java index 5ee8a5c4..f76382bb 100644 --- a/src/main/java/com/gocardless/http/GetRequest.java +++ b/src/main/java/com/gocardless/http/GetRequest.java @@ -1,33 +1,42 @@ package com.gocardless.http; -import java.io.InputStream; +import java.io.Reader; /** * Base class for GET requests that return a single item. * * @param the type of the item returned by this request. */ -public abstract class GetRequest extends HttpRequest { - private final GetRequestExecutor executor; - - protected GetRequest(HttpClient httpClient, GetRequestExecutor executor) { +public abstract class GetRequest extends HttpRequest { + protected GetRequest(HttpClient httpClient) { super(httpClient); - this.executor = executor; } /** * Executes this request. * - * Returns the API response. + * Returns the response entity. * * @throws com.gocardless.GoCardlessException */ - public S execute() { - return executor.execute(this, getHttpClient()); + public T execute() { + return getHttpClient().execute(this); + } + + /** + * Executes this request. + * + * Returns a {@link com.gocardless.http.HttpResponse} that wraps the + * response entity. + * + * @throws com.gocardless.GoCardlessException + */ + public HttpResponse executeWrapped() { + return getHttpClient().executeWrapped(this); } @Override - protected T parseResponse(InputStream stream, ResponseParser responseParser) { + protected T parseResponse(Reader stream, ResponseParser responseParser) { return responseParser.parseSingle(stream, getEnvelope(), getResponseClass()); } @@ -42,26 +51,4 @@ protected final boolean hasBody() { } protected abstract Class getResponseClass(); - - public interface GetRequestExecutor { - S execute(GetRequest request, HttpClient client); - } - - public static GetRequestExecutor jsonExecutor() { - return new GetRequestExecutor() { - @Override - public T execute(GetRequest request, HttpClient client) { - return client.execute(request); - } - }; - } - - public static GetRequestExecutor downloadExecutor(final String contentType) { - return new GetRequestExecutor() { - @Override - public InputStream execute(GetRequest request, HttpClient client) { - return client.rawExecute(request, contentType); - } - }; - } } diff --git a/src/main/java/com/gocardless/http/HttpClient.java b/src/main/java/com/gocardless/http/HttpClient.java index 51f83230..5141ea5f 100644 --- a/src/main/java/com/gocardless/http/HttpClient.java +++ b/src/main/java/com/gocardless/http/HttpClient.java @@ -1,7 +1,7 @@ package com.gocardless.http; import java.io.IOException; -import java.io.InputStream; +import java.io.Reader; import java.net.URL; import java.util.Map; @@ -24,6 +24,7 @@ public class HttpClient { replaceSpaces(System.getProperty("os.version")), replaceSpaces(System.getProperty("java.vm.name")), replaceSpaces(System.getProperty("java.version"))); + private static final RequestBody EMPTY_BODY = RequestBody.create(null, new byte[0]); private static final MediaType MEDIA_TYPE = MediaType.parse("application/json"); private static final Map HEADERS; static { @@ -45,6 +46,7 @@ public class HttpClient { */ public HttpClient(String accessToken, String baseUrl) { this.rawClient = new OkHttpClient(); + rawClient.interceptors().add(new LoggingInterceptor()); this.urlFormatter = new UrlFormatter(baseUrl); Gson gson = GsonFactory.build(); this.responseParser = new ResponseParser(gson); @@ -52,52 +54,66 @@ public HttpClient(String accessToken, String baseUrl) { this.credentials = String.format("Bearer %s", accessToken); } - InputStream rawExecute(HttpRequest request, String accept) { - URL url = request.getUrl(urlFormatter); - Request.Builder httpRequest = - new Request.Builder().url(url).header("Accept", accept) - .header("Authorization", credentials).header("User-Agent", USER_AGENT) - .method(request.getMethod(), getBody(request)); - for (Map.Entry entry : HEADERS.entrySet()) { - httpRequest = httpRequest.header(entry.getKey(), entry.getValue()); - } - Response response = execute(httpRequest.build()); - if (!response.isSuccessful()) { - throw handleErrorResponse(response); - } - try { - return response.body().byteStream(); - } catch (IOException e) { - throw new GoCardlessNetworkException("Failed to read response body", e); - } + T execute(HttpRequest httpRequest) { + Request request = buildRequest(httpRequest); + Response response = execute(request); + return parseResponseBody(httpRequest, response); } - T execute(HttpRequest request) { - try (InputStream stream = rawExecute(request, MEDIA_TYPE.toString())) { - return request.parseResponse(stream, responseParser); - } catch (IOException e) { - throw new GoCardlessNetworkException("Failed to read response body", e); + HttpResponse executeWrapped(HttpRequest httpRequest) { + Request request = buildRequest(httpRequest); + Response response = execute(request); + T resource = parseResponseBody(httpRequest, response); + return new HttpResponse(resource, response.code(), response.headers().toMultimap()); + } + + Request buildRequest(HttpRequest httpRequest) { + URL url = httpRequest.getUrl(urlFormatter); + Request.Builder request = + new Request.Builder().url(url).header("Authorization", credentials) + .header("User-Agent", USER_AGENT) + .method(httpRequest.getMethod(), getBody(httpRequest)); + for (Map.Entry entry : HEADERS.entrySet()) { + request = request.header(entry.getKey(), entry.getValue()); } + return request.build(); } private RequestBody getBody(HttpRequest request) { if (!request.hasBody()) { - return null; + if (request.getMethod().equals("GET")) { + return null; + } else { + return EMPTY_BODY; + } } String json = requestWriter.write(request, request.getRequestEnvelope()); return RequestBody.create(MEDIA_TYPE, json); } private Response execute(Request request) { + Response response; try { - return rawClient.newCall(request).execute(); + response = rawClient.newCall(request).execute(); } catch (IOException e) { throw new GoCardlessNetworkException("Failed to execute request", e); } + if (!response.isSuccessful()) { + throw handleErrorResponse(response); + } + return response; + } + + private T parseResponseBody(HttpRequest request, Response response) { + try (Reader stream = response.body().charStream()) { + return request.parseResponse(stream, responseParser); + } catch (IOException e) { + throw new GoCardlessNetworkException("Failed to read response body", e); + } } private GoCardlessException handleErrorResponse(Response response) { - try (InputStream stream = response.body().byteStream()) { + try (Reader stream = response.body().charStream()) { return responseParser.parseError(stream); } catch (IOException e) { throw new GoCardlessNetworkException("Failed to read response body", e); diff --git a/src/main/java/com/gocardless/http/HttpRequest.java b/src/main/java/com/gocardless/http/HttpRequest.java index a76d99f3..155c348f 100644 --- a/src/main/java/com/gocardless/http/HttpRequest.java +++ b/src/main/java/com/gocardless/http/HttpRequest.java @@ -1,6 +1,6 @@ package com.gocardless.http; -import java.io.InputStream; +import java.io.Reader; import java.net.URL; import java.util.Map; @@ -46,5 +46,5 @@ protected String getRequestEnvelope() { protected abstract boolean hasBody(); - protected abstract T parseResponse(InputStream stream, ResponseParser responseParser); + protected abstract T parseResponse(Reader stream, ResponseParser responseParser); } diff --git a/src/main/java/com/gocardless/http/HttpResponse.java b/src/main/java/com/gocardless/http/HttpResponse.java new file mode 100644 index 00000000..3b9f33c8 --- /dev/null +++ b/src/main/java/com/gocardless/http/HttpResponse.java @@ -0,0 +1,44 @@ +package com.gocardless.http; + +import java.util.List; +import java.util.Map; + +import com.google.common.collect.ImmutableListMultimap; +import com.google.common.collect.Multimap; + +/** + * Base class for HTTP responses. + * + * @param the type of the resource within this response. + */ +public class HttpResponse { + private final T resource; + private final int statusCode; + private final Multimap headers; + + public HttpResponse(T resource, int statusCode, Map> headers) { + this.resource = resource; + this.statusCode = statusCode; + this.headers = buildHeaderMap(headers); + } + + public T getResource() { + return resource; + } + + public int getStatusCode() { + return statusCode; + } + + public Multimap getHeaders() { + return headers; + } + + private static Multimap buildHeaderMap(Map> headers) { + ImmutableListMultimap.Builder builder = ImmutableListMultimap.builder(); + for (Map.Entry> entry : headers.entrySet()) { + builder.putAll(entry.getKey(), entry.getValue()); + } + return builder.build(); + } +} diff --git a/src/main/java/com/gocardless/http/ListRequest.java b/src/main/java/com/gocardless/http/ListRequest.java index eb3312a3..fc243ca7 100644 --- a/src/main/java/com/gocardless/http/ListRequest.java +++ b/src/main/java/com/gocardless/http/ListRequest.java @@ -1,6 +1,6 @@ package com.gocardless.http; -import java.io.InputStream; +import java.io.Reader; import java.util.List; import java.util.Map; @@ -35,7 +35,7 @@ public S execute() { } @Override - protected ListResponse parseResponse(InputStream stream, ResponseParser responseParser) { + protected ListResponse parseResponse(Reader stream, ResponseParser responseParser) { return responseParser.parsePage(stream, getEnvelope(), getTypeToken()); } diff --git a/src/main/java/com/gocardless/http/LoggingInterceptor.java b/src/main/java/com/gocardless/http/LoggingInterceptor.java new file mode 100644 index 00000000..053e1610 --- /dev/null +++ b/src/main/java/com/gocardless/http/LoggingInterceptor.java @@ -0,0 +1,27 @@ +package com.gocardless.http; + +import java.io.IOException; + +import com.google.common.base.Stopwatch; + +import com.squareup.okhttp.Interceptor.Chain; +import com.squareup.okhttp.Interceptor; +import com.squareup.okhttp.Request; +import com.squareup.okhttp.Response; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +class LoggingInterceptor implements Interceptor { + private static final Logger LOGGER = LoggerFactory.getLogger(LoggingInterceptor.class); + + public Response intercept(Chain chain) throws IOException { + Request request = chain.request(); + Stopwatch stopwatch = Stopwatch.createStarted(); + Response response = chain.proceed(request); + stopwatch.stop(); + LOGGER.info("API request [{}] [{}] returned [{}] (took [{}])", request.method(), + request.url(), response.code(), stopwatch); + return response; + } +} diff --git a/src/main/java/com/gocardless/http/PostRequest.java b/src/main/java/com/gocardless/http/PostRequest.java index 86ba0fa2..d3616d7e 100644 --- a/src/main/java/com/gocardless/http/PostRequest.java +++ b/src/main/java/com/gocardless/http/PostRequest.java @@ -1,6 +1,6 @@ package com.gocardless.http; -import java.io.InputStream; +import java.io.Reader; /** * Base class for POST requests. @@ -15,7 +15,7 @@ protected PostRequest(HttpClient httpClient) { /** * Executes this request. * - * Returns the API response. + * Returns the response entity. * * @throws com.gocardless.GoCardlessException */ @@ -23,8 +23,20 @@ public T execute() { return getHttpClient().execute(this); } + /** + * Executes this request. + * + * Returns a {@link com.gocardless.http.HttpResponse} that wraps the + * response entity. + * + * @throws com.gocardless.GoCardlessException + */ + public HttpResponse executeWrapped() { + return getHttpClient().executeWrapped(this); + } + @Override - protected T parseResponse(InputStream stream, ResponseParser responseParser) { + protected T parseResponse(Reader stream, ResponseParser responseParser) { return responseParser.parseSingle(stream, getEnvelope(), getResponseClass()); } diff --git a/src/main/java/com/gocardless/http/PutRequest.java b/src/main/java/com/gocardless/http/PutRequest.java index 68c3f03d..0c254bf9 100644 --- a/src/main/java/com/gocardless/http/PutRequest.java +++ b/src/main/java/com/gocardless/http/PutRequest.java @@ -1,6 +1,6 @@ package com.gocardless.http; -import java.io.InputStream; +import java.io.Reader; /** * Base class for PUT requests. @@ -15,7 +15,7 @@ protected PutRequest(HttpClient httpClient) { /** * Executes this request. * - * Returns the API response. + * Returns the response entity. * * @throws com.gocardless.GoCardlessException */ @@ -23,8 +23,20 @@ public T execute() { return getHttpClient().execute(this); } + /** + * Executes this request. + * + * Returns a {@link com.gocardless.http.HttpResponse} that wraps the + * response entity. + * + * @throws com.gocardless.GoCardlessException + */ + public HttpResponse executeWrapped() { + return getHttpClient().executeWrapped(this); + } + @Override - protected T parseResponse(InputStream stream, ResponseParser responseParser) { + protected T parseResponse(Reader stream, ResponseParser responseParser) { return responseParser.parseSingle(stream, getEnvelope(), getResponseClass()); } diff --git a/src/main/java/com/gocardless/http/ResponseParser.java b/src/main/java/com/gocardless/http/ResponseParser.java index d1f4ca02..7c34e4ce 100644 --- a/src/main/java/com/gocardless/http/ResponseParser.java +++ b/src/main/java/com/gocardless/http/ResponseParser.java @@ -1,7 +1,5 @@ package com.gocardless.http; -import java.io.InputStream; -import java.io.InputStreamReader; import java.io.Reader; import java.util.List; @@ -20,16 +18,14 @@ final class ResponseParser { this.gson = gson; } - T parseSingle(InputStream stream, String envelope, Class clazz) { - Reader reader = new InputStreamReader(stream); - JsonElement json = new JsonParser().parse(reader); + T parseSingle(Reader stream, String envelope, Class clazz) { + JsonElement json = new JsonParser().parse(stream); JsonObject object = json.getAsJsonObject().getAsJsonObject(envelope); return gson.fromJson(object, clazz); } - ListResponse parsePage(InputStream stream, String envelope, TypeToken> clazz) { - Reader reader = new InputStreamReader(stream); - JsonObject json = new JsonParser().parse(reader).getAsJsonObject(); + ListResponse parsePage(Reader stream, String envelope, TypeToken> clazz) { + JsonObject json = new JsonParser().parse(stream).getAsJsonObject(); JsonArray array = json.getAsJsonArray(envelope); List items = gson.fromJson(array, clazz.getType()); JsonObject metaJson = json.getAsJsonObject("meta"); @@ -37,7 +33,7 @@ ListResponse parsePage(InputStream stream, String envelope, TypeToken(ImmutableList.copyOf(items), meta); } - GoCardlessApiException parseError(InputStream stream) { + GoCardlessApiException parseError(Reader stream) { ApiErrorResponse error = parseSingle(stream, "error", ApiErrorResponse.class); return GoCardlessErrorMapper.toException(error); } diff --git a/src/main/java/com/gocardless/resources/Creditor.java b/src/main/java/com/gocardless/resources/Creditor.java index 8fbacc7b..c736088d 100644 --- a/src/main/java/com/gocardless/resources/Creditor.java +++ b/src/main/java/com/gocardless/resources/Creditor.java @@ -110,7 +110,6 @@ private Links() { private String defaultEurPayoutAccount; private String defaultGbpPayoutAccount; - private String logo; /** * ID of the [bank account](#core-endpoints-creditor-bank-accounts) which is set up to receive @@ -127,12 +126,5 @@ public String getDefaultEurPayoutAccount() { public String getDefaultGbpPayoutAccount() { return defaultGbpPayoutAccount; } - - /** - * ID of the logo used on the Redirect Flow payment pages. - */ - public String getLogo() { - return logo; - } } } diff --git a/src/main/java/com/gocardless/resources/CreditorBankAccount.java b/src/main/java/com/gocardless/resources/CreditorBankAccount.java index fd15c2f6..68bd3bf9 100644 --- a/src/main/java/com/gocardless/resources/CreditorBankAccount.java +++ b/src/main/java/com/gocardless/resources/CreditorBankAccount.java @@ -84,7 +84,7 @@ public Boolean getEnabled() { } /** - * Unique identifier, beginning with "BA" + * Unique identifier, beginning with "BA". */ public String getId() { return id; diff --git a/src/main/java/com/gocardless/resources/CustomerBankAccount.java b/src/main/java/com/gocardless/resources/CustomerBankAccount.java index 5aba869d..81716e0c 100644 --- a/src/main/java/com/gocardless/resources/CustomerBankAccount.java +++ b/src/main/java/com/gocardless/resources/CustomerBankAccount.java @@ -84,7 +84,7 @@ public Boolean getEnabled() { } /** - * Unique identifier, beginning with "BA" + * Unique identifier, beginning with "BA". */ public String getId() { return id; diff --git a/src/main/java/com/gocardless/resources/Event.java b/src/main/java/com/gocardless/resources/Event.java index a28179dd..6e654ced 100644 --- a/src/main/java/com/gocardless/resources/Event.java +++ b/src/main/java/com/gocardless/resources/Event.java @@ -42,7 +42,7 @@ public Details getDetails() { } /** - * Unique identifier, beginning with "EV" + * Unique identifier, beginning with "EV". */ public String getId() { return id; diff --git a/src/main/java/com/gocardless/resources/Mandate.java b/src/main/java/com/gocardless/resources/Mandate.java index b12874ac..cd9391ef 100644 --- a/src/main/java/com/gocardless/resources/Mandate.java +++ b/src/main/java/com/gocardless/resources/Mandate.java @@ -34,7 +34,7 @@ public String getCreatedAt() { } /** - * Unique identifier, beginning with "MD" + * Unique identifier, beginning with "MD". */ public String getId() { return id; @@ -53,7 +53,7 @@ public Map getMetadata() { } /** - * The earliest date a newly created payment for this mandate could be charged + * The earliest date a newly created payment for this mandate could be charged. */ public String getNextPossibleChargeDate() { return nextPossibleChargeDate; @@ -67,9 +67,9 @@ public String getReference() { } /** - * Direct Debit scheme to which this mandate and associated payments are submitted. Can be supplied - * or automatically detected from the customer's bank account. Currently only "bacs" and "sepa_core" - * are supported. + * Direct Debit scheme to which this mandate and associated payments + * are submitted. Can be supplied or automatically detected from the customer's bank account. + * Currently only "bacs" and "sepa_core" are supported. */ public String getScheme() { return scheme; diff --git a/src/main/java/com/gocardless/resources/ModulusCheck.java b/src/main/java/com/gocardless/resources/ModulusCheck.java new file mode 100644 index 00000000..f7ab6688 --- /dev/null +++ b/src/main/java/com/gocardless/resources/ModulusCheck.java @@ -0,0 +1,78 @@ +package com.gocardless.resources; + +import java.util.List; + +import com.google.gson.annotations.SerializedName; + +/** + * Represents a modulus check resource returned from the API. + * + * Check whether an account number and bank / branch code combination are compatible. + */ +public class ModulusCheck { + private ModulusCheck() { + // blank to prevent instantiation + } + + private List availableSchemes; + private List errors; + private Boolean succeeded; + + /** + * Array of [schemes](#mandates_scheme) supported for this bank account. This will be an empty array + * for an unsuccessful modulus check. + */ + public List getAvailableSchemes() { + return availableSchemes; + } + + /** + * Array of errors encountered during modulus checking, structured like the `errors` key in a + * `validation_failed` response - see [errors](#overview-errors). + */ + public List getErrors() { + return errors; + } + + /** + * Whether the modulus check was successful (i.e. whether the bank account details provided were + * valid). + */ + public Boolean getSucceeded() { + return succeeded; + } + + public enum AvailableScheme { + @SerializedName("bacs") + BACS, @SerializedName("sepa_core") + SEPA_CORE, + } + + /** + * Represents a error resource returned from the API. + * + * An error encountered during modulus checking + */ + public static class Error { + private Error() { + // blank to prevent instantiation + } + + private String field; + private String message; + + /** + * Field that caused the error. + */ + public String getField() { + return field; + } + + /** + * Description of the error. + */ + public String getMessage() { + return message; + } + } +} diff --git a/src/main/java/com/gocardless/resources/Payment.java b/src/main/java/com/gocardless/resources/Payment.java index 52141e9c..57855b5d 100644 --- a/src/main/java/com/gocardless/resources/Payment.java +++ b/src/main/java/com/gocardless/resources/Payment.java @@ -77,7 +77,7 @@ public String getDescription() { } /** - * Unique identifier, beginning with "PM" + * Unique identifier, beginning with "PM". */ public String getId() { return id; diff --git a/src/main/java/com/gocardless/resources/Payout.java b/src/main/java/com/gocardless/resources/Payout.java index 60e08159..1190dc1e 100644 --- a/src/main/java/com/gocardless/resources/Payout.java +++ b/src/main/java/com/gocardless/resources/Payout.java @@ -45,7 +45,7 @@ public String getCurrency() { } /** - * Unique identifier, beginning with "PO" + * Unique identifier, beginning with "PO". */ public String getId() { return id; diff --git a/src/main/java/com/gocardless/resources/Refund.java b/src/main/java/com/gocardless/resources/Refund.java index 8db07d6d..ea6d63f9 100644 --- a/src/main/java/com/gocardless/resources/Refund.java +++ b/src/main/java/com/gocardless/resources/Refund.java @@ -8,14 +8,12 @@ * Refund objects represent (partial) refunds of a [payment](#core-endpoints-payment) back to the * [customer](#core-endpoints-customers). * - * The API allows you to create, show, list and update - * your refunds. + * GoCardless will notify you via a [webhook](#webhooks) + * whenever a refund is created, and will update the `amount_refunded` property of the payment. * - * GoCardless will notify you via a [webhook](#webhooks) whenever a refund is - * created, and will update the `amount_refunded` property of the payment. - * - * _Note:_ A payment - * that has been (partially) refunded can still receive a late failure or chargeback from the banks. + * + * _Note:_ A payment that has been (partially) refunded can still receive a late failure or + * chargeback from the banks. */ public class Refund { private Refund() { @@ -52,7 +50,7 @@ public String getCurrency() { } /** - * Unique identifier, beginning with "RF" + * Unique identifier, beginning with "RF". */ public String getId() { return id; diff --git a/src/main/java/com/gocardless/resources/Subscription.java b/src/main/java/com/gocardless/resources/Subscription.java index c4fedff7..abcdd944 100644 --- a/src/main/java/com/gocardless/resources/Subscription.java +++ b/src/main/java/com/gocardless/resources/Subscription.java @@ -88,7 +88,7 @@ private Subscription() { private String paymentReference; private String startAt; private String status; - private List upcomingPayments; + private List upcomingPayments; /** * Amount in pence or cents. @@ -122,7 +122,7 @@ public String getCurrency() { /** * As per RFC 2445. The day of the month to charge customers on. `1`-`28` or `-1` to indicate the - * last day of the month + * last day of the month. */ public Integer getDayOfMonth() { return dayOfMonth; @@ -138,7 +138,7 @@ public String getEndAt() { } /** - * Unique identifier, beginning with "SB" + * Unique identifier, beginning with "SB". */ public String getId() { return id; @@ -179,7 +179,8 @@ public Month getMonth() { } /** - * Optional name for the subscription. This field must not exceed 255 characters. + * Optional name for the subscription. This will be set as the description on each payment created. + * Must not exceed 255 characters. */ public String getName() { return name; @@ -221,7 +222,7 @@ public String getStatus() { /** * Up to 10 upcoming payments with the amount, in pence, and charge date for each. */ - public List getUpcomingPayments() { + public List getUpcomingPayments() { return upcomingPayments; } @@ -264,8 +265,8 @@ public String getMandate() { } } - public static class UpcomingPayments { - private UpcomingPayments() { + public static class UpcomingPayment { + private UpcomingPayment() { // blank to prevent instantiation } diff --git a/src/main/java/com/gocardless/services/CreditorBankAccountService.java b/src/main/java/com/gocardless/services/CreditorBankAccountService.java index ff96ac4f..7207b050 100644 --- a/src/main/java/com/gocardless/services/CreditorBankAccountService.java +++ b/src/main/java/com/gocardless/services/CreditorBankAccountService.java @@ -58,9 +58,8 @@ public CreditorBankAccountListRequest> all() { /** * Retrieves the details of an existing creditor bank account. */ - public CreditorBankAccountGetRequest get(String identity) { - return new CreditorBankAccountGetRequest<>(httpClient, - GetRequest.jsonExecutor(), identity); + public CreditorBankAccountGetRequest get(String identity) { + return new CreditorBankAccountGetRequest(httpClient, identity); } /** @@ -341,14 +340,12 @@ public String toString() { * * Retrieves the details of an existing creditor bank account. */ - public static final class CreditorBankAccountGetRequest extends - GetRequest { + public static final class CreditorBankAccountGetRequest extends GetRequest { @PathParam private final String identity; - private CreditorBankAccountGetRequest(HttpClient httpClient, - GetRequestExecutor executor, String identity) { - super(httpClient, executor); + private CreditorBankAccountGetRequest(HttpClient httpClient, String identity) { + super(httpClient); this.identity = identity; } diff --git a/src/main/java/com/gocardless/services/CreditorService.java b/src/main/java/com/gocardless/services/CreditorService.java index c0aa17a1..811c8c82 100644 --- a/src/main/java/com/gocardless/services/CreditorService.java +++ b/src/main/java/com/gocardless/services/CreditorService.java @@ -1,5 +1,6 @@ package com.gocardless.services; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -53,8 +54,8 @@ public CreditorListRequest> all() { /** * Retrieves the details of an existing creditor. */ - public CreditorGetRequest get(String identity) { - return new CreditorGetRequest<>(httpClient, GetRequest.jsonExecutor(), identity); + public CreditorGetRequest get(String identity) { + return new CreditorGetRequest(httpClient, identity); } /** @@ -75,7 +76,7 @@ public static final class CreditorCreateRequest extends PostRequest { private String addressLine3; private String city; private String countryCode; - private Links links; + private Map links; private String name; private String postalCode; private String region; @@ -121,19 +122,16 @@ public CreditorCreateRequest withCountryCode(String countryCode) { return this; } - public CreditorCreateRequest withLinks(Links links) { + public CreditorCreateRequest withLinks(Map links) { this.links = links; return this; } - /** - * ID of the logo used on the Redirect Flow payment pages. - */ - public CreditorCreateRequest withLinksLogo(String logo) { + public CreditorCreateRequest withLinks(String key, String value) { if (links == null) { - links = new Links(); + links = new HashMap<>(); } - links.withLogo(logo); + links.put(key, value); return this; } @@ -184,18 +182,6 @@ protected Class getResponseClass() { protected boolean hasBody() { return true; } - - public static class Links { - private String logo; - - /** - * ID of the logo used on the Redirect Flow payment pages. - */ - public Links withLogo(String logo) { - this.logo = logo; - return this; - } - } } /** @@ -260,13 +246,12 @@ protected TypeToken> getTypeToken() { * * Retrieves the details of an existing creditor. */ - public static final class CreditorGetRequest extends GetRequest { + public static final class CreditorGetRequest extends GetRequest { @PathParam private final String identity; - private CreditorGetRequest(HttpClient httpClient, GetRequestExecutor executor, - String identity) { - super(httpClient, executor); + private CreditorGetRequest(HttpClient httpClient, String identity) { + super(httpClient); this.identity = identity; } @@ -381,17 +366,6 @@ public CreditorUpdateRequest withLinksDefaultGbpPayoutAccount(String defaultGbpP return this; } - /** - * ID of the logo used on the Redirect Flow payment pages. - */ - public CreditorUpdateRequest withLinksLogo(String logo) { - if (links == null) { - links = new Links(); - } - links.withLogo(logo); - return this; - } - /** * The creditor's name. */ @@ -451,7 +425,6 @@ protected boolean hasBody() { public static class Links { private String defaultEurPayoutAccount; private String defaultGbpPayoutAccount; - private String logo; /** * ID of the [bank account](#core-endpoints-creditor-bank-accounts) which is set up to receive @@ -470,14 +443,6 @@ public Links withDefaultGbpPayoutAccount(String defaultGbpPayoutAccount) { this.defaultGbpPayoutAccount = defaultGbpPayoutAccount; return this; } - - /** - * ID of the logo used on the Redirect Flow payment pages. - */ - public Links withLogo(String logo) { - this.logo = logo; - return this; - } } } } diff --git a/src/main/java/com/gocardless/services/CustomerBankAccountService.java b/src/main/java/com/gocardless/services/CustomerBankAccountService.java index 7caa3458..49229e30 100644 --- a/src/main/java/com/gocardless/services/CustomerBankAccountService.java +++ b/src/main/java/com/gocardless/services/CustomerBankAccountService.java @@ -71,9 +71,8 @@ public CustomerBankAccountListRequest> all() { /** * Retrieves the details of an existing bank account. */ - public CustomerBankAccountGetRequest get(String identity) { - return new CustomerBankAccountGetRequest<>(httpClient, - GetRequest.jsonExecutor(), identity); + public CustomerBankAccountGetRequest get(String identity) { + return new CustomerBankAccountGetRequest(httpClient, identity); } /** @@ -386,14 +385,12 @@ public String toString() { * * Retrieves the details of an existing bank account. */ - public static final class CustomerBankAccountGetRequest extends - GetRequest { + public static final class CustomerBankAccountGetRequest extends GetRequest { @PathParam private final String identity; - private CustomerBankAccountGetRequest(HttpClient httpClient, - GetRequestExecutor executor, String identity) { - super(httpClient, executor); + private CustomerBankAccountGetRequest(HttpClient httpClient, String identity) { + super(httpClient); this.identity = identity; } diff --git a/src/main/java/com/gocardless/services/CustomerService.java b/src/main/java/com/gocardless/services/CustomerService.java index 37b2d5f2..f21ee0f9 100644 --- a/src/main/java/com/gocardless/services/CustomerService.java +++ b/src/main/java/com/gocardless/services/CustomerService.java @@ -50,8 +50,8 @@ public CustomerListRequest> all() { /** * Retrieves the details of an existing customer. */ - public CustomerGetRequest get(String identity) { - return new CustomerGetRequest<>(httpClient, GetRequest.jsonExecutor(), identity); + public CustomerGetRequest get(String identity) { + return new CustomerGetRequest(httpClient, identity); } /** @@ -387,13 +387,12 @@ public Map getQueryParams() { * * Retrieves the details of an existing customer. */ - public static final class CustomerGetRequest extends GetRequest { + public static final class CustomerGetRequest extends GetRequest { @PathParam private final String identity; - private CustomerGetRequest(HttpClient httpClient, GetRequestExecutor executor, - String identity) { - super(httpClient, executor); + private CustomerGetRequest(HttpClient httpClient, String identity) { + super(httpClient); this.identity = identity; } diff --git a/src/main/java/com/gocardless/services/EventService.java b/src/main/java/com/gocardless/services/EventService.java index 537e47b5..066e1a73 100644 --- a/src/main/java/com/gocardless/services/EventService.java +++ b/src/main/java/com/gocardless/services/EventService.java @@ -42,8 +42,8 @@ public EventListRequest> all() { /** * Retrieves the details of a single event. */ - public EventGetRequest get(String identity) { - return new EventGetRequest<>(httpClient, GetRequest.jsonExecutor(), identity); + public EventGetRequest get(String identity) { + return new EventGetRequest(httpClient, identity); } /** @@ -377,13 +377,12 @@ public Map getQueryParams() { * * Retrieves the details of a single event. */ - public static final class EventGetRequest extends GetRequest { + public static final class EventGetRequest extends GetRequest { @PathParam private final String identity; - private EventGetRequest(HttpClient httpClient, GetRequestExecutor executor, - String identity) { - super(httpClient, executor); + private EventGetRequest(HttpClient httpClient, String identity) { + super(httpClient); this.identity = identity; } diff --git a/src/main/java/com/gocardless/services/MandateService.java b/src/main/java/com/gocardless/services/MandateService.java index b55c2666..3a12399b 100644 --- a/src/main/java/com/gocardless/services/MandateService.java +++ b/src/main/java/com/gocardless/services/MandateService.java @@ -1,6 +1,5 @@ package com.gocardless.services; -import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -65,13 +64,8 @@ public MandateListRequest> all() { * 639-1](http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes#Partial_ISO_639_table) language code * as an `Accept-Language` header. */ - public MandateGetRequest get(String identity) { - return new MandateGetRequest<>(httpClient, GetRequest.jsonExecutor(), identity); - } - - public MandateGetRequest download(String identity) { - return new MandateGetRequest<>(httpClient, - GetRequest.downloadExecutor("application/pdf"), identity); + public MandateGetRequest get(String identity) { + return new MandateGetRequest(httpClient, identity); } /** @@ -178,9 +172,9 @@ public MandateCreateRequest withReference(String reference) { } /** - * Direct Debit scheme to which this mandate and associated payments are submitted. Can be supplied - * or automatically detected from the customer's bank account. Currently only "bacs" and "sepa_core" - * are supported. + * Direct Debit scheme to which this mandate and associated payments + * are submitted. Can be supplied or automatically detected from the customer's bank account. + * Currently only "bacs" and "sepa_core" are supported. */ public MandateCreateRequest withScheme(String scheme) { this.scheme = scheme; @@ -395,13 +389,12 @@ public String toString() { * 639-1](http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes#Partial_ISO_639_table) language code * as an `Accept-Language` header. */ - public static final class MandateGetRequest extends GetRequest { + public static final class MandateGetRequest extends GetRequest { @PathParam private final String identity; - private MandateGetRequest(HttpClient httpClient, GetRequestExecutor executor, - String identity) { - super(httpClient, executor); + private MandateGetRequest(HttpClient httpClient, String identity) { + super(httpClient); this.identity = identity; } diff --git a/src/main/java/com/gocardless/services/ModulusCheckService.java b/src/main/java/com/gocardless/services/ModulusCheckService.java new file mode 100644 index 00000000..23efd987 --- /dev/null +++ b/src/main/java/com/gocardless/services/ModulusCheckService.java @@ -0,0 +1,120 @@ +package com.gocardless.services; + +import com.gocardless.http.*; +import com.gocardless.resources.ModulusCheck; + +/** + * Service class for working with modulus check resources. + * + * Check whether an account number and bank / branch code combination are compatible. + */ +public class ModulusCheckService { + private HttpClient httpClient; + + /** + * Constructor. Users of this library should have no need to call this - an instance + * of this class can be obtained by calling + {@link com.gocardless.GoCardlessClient#modulusChecks() }. + */ + public ModulusCheckService(HttpClient httpClient) { + this.httpClient = httpClient; + } + + /** + * Performs a modulus check. + * + * Bank account details may be supplied using [local + * details](#ui-local-bank-details) or an IBAN. + */ + public ModulusCheckCreateRequest create() { + return new ModulusCheckCreateRequest(httpClient); + } + + /** + * Request class for {@link ModulusCheckService#create }. + * + * Performs a modulus check. + * + * Bank account details may be supplied using [local + * details](#ui-local-bank-details) or an IBAN. + */ + public static final class ModulusCheckCreateRequest extends PostRequest { + private String accountNumber; + private String bankCode; + private String branchCode; + private String countryCode; + private String iban; + + /** + * Bank account number - see [local + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more + * information. Alternatively you can provide an `iban`. + */ + public ModulusCheckCreateRequest withAccountNumber(String accountNumber) { + this.accountNumber = accountNumber; + return this; + } + + /** + * Bank code - see [local + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more + * information. Alternatively you can provide an `iban`. + */ + public ModulusCheckCreateRequest withBankCode(String bankCode) { + this.bankCode = bankCode; + return this; + } + + /** + * Branch code - see [local + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details) for more + * information. Alternatively you can provide an `iban`. + */ + public ModulusCheckCreateRequest withBranchCode(String branchCode) { + this.branchCode = branchCode; + return this; + } + + /** + * [ISO 3166-1](http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements) + * alpha-2 code. Must be provided if specifying local details. + */ + public ModulusCheckCreateRequest withCountryCode(String countryCode) { + this.countryCode = countryCode; + return this; + } + + /** + * International Bank Account Number. Alternatively you can provide [local + * details](https://developer.gocardless.com/pro/2015-04-29/#ui-local-bank-details). + */ + public ModulusCheckCreateRequest withIban(String iban) { + this.iban = iban; + return this; + } + + private ModulusCheckCreateRequest(HttpClient httpClient) { + super(httpClient); + } + + @Override + protected String getPathTemplate() { + return "/modulus_checks"; + } + + @Override + protected String getEnvelope() { + return "modulus_checks"; + } + + @Override + protected Class getResponseClass() { + return ModulusCheck.class; + } + + @Override + protected boolean hasBody() { + return true; + } + } +} diff --git a/src/main/java/com/gocardless/services/PaymentService.java b/src/main/java/com/gocardless/services/PaymentService.java index f36fb108..156a025d 100644 --- a/src/main/java/com/gocardless/services/PaymentService.java +++ b/src/main/java/com/gocardless/services/PaymentService.java @@ -59,8 +59,8 @@ public PaymentListRequest> all() { /** * Retrieves the details of a single existing payment. */ - public PaymentGetRequest get(String identity) { - return new PaymentGetRequest<>(httpClient, GetRequest.jsonExecutor(), identity); + public PaymentGetRequest get(String identity) { + return new PaymentGetRequest(httpClient, identity); } /** @@ -340,7 +340,7 @@ public PaymentListRequest withLimit(Integer limit) { } /** - * Unique identifier, beginning with "MD" + * Unique identifier, beginning with "MD". */ public PaymentListRequest withMandate(String mandate) { this.mandate = mandate; @@ -371,7 +371,7 @@ public PaymentListRequest withStatus(Status status) { } /** - * Unique identifier, beginning with "SB" + * Unique identifier, beginning with "SB". */ public PaymentListRequest withSubscription(String subscription) { this.subscription = subscription; @@ -499,13 +499,12 @@ public Map getQueryParams() { * * Retrieves the details of a single existing payment. */ - public static final class PaymentGetRequest extends GetRequest { + public static final class PaymentGetRequest extends GetRequest { @PathParam private final String identity; - private PaymentGetRequest(HttpClient httpClient, GetRequestExecutor executor, - String identity) { - super(httpClient, executor); + private PaymentGetRequest(HttpClient httpClient, String identity) { + super(httpClient); this.identity = identity; } diff --git a/src/main/java/com/gocardless/services/PayoutService.java b/src/main/java/com/gocardless/services/PayoutService.java index c4a37930..49ce8ede 100644 --- a/src/main/java/com/gocardless/services/PayoutService.java +++ b/src/main/java/com/gocardless/services/PayoutService.java @@ -44,8 +44,8 @@ public PayoutListRequest> all() { * Retrieves the details of a single payout. For an example of how to reconcile the transactions in a * payout, see [this guide](#events-fetching-events-for-a-payout). */ - public PayoutGetRequest get(String identity) { - return new PayoutGetRequest<>(httpClient, GetRequest.jsonExecutor(), identity); + public PayoutGetRequest get(String identity) { + return new PayoutGetRequest(httpClient, identity); } /** @@ -83,7 +83,7 @@ public PayoutListRequest withCreditor(String creditor) { } /** - * Unique identifier, beginning with "BA" + * Unique identifier, beginning with "BA". */ public PayoutListRequest withCreditorBankAccount(String creditorBankAccount) { this.creditorBankAccount = creditorBankAccount; @@ -163,13 +163,12 @@ public String toString() { * Retrieves the details of a single payout. For an example of how to reconcile the transactions in a * payout, see [this guide](#events-fetching-events-for-a-payout). */ - public static final class PayoutGetRequest extends GetRequest { + public static final class PayoutGetRequest extends GetRequest { @PathParam private final String identity; - private PayoutGetRequest(HttpClient httpClient, GetRequestExecutor executor, - String identity) { - super(httpClient, executor); + private PayoutGetRequest(HttpClient httpClient, String identity) { + super(httpClient); this.identity = identity; } diff --git a/src/main/java/com/gocardless/services/RedirectFlowService.java b/src/main/java/com/gocardless/services/RedirectFlowService.java index f1809727..5cea407d 100644 --- a/src/main/java/com/gocardless/services/RedirectFlowService.java +++ b/src/main/java/com/gocardless/services/RedirectFlowService.java @@ -63,9 +63,8 @@ public RedirectFlowCreateRequest create() { /** * Returns all details about a single redirect flow */ - public RedirectFlowGetRequest get(String identity) { - return new RedirectFlowGetRequest<>(httpClient, GetRequest.jsonExecutor(), - identity); + public RedirectFlowGetRequest get(String identity) { + return new RedirectFlowGetRequest(httpClient, identity); } /** @@ -202,13 +201,12 @@ public Links withCreditor(String creditor) { * * Returns all details about a single redirect flow */ - public static final class RedirectFlowGetRequest extends GetRequest { + public static final class RedirectFlowGetRequest extends GetRequest { @PathParam private final String identity; - private RedirectFlowGetRequest(HttpClient httpClient, - GetRequestExecutor executor, String identity) { - super(httpClient, executor); + private RedirectFlowGetRequest(HttpClient httpClient, String identity) { + super(httpClient); this.identity = identity; } diff --git a/src/main/java/com/gocardless/services/RefundService.java b/src/main/java/com/gocardless/services/RefundService.java index 9d148ef2..7e403c56 100644 --- a/src/main/java/com/gocardless/services/RefundService.java +++ b/src/main/java/com/gocardless/services/RefundService.java @@ -16,14 +16,12 @@ * Refund objects represent (partial) refunds of a [payment](#core-endpoints-payment) back to the * [customer](#core-endpoints-customers). * - * The API allows you to create, show, list and update - * your refunds. + * GoCardless will notify you via a [webhook](#webhooks) + * whenever a refund is created, and will update the `amount_refunded` property of the payment. * - * GoCardless will notify you via a [webhook](#webhooks) whenever a refund is - * created, and will update the `amount_refunded` property of the payment. - * - * _Note:_ A payment - * that has been (partially) refunded can still receive a late failure or chargeback from the banks. + * + * _Note:_ A payment that has been (partially) refunded can still receive a late failure or + * chargeback from the banks. */ public class RefundService { private HttpClient httpClient; @@ -74,8 +72,8 @@ public RefundListRequest> all() { /** * Retrieves all details for a single refund */ - public RefundGetRequest get(String identity) { - return new RefundGetRequest<>(httpClient, GetRequest.jsonExecutor(), identity); + public RefundGetRequest get(String identity) { + return new RefundGetRequest(httpClient, identity); } /** @@ -235,7 +233,7 @@ public RefundListRequest withLimit(Integer limit) { } /** - * Unique identifier, beginning with "PM" + * Unique identifier, beginning with "PM". */ public RefundListRequest withPayment(String payment) { this.payment = payment; @@ -277,13 +275,12 @@ protected TypeToken> getTypeToken() { * * Retrieves all details for a single refund */ - public static final class RefundGetRequest extends GetRequest { + public static final class RefundGetRequest extends GetRequest { @PathParam private final String identity; - private RefundGetRequest(HttpClient httpClient, GetRequestExecutor executor, - String identity) { - super(httpClient, executor); + private RefundGetRequest(HttpClient httpClient, String identity) { + super(httpClient); this.identity = identity; } diff --git a/src/main/java/com/gocardless/services/SubscriptionService.java b/src/main/java/com/gocardless/services/SubscriptionService.java index b7bd1903..f52d43fa 100644 --- a/src/main/java/com/gocardless/services/SubscriptionService.java +++ b/src/main/java/com/gocardless/services/SubscriptionService.java @@ -107,9 +107,8 @@ public SubscriptionListRequest> all() { /** * Retrieves the details of a single subscription. */ - public SubscriptionGetRequest get(String identity) { - return new SubscriptionGetRequest<>(httpClient, GetRequest.jsonExecutor(), - identity); + public SubscriptionGetRequest get(String identity) { + return new SubscriptionGetRequest(httpClient, identity); } /** @@ -178,7 +177,7 @@ public SubscriptionCreateRequest withCurrency(String currency) { /** * As per RFC 2445. The day of the month to charge customers on. `1`-`28` or `-1` to indicate the - * last day of the month + * last day of the month. */ public SubscriptionCreateRequest withDayOfMonth(Integer dayOfMonth) { this.dayOfMonth = dayOfMonth; @@ -259,7 +258,8 @@ public SubscriptionCreateRequest withMonth(Month month) { } /** - * Optional name for the subscription. This field must not exceed 255 characters. + * Optional name for the subscription. This will be set as the description on each payment created. + * Must not exceed 255 characters. */ public SubscriptionCreateRequest withName(String name) { this.name = name; @@ -397,7 +397,7 @@ public SubscriptionListRequest withLimit(Integer limit) { } /** - * Unique identifier, beginning with "MD" + * Unique identifier, beginning with "MD". */ public SubscriptionListRequest withMandate(String mandate) { this.mandate = mandate; @@ -443,13 +443,12 @@ protected TypeToken> getTypeToken() { * * Retrieves the details of a single subscription. */ - public static final class SubscriptionGetRequest extends GetRequest { + public static final class SubscriptionGetRequest extends GetRequest { @PathParam private final String identity; - private SubscriptionGetRequest(HttpClient httpClient, - GetRequestExecutor executor, String identity) { - super(httpClient, executor); + private SubscriptionGetRequest(HttpClient httpClient, String identity) { + super(httpClient); this.identity = identity; } @@ -510,7 +509,8 @@ public SubscriptionUpdateRequest withMetadata(String key, String value) { } /** - * Optional name for the subscription. This field must not exceed 255 characters. + * Optional name for the subscription. This will be set as the description on each payment created. + * Must not exceed 255 characters. */ public SubscriptionUpdateRequest withName(String name) { this.name = name; diff --git a/src/test/java/com/gocardless/GoCardlessClientTest.java b/src/test/java/com/gocardless/GoCardlessClientTest.java index e56a735e..866afb62 100644 --- a/src/test/java/com/gocardless/GoCardlessClientTest.java +++ b/src/test/java/com/gocardless/GoCardlessClientTest.java @@ -1,18 +1,16 @@ package com.gocardless; -import java.io.IOException; -import java.io.InputStream; import java.util.List; import co.freeside.betamax.Betamax; import co.freeside.betamax.Recorder; +import com.gocardless.http.HttpResponse; import com.gocardless.http.HttpTestUtil; import com.gocardless.http.ListResponse; import com.gocardless.resources.*; import com.google.common.collect.Lists; -import com.google.common.io.ByteStreams; import org.junit.Before; import org.junit.Rule; @@ -47,6 +45,18 @@ public void shouldGetACustomer() { assertThat(customer.getGivenName()).isEqualTo("Frank"); } + @Test + @Betamax(tape = "get a customer wrapped") + public void shouldGetACustomerWrapped() { + HttpResponse response = client.customers().get("CU00003068FG73").executeWrapped(); + assertThat(response.getStatusCode()).isEqualTo(200); + assertThat(response.getHeaders().get("RateLimit-Limit")).containsExactly("1000"); + Customer customer = response.getResource(); + assertThat(customer.getId()).isEqualTo("CU00003068FG73"); + assertThat(customer.getFamilyName()).isEqualTo("Osborne"); + assertThat(customer.getGivenName()).isEqualTo("Frank"); + } + @Test @Betamax(tape = "list customers") public void shouldListCustomers() { @@ -169,12 +179,4 @@ public void shouldCreateASubscription() { .withIntervalUnit(MONTHLY).withLinksMandate("MD00001PEYCSQF").execute(); assertThat(subscription.getId()).isNotNull(); } - - @Test - @Betamax(tape = "download a mandate") - public void shouldDownloadAMandate() throws IOException { - InputStream mandate = client.mandates().download("MD00001PEYCSQF").execute(); - byte[] pdf = ByteStreams.toByteArray(mandate); - assertThat(pdf).isNotEmpty(); - } } diff --git a/src/test/java/com/gocardless/http/GetRequestTest.java b/src/test/java/com/gocardless/http/GetRequestTest.java index 1b8b97ad..22332adf 100644 --- a/src/test/java/com/gocardless/http/GetRequestTest.java +++ b/src/test/java/com/gocardless/http/GetRequestTest.java @@ -1,24 +1,21 @@ package com.gocardless.http; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; - import com.gocardless.errors.InvalidApiUsageException; +import com.gocardless.http.HttpResponse; import com.gocardless.http.HttpTestUtil.DummyItem; import com.google.common.collect.ImmutableMap; -import com.google.common.io.CharStreams; +import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import static com.xebialabs.restito.builder.stub.StubHttp.whenHttp; +import static com.xebialabs.restito.semantics.Action.header; import static com.xebialabs.restito.semantics.Action.resourceContent; import static com.xebialabs.restito.semantics.Action.status; import static com.xebialabs.restito.semantics.Condition.get; -import static com.xebialabs.restito.semantics.Condition.withHeader; import static org.assertj.core.api.Assertions.assertThat; @@ -30,24 +27,31 @@ public class GetRequestTest { public MockHttp http = new MockHttp(); @Rule public ExpectedException exception = ExpectedException.none(); + private GetRequest request; + + @Before + public void setUp() throws Exception { + request = new DummyGetRequest(); + } @Test public void shouldPerformGetRequest() { whenHttp(http.server()).match(get("/dummy/123")).then(status(OK_200), resourceContent("fixtures/single.json")); - DummyGetRequest request = DummyGetRequest.jsonRequest(http.client()); DummyItem result = request.execute(); assertThat(result.stringField).isEqualTo("foo"); assertThat(result.intField).isEqualTo(123); } @Test - public void shouldPerformDownloadRequest() throws IOException { - whenHttp(http.server()).match(get("/dummy/123"), withHeader("Accept", "text/plain")).then( - status(OK_200), resourceContent("fixtures/hello.txt")); - DummyGetRequest request = DummyGetRequest.downloadRequest(http.client()); - String result = CharStreams.toString(new InputStreamReader(request.execute())); - assertThat(result.trim()).isEqualTo("hello"); + public void shouldPerformWrappedGetRequest() { + whenHttp(http.server()).match(get("/dummy/123")).then(status(OK_200), + resourceContent("fixtures/single.json"), header("foo", "bar")); + HttpResponse result = request.executeWrapped(); + assertThat(result.getStatusCode()).isEqualTo(200); + assertThat(result.getHeaders().get("foo")).containsExactly("bar"); + assertThat(result.getResource().stringField).isEqualTo("foo"); + assertThat(result.getResource().intField).isEqualTo(123); } @Test @@ -56,13 +60,12 @@ public void shouldThrowOnApiError() { resourceContent("fixtures/invalid_api_usage.json")); exception.expect(InvalidApiUsageException.class); exception.expectMessage("Invalid document structure"); - DummyGetRequest request = DummyGetRequest.jsonRequest(http.client()); request.execute(); } - private static class DummyGetRequest extends GetRequest { - private DummyGetRequest(HttpClient httpClient, GetRequestExecutor executor) { - super(httpClient, executor); + private class DummyGetRequest extends GetRequest { + public DummyGetRequest() { + super(http.client()); } @Override @@ -84,14 +87,5 @@ protected String getEnvelope() { protected Class getResponseClass() { return DummyItem.class; } - - static DummyGetRequest jsonRequest(HttpClient httpClient) { - return new DummyGetRequest<>(httpClient, GetRequest.jsonExecutor()); - } - - static DummyGetRequest downloadRequest(HttpClient httpClient) { - return new DummyGetRequest<>(httpClient, - GetRequest.downloadExecutor("text/plain")); - } } } diff --git a/src/test/java/com/gocardless/http/PostRequestTest.java b/src/test/java/com/gocardless/http/PostRequestTest.java index 48e06360..4791bec9 100644 --- a/src/test/java/com/gocardless/http/PostRequestTest.java +++ b/src/test/java/com/gocardless/http/PostRequestTest.java @@ -10,6 +10,7 @@ import static com.gocardless.http.HttpTestUtil.withJsonBody; import static com.xebialabs.restito.builder.stub.StubHttp.whenHttp; +import static com.xebialabs.restito.semantics.Action.header; import static com.xebialabs.restito.semantics.Action.resourceContent; import static com.xebialabs.restito.semantics.Action.status; import static com.xebialabs.restito.semantics.Condition.*; @@ -40,6 +41,19 @@ public void shouldPerformPostRequestWithBody() { assertThat(result.intField).isEqualTo(123); } + @Test + public void shouldPerformWrappedPostRequest() { + whenHttp(http.server()).match(post("/dummy"), not(withPostBody())).then( + status(HttpStatus.OK_200), resourceContent("fixtures/single.json"), + header("foo", "bar")); + DummyPostRequest request = new DummyPostRequest(); + HttpResponse result = request.executeWrapped(); + assertThat(result.getStatusCode()).isEqualTo(200); + assertThat(result.getHeaders().get("foo")).containsExactly("bar"); + assertThat(result.getResource().stringField).isEqualTo("foo"); + assertThat(result.getResource().intField).isEqualTo(123); + } + private class DummyPostRequest extends PostRequest { public DummyPostRequest() { super(http.client()); diff --git a/src/test/java/com/gocardless/http/PutRequestTest.java b/src/test/java/com/gocardless/http/PutRequestTest.java index be841bd6..c6e24427 100644 --- a/src/test/java/com/gocardless/http/PutRequestTest.java +++ b/src/test/java/com/gocardless/http/PutRequestTest.java @@ -10,6 +10,7 @@ import static com.gocardless.http.HttpTestUtil.withJsonBody; import static com.xebialabs.restito.builder.stub.StubHttp.whenHttp; +import static com.xebialabs.restito.semantics.Action.header; import static com.xebialabs.restito.semantics.Action.resourceContent; import static com.xebialabs.restito.semantics.Action.status; import static com.xebialabs.restito.semantics.Condition.*; @@ -40,6 +41,18 @@ public void shouldPerformPutRequestWithBody() { assertThat(result.intField).isEqualTo(123); } + public void shouldPerformWrappedPutRequest() { + whenHttp(http.server()).match(put("/dummy"), not(withPostBody())).then( + status(HttpStatus.OK_200), resourceContent("fixtures/single.json"), + header("foo", "bar")); + DummyPutRequest request = new DummyPutRequest(); + HttpResponse result = request.executeWrapped(); + assertThat(result.getStatusCode()).isEqualTo(200); + assertThat(result.getHeaders().get("foo")).containsExactly("bar"); + assertThat(result.getResource().stringField).isEqualTo("foo"); + assertThat(result.getResource().intField).isEqualTo(123); + } + private class DummyPutRequest extends PutRequest { public DummyPutRequest() { super(http.client()); diff --git a/src/test/java/com/gocardless/http/ResponseParserTest.java b/src/test/java/com/gocardless/http/ResponseParserTest.java index cfa7289c..8c980644 100644 --- a/src/test/java/com/gocardless/http/ResponseParserTest.java +++ b/src/test/java/com/gocardless/http/ResponseParserTest.java @@ -1,7 +1,7 @@ package com.gocardless.http; import java.io.IOException; -import java.io.InputStream; +import java.io.Reader; import java.net.URL; import java.util.List; @@ -15,7 +15,8 @@ import static com.gocardless.errors.ErrorType.*; -import static com.google.common.io.Resources.asByteSource; +import static com.google.common.base.Charsets.UTF_8; +import static com.google.common.io.Resources.asCharSource; import static com.google.common.io.Resources.getResource; import static org.assertj.core.api.Assertions.assertThat; @@ -31,8 +32,8 @@ public void setUp() { @Test public void shouldParseSingle() throws IOException { URL resource = getResource("fixtures/single.json"); - InputStream stream = asByteSource(resource).openStream(); - DummyItem result = parser.parseSingle(stream, "items", DummyItem.class); + Reader reader = asCharSource(resource, UTF_8).openStream(); + DummyItem result = parser.parseSingle(reader, "items", DummyItem.class); assertThat(result.stringField).isEqualTo("foo"); assertThat(result.intField).isEqualTo(123); } @@ -40,9 +41,9 @@ public void shouldParseSingle() throws IOException { @Test public void shouldParsePage() throws IOException { URL resource = getResource("fixtures/page.json"); - InputStream stream = asByteSource(resource).openStream(); + Reader reader = asCharSource(resource, UTF_8).openStream(); ListResponse result = - parser.parsePage(stream, "items", new TypeToken>() {}); + parser.parsePage(reader, "items", new TypeToken>() {}); assertThat(result.getItems()).hasSize(2); assertThat(result.getItems().get(0).stringField).isEqualTo("foo"); assertThat(result.getItems().get(0).intField).isEqualTo(123); @@ -56,8 +57,8 @@ public void shouldParsePage() throws IOException { @Test public void shouldParseInvalidApiUsageError() throws IOException { URL resource = getResource("fixtures/invalid_api_usage.json"); - InputStream stream = asByteSource(resource).openStream(); - GoCardlessApiException exception = parser.parseError(stream); + Reader reader = asCharSource(resource, UTF_8).openStream(); + GoCardlessApiException exception = parser.parseError(reader); assertThat(exception).isInstanceOf(InvalidApiUsageException.class); assertThat(exception.getType()).isEqualTo(INVALID_API_USAGE); assertThat(exception.getMessage()).isEqualTo("Invalid document structure"); @@ -74,8 +75,8 @@ public void shouldParseInvalidApiUsageError() throws IOException { @Test public void shouldParseInvalidStateError() throws IOException { URL resource = getResource("fixtures/invalid_state.json"); - InputStream stream = asByteSource(resource).openStream(); - GoCardlessApiException exception = parser.parseError(stream); + Reader reader = asCharSource(resource, UTF_8).openStream(); + GoCardlessApiException exception = parser.parseError(reader); assertThat(exception).isInstanceOf(InvalidStateException.class); assertThat(exception.getType()).isEqualTo(INVALID_STATE); assertThat(exception.getMessage()).isEqualTo("Bank account already exists"); @@ -93,8 +94,8 @@ public void shouldParseInvalidStateError() throws IOException { @Test public void shouldParseValidationFailedError() throws IOException { URL resource = getResource("fixtures/validation_failed.json"); - InputStream stream = asByteSource(resource).openStream(); - GoCardlessApiException exception = parser.parseError(stream); + Reader reader = asCharSource(resource, UTF_8).openStream(); + GoCardlessApiException exception = parser.parseError(reader); assertThat(exception).isInstanceOf(ValidationFailedException.class); assertThat(exception.getType()).isEqualTo(VALIDATION_FAILED); assertThat(exception.getMessage()).isEqualTo("Validation failed"); @@ -114,8 +115,8 @@ public void shouldParseValidationFailedError() throws IOException { @Test public void shouldParseInternalError() throws IOException { URL resource = getResource("fixtures/internal_error.json"); - InputStream stream = asByteSource(resource).openStream(); - GoCardlessApiException exception = parser.parseError(stream); + Reader reader = asCharSource(resource, UTF_8).openStream(); + GoCardlessApiException exception = parser.parseError(reader); assertThat(exception).isInstanceOf(GoCardlessInternalException.class); assertThat(exception.getType()).isEqualTo(GOCARDLESS); assertThat(exception.getMessage()).isEqualTo("THE BEES THEY'RE IN MY EYES"); diff --git a/src/test/resources/betamax/tapes/download_a_mandate.yaml b/src/test/resources/betamax/tapes/download_a_mandate.yaml deleted file mode 100644 index 38a21b6f..00000000 --- a/src/test/resources/betamax/tapes/download_a_mandate.yaml +++ /dev/null @@ -1,40 +0,0 @@ -!tape -name: download a mandate -interactions: -- recorded: 2015-05-15T10:24:41.491Z - request: - method: GET - uri: https://api-sandbox.gocardless.com/mandates/MD00001PEYCSQF - headers: - Accept: application/pdf - Accept-Encoding: gzip - Authorization: Bearer kwrpm3tfb80UQaFGAsEu1V4p6KhAiPtOL4IgyrrY - Connection: Keep-Alive - GoCardless-Version: '2015-04-29' - Host: api-sandbox.gocardless.com - User-Agent: gocardless-pro/0.0.1 Mac_OS_X/10.10.3 Java_HotSpot(TM)_64-Bit_Server_VM/1.8.0_45 - response: - status: 200 - headers: - CF-RAY: 1e6e227190a1138f-LHR - Cache-Control: private, no-store - Content-Disposition: inline - Content-Transfer-Encoding: binary - Content-Type: application/pdf - Date: Fri, 15 May 2015 10:24:41 GMT - ETag: W/"f596e6c696fc58e275ce4d77d674786f" - Pragma: no-cache - RateLimit-Limit: '2000' - RateLimit-Remaining: '1999' - RateLimit-Reset: Fri, 15 May 2015 10:25:00 GMT - Server: cloudflare-nginx - Set-Cookie: __cfduid=d4f58eefae3eaa72a24cd075393c9f9171431685481; expires=Sat, 14-May-16 10:24:41 GMT; path=/; domain=.gocardless.com; HttpOnly - Status: 200 OK - Strict-Transport-Security: max-age=31556926; includeSubDomains - Vary: Origin - X-Content-Type-Options: nosniff - X-Frame-Options: SAMEORIGIN - X-Request-Id: 762f3de6-ca56-48ba-8211-db92ca44e4aa - X-XSS-Protection: 1; mode=block - body: !!binary |- - JVBERi0xLjMKJf////8KMSAwIG9iago8PCAvQ3JlYXRvciA8ZmVmZjAwNTAwMDcyMDA2MTAwNzcwMDZlPgovUHJvZHVjZXIgPGZlZmYwMDUwMDA3MjAwNjEwMDc3MDA2ZT4KPj4KZW5kb2JqCjIgMCBvYmoKPDwgL1R5cGUgL0NhdGFsb2cKL1BhZ2VzIDMgMCBSCj4+CmVuZG9iagozIDAgb2JqCjw8IC9UeXBlIC9QYWdlcwovQ291bnQgMQovS2lkcyBbNSAwIFJdCj4+CmVuZG9iago0IDAgb2JqCjw8IC9MZW5ndGggMTA5NTkKPj4Kc3RyZWFtCnEKCnEKODAuMCAwLjAgMC4wIDI4LjIzNTMgNDYwLjAgNzA4Ljc2NDcgY20KL0kxIERvClEKCkJUCjU5LjAgNjgzLjg2IFRkCi9GMS4wIDE4IFRmCjw0NzZmNDM2MTcyNjQ2YzY1NzM3MzIwNTI0NTNhMjA0ZDYxNzQ3ND4gVGoKRVQKCgpCVAo1OS4wIDY2Mi40IFRkCi9GMS4wIDE4IFRmCjw1NDY4NmY2ZDczNmY2ZTIwNDk2ZTYzPiBUagpFVAoKL0RldmljZVJHQiBjcwowLjMyMiAwLjM0NSAwLjM1MyBzY24KL0RldmljZVJHQiBDUwowLjMyMiAwLjM0NSAwLjM1MyBTQ04KCkJUCjU5LjAgNjM0LjUyIFRkCi9GMS4wIDEyIFRmCjwzMTIwNTQ2NTczNzQyMDUzNzQ3MjY1NjU3NDJjMjA0YzZmNmU2NDZmNmUyYzIwNDU0MzMxNTYyMDM3NGM1MT4gVGoKRVQKCjAuMDAwIDAuMDAwIDAuMDAwIFNDTgowLjAwMCAwLjAwMCAwLjAwMCBzY24KCkJUCjMxMy4wIDY4NC4wNzkgVGQKL0YyLjAgMTcuNyBUZgo8NDk2ZTczNzQ3Mjc1NjM3NDY5NmY2ZTIwNzQ2ZjIwNzk2Zjc1NzIyMDYyNjE2ZTZiPiBUagpFVAoKCkJUCjMxMy4wIDY1OC45MSBUZAovRjIuMCAxNy43IFRmCjw2ZjcyMjA2Mjc1Njk2YzY0Njk2ZTY3MjA3MzZmNjM2OTY1NzQ3OTIwNzQ2Zj4gVGoKRVQKCgpCVAozMTMuMCA2MzMuNzQxIFRkCi9GMi4wIDE3LjcgVGYKPDcwNjE3OTIwNjI3OTIwNDQ2OTcyNjU2Mzc0MjA0NDY1NjI2OTc0PiBUagpFVAoKCkJUCjU5LjAgNjA0LjcgVGQKL0YyLjAgMTAgVGYKPDRlNjE2ZDY1Mjg3MzI5MjA2ZjY2MjA2MTYzNjM2Zjc1NmU3NDIwNjg2ZjZjNjQ2NTcyMjg3MzI5PiBUagpFVAoKMC43NDUgMC43NzYgMC44MTYgU0NOCjYwLjAgNTU4LjUgMjIyLjQgMzguMCByZQpTCjAuMDAwIDAuMDAwIDAuMDAwIFNDTgoKQlQKNzAuMCA1NzQuMiBUZAovRjEuMCAxMCBUZgo8NGU0ZjUyNGQ0MTRjMjA1MzQxNGM0YzU5PiBUagpFVAoKCkJUCjU5LjAgNTM3LjcgVGQKL0YyLjAgMTAgVGYKPDQyNjE2ZTZiMmY0Mjc1Njk2YzY0Njk2ZTY3MjA1MzZmNjM2OTY1NzQ3OTIwNjE2MzYzNmY3NTZlNzQyMDZlNzU2ZDYyNjU3Mj4gVGoKRVQKCjAuNzQ1IDAuNzc2IDAuODE2IFNDTgo2MC4wIDQ5MS41IDIyMi40IDM4LjAgcmUKUwowLjAwMCAwLjAwMCAwLjAwMCBTQ04KCkJUCjcwLjAgNTA3LjIgVGQKL0YxLjAgMTAgVGYKPDJhMmEyYTJhMmEyYTMxMzE+IFRqCkVUCgoKQlQKNTkuMCA0NzAuNyBUZAovRjIuMCAxMCBUZgo8NDI3MjYxNmU2MzY4MjA3MzZmNzI3NDIwNjM2ZjY0NjU+IFRqCkVUCgowLjc0NSAwLjc3NiAwLjgxNiBTQ04KNjAuMCA0MjQuNSAyMjIuNCAzOC4wIHJlClMKMC4wMDAgMC4wMDAgMC4wMDAgU0NOCgpCVAo3MC4wIDQ0MC4yIFRkCi9GMS4wIDEwIFRmCjwyYTJhMmQyYTJhMmQyYTJhPiBUagpFVAoKCkJUCjU5LjAgNDAzLjcgVGQKL0YyLjAgMTAgVGYKPDRlNjE2ZDY1MjA2MTZlNjQyMDY2NzU2YzZjMjA3MDZmNzM3NDYxNmMyMDYxNjQ2NDcyNjU3MzczMjA2ZjY2MjA3OTZmNzU3Mj4gVGoKRVQKCgpCVAo1OS4wIDM5MC4wIFRkCi9GMi4wIDEwIFRmCjw0MjYxNmU2YjJmNDI3NTY5NmM2NDY5NmU2NzIwNTM2ZjYzNjk2NTc0Nzk+IFRqCkVUCgowLjc0NSAwLjc3NiAwLjgxNiBTQ04KNjAuMCAzMDguOCAyMjIuNCA3My4wIHJlClMKMC4wMDAgMC4wMDAgMC4wMDAgU0NOCgpCVAo3MC4wIDM1OS41IFRkCi9GMS4wIDEwIFRmCjw0MjQxNTI0MzRjNDE1OTUzMjA0MjQxNGU0YjIwNTA0YzQzMmMyMDRjNjU2OTYzNjU3Mzc0NjU3MjJjPiBUagpFVAoKCkJUCjcwLjAgMzQ1LjggVGQKL0YxLjAgMTAgVGYKPDRjNjU2OTYzNjU3Mzc0NjU3MjczNjg2OTcyNjUyYzIwNGM0NTM4MzcyMDMyNDI0Mj4gVGoKRVQKCgpCVAozMTIuMCA2MDQuNyBUZAovRjIuMCAxMCBUZgo8NTM2NTcyNzY2OTYzNjUyMDU1NzM2NTcyMjA0ZTc1NmQ2MjY1NzI+IFRqCkVUCgowLjc0NSAwLjc3NiAwLjgxNiBTQ04KMzEzLjAgNTU4LjUgMjIyLjQgMzguMCByZQpTCjAuMDAwIDAuMDAwIDAuMDAwIFNDTgowLjc0NSAwLjc3NiAwLjgxNiBTQ04KMzEzLjAgNTU4LjUgMzcuMDY2NyAzOC4wIHJlClMKMC4wMDAgMC4wMDAgMC4wMDAgU0NOCjAuMzIyIDAuMzQ1IDAuMzUzIHNjbgowLjMyMiAwLjM0NSAwLjM1MyBTQ04KMC4wMDAgMC4wMDAgMC4wMDAgU0NOCjAuMDAwIDAuMDAwIDAuMDAwIHNjbgowLjMyMiAwLjM0NSAwLjM1MyBzY24KMC4zMjIgMC4zNDUgMC4zNTMgU0NOCgpCVAozMjYuNzgxMyA1NjcuMjQgVGQKL0YyLjAgMjQgVGYKPDMxPiBUagpFVAoKMC4wMDAgMC4wMDAgMC4wMDAgU0NOCjAuMDAwIDAuMDAwIDAuMDAwIHNjbgowLjc0NSAwLjc3NiAwLjgxNiBTQ04KMzUwLjA2NjcgNTU4LjUgMzcuMDY2NyAzOC4wIHJlClMKMC4wMDAgMC4wMDAgMC4wMDAgU0NOCjAuMzIyIDAuMzQ1IDAuMzUzIHNjbgowLjMyMiAwLjM0NSAwLjM1MyBTQ04KMC4wMDAgMC4wMDAgMC4wMDAgU0NOCjAuMDAwIDAuMDAwIDAuMDAwIHNjbgowLjMyMiAwLjM0NSAwLjM1MyBzY24KMC4zMjIgMC4zNDUgMC4zNTMgU0NOCgpCVAozNjEuMjkyIDU2Ny4yNCBUZAovRjIuMCAyNCBUZgo8Mzc+IFRqCkVUCgowLjAwMCAwLjAwMCAwLjAwMCBTQ04KMC4wMDAgMC4wMDAgMC4wMDAgc2NuCjAuNzQ1IDAuNzc2IDAuODE2IFNDTgozODcuMTMzMyA1NTguNSAzNy4wNjY3IDM4LjAgcmUKUwowLjAwMCAwLjAwMCAwLjAwMCBTQ04KMC4zMjIgMC4zNDUgMC4zNTMgc2NuCjAuMzIyIDAuMzQ1IDAuMzUzIFNDTgowLjAwMCAwLjAwMCAwLjAwMCBTQ04KMC4wMDAgMC4wMDAgMC4wMDAgc2NuCjAuMzIyIDAuMzQ1IDAuMzUzIHNjbgowLjMyMiAwLjM0NSAwLjM1MyBTQ04KCkJUCjQwMC45MTQ3IDU2Ny4yNCBUZAovRjIuMCAyNCBUZgo8MzE+IFRqCkVUCgowLjAwMCAwLjAwMCAwLjAwMCBTQ04KMC4wMDAgMC4wMDAgMC4wMDAgc2NuCjAuNzQ1IDAuNzc2IDAuODE2IFNDTgo0MjQuMiA1NTguNSAzNy4wNjY3IDM4LjAgcmUKUwowLjAwMCAwLjAwMCAwLjAwMCBTQ04KMC4zMjIgMC4zNDUgMC4zNTMgc2NuCjAuMzIyIDAuMzQ1IDAuMzUzIFNDTgowLjAwMCAwLjAwMCAwLjAwMCBTQ04KMC4wMDAgMC4wMDAgMC4wMDAgc2NuCjAuMzIyIDAuMzQ1IDAuMzUzIHNjbgowLjMyMiAwLjM0NSAwLjM1MyBTQ04KCkJUCjQzNC41NjEzIDU2Ny4yNCBUZAovRjIuMCAyNCBUZgo8MzQ+IFRqCkVUCgowLjAwMCAwLjAwMCAwLjAwMCBTQ04KMC4wMDAgMC4wMDAgMC4wMDAgc2NuCjAuNzQ1IDAuNzc2IDAuODE2IFNDTgo0NjEuMjY2NyA1NTguNSAzNy4wNjY3IDM4LjAgcmUKUwowLjAwMCAwLjAwMCAwLjAwMCBTQ04KMC4zMjIgMC4zNDUgMC4zNTMgc2NuCjAuMzIyIDAuMzQ1IDAuMzUzIFNDTgowLjAwMCAwLjAwMCAwLjAwMCBTQ04KMC4wMDAgMC4wMDAgMC4wMDAgc2NuCjAuMzIyIDAuMzQ1IDAuMzUzIHNjbgowLjMyMiAwLjM0NSAwLjM1MyBTQ04KCkJUCjQ3Mi4zMzYgNTY3LjI0IFRkCi9GMi4wIDI0IFRmCjwzNT4gVGoKRVQKCjAuMDAwIDAuMDAwIDAuMDAwIFNDTgowLjAwMCAwLjAwMCAwLjAwMCBzY24KMC43NDUgMC43NzYgMC44MTYgU0NOCjQ5OC4zMzMzIDU1OC41IDM3LjA2NjcgMzguMCByZQpTCjAuMDAwIDAuMDAwIDAuMDAwIFNDTgowLjMyMiAwLjM0NSAwLjM1MyBzY24KMC4zMjIgMC4zNDUgMC4zNTMgU0NOCjAuMDAwIDAuMDAwIDAuMDAwIFNDTgowLjAwMCAwLjAwMCAwLjAwMCBzY24KMC4zMjIgMC4zNDUgMC4zNTMgc2NuCjAuMzIyIDAuMzQ1IDAuMzUzIFNDTgoKQlQKNTA4Ljk5NDcgNTY3LjI0IFRkCi9GMi4wIDI0IFRmCjwzNj4gVGoKRVQKCjAuMDAwIDAuMDAwIDAuMDAwIFNDTgowLjAwMCAwLjAwMCAwLjAwMCBzY24KCkJUCjMxMi4wIDUzNy43IFRkCi9GMi4wIDEwIFRmCjw1MjY1NjY2NTcyNjU2ZTYzNjU+IFRqCkVUCgowLjc0NSAwLjc3NiAwLjgxNiBTQ04KMzEzLjAgNDkxLjUgMjIyLjQgMzguMCByZQpTCjAuMDAwIDAuMDAwIDAuMDAwIFNDTgoKQlQKMzIzLjAgNTA3LjIgVGQKL0YxLjAgMTAgVGYKPDU0NDEzODQ4NDU0ZTMyPiBUagpFVAoKCkJUCjMxMy4wIDQ3MC43IFRkCi9GMi4wIDEwIFRmCjw0OTZlNzM3NDcyNzU2Mzc0Njk2ZjZlMjA3NDZmMjA3OTZmNzU3MjIwNDI2MTZlNmIyMDZmNzIyMDQyNzU2OTZjNjQ2OTZlNjcyMDUzNmY2MzY5NjU3NDc5PiBUagpFVAoKMC4zMjIgMC4zNDUgMC4zNTMgc2NuCjAuMzIyIDAuMzQ1IDAuMzUzIFNDTgoKQlQKMzEzLjAgNDU3LjIzIFRkCi9GMS4wIDkgVGYKPDUwNmM2NTYxNzM2NTIwNzA2MTc5MjA0NzZmNDM2MTcyNjQ2YzY1NzM3MzIwNTI0NTNhMjA0ZDYxNzQ3NDIwNTQ2ODZmNmQ3MzZmNmUyMDQ5NmU2Mz4gVGoKRVQKCjAuMDAwIDAuMDAwIDAuMDAwIFNDTgowLjAwMCAwLjAwMCAwLjAwMCBzY24KMC4zMjIgMC4zNDUgMC4zNTMgc2NuCjAuMzIyIDAuMzQ1IDAuMzUzIFNDTgoKQlQKMzEzLjAgNDQzLjAgVGQKL0YxLjAgOSBUZgo8NDQ2OTcyNjU2Mzc0MjA0NDY1NjI2OTc0NzMyMDY2NzI2ZjZkMjA3NDY4NjUyMDYxNjM2MzZmNzU2ZTc0MjA2NDY1NzQ2MTY5NmM2NTY0MjA2OTZlMjA3NDY4Njk3Mz4gVGoKRVQKCjAuMDAwIDAuMDAwIDAuMDAwIFNDTgowLjAwMCAwLjAwMCAwLjAwMCBzY24KMC4zMjIgMC4zNDUgMC4zNTMgc2NuCjAuMzIyIDAuMzQ1IDAuMzUzIFNDTgoKQlQKMzEzLjAgNDI4Ljc3IFRkCi9GMS4wIDkgVGYKPDQ5NmU3Mzc0NzI3NTYzNzQ2OTZmNmUyMDczNzU2MjZhNjU2Mzc0MjA3NDZmMjA3NDY4NjUyMDczNjE2NjY1Njc3NTYxNzI2NDczMjA2MTczNzM3NTcyNjU2NDIwNjI3OT4gVGoKRVQKCjAuMDAwIDAuMDAwIDAuMDAwIFNDTgowLjAwMCAwLjAwMCAwLjAwMCBzY24KMC4zMjIgMC4zNDUgMC4zNTMgc2NuCjAuMzIyIDAuMzQ1IDAuMzUzIFNDTgoKQlQKMzEzLjAgNDE0LjU0IFRkCi9GMS4wIDkgVGYKPDc0Njg2NTIwNDQ2OTcyNjU2Mzc0MjA0NDY1NjI2OTc0MjA0Nzc1NjE3MjYxNmU3NDY1NjUyZTIwNDkyMDc1NmU2NDY1NzI3Mzc0NjE2ZTY0MjA3NDY4NjE3NDIwNzQ2ODY5NzM+IFRqCkVUCgowLjAwMCAwLjAwMCAwLjAwMCBTQ04KMC4wMDAgMC4wMDAgMC4wMDAgc2NuCjAuMzIyIDAuMzQ1IDAuMzUzIHNjbgowLjMyMiAwLjM0NSAwLjM1MyBTQ04KCkJUCjMxMy4wIDQwMC4zMSBUZAovRjEuMCA5IFRmCjw2OTZlNzM3NDcyNzU2Mzc0Njk2ZjZlMjA2ZDYxNzkyMDcyNjU2ZDYxNjk2ZTIwNzc2OTc0NjgyMDQ3NmY0MzYxNzI2NDZjNjU3MzczMjA1MjQ1M2EyMDRkNjE3NDc0PiBUagpFVAoKMC4wMDAgMC4wMDAgMC4wMDAgU0NOCjAuMDAwIDAuMDAwIDAuMDAwIHNjbgowLjMyMiAwLjM0NSAwLjM1MyBzY24KMC4zMjIgMC4zNDUgMC4zNTMgU0NOCgpCVAozMTMuMCAzODYuMDggVGQKL0YxLjAgOSBUZgo8NTQ2ODZmNmQ3MzZmNmUyMDQ5NmU2MzIwNjE2ZTY0MmMyMDY5NjYyMDczNmYyYzIwNjQ2NTc0NjE2OTZjNzMyMDc3Njk2YzZjMjA2MjY1MjA3MDYxNzM3MzY1NjQ+IFRqCkVUCgowLjAwMCAwLjAwMCAwLjAwMCBTQ04KMC4wMDAgMC4wMDAgMC4wMDAgc2NuCjAuMzIyIDAuMzQ1IDAuMzUzIHNjbgowLjMyMiAwLjM0NSAwLjM1MyBTQ04KCkJUCjMxMy4wIDM3MS44NSBUZAovRjEuMCA5IFRmCjw2NTZjNjU2Mzc0NzI2ZjZlNjk2MzYxNmM2Yzc5MjA3NDZmMjA2ZDc5MjA2MjYxNmU2YjJmNjI3NTY5NmM2NDY5NmU2NzIwNzM2ZjYzNjk2NTc0NzkyZT4gVGoKRVQKCjAuMDAwIDAuMDAwIDAuMDAwIFNDTgowLjAwMCAwLjAwMCAwLjAwMCBzY24KCkJUCjMxMi4wIDM1NS43IFRkCi9GMi4wIDEwIFRmCjw0NDYxNzQ2NT4gVGoKRVQKCjAuNzQ1IDAuNzc2IDAuODE2IFNDTgozMTMuMCAzMDkuNSAyMjIuNCAzOC4wIHJlClMKMC4wMDAgMC4wMDAgMC4wMDAgU0NOCgpCVAozMjMuMCAzMjUuMiBUZAovRjEuMCAxMCBUZgo8MzIzMDMxMzUyZDMwMzMyZDMzMzA+IFRqCkVUCgowLjczMyAwLjczMyAwLjczMyBzY24KMC43MzMgMC43MzMgMC43MzMgU0NOCgpCVAoxMTQuMTE2IDI4OC42NiBUZAovRjEuMCA4IFRmCjw0MjYxNmU2YjczMjA2MTZlNjQyMDYyNzU2OTZjNjQ2OTZlNjcyMDczNmY2MzY5NjU3NDY5NjU3MzIwNmQ2MTc5MjA2ZTZmNzQyMDYxNjM2MzY1NzA3NDIwNDQ2OTcyNjU2Mzc0MjA0NDY1NjI2OTc0MjA0OTZlNzM3NDcyNzU2Mzc0Njk2ZjZlNzMyMDY2NmY3MjIwNzM2ZjZkNjUyMDc0Nzk3MDY1NzMyMDZmNjYyMDYxNjM2MzZmNzU2ZTc0PiBUagpFVAoKMC4wMDAgMC4wMDAgMC4wMDAgU0NOCjAuMDAwIDAuMDAwIDAuMDAwIHNjbgowLjc0NSAwLjc2MSAwLjgwMCBTQ04KNjAuMCAyNjUuMCBtCjUzNS40IDI2NS4wIGwKUwowLjAwMCAwLjAwMCAwLjAwMCBTQ04KCkJUCjYwLjAgMjM0Ljc4IFRkCi9GMi4wIDE0IFRmCjw1NDY4NjUyMDQ0Njk3MjY1NjM3NDIwNDQ2NTYyNjk3NDIwNDc3NTYxNzI2MTZlNzQ2NTY1PiBUagpFVAoKCnEKODAuMCAwLjAgMC4wIDI4LjIzNTMgNDYwLjAgMjI1Ljc2NDcgY20KL0kyIERvClEKMC40NTkgMC40NzUgMC40ODIgc2NuCjY4LjYgMjEwLjAgbQo2OC42IDIxMC44ODM3IDY3Ljg4MzcgMjExLjYgNjcuMCAyMTEuNiBjCjY2LjExNjMgMjExLjYgNjUuNCAyMTAuODgzNyA2NS40IDIxMC4wIGMKNjUuNCAyMDkuMTE2MyA2Ni4xMTYzIDIwOC40IDY3LjAgMjA4LjQgYwo2Ny44ODM3IDIwOC40IDY4LjYgMjA5LjExNjMgNjguNiAyMTAuMCBjCjY3LjAgMjEwLjAgbQpmCjAuMDAwIDAuMDAwIDAuMDAwIHNjbgowLjQ1OSAwLjQ3NSAwLjQ4MiBzY24KMC40NTkgMC40NzUgMC40ODIgU0NOCgpCVAo3NS4wIDIwNy4xNiBUZAovRjEuMCA4IFRmCjw1NDY4Njk3MzIwNDc3NTYxNzI2MTZlNzQ2NTY1MjA2OTczMjA2ZjY2NjY2NTcyNjU2NDIwNjI3OTIwNjE2YzZjMjA2MjYxNmU2YjczMjA2MTZlNjQyMDYyNzU2OTZjNjQ2OTZlNjcyMDczNmY2MzY5NjU3NDY5NjU3MzIwNzQ2ODYxNzQyMDYxNjM2MzY1NzA3NDIwNjk2ZTczNzQ3Mjc1NjM3NDY5NmY2ZTczMjA3NDZmMjA3MDYxNzkyMDQ0Njk3MjY1NjM3NDIwNDQ2NTYyNjk3NDczMmU+IFRqCkVUCgowLjAwMCAwLjAwMCAwLjAwMCBTQ04KMC4wMDAgMC4wMDAgMC4wMDAgc2NuCjAuNDU5IDAuNDc1IDAuNDgyIHNjbgo2OC42IDE5My4yNCBtCjY4LjYgMTk0LjEyMzcgNjcuODgzNyAxOTQuODQgNjcuMCAxOTQuODQgYwo2Ni4xMTYzIDE5NC44NCA2NS40IDE5NC4xMjM3IDY1LjQgMTkzLjI0IGMKNjUuNCAxOTIuMzU2MyA2Ni4xMTYzIDE5MS42NCA2Ny4wIDE5MS42NCBjCjY3Ljg4MzcgMTkxLjY0IDY4LjYgMTkyLjM1NjMgNjguNiAxOTMuMjQgYwo2Ny4wIDE5My4yNCBtCmYKMC4wMDAgMC4wMDAgMC4wMDAgc2NuCjAuNDU5IDAuNDc1IDAuNDgyIHNjbgowLjQ1OSAwLjQ3NSAwLjQ4MiBTQ04KCkJUCjc1LjAgMTkwLjQgVGQKL0YxLjAgOCBUZgo8NDk2NjIwNzQ2ODY1NzI2NTIwNjE3MjY1MjA2MTZlNzkyMDYzNjg2MTZlNjc2NTczMjA3NDZmMjA3NDY4NjUyMDYxNmQ2Zjc1NmU3NDJjMjA2NDYxNzQ2NTIwNmY3MjIwNjY3MjY1NzE3NTY1NmU2Mzc5MjA2ZjY2MjA3OTZmNzU3MjIwNDQ2OTcyNjU2Mzc0MjA0NDY1NjI2OTc0MjA0NzZmNDM2MTcyNjQ2YzY1NzM3MzIwNTI0NTNhMjA0ZDYxNzQ3NDIwNTQ2ODZmNmQ3MzZmNmUyMDQ5NmU2Mz4gVGoKRVQKCjAuMDAwIDAuMDAwIDAuMDAwIFNDTgowLjAwMCAwLjAwMCAwLjAwMCBzY24KMC40NTkgMC40NzUgMC40ODIgc2NuCjAuNDU5IDAuNDc1IDAuNDgyIFNDTgoKQlQKNzUuMCAxNzguNjQgVGQKL0YxLjAgOCBUZgo8Nzc2OTZjNmMyMDZlNmY3NDY5NjY3OTIwNzk2Zjc1MjAzMzIwNzc2ZjcyNmI2OTZlNjcyMDY0NjE3OTczMjA2OTZlMjA2MTY0NzY2MTZlNjM2NTIwNmY2NjIwNzk2Zjc1NzIyMDYxNjM2MzZmNzU2ZTc0MjA2MjY1Njk2ZTY3MjA2NDY1NjI2OTc0NjU2NDIwNmY3MjIwNjE3MzIwNmY3NDY4NjU3Mjc3Njk3MzY1MjA2MTY3NzI2NTY1NjQyZTIwNDk2NjIwNzk2Zjc1MjA3MjY1NzE3NTY1NzM3ND4gVGoKRVQKCjAuMDAwIDAuMDAwIDAuMDAwIFNDTgowLjAwMCAwLjAwMCAwLjAwMCBzY24KMC40NTkgMC40NzUgMC40ODIgc2NuCjAuNDU5IDAuNDc1IDAuNDgyIFNDTgoKQlQKNzUuMCAxNjYuODggVGQKL0YxLjAgOCBUZgo8NDc2ZjQzNjE3MjY0NmM2NTczNzMyMDUyNDUzYTIwNGQ2MTc0NzQyMDU0Njg2ZjZkNzM2ZjZlMjA0OTZlNjMyMDc0NmYyMDYzNmY2YzZjNjU2Mzc0MjA2MTIwNzA2MTc5NmQ2NTZlNzQyYzIwNjM2ZjZlNjY2OTcyNmQ2MTc0Njk2ZjZlMjA2ZjY2MjA3NDY4NjUyMDYxNmQ2Zjc1NmU3NDIwNjE2ZTY0MjA2NDYxNzQ2NTIwNzc2OTZjNmMyMDYyNjUyMDY3Njk3NjY1NmUyMDc0NmYyMDc5NmY3NT4gVGoKRVQKCjAuMDAwIDAuMDAwIDAuMDAwIFNDTgowLjAwMCAwLjAwMCAwLjAwMCBzY24KMC40NTkgMC40NzUgMC40ODIgc2NuCjAuNDU5IDAuNDc1IDAuNDgyIFNDTgoKQlQKNzUuMCAxNTUuMTIgVGQKL0YxLjAgOCBUZgo8NjE3NDIwNzQ2ODY1MjA3NDY5NmQ2NTIwNmY2NjIwNzQ2ODY1MjA3MjY1NzE3NTY1NzM3NDJlPiBUagpFVAoKMC4wMDAgMC4wMDAgMC4wMDAgU0NOCjAuMDAwIDAuMDAwIDAuMDAwIHNjbgowLjQ1OSAwLjQ3NSAwLjQ4MiBzY24KNjguNiAxNDEuMiBtCjY4LjYgMTQyLjA4MzcgNjcuODgzNyAxNDIuOCA2Ny4wIDE0Mi44IGMKNjYuMTE2MyAxNDIuOCA2NS40IDE0Mi4wODM3IDY1LjQgMTQxLjIgYwo2NS40IDE0MC4zMTYzIDY2LjExNjMgMTM5LjYgNjcuMCAxMzkuNiBjCjY3Ljg4MzcgMTM5LjYgNjguNiAxNDAuMzE2MyA2OC42IDE0MS4yIGMKNjcuMCAxNDEuMiBtCmYKMC4wMDAgMC4wMDAgMC4wMDAgc2NuCjAuNDU5IDAuNDc1IDAuNDgyIHNjbgowLjQ1OSAwLjQ3NSAwLjQ4MiBTQ04KCkJUCjc1LjAgMTM4LjM2IFRkCi9GMS4wIDggVGYKPDQ5NjYyMDYxNmUyMDY1NzI3MjZmNzIyMDY5NzMyMDZkNjE2NDY1MjA2OTZlMjA3NDY4NjUyMDcwNjE3OTZkNjU2ZTc0MjA2ZjY2MjA3OTZmNzU3MjIwNDQ2OTcyNjU2Mzc0MjA0NDY1NjI2OTc0MmMyMDYyNzkyMDQ3NmY0MzYxNzI2NDZjNjU3MzczMjA1MjQ1M2EyMDRkNjE3NDc0MjA1NDY4NmY2ZDczNmY2ZTIwNDk2ZTYzMjA2ZjcyMjA3OTZmNzU3MjIwNjI2MTZlNmIyMDZmNzI+IFRqCkVUCgowLjAwMCAwLjAwMCAwLjAwMCBTQ04KMC4wMDAgMC4wMDAgMC4wMDAgc2NuCjAuNDU5IDAuNDc1IDAuNDgyIHNjbgowLjQ1OSAwLjQ3NSAwLjQ4MiBTQ04KCkJUCjc1LjAgMTI2LjYgVGQKL0YxLjAgOCBUZgo8NjI3NTY5NmM2NDY5NmU2NzIwNzM2ZjYzNjk2NTc0NzkyYzIwNzk2Zjc1MjA2MTcyNjUyMDY1NmU3NDY5NzQ2YzY1NjQyMDc0NmYyMDYxMjA2Njc1NmM2YzIwNjE2ZTY0MjA2OTZkNmQ2NTY0Njk2MTc0NjUyMDcyNjU2Njc1NmU2NDIwNmY2NjIwNzQ2ODY1MjA2MTZkNmY3NTZlNzQyMDcwNjE2OTY0MjA2NjcyNmY2ZDIwNzk2Zjc1NzIyMDYyNjE2ZTZiMjA2ZjcyMjA2Mjc1Njk2YzY0Njk2ZTY3PiBUagpFVAoKMC4wMDAgMC4wMDAgMC4wMDAgU0NOCjAuMDAwIDAuMDAwIDAuMDAwIHNjbgowLjQ1OSAwLjQ3NSAwLjQ4MiBzY24KMC40NTkgMC40NzUgMC40ODIgU0NOCgpCVAo3NS4wIDExNC44NCBUZAovRjEuMCA4IFRmCjw3MzZmNjM2OTY1NzQ3OT4gVGoKRVQKCjAuMDAwIDAuMDAwIDAuMDAwIFNDTgowLjAwMCAwLjAwMCAwLjAwMCBzY24KMC40NTkgMC40NzUgMC40ODIgc2NuCjgzLjYgMTAwLjkyIG0KODMuNiAxMDEuODAzNyA4Mi44ODM3IDEwMi41MiA4Mi4wIDEwMi41MiBjCjgxLjExNjMgMTAyLjUyIDgwLjQgMTAxLjgwMzcgODAuNCAxMDAuOTIgYwo4MC40IDEwMC4wMzYzIDgxLjExNjMgOTkuMzIgODIuMCA5OS4zMiBjCjgyLjg4MzcgOTkuMzIgODMuNiAxMDAuMDM2MyA4My42IDEwMC45MiBjCjgyLjAgMTAwLjkyIG0KZgowLjAwMCAwLjAwMCAwLjAwMCBzY24KMC40NTkgMC40NzUgMC40ODIgc2NuCjAuNDU5IDAuNDc1IDAuNDgyIFNDTgoKQlQKOTAuMCA5OC4wOCBUZAovRjEuMCA4IFRmCjw0OTY2MjA3OTZmNzUyMDcyNjU2MzY1Njk3NjY1MjA2MTIwNzI2NTY2NzU2ZTY0MjA3OTZmNzUyMDYxNzI2NTIwNmU2Zjc0MjA2NTZlNzQ2OTc0NmM2NTY0MjA3NDZmMmMyMDc5NmY3NTIwNmQ3NTczNzQyMDcwNjE3OTIwNjk3NDIwNjI2MTYzNmIyMDc3Njg2NTZlMjA0NzZmNDM2MTcyNjQ2YzY1NzM3MzIwNTI0NTNhMjA0ZDYxNzQ3NDIwNTQ2ODZmNmQ3MzZmNmUyMDQ5NmU2Mz4gVGoKRVQKCjAuMDAwIDAuMDAwIDAuMDAwIFNDTgowLjAwMCAwLjAwMCAwLjAwMCBzY24KMC40NTkgMC40NzUgMC40ODIgc2NuCjAuNDU5IDAuNDc1IDAuNDgyIFNDTgoKQlQKOTAuMCA4Ni4zMiBUZAovRjEuMCA4IFRmCjw2MTczNmI3MzIwNzk2Zjc1MjA3NDZmMmU+IFRqCkVUCgowLjAwMCAwLjAwMCAwLjAwMCBTQ04KMC4wMDAgMC4wMDAgMC4wMDAgc2NuCjAuNDU5IDAuNDc1IDAuNDgyIHNjbgo2OC42IDcyLjQgbQo2OC42IDczLjI4MzcgNjcuODgzNyA3NC4wIDY3LjAgNzQuMCBjCjY2LjExNjMgNzQuMCA2NS40IDczLjI4MzcgNjUuNCA3Mi40IGMKNjUuNCA3MS41MTYzIDY2LjExNjMgNzAuOCA2Ny4wIDcwLjggYwo2Ny44ODM3IDcwLjggNjguNiA3MS41MTYzIDY4LjYgNzIuNCBjCjY3LjAgNzIuNCBtCmYKMC4wMDAgMC4wMDAgMC4wMDAgc2NuCjAuNDU5IDAuNDc1IDAuNDgyIHNjbgowLjQ1OSAwLjQ3NSAwLjQ4MiBTQ04KCkJUCjc1LjAgNjkuNTYgVGQKL0YxLjAgOCBUZgo8NTk2Zjc1MjA2MzYxNmUyMDYzNjE2ZTYzNjU2YzIwNjEyMDQ0Njk3MjY1NjM3NDIwNDQ2NTYyNjk3NDIwNjE3NDIwNjE2ZTc5MjA3NDY5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pD6k/VEO3fsjEn/imx/mwvnBJJT9PYXRukdPJdgYOPiOPJoqZWT8TW1quL5VSSU/VSS+VUklP1UkvlVJJT9VJL5VSSU/VSS+VUklP1UkvlVJJT9VJL5VSSU//9n/7TEKUGhvdG9zaG9wIDMuMAA4QklNBCUAAAAAABAAAAAAAAAAAAAAAAAAAAAAOEJJTQPqAAAAAB2mPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUgQ29tcHV0ZXIvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CjxwbGlzdCB2ZXJzaW9uPSIxLjAiPgo8ZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1Ib3Jpem9udGFsUmVzPC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUhvcml6b250YWxSZXM8L2tleT4KCQkJCTxyZWFsPjcyPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNsaWVudDwva2V5PgoJCQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnRpbmdtYW5hZ2VyPC9zdHJpbmc+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQubW9kRGF0ZTwva2V5PgoJCQkJPGRhdGU+MjAwNi0wNi0xNFQxMTozMzo1NFo8L2RhdGU+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1PcmllbnRhdGlvbjwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1PcmllbnRhdGlvbjwva2V5PgoJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jbGllbnQ8L2tleT4KCQkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lm1vZERhdGU8L2tleT4KCQkJCTxkYXRlPjIwMDYtMDYtMTRUMTE6MzM6NTRaPC9kYXRlPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk+Cgk8L2RpY3Q+Cgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1TY2FsaW5nPC9rZXk+CgkJCQk8cmVhbD4xPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNsaWVudDwva2V5PgoJCQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnRpbmdtYW5hZ2VyPC9zdHJpbmc+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQubW9kRGF0ZTwva2V5PgoJCQkJPGRhdGU+MjAwNi0wNi0xNFQxMTozMzo1NFo8L2RhdGU+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1WZXJ0aWNhbFJlczwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1WZXJ0aWNhbFJlczwva2V5PgoJCQkJPHJlYWw+NzI8L3JlYWw+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQk8ZGF0ZT4yMDA2LTA2LTE0VDExOjMzOjU0WjwvZGF0ZT4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGluZzwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1WZXJ0aWNhbFNjYWxpbmc8L2tleT4KCQkJCTxyZWFsPjE8L3JlYWw+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQk8ZGF0ZT4yMDA2LTA2LTE0VDExOjMzOjU0WjwvZGF0ZT4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuc3ViVGlja2V0LnBhcGVyX2luZm9fdGlja2V0PC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw+MC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw+CgkJCQkJCTxyZWFsPjc4MzwvcmVhbD4KCQkJCQkJPHJlYWw+NTU5PC9yZWFsPgoJCQkJCTwvYXJyYXk+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNsaWVudDwva2V5PgoJCQkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQkJPGRhdGU+MjAwNi0wNi0xNFQxMTozMzo1NFo8L2RhdGU+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk+CgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw+LTE4PC9yZWFsPgoJCQkJCQk8cmVhbD44MjQ8L3JlYWw+CgkJCQkJCTxyZWFsPjU3NzwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jbGllbnQ8L2tleT4KCQkJCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQubW9kRGF0ZTwva2V5PgoJCQkJCTxkYXRlPjIwMDYtMDYtMTRUMTE6MzM6NTRaPC9kYXRlPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQucG0uUG9zdFNjcmlwdDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVBhcGVyTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc+aXNvLWE0PC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNsaWVudDwva2V5PgoJCQkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50LnBtLlBvc3RTY3JpcHQ8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQubW9kRGF0ZTwva2V5PgoJCQkJCTxkYXRlPjIwMDMtMDctMDFUMTc6NDk6MzZaPC9kYXRlPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1VbmFkanVzdGVkUGFnZVJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQucG0uUG9zdFNjcmlwdDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw+MC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw+CgkJCQkJCTxyZWFsPjc4MzwvcmVhbD4KCQkJCQkJPHJlYWw+NTU5PC9yZWFsPgoJCQkJCTwvYXJyYXk+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNsaWVudDwva2V5PgoJCQkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQkJPGRhdGU+MjAwNi0wNi0xNFQxMTozMzo1NFo8L2RhdGU+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQucG0uUG9zdFNjcmlwdDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk+CgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw+LTE4PC9yZWFsPgoJCQkJCQk8cmVhbD44MjQ8L3JlYWw+CgkJCQkJCTxyZWFsPjU3NzwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jbGllbnQ8L2tleT4KCQkJCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQubW9kRGF0ZTwva2V5PgoJCQkJCTxkYXRlPjIwMDYtMDYtMTRUMTE6MzM6NTRaPC9kYXRlPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8ucHBkLlBNUGFwZXJOYW1lPC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50LnBtLlBvc3RTY3JpcHQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8ucHBkLlBNUGFwZXJOYW1lPC9rZXk+CgkJCQkJPHN0cmluZz5BNDwvc3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jbGllbnQ8L2tleT4KCQkJCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludC5wbS5Qb3N0U2NyaXB0PC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lm1vZERhdGU8L2tleT4KCQkJCQk8ZGF0ZT4yMDAzLTA3LTAxVDE3OjQ5OjM2WjwvZGF0ZT4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3Rh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aABvAHQAbwBzAGgAbwBwACAAQwBTADIAAAABADhCSU0EBgAAAAAABwAGAAAAAQEA/+E6sWh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iMy4xLjEtMTExIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6eGFwTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICAgICAgICAgIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIj4KICAgICAgICAgPHhhcE1NOkRvY3VtZW50SUQ+dXVpZDpGNjIyNDQwOEZEMkIxMURBODlFQjk5MTE4OEVBQzlFQjwveGFwTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhhcE1NOkluc3RhbmNlSUQ+dXVpZDpGNjIyNDQwOUZEMkIxMURBODlFQjk5MTE4OEVBQzlFQjwveGFwTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhhcE1NOkRlcml2ZWRGcm9tIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgPHN0UmVmOmluc3RhbmNlSUQ+dXVpZDpGNjIyNDQwN0ZEMkIxMURBODlFQjk5MTE4OEVBQzlFQjwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+dXVpZDpGNjIyNDQwN0ZEMkIxMURBODlFQjk5MTE4OEVBQzlFQjwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgPC94YXBNTTpEZXJpdmVkRnJvbT4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4YXA6Q3JlYXRlRGF0ZT4yMDA2LTA2LTE0VDEyOjM0OjIxKzAxOjAwPC94YXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhhcDpNb2RpZnlEYXRlPjIwMDYtMDYtMTRUMTI6MzQ6MjErMDE6MDA8L3hhcDpNb2RpZnlEYXRlPgogICAgICAgICA8eGFwOk1ldGFkYXRhRGF0ZT4yMDA2LTA2LTE0VDEyOjM0OjIxKzAxOjAwPC94YXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8eGFwOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2hvcCBDUzIgTWFjaW50b3NoPC94YXA6Q3JlYXRvclRvb2w+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL2pwZWc8L2RjOmZvcm1hdD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyI+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjE8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5Eb3QgR2FpbiAyMCU8L3Bob3Rvc2hvcDpJQ0NQcm9maWxlPgogICAgICAgICA8cGhvdG9zaG9wOkhpc3RvcnkvPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj4zMDAwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj4zMDAwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8dGlmZjpOYXRpdmVEaWdlc3Q+MjU2LDI1NywyNTgsMjU5LDI2MiwyNzQsMjc3LDI4NCw1MzAsNTMxLDI4MiwyODMsMjk2LDMwMSwzMTgsMzE5LDUyOSw1MzIsMzA2LDI3MCwyNzEsMjcyLDMwNSwzMTUsMzM0MzI7MDRBNUIwRjNGQTk0RjZGODFFRUVGQzg3OTY0RDQyOEQ8L3RpZmY6TmF0aXZlRGlnZXN0PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NDU5PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjE2MjwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+LTE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6TmF0aXZlRGlnZXN0PjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3MTIyLDQwOTYyLDQwOTYzLDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUwLDM0ODUyLDM0ODU1LDM0ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4LDQxNDkyLDQxNDkzLDQxNDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQxOTg4LDQxOTg5LDQxOTkwLDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2LDAsMiw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwyNSwyNiwyNywyOCwzMDs3QTdGRDY3NzQ1MkM4QzcyQzhDRUE5NkE1RjhCRkQ1NjwvZXhpZjpOYXRpdmVEaWdlc3Q+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+/+IDoElDQ19QUk9GSUxFAAEBAAADkEFEQkUCEAAAcHJ0ckdSQVlYWVogB88ABgADAAAAAAAAYWNzcEFQUEwAAAAAbm9uZQAAAAAAAAAAAAAAAAAAAAEAAPbWAAEAAAAA0y1BREJFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFY3BydAAAAMAAAAAyZGVzYwAAAPQAAABnd3RwdAAAAVwAAAAUYmtwdAAAAXAAAAAUa1RSQwAAAYQAAAIMdGV4dAAAAABDb3B5cmln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MCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDBdCmVuZG9iagp4cmVmCjAgMTcKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE1IDAwMDAwIG4gCjAwMDAwMDAxMDkgMDAwMDAgbiAKMDAwMDAwMDE1OCAwMDAwMCBuIAowMDAwMDAwMjE1IDAwMDAwIG4gCjAwMDAwMTEyMjcgMDAwMDAgbiAKMDAwMDAxMTQ1MiAwMDAwMCBuIAowMDAwMDU5Mjk1IDAwMDAwIG4gCjAwMDAwNTk0NjEgMDAwMDAgbiAKMDAwMDA1OTYyOSAwMDAwMCBuIAowMDAwMDYzNTE4IDAwMDAwIG4gCjAwMDAwNjM3MjggMDAwMDAgbiAKMDAwMDA2NTA5MCAwMDAwMCBuIAowMDAwMDY2MDA1IDAwMDAwIG4gCjAwMDAwNjg5MjUgMDAwMDAgbiAKMDAwMDA2OTEzOCAwMDAwMCBuIAowMDAwMDcwNTAwIDAwMDAwIG4gCnRyYWlsZXIKPDwgL1NpemUgMTcKL1Jvb3QgMiAwIFIKL0luZm8gMSAwIFIKPj4Kc3RhcnR4cmVmCjcxNDE0CiUlRU9GCg== diff --git a/src/test/resources/betamax/tapes/get_a_customer_wrapped.yaml b/src/test/resources/betamax/tapes/get_a_customer_wrapped.yaml new file mode 100644 index 00000000..9bd6df5b --- /dev/null +++ b/src/test/resources/betamax/tapes/get_a_customer_wrapped.yaml @@ -0,0 +1,33 @@ +!tape +name: get a customer wrapped +interactions: +- recorded: 2015-06-29T13:12:49.225Z + request: + method: GET + uri: https://api-sandbox.gocardless.com/customers/CU00003068FG73 + headers: + Accept-Encoding: gzip + Connection: Keep-Alive + GoCardless-Version: '2015-04-29' + Host: api-sandbox.gocardless.com + User-Agent: gocardless-pro/0.0.1 Mac_OS_X/10.10.3 Java_HotSpot(TM)_64-Bit_Server_VM/1.8.0_45 + response: + status: 200 + headers: + CF-RAY: 1fe1e29ba7e213a7-LHR + Cache-Control: no-store + Content-Encoding: gzip + Content-Type: application/json + Date: Mon, 29 Jun 2015 13:12:49 GMT + Pragma: no-cache + RateLimit-Limit: '1000' + RateLimit-Remaining: '999' + RateLimit-Reset: Mon, 29 Jun 2015 13:13:00 GMT + Server: cloudflare-nginx + Set-Cookie: __cfduid=d1cfbc70fe4cbb2e44b5e6ec93e2e8c091435583569; expires=Tue, 28-Jun-16 13:12:49 GMT; path=/; domain=.gocardless.com; HttpOnly + Status: 200 OK + Strict-Transport-Security: max-age=31556926; includeSubDomains + Vary: Origin + X-Request-Id: aba4b34c-4483-465b-b9bf-cad4a6ffcb39 + body: !!binary |- + H4sIAAAAAAAAA12QTUvEMBCG/0rJebekDbYlJ1dxexEEURAvZUxml2A+SpKKZel/d+pSEHManveZ5CUXpqaUg8OYmLwwo5lk96+cjuBNd+xbwXZMRYSMeoBMac2rmz0X+7p5qTrJGynasqv5O3nowFhSThH8ZxnSR4geb/Eb3GixVMGRczZf6AcPDkk8riLBEzhj540+XRfXh4MbwW+Bn6zdMdA6YkqDNR6rtU9bHBTG4jmAppW/cU3xYcxF/Y8LJq93KZNnch6D18GTFPFsaJCM5jGkDHZQQa9NH7pC9G+/lSaf47zx/o6YwwwaMtAPLsvyA4W6YYRTAQAA diff --git a/src/test/resources/fixtures/hello.txt b/src/test/resources/fixtures/hello.txt deleted file mode 100644 index ce013625..00000000 --- a/src/test/resources/fixtures/hello.txt +++ /dev/null @@ -1 +0,0 @@ -hello From f5dadcb43a331a2d5c0de03d531253dc93cca94b Mon Sep 17 00:00:00 2001 From: Crankshaft Robot Date: Tue, 30 Jun 2015 12:56:53 +0000 Subject: [PATCH 15/20] Crankshaft[BU00000196V2CB] Client - Java @ 2015-06-30 12:56:53 +0000 --- .../java/com/gocardless/GoCardlessClient.java | 9 + .../com/gocardless/resources/MandatePdf.java | 32 +++ .../services/MandatePdfService.java | 207 ++++++++++++++++++ 3 files changed, 248 insertions(+) create mode 100644 src/main/java/com/gocardless/resources/MandatePdf.java create mode 100644 src/main/java/com/gocardless/services/MandatePdfService.java diff --git a/src/main/java/com/gocardless/GoCardlessClient.java b/src/main/java/com/gocardless/GoCardlessClient.java index d77c0306..1b9a2048 100644 --- a/src/main/java/com/gocardless/GoCardlessClient.java +++ b/src/main/java/com/gocardless/GoCardlessClient.java @@ -17,6 +17,7 @@ public class GoCardlessClient { private final EventService events; private final HelperService helpers; private final MandateService mandates; + private final MandatePdfService mandatePdfs; private final ModulusCheckService modulusChecks; private final PaymentService payments; private final PayoutService payouts; @@ -33,6 +34,7 @@ private GoCardlessClient(HttpClient httpClient) { this.events = new EventService(httpClient); this.helpers = new HelperService(httpClient); this.mandates = new MandateService(httpClient); + this.mandatePdfs = new MandatePdfService(httpClient); this.modulusChecks = new ModulusCheckService(httpClient); this.payments = new PaymentService(httpClient); this.payouts = new PayoutService(httpClient); @@ -90,6 +92,13 @@ public MandateService mandates() { return mandates; } + /** + * A service class for working with mandate pdf resources. + */ + public MandatePdfService mandatePdfs() { + return mandatePdfs; + } + /** * A service class for working with modulus check resources. */ diff --git a/src/main/java/com/gocardless/resources/MandatePdf.java b/src/main/java/com/gocardless/resources/MandatePdf.java new file mode 100644 index 00000000..aa848304 --- /dev/null +++ b/src/main/java/com/gocardless/resources/MandatePdf.java @@ -0,0 +1,32 @@ +package com.gocardless.resources; + +/** + * Represents a mandate pdf resource returned from the API. + * + * Construct a mandate PDF for a given set of bank details or an already-existing mandate. + */ +public class MandatePdf { + private MandatePdf() { + // blank to prevent instantiation + } + + private String expiresAt; + private String url; + + /** + * The date and time at which `url` will cease to be accessible (30 minutes after the original + * request). + */ + public String getExpiresAt() { + return expiresAt; + } + + /** + * The URL at which this mandate PDF can be viewed until it expires at the date and time specified by + * `expires_at`. *You should not store this URL as it will only work for a short period of time. The + * structure of these URLs may change at any time.* + */ + public String getUrl() { + return url; + } +} diff --git a/src/main/java/com/gocardless/services/MandatePdfService.java b/src/main/java/com/gocardless/services/MandatePdfService.java new file mode 100644 index 00000000..0b4a9604 --- /dev/null +++ b/src/main/java/com/gocardless/services/MandatePdfService.java @@ -0,0 +1,207 @@ +package com.gocardless.services; + +import com.gocardless.http.*; +import com.gocardless.resources.MandatePdf; + +/** + * Service class for working with mandate pdf resources. + * + * Construct a mandate PDF for a given set of bank details or an already-existing mandate. + */ +public class MandatePdfService { + private HttpClient httpClient; + + /** + * Constructor. Users of this library should have no need to call this - an instance + * of this class can be obtained by calling + {@link com.gocardless.GoCardlessClient#mandatePdfs() }. + */ + public MandatePdfService(HttpClient httpClient) { + this.httpClient = httpClient; + } + + /** + * Generates a temporary URL for viewing a PDF mandate. + * + * Bank account details may be supplied + * using an IBAN (international bank account number), or [local details](#ui-local-bank-details), or + * alternatively you can provide the ID of an existing [mandate](#core-endpoints-mandates) to create + * a PDF of. + * + * To generate a mandate in a foreign language, set your `Accept-Language` header to + * the relevant [ISO + * 639-1](http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes#Partial_ISO_639_table) language code. + * Currently Dutch, English, French, German, Italian, Portuguese and Spanish are supported. + */ + public MandatePdfCreateRequest create() { + return new MandatePdfCreateRequest(httpClient); + } + + /** + * Request class for {@link MandatePdfService#create }. + * + * Generates a temporary URL for viewing a PDF mandate. + * + * Bank account details may be supplied + * using an IBAN (international bank account number), or [local details](#ui-local-bank-details), or + * alternatively you can provide the ID of an existing [mandate](#core-endpoints-mandates) to create + * a PDF of. + * + * To generate a mandate in a foreign language, set your `Accept-Language` header to + * the relevant [ISO + * 639-1](http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes#Partial_ISO_639_table) language code. + * Currently Dutch, English, French, German, Italian, Portuguese and Spanish are supported. + */ + public static final class MandatePdfCreateRequest extends PostRequest { + private String accountHolderName; + private String accountNumber; + private String bankCode; + private String bic; + private String branchCode; + private String countryCode; + private String iban; + private Links links; + private String mandateReference; + private String scheme; + private String signatureDate; + + /** + * Name of the account holder, as known by the bank. Usually this matches the name of the + * [customer](#api-endpoints-customers). This field cannot exceed 18 characters. + */ + public MandatePdfCreateRequest withAccountHolderName(String accountHolderName) { + this.accountHolderName = accountHolderName; + return this; + } + + /** + * Bank account number - see [local details](#ui-local-bank-details) for more information. + * Alternatively you can provide an `iban` or link to an existing mandate. + */ + public MandatePdfCreateRequest withAccountNumber(String accountNumber) { + this.accountNumber = accountNumber; + return this; + } + + /** + * Bank code - see [local details](#ui-local-bank-details) for more information. Alternatively you + * can provide an `iban` or link to an existing mandate. + */ + public MandatePdfCreateRequest withBankCode(String bankCode) { + this.bankCode = bankCode; + return this; + } + + /** + * SWIFT BIC. Optional (will be derived from the `iban` or local details if not provided). + */ + public MandatePdfCreateRequest withBic(String bic) { + this.bic = bic; + return this; + } + + /** + * Branch code - see [local details](#ui-local-bank-details) for more information. Alternatively you + * can provide an `iban` or link to an existing mandate. + */ + public MandatePdfCreateRequest withBranchCode(String branchCode) { + this.branchCode = branchCode; + return this; + } + + /** + * [ISO 3166-1](http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements) + * alpha-2 code. Defaults to the country code of the `iban` if supplied, otherwise is required. + */ + public MandatePdfCreateRequest withCountryCode(String countryCode) { + this.countryCode = countryCode; + return this; + } + + /** + * International Bank Account Number. Alternatively you can provide [local + * details](#ui-local-bank-details) or link to an existing mandate. + */ + public MandatePdfCreateRequest withIban(String iban) { + this.iban = iban; + return this; + } + + public MandatePdfCreateRequest withLinks(Links links) { + this.links = links; + return this; + } + + /** + * ID of an existing [mandate](#core-endpoints-mandates) to build the PDF from. + */ + public MandatePdfCreateRequest withLinksMandate(String mandate) { + if (links == null) { + links = new Links(); + } + links.withMandate(mandate); + return this; + } + + /** + * Unique 6 to 18 character reference. This may be left blank at the point of signing. + */ + public MandatePdfCreateRequest withMandateReference(String mandateReference) { + this.mandateReference = mandateReference; + return this; + } + + /** + * Direct Debit scheme. Can be supplied or automatically detected from the bank account details or + * mandate provided. + */ + public MandatePdfCreateRequest withScheme(String scheme) { + this.scheme = scheme; + return this; + } + + /** + * If provided, a form will be generated with this date and no signature field. + */ + public MandatePdfCreateRequest withSignatureDate(String signatureDate) { + this.signatureDate = signatureDate; + return this; + } + + private MandatePdfCreateRequest(HttpClient httpClient) { + super(httpClient); + } + + @Override + protected String getPathTemplate() { + return "/mandate_pdfs"; + } + + @Override + protected String getEnvelope() { + return "mandate_pdfs"; + } + + @Override + protected Class getResponseClass() { + return MandatePdf.class; + } + + @Override + protected boolean hasBody() { + return true; + } + + public static class Links { + private String mandate; + + /** + * ID of an existing [mandate](#core-endpoints-mandates) to build the PDF from. + */ + public Links withMandate(String mandate) { + this.mandate = mandate; + return this; + } + } + } +} From a1ebeead7b1f934b958a77d08b3671365b3a1d39 Mon Sep 17 00:00:00 2001 From: Crankshaft Robot Date: Tue, 30 Jun 2015 13:42:00 +0000 Subject: [PATCH 16/20] Crankshaft[BU0000019QJHG2] Client - Java @ 2015-06-30 13:42:00 +0000 --- .../services/CreditorBankAccountService.java | 15 ++------- .../services/CustomerBankAccountService.java | 15 ++------- .../com/gocardless/GoCardlessClientTest.java | 10 ++++++ .../list_enabled_creditor_bank_accounts.yaml | 33 +++++++++++++++++++ 4 files changed, 47 insertions(+), 26 deletions(-) create mode 100644 src/test/resources/betamax/tapes/list_enabled_creditor_bank_accounts.yaml diff --git a/src/main/java/com/gocardless/services/CreditorBankAccountService.java b/src/main/java/com/gocardless/services/CreditorBankAccountService.java index 7207b050..ed5c47bc 100644 --- a/src/main/java/com/gocardless/services/CreditorBankAccountService.java +++ b/src/main/java/com/gocardless/services/CreditorBankAccountService.java @@ -8,7 +8,6 @@ import com.gocardless.resources.CreditorBankAccount; import com.google.common.collect.ImmutableMap; -import com.google.gson.annotations.SerializedName; import com.google.gson.reflect.TypeToken; /** @@ -249,7 +248,7 @@ public Links withCreditor(String creditor) { public static final class CreditorBankAccountListRequest extends ListRequest { private String creditor; - private Enabled enabled; + private Boolean enabled; /** * Cursor pointing to the start of the desired set. @@ -278,7 +277,7 @@ public CreditorBankAccountListRequest withCreditor(String creditor) { /** * Get enabled or disabled creditor bank accounts. */ - public CreditorBankAccountListRequest withEnabled(Enabled enabled) { + public CreditorBankAccountListRequest withEnabled(Boolean enabled) { this.enabled = enabled; return this; } @@ -323,16 +322,6 @@ protected String getEnvelope() { protected TypeToken> getTypeToken() { return new TypeToken>() {}; } - - public enum Enabled { - @SerializedName("true") - TRUE, @SerializedName("false") - FALSE; - @Override - public String toString() { - return name().toLowerCase(); - } - } } /** diff --git a/src/main/java/com/gocardless/services/CustomerBankAccountService.java b/src/main/java/com/gocardless/services/CustomerBankAccountService.java index 49229e30..dadd9885 100644 --- a/src/main/java/com/gocardless/services/CustomerBankAccountService.java +++ b/src/main/java/com/gocardless/services/CustomerBankAccountService.java @@ -8,7 +8,6 @@ import com.gocardless.resources.CustomerBankAccount; import com.google.common.collect.ImmutableMap; -import com.google.gson.annotations.SerializedName; import com.google.gson.reflect.TypeToken; /** @@ -294,7 +293,7 @@ public Links withCustomerBankAccountToken(String customerBankAccountToken) { public static final class CustomerBankAccountListRequest extends ListRequest { private String customer; - private Enabled enabled; + private Boolean enabled; /** * Cursor pointing to the start of the desired set. @@ -323,7 +322,7 @@ public CustomerBankAccountListRequest withCustomer(String customer) { /** * Get enabled or disabled customer bank accounts. */ - public CustomerBankAccountListRequest withEnabled(Enabled enabled) { + public CustomerBankAccountListRequest withEnabled(Boolean enabled) { this.enabled = enabled; return this; } @@ -368,16 +367,6 @@ protected String getEnvelope() { protected TypeToken> getTypeToken() { return new TypeToken>() {}; } - - public enum Enabled { - @SerializedName("true") - TRUE, @SerializedName("false") - FALSE; - @Override - public String toString() { - return name().toLowerCase(); - } - } } /** diff --git a/src/test/java/com/gocardless/GoCardlessClientTest.java b/src/test/java/com/gocardless/GoCardlessClientTest.java index 866afb62..13d93144 100644 --- a/src/test/java/com/gocardless/GoCardlessClientTest.java +++ b/src/test/java/com/gocardless/GoCardlessClientTest.java @@ -179,4 +179,14 @@ public void shouldCreateASubscription() { .withIntervalUnit(MONTHLY).withLinksMandate("MD00001PEYCSQF").execute(); assertThat(subscription.getId()).isNotNull(); } + + @Test + @Betamax(tape = "list enabled creditor bank accounts") + public void shouldListEnabledCreditorBankAccounts() { + Iterable iterable = + client.creditorBankAccounts().all().withEnabled(true).execute(); + List bankAccounts = Lists.newArrayList(iterable); + assertThat(bankAccounts).hasSize(1); + assertThat(bankAccounts.get(0).getId()).isEqualTo("BA00001NN2B44F"); + } } diff --git a/src/test/resources/betamax/tapes/list_enabled_creditor_bank_accounts.yaml b/src/test/resources/betamax/tapes/list_enabled_creditor_bank_accounts.yaml new file mode 100644 index 00000000..dbae98dd --- /dev/null +++ b/src/test/resources/betamax/tapes/list_enabled_creditor_bank_accounts.yaml @@ -0,0 +1,33 @@ +!tape +name: list enabled creditor bank accounts +interactions: +- recorded: 2015-06-29T16:33:35.950Z + request: + method: GET + uri: https://api-sandbox.gocardless.com/creditor_bank_accounts?enabled=true + headers: + Accept-Encoding: gzip + Connection: Keep-Alive + GoCardless-Version: '2015-04-29' + Host: api-sandbox.gocardless.com + User-Agent: gocardless-pro/0.0.1 Mac_OS_X/10.10.3 Java_HotSpot(TM)_64-Bit_Server_VM/1.8.0_45 + response: + status: 200 + headers: + CF-RAY: 1fe308b9469e062e-LHR + Cache-Control: no-store + Content-Encoding: gzip + Content-Type: application/json + Date: Mon, 29 Jun 2015 16:33:36 GMT + Pragma: no-cache + RateLimit-Limit: '1000' + RateLimit-Remaining: '999' + RateLimit-Reset: Mon, 29 Jun 2015 16:34:00 GMT + Server: cloudflare-nginx + Set-Cookie: __cfduid=deb549abc24392397d6b68a97b4df77d01435595616; expires=Tue, 28-Jun-16 16:33:36 GMT; path=/; domain=.gocardless.com; HttpOnly + Status: 200 OK + Strict-Transport-Security: max-age=31556926; includeSubDomains + Vary: Origin + X-Request-Id: 151e1a98-55ec-46c7-b684-b95f8e453473 + body: !!binary |- + H4sIAAAAAAAAA01Qy26DMBD8FeQzqTCPQ7lhlCZVA4kSLk1VWQZvWhSwJcc+RIh/75pGVX3zzmNndiKdAdlbbXgr1JWLrtNO2RvJPybSS5ITVkT4aF3HLE1fSOgFwoLkwiIaRzRbRckqThtK8yTLafRE0+SMvIcVV25swXBQsldfKKH0H/itB4mgEiMgVBVNEzTbfXXa18FrXSJxSfWAWXEsd8X7KWBF/RYcdh7vnDGgujuqN+zgBz6/ufNOS2+5YTgbwQoprCD5NIcElGgHwG7WOAjJ0Ksr9p3+LoGq8uhLJ9m6Wj9vMzLPn78mC82ZmzaLQlwsGJIrNwyYFC7a4Er/wy1DP/Z4oSya5x8o+kUOZQEAAA== From 7f0c1d5c0cab100294a08a9199cbb83805240ad3 Mon Sep 17 00:00:00 2001 From: Crankshaft Robot Date: Tue, 30 Jun 2015 14:18:21 +0000 Subject: [PATCH 17/20] Crankshaft[BU0000019RCJ13] Client - Java @ 2015-06-30 14:18:21 +0000 a834af6 Matt Thomson Merge pull request #7 from gocardless/restito-to-mockwebserver Migrate from Restito to Mockwebserver ---------------- 2314918 Matt Thomson Migrate from Restito to Mockwebserver. ---------------- --- build.gradle | 2 +- .../com/gocardless/http/GetRequestTest.java | 27 +++------ .../com/gocardless/http/HttpTestUtil.java | 18 ------ .../com/gocardless/http/ListRequestTest.java | 25 +++----- .../java/com/gocardless/http/MockHttp.java | 59 ++++++++++++++++--- .../http/PaginatingIterableTest.java | 32 ++++------ .../com/gocardless/http/PostRequestTest.java | 29 ++++----- .../com/gocardless/http/PutRequestTest.java | 29 +++------ 8 files changed, 98 insertions(+), 123 deletions(-) diff --git a/build.gradle b/build.gradle index 78c716f9..8912fe71 100644 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,7 @@ dependencies { testCompile 'junit:junit:4.12' testCompile 'org.assertj:assertj-core:2.0.0' - testCompile 'com.xebialabs.restito:restito:0.5' + testCompile 'com.squareup.okhttp:mockwebserver:2.4.0' testCompile 'co.freeside:betamax:1.1.2' testCompile 'org.codehaus.groovy:groovy-all:2.2.0' diff --git a/src/test/java/com/gocardless/http/GetRequestTest.java b/src/test/java/com/gocardless/http/GetRequestTest.java index 22332adf..3d04e22e 100644 --- a/src/test/java/com/gocardless/http/GetRequestTest.java +++ b/src/test/java/com/gocardless/http/GetRequestTest.java @@ -11,17 +11,8 @@ import org.junit.Test; import org.junit.rules.ExpectedException; -import static com.xebialabs.restito.builder.stub.StubHttp.whenHttp; -import static com.xebialabs.restito.semantics.Action.header; -import static com.xebialabs.restito.semantics.Action.resourceContent; -import static com.xebialabs.restito.semantics.Action.status; -import static com.xebialabs.restito.semantics.Condition.get; - import static org.assertj.core.api.Assertions.assertThat; -import static org.glassfish.grizzly.http.util.HttpStatus.BAD_REQUEST_400; -import static org.glassfish.grizzly.http.util.HttpStatus.OK_200; - public class GetRequestTest { @Rule public MockHttp http = new MockHttp(); @@ -35,29 +26,27 @@ public void setUp() throws Exception { } @Test - public void shouldPerformGetRequest() { - whenHttp(http.server()).match(get("/dummy/123")).then(status(OK_200), - resourceContent("fixtures/single.json")); + public void shouldPerformGetRequest() throws Exception { + http.enqueueResponse(200, "fixtures/single.json"); DummyItem result = request.execute(); assertThat(result.stringField).isEqualTo("foo"); assertThat(result.intField).isEqualTo(123); + http.assertRequestMade("GET", "/dummy/123"); } @Test - public void shouldPerformWrappedGetRequest() { - whenHttp(http.server()).match(get("/dummy/123")).then(status(OK_200), - resourceContent("fixtures/single.json"), header("foo", "bar")); + public void shouldPerformWrappedGetRequest() throws Exception { + http.enqueueResponse(200, "fixtures/single.json", ImmutableMap.of("foo", "bar")); HttpResponse result = request.executeWrapped(); assertThat(result.getStatusCode()).isEqualTo(200); assertThat(result.getHeaders().get("foo")).containsExactly("bar"); assertThat(result.getResource().stringField).isEqualTo("foo"); assertThat(result.getResource().intField).isEqualTo(123); + http.assertRequestMade("GET", "/dummy/123"); } - @Test - public void shouldThrowOnApiError() { - whenHttp(http.server()).match(get("/dummy/123")).then(status(BAD_REQUEST_400), - resourceContent("fixtures/invalid_api_usage.json")); + public void shouldThrowOnApiError() throws Exception { + http.enqueueResponse(400, "fixtures/invalid_api_usage.json"); exception.expect(InvalidApiUsageException.class); exception.expectMessage("Invalid document structure"); request.execute(); diff --git a/src/test/java/com/gocardless/http/HttpTestUtil.java b/src/test/java/com/gocardless/http/HttpTestUtil.java index fc851898..b88c3b51 100644 --- a/src/test/java/com/gocardless/http/HttpTestUtil.java +++ b/src/test/java/com/gocardless/http/HttpTestUtil.java @@ -9,16 +9,12 @@ import com.gocardless.GoCardlessClient; import com.gocardless.TestUtil; -import com.google.common.base.Predicate; import com.google.common.io.Resources; import com.google.gson.JsonElement; import com.google.gson.JsonParser; import com.squareup.okhttp.OkHttpClient; -import com.xebialabs.restito.semantics.Call; -import com.xebialabs.restito.semantics.Condition; - import org.apache.http.conn.ssl.AllowAllHostnameVerifier; import static com.google.common.base.Charsets.UTF_8; @@ -42,20 +38,6 @@ public static boolean jsonMatchesFixture(String actual, String fixturePath) thro return result.equals(expected); } - public static Condition withJsonBody(final String fixturePath) { - return Condition.custom(new Predicate() { - @Override - public boolean apply(Call input) { - try { - return input.getPostBody() != null - && jsonMatchesFixture(input.getPostBody(), fixturePath); - } catch (IOException e) { - throw new IllegalArgumentException(e); - } - } - }); - } - public static class DummyItem { public String stringField; public int intField; diff --git a/src/test/java/com/gocardless/http/ListRequestTest.java b/src/test/java/com/gocardless/http/ListRequestTest.java index 3d903d5f..6d1677d0 100644 --- a/src/test/java/com/gocardless/http/ListRequestTest.java +++ b/src/test/java/com/gocardless/http/ListRequestTest.java @@ -11,24 +11,15 @@ import org.junit.Rule; import org.junit.Test; -import static com.xebialabs.restito.builder.stub.StubHttp.whenHttp; -import static com.xebialabs.restito.semantics.Action.resourceContent; -import static com.xebialabs.restito.semantics.Action.status; -import static com.xebialabs.restito.semantics.Condition.get; -import static com.xebialabs.restito.semantics.Condition.parameter; - import static org.assertj.core.api.Assertions.assertThat; -import static org.glassfish.grizzly.http.util.HttpStatus.OK_200; - public class ListRequestTest { @Rule public MockHttp http = new MockHttp(); @Test - public void shouldPerformListRequest() { - whenHttp(http.server()).match(get("/dummy"), parameter("id", "123")).then(status(OK_200), - resourceContent("fixtures/page.json")); + public void shouldPerformListRequest() throws Exception { + http.enqueueResponse(200, "fixtures/page.json"); DummyListRequest> request = DummyListRequest.pageRequest(http.client()); ListResponse result = request.execute(); @@ -37,15 +28,13 @@ public void shouldPerformListRequest() { assertThat(result.getItems().get(0).intField).isEqualTo(123); assertThat(result.getItems().get(1).stringField).isEqualTo("bar"); assertThat(result.getItems().get(1).intField).isEqualTo(456); + http.assertRequestMade("GET", "/dummy?id=123"); } @Test - public void shouldBeAbleToIterateThroughList() { - whenHttp(http.server()).match(get("/dummy"), parameter("id", "123")).then(status(OK_200), - resourceContent("fixtures/first-page.json")); - whenHttp(http.server()).match(get("/dummy"), parameter("id", "123"), - parameter("after", "ID123")).then(status(OK_200), - resourceContent("fixtures/last-page.json")); + public void shouldBeAbleToIterateThroughList() throws Exception { + http.enqueueResponse(200, "fixtures/first-page.json"); + http.enqueueResponse(200, "fixtures/last-page.json"); DummyListRequest> request = DummyListRequest.iterableRequest(http.client()); Iterable iterable = request.execute(); @@ -57,6 +46,8 @@ public void shouldBeAbleToIterateThroughList() { assertThat(result.get(1).intField).isEqualTo(222); assertThat(result.get(2).stringField).isEqualTo("baz"); assertThat(result.get(2).intField).isEqualTo(333); + http.assertRequestMade("GET", "/dummy?id=123"); + http.assertRequestMade("GET", "/dummy?after=ID123&id=123"); } static class DummyListRequest extends ListRequest { diff --git a/src/test/java/com/gocardless/http/MockHttp.java b/src/test/java/com/gocardless/http/MockHttp.java index 048895cd..07efe1d8 100644 --- a/src/test/java/com/gocardless/http/MockHttp.java +++ b/src/test/java/com/gocardless/http/MockHttp.java @@ -1,32 +1,77 @@ package com.gocardless.http; +import java.io.IOException; +import java.util.Map; + import com.gocardless.GoCardlessClient; import com.gocardless.TestUtil; -import com.xebialabs.restito.server.StubServer; +import com.google.common.collect.ImmutableMap; +import com.google.common.io.Resources; + +import com.squareup.okhttp.mockwebserver.MockResponse; +import com.squareup.okhttp.mockwebserver.MockWebServer; +import com.squareup.okhttp.mockwebserver.RecordedRequest; import org.junit.rules.ExternalResource; +import static com.gocardless.http.HttpTestUtil.jsonMatchesFixture; + +import static com.google.common.base.Charsets.UTF_8; + +import static org.assertj.core.api.Assertions.assertThat; + public class MockHttp extends ExternalResource { - private StubServer server; + private MockWebServer server; @Override protected void before() throws Throwable { - server = new StubServer().run(); + server = new MockWebServer(); + server.start(); } @Override protected void after() { - server.stop(); + try { + server.shutdown(); + } catch (IOException e) { + // do nothing + } + } + + public void enqueueResponse(int statusCode, String fixturePath) throws Exception { + enqueueResponse(statusCode, fixturePath, ImmutableMap.of()); + } + + public void enqueueResponse(int statusCode, String fixturePath, Map headers) + throws Exception { + String body = Resources.toString(Resources.getResource(fixturePath), UTF_8); + MockResponse response = new MockResponse().setBody(body); + for (Map.Entry header : headers.entrySet()) { + response.setHeader(header.getKey(), header.getValue()); + } + server.enqueue(response); + } + + public void assertRequestMade(String method, String path) throws Exception { + assertRequestMade(method, path, null); } - public StubServer server() { - return server; + public void assertRequestMade(String method, String path, String fixturePath) throws Exception { + RecordedRequest recordedRequest = server.takeRequest(); + assertThat(recordedRequest.getMethod()).isEqualTo(method); + assertThat(recordedRequest.getPath()).isEqualTo(path); + if (fixturePath == null) { + assertThat(recordedRequest.getBodySize()).isEqualTo(0); + } else { + assertThat(jsonMatchesFixture(recordedRequest.getBody().readUtf8(), fixturePath)) + .isTrue(); + } } public HttpClient client() { String baseUrl = String.format("http://localhost:%d", server.getPort()); - GoCardlessClient client = GoCardlessClient.create("token", baseUrl);; + GoCardlessClient client = GoCardlessClient.create("token", baseUrl); return TestUtil.getHttpClient(client); } } diff --git a/src/test/java/com/gocardless/http/PaginatingIterableTest.java b/src/test/java/com/gocardless/http/PaginatingIterableTest.java index 3a8bebbf..53d7daab 100644 --- a/src/test/java/com/gocardless/http/PaginatingIterableTest.java +++ b/src/test/java/com/gocardless/http/PaginatingIterableTest.java @@ -10,28 +10,16 @@ import org.junit.Rule; import org.junit.Test; -import static com.xebialabs.restito.builder.stub.StubHttp.whenHttp; -import static com.xebialabs.restito.semantics.Action.resourceContent; -import static com.xebialabs.restito.semantics.Action.status; -import static com.xebialabs.restito.semantics.Condition.get; -import static com.xebialabs.restito.semantics.Condition.parameter; - import static org.assertj.core.api.Assertions.assertThat; -import static org.glassfish.grizzly.http.util.HttpStatus.OK_200; - public class PaginatingIterableTest { @Rule public MockHttp http = new MockHttp(); @Test - public void shouldIterateThroughPages() { - whenHttp(http.server()).match(get("/dummy"), parameter("id", "123"), - parameter("limit", "2")).then(status(OK_200), - resourceContent("fixtures/first-page.json")); - whenHttp(http.server()).match(get("/dummy"), parameter("id", "123"), - parameter("limit", "2"), parameter("after", "ID123")).then(status(OK_200), - resourceContent("fixtures/last-page.json")); + public void shouldIterateThroughPages() throws Exception { + http.enqueueResponse(200, "fixtures/first-page.json"); + http.enqueueResponse(200, "fixtures/last-page.json"); DummyListRequest> request = DummyListRequest.iterableRequest(http.client()); request.setLimit(2); @@ -44,16 +32,14 @@ public void shouldIterateThroughPages() { assertThat(items.get(1).intField).isEqualTo(222); assertThat(items.get(2).stringField).isEqualTo("baz"); assertThat(items.get(2).intField).isEqualTo(333); + http.assertRequestMade("GET", "/dummy?limit=2&id=123"); + http.assertRequestMade("GET", "/dummy?after=ID123&limit=2&id=123"); } @Test - public void shouldCopeWithEmptyLastPage() { - whenHttp(http.server()).match(get("/dummy"), parameter("id", "123"), - parameter("limit", "2")).then(status(OK_200), - resourceContent("fixtures/first-page.json")); - whenHttp(http.server()).match(get("/dummy"), parameter("id", "123"), - parameter("limit", "2"), parameter("after", "ID123")).then(status(OK_200), - resourceContent("fixtures/empty-page.json")); + public void shouldCopeWithEmptyLastPage() throws Exception { + http.enqueueResponse(200, "fixtures/first-page.json"); + http.enqueueResponse(200, "fixtures/empty-page.json"); DummyListRequest> request = DummyListRequest.iterableRequest(http.client()); request.setLimit(2); @@ -64,5 +50,7 @@ public void shouldCopeWithEmptyLastPage() { assertThat(items.get(0).intField).isEqualTo(111); assertThat(items.get(1).stringField).isEqualTo("bar"); assertThat(items.get(1).intField).isEqualTo(222); + http.assertRequestMade("GET", "/dummy?limit=2&id=123"); + http.assertRequestMade("GET", "/dummy?after=ID123&limit=2&id=123"); } } diff --git a/src/test/java/com/gocardless/http/PostRequestTest.java b/src/test/java/com/gocardless/http/PostRequestTest.java index 4791bec9..855c9c4e 100644 --- a/src/test/java/com/gocardless/http/PostRequestTest.java +++ b/src/test/java/com/gocardless/http/PostRequestTest.java @@ -2,19 +2,11 @@ import com.gocardless.http.HttpTestUtil.DummyItem; -import org.glassfish.grizzly.http.util.HttpStatus; +import com.google.common.collect.ImmutableMap; import org.junit.Rule; import org.junit.Test; -import static com.gocardless.http.HttpTestUtil.withJsonBody; - -import static com.xebialabs.restito.builder.stub.StubHttp.whenHttp; -import static com.xebialabs.restito.semantics.Action.header; -import static com.xebialabs.restito.semantics.Action.resourceContent; -import static com.xebialabs.restito.semantics.Action.status; -import static com.xebialabs.restito.semantics.Condition.*; - import static org.assertj.core.api.Assertions.assertThat; public class PostRequestTest { @@ -22,36 +14,35 @@ public class PostRequestTest { public MockHttp http = new MockHttp(); @Test - public void shouldPerformPostRequest() { - whenHttp(http.server()).match(post("/dummy"), not(withPostBody())).then( - status(HttpStatus.OK_200), resourceContent("fixtures/single.json")); + public void shouldPerformPostRequest() throws Exception { + http.enqueueResponse(200, "fixtures/single.json"); DummyPostRequest request = new DummyPostRequest(); DummyItem result = request.execute(); assertThat(result.stringField).isEqualTo("foo"); assertThat(result.intField).isEqualTo(123); + http.assertRequestMade("POST", "/dummy"); } @Test - public void shouldPerformPostRequestWithBody() { - whenHttp(http.server()).match(post("/dummy"), withJsonBody("fixtures/single.json")).then( - status(HttpStatus.OK_200), resourceContent("fixtures/single.json")); + public void shouldPerformPostRequestWithBody() throws Exception { + http.enqueueResponse(200, "fixtures/single.json"); DummyPostRequest request = new DummyPostRequestWithBody(); DummyItem result = request.execute(); assertThat(result.stringField).isEqualTo("foo"); assertThat(result.intField).isEqualTo(123); + http.assertRequestMade("POST", "/dummy", "fixtures/single.json"); } @Test - public void shouldPerformWrappedPostRequest() { - whenHttp(http.server()).match(post("/dummy"), not(withPostBody())).then( - status(HttpStatus.OK_200), resourceContent("fixtures/single.json"), - header("foo", "bar")); + public void shouldPerformWrappedPostRequest() throws Exception { + http.enqueueResponse(200, "fixtures/single.json", ImmutableMap.of("foo", "bar")); DummyPostRequest request = new DummyPostRequest(); HttpResponse result = request.executeWrapped(); assertThat(result.getStatusCode()).isEqualTo(200); assertThat(result.getHeaders().get("foo")).containsExactly("bar"); assertThat(result.getResource().stringField).isEqualTo("foo"); assertThat(result.getResource().intField).isEqualTo(123); + http.assertRequestMade("POST", "/dummy"); } private class DummyPostRequest extends PostRequest { diff --git a/src/test/java/com/gocardless/http/PutRequestTest.java b/src/test/java/com/gocardless/http/PutRequestTest.java index c6e24427..7a494e95 100644 --- a/src/test/java/com/gocardless/http/PutRequestTest.java +++ b/src/test/java/com/gocardless/http/PutRequestTest.java @@ -2,19 +2,9 @@ import com.gocardless.http.HttpTestUtil.DummyItem; -import org.glassfish.grizzly.http.util.HttpStatus; - import org.junit.Rule; import org.junit.Test; -import static com.gocardless.http.HttpTestUtil.withJsonBody; - -import static com.xebialabs.restito.builder.stub.StubHttp.whenHttp; -import static com.xebialabs.restito.semantics.Action.header; -import static com.xebialabs.restito.semantics.Action.resourceContent; -import static com.xebialabs.restito.semantics.Action.status; -import static com.xebialabs.restito.semantics.Condition.*; - import static org.assertj.core.api.Assertions.assertThat; public class PutRequestTest { @@ -22,35 +12,34 @@ public class PutRequestTest { public MockHttp http = new MockHttp(); @Test - public void shouldPerformPutRequest() { - whenHttp(http.server()).match(put("/dummy"), not(withPostBody())).then( - status(HttpStatus.OK_200), resourceContent("fixtures/single.json")); + public void shouldPerformPutRequest() throws Exception { + http.enqueueResponse(200, "fixtures/single.json"); DummyPutRequest request = new DummyPutRequest(); DummyItem result = request.execute(); assertThat(result.stringField).isEqualTo("foo"); assertThat(result.intField).isEqualTo(123); + http.assertRequestMade("PUT", "/dummy"); } @Test - public void shouldPerformPutRequestWithBody() { - whenHttp(http.server()).match(put("/dummy"), withJsonBody("fixtures/single.json")).then( - status(HttpStatus.OK_200), resourceContent("fixtures/single.json")); + public void shouldPerformPutRequestWithBody() throws Exception { + http.enqueueResponse(200, "fixtures/single.json"); DummyPutRequest request = new DummyPutRequestWithBody(); DummyItem result = request.execute(); assertThat(result.stringField).isEqualTo("foo"); assertThat(result.intField).isEqualTo(123); + http.assertRequestMade("PUT", "/dummy", "fixtures/single.json"); } - public void shouldPerformWrappedPutRequest() { - whenHttp(http.server()).match(put("/dummy"), not(withPostBody())).then( - status(HttpStatus.OK_200), resourceContent("fixtures/single.json"), - header("foo", "bar")); + public void shouldPerformWrappedPutRequest() throws Exception { + http.enqueueResponse(200, "fixtures/single.json"); DummyPutRequest request = new DummyPutRequest(); HttpResponse result = request.executeWrapped(); assertThat(result.getStatusCode()).isEqualTo(200); assertThat(result.getHeaders().get("foo")).containsExactly("bar"); assertThat(result.getResource().stringField).isEqualTo("foo"); assertThat(result.getResource().intField).isEqualTo(123); + http.assertRequestMade("PUT", "/dummy", "fixtures/single.json"); } private class DummyPutRequest extends PutRequest { From f77a9eaf6c1a5a2bcf42b328a51ba6b31a77c369 Mon Sep 17 00:00:00 2001 From: Crankshaft Robot Date: Tue, 30 Jun 2015 14:52:03 +0000 Subject: [PATCH 18/20] Crankshaft[BU0000019SF5VC] Client - Java @ 2015-06-30 14:52:03 +0000 727443e Matt Thomson Merge pull request #8 from gocardless/rename-http-to-api Rename Http{Request,Response} to Api{Request,Response} ---------------- b41575e Matt Thomson Rename Http{Request,Response} to Api{Request,Response} ---------------- --- .../{HttpRequest.java => ApiRequest.java} | 6 ++--- .../{HttpResponse.java => ApiResponse.java} | 6 ++--- .../java/com/gocardless/http/GetRequest.java | 6 ++--- .../java/com/gocardless/http/HttpClient.java | 26 +++++++++---------- .../java/com/gocardless/http/ListRequest.java | 2 +- .../java/com/gocardless/http/PostRequest.java | 6 ++--- .../java/com/gocardless/http/PutRequest.java | 6 ++--- .../com/gocardless/GoCardlessClientTest.java | 4 +-- .../com/gocardless/http/GetRequestTest.java | 4 +-- .../com/gocardless/http/PostRequestTest.java | 2 +- .../com/gocardless/http/PutRequestTest.java | 2 +- 11 files changed, 35 insertions(+), 35 deletions(-) rename src/main/java/com/gocardless/http/{HttpRequest.java => ApiRequest.java} (91%) rename src/main/java/com/gocardless/http/{HttpResponse.java => ApiResponse.java} (87%) diff --git a/src/main/java/com/gocardless/http/HttpRequest.java b/src/main/java/com/gocardless/http/ApiRequest.java similarity index 91% rename from src/main/java/com/gocardless/http/HttpRequest.java rename to src/main/java/com/gocardless/http/ApiRequest.java index 155c348f..b335e258 100644 --- a/src/main/java/com/gocardless/http/HttpRequest.java +++ b/src/main/java/com/gocardless/http/ApiRequest.java @@ -7,14 +7,14 @@ import com.google.common.collect.ImmutableMap; /** - * Base class for HTTP requests. + * Base class for API requests. * * @param the type of the item returned by this request. */ -abstract class HttpRequest { +abstract class ApiRequest { private transient final HttpClient httpClient; - HttpRequest(HttpClient httpClient) { + ApiRequest(HttpClient httpClient) { this.httpClient = httpClient; } diff --git a/src/main/java/com/gocardless/http/HttpResponse.java b/src/main/java/com/gocardless/http/ApiResponse.java similarity index 87% rename from src/main/java/com/gocardless/http/HttpResponse.java rename to src/main/java/com/gocardless/http/ApiResponse.java index 3b9f33c8..99f80f85 100644 --- a/src/main/java/com/gocardless/http/HttpResponse.java +++ b/src/main/java/com/gocardless/http/ApiResponse.java @@ -7,16 +7,16 @@ import com.google.common.collect.Multimap; /** - * Base class for HTTP responses. + * Base class for API responses. * * @param the type of the resource within this response. */ -public class HttpResponse { +public class ApiResponse { private final T resource; private final int statusCode; private final Multimap headers; - public HttpResponse(T resource, int statusCode, Map> headers) { + public ApiResponse(T resource, int statusCode, Map> headers) { this.resource = resource; this.statusCode = statusCode; this.headers = buildHeaderMap(headers); diff --git a/src/main/java/com/gocardless/http/GetRequest.java b/src/main/java/com/gocardless/http/GetRequest.java index f76382bb..551a57a7 100644 --- a/src/main/java/com/gocardless/http/GetRequest.java +++ b/src/main/java/com/gocardless/http/GetRequest.java @@ -7,7 +7,7 @@ * * @param the type of the item returned by this request. */ -public abstract class GetRequest extends HttpRequest { +public abstract class GetRequest extends ApiRequest { protected GetRequest(HttpClient httpClient) { super(httpClient); } @@ -26,12 +26,12 @@ public T execute() { /** * Executes this request. * - * Returns a {@link com.gocardless.http.HttpResponse} that wraps the + * Returns a {@link com.gocardless.http.ApiResponse} that wraps the * response entity. * * @throws com.gocardless.GoCardlessException */ - public HttpResponse executeWrapped() { + public ApiResponse executeWrapped() { return getHttpClient().executeWrapped(this); } diff --git a/src/main/java/com/gocardless/http/HttpClient.java b/src/main/java/com/gocardless/http/HttpClient.java index 5141ea5f..6ceda3cc 100644 --- a/src/main/java/com/gocardless/http/HttpClient.java +++ b/src/main/java/com/gocardless/http/HttpClient.java @@ -14,7 +14,7 @@ import com.squareup.okhttp.*; /** - * An HTTP client that can execute {@link HttpRequest}s. + * An HTTP client that can execute {@link ApiRequest}s. * * Users of this library should not need to access this class directly. */ @@ -54,32 +54,32 @@ public HttpClient(String accessToken, String baseUrl) { this.credentials = String.format("Bearer %s", accessToken); } - T execute(HttpRequest httpRequest) { - Request request = buildRequest(httpRequest); + T execute(ApiRequest apiRequest) { + Request request = buildRequest(apiRequest); Response response = execute(request); - return parseResponseBody(httpRequest, response); + return parseResponseBody(apiRequest, response); } - HttpResponse executeWrapped(HttpRequest httpRequest) { - Request request = buildRequest(httpRequest); + ApiResponse executeWrapped(ApiRequest apiRequest) { + Request request = buildRequest(apiRequest); Response response = execute(request); - T resource = parseResponseBody(httpRequest, response); - return new HttpResponse(resource, response.code(), response.headers().toMultimap()); + T resource = parseResponseBody(apiRequest, response); + return new ApiResponse(resource, response.code(), response.headers().toMultimap()); } - Request buildRequest(HttpRequest httpRequest) { - URL url = httpRequest.getUrl(urlFormatter); + Request buildRequest(ApiRequest apiRequest) { + URL url = apiRequest.getUrl(urlFormatter); Request.Builder request = new Request.Builder().url(url).header("Authorization", credentials) .header("User-Agent", USER_AGENT) - .method(httpRequest.getMethod(), getBody(httpRequest)); + .method(apiRequest.getMethod(), getBody(apiRequest)); for (Map.Entry entry : HEADERS.entrySet()) { request = request.header(entry.getKey(), entry.getValue()); } return request.build(); } - private RequestBody getBody(HttpRequest request) { + private RequestBody getBody(ApiRequest request) { if (!request.hasBody()) { if (request.getMethod().equals("GET")) { return null; @@ -104,7 +104,7 @@ private Response execute(Request request) { return response; } - private T parseResponseBody(HttpRequest request, Response response) { + private T parseResponseBody(ApiRequest request, Response response) { try (Reader stream = response.body().charStream()) { return request.parseResponse(stream, responseParser); } catch (IOException e) { diff --git a/src/main/java/com/gocardless/http/ListRequest.java b/src/main/java/com/gocardless/http/ListRequest.java index fc243ca7..f1e2c5e3 100644 --- a/src/main/java/com/gocardless/http/ListRequest.java +++ b/src/main/java/com/gocardless/http/ListRequest.java @@ -12,7 +12,7 @@ * * @param the type of the item returned by this request. */ -public abstract class ListRequest extends HttpRequest> { +public abstract class ListRequest extends ApiRequest> { private final ListRequestExecutor executor; private String after; private String before; diff --git a/src/main/java/com/gocardless/http/PostRequest.java b/src/main/java/com/gocardless/http/PostRequest.java index d3616d7e..c666f6ae 100644 --- a/src/main/java/com/gocardless/http/PostRequest.java +++ b/src/main/java/com/gocardless/http/PostRequest.java @@ -7,7 +7,7 @@ * * @param the type of the item returned by this request. */ -public abstract class PostRequest extends HttpRequest { +public abstract class PostRequest extends ApiRequest { protected PostRequest(HttpClient httpClient) { super(httpClient); } @@ -26,12 +26,12 @@ public T execute() { /** * Executes this request. * - * Returns a {@link com.gocardless.http.HttpResponse} that wraps the + * Returns a {@link com.gocardless.http.ApiResponse} that wraps the * response entity. * * @throws com.gocardless.GoCardlessException */ - public HttpResponse executeWrapped() { + public ApiResponse executeWrapped() { return getHttpClient().executeWrapped(this); } diff --git a/src/main/java/com/gocardless/http/PutRequest.java b/src/main/java/com/gocardless/http/PutRequest.java index 0c254bf9..c6026ac9 100644 --- a/src/main/java/com/gocardless/http/PutRequest.java +++ b/src/main/java/com/gocardless/http/PutRequest.java @@ -7,7 +7,7 @@ * * @param the type of the item returned by this request. */ -public abstract class PutRequest extends HttpRequest { +public abstract class PutRequest extends ApiRequest { protected PutRequest(HttpClient httpClient) { super(httpClient); } @@ -26,12 +26,12 @@ public T execute() { /** * Executes this request. * - * Returns a {@link com.gocardless.http.HttpResponse} that wraps the + * Returns a {@link com.gocardless.http.ApiResponse} that wraps the * response entity. * * @throws com.gocardless.GoCardlessException */ - public HttpResponse executeWrapped() { + public ApiResponse executeWrapped() { return getHttpClient().executeWrapped(this); } diff --git a/src/test/java/com/gocardless/GoCardlessClientTest.java b/src/test/java/com/gocardless/GoCardlessClientTest.java index 13d93144..b2fb9c43 100644 --- a/src/test/java/com/gocardless/GoCardlessClientTest.java +++ b/src/test/java/com/gocardless/GoCardlessClientTest.java @@ -5,7 +5,7 @@ import co.freeside.betamax.Betamax; import co.freeside.betamax.Recorder; -import com.gocardless.http.HttpResponse; +import com.gocardless.http.ApiResponse; import com.gocardless.http.HttpTestUtil; import com.gocardless.http.ListResponse; import com.gocardless.resources.*; @@ -48,7 +48,7 @@ public void shouldGetACustomer() { @Test @Betamax(tape = "get a customer wrapped") public void shouldGetACustomerWrapped() { - HttpResponse response = client.customers().get("CU00003068FG73").executeWrapped(); + ApiResponse response = client.customers().get("CU00003068FG73").executeWrapped(); assertThat(response.getStatusCode()).isEqualTo(200); assertThat(response.getHeaders().get("RateLimit-Limit")).containsExactly("1000"); Customer customer = response.getResource(); diff --git a/src/test/java/com/gocardless/http/GetRequestTest.java b/src/test/java/com/gocardless/http/GetRequestTest.java index 3d04e22e..dfcd65cd 100644 --- a/src/test/java/com/gocardless/http/GetRequestTest.java +++ b/src/test/java/com/gocardless/http/GetRequestTest.java @@ -1,7 +1,7 @@ package com.gocardless.http; import com.gocardless.errors.InvalidApiUsageException; -import com.gocardless.http.HttpResponse; +import com.gocardless.http.ApiResponse; import com.gocardless.http.HttpTestUtil.DummyItem; import com.google.common.collect.ImmutableMap; @@ -37,7 +37,7 @@ public void shouldPerformGetRequest() throws Exception { @Test public void shouldPerformWrappedGetRequest() throws Exception { http.enqueueResponse(200, "fixtures/single.json", ImmutableMap.of("foo", "bar")); - HttpResponse result = request.executeWrapped(); + ApiResponse result = request.executeWrapped(); assertThat(result.getStatusCode()).isEqualTo(200); assertThat(result.getHeaders().get("foo")).containsExactly("bar"); assertThat(result.getResource().stringField).isEqualTo("foo"); diff --git a/src/test/java/com/gocardless/http/PostRequestTest.java b/src/test/java/com/gocardless/http/PostRequestTest.java index 855c9c4e..ed73ee5c 100644 --- a/src/test/java/com/gocardless/http/PostRequestTest.java +++ b/src/test/java/com/gocardless/http/PostRequestTest.java @@ -37,7 +37,7 @@ public void shouldPerformPostRequestWithBody() throws Exception { public void shouldPerformWrappedPostRequest() throws Exception { http.enqueueResponse(200, "fixtures/single.json", ImmutableMap.of("foo", "bar")); DummyPostRequest request = new DummyPostRequest(); - HttpResponse result = request.executeWrapped(); + ApiResponse result = request.executeWrapped(); assertThat(result.getStatusCode()).isEqualTo(200); assertThat(result.getHeaders().get("foo")).containsExactly("bar"); assertThat(result.getResource().stringField).isEqualTo("foo"); diff --git a/src/test/java/com/gocardless/http/PutRequestTest.java b/src/test/java/com/gocardless/http/PutRequestTest.java index 7a494e95..076a6ac8 100644 --- a/src/test/java/com/gocardless/http/PutRequestTest.java +++ b/src/test/java/com/gocardless/http/PutRequestTest.java @@ -34,7 +34,7 @@ public void shouldPerformPutRequestWithBody() throws Exception { public void shouldPerformWrappedPutRequest() throws Exception { http.enqueueResponse(200, "fixtures/single.json"); DummyPutRequest request = new DummyPutRequest(); - HttpResponse result = request.executeWrapped(); + ApiResponse result = request.executeWrapped(); assertThat(result.getStatusCode()).isEqualTo(200); assertThat(result.getHeaders().get("foo")).containsExactly("bar"); assertThat(result.getResource().stringField).isEqualTo("foo"); From a070f6319e4a6ebfb6e8a6dd15da75068dcd745f Mon Sep 17 00:00:00 2001 From: Crankshaft Robot Date: Tue, 30 Jun 2015 16:52:10 +0000 Subject: [PATCH 19/20] Crankshaft[BU0000019TRHGY] Client - Java @ 2015-06-30 16:52:10 +0000 7d0cda5 Matt Thomson Merge pull request #9 from gocardless/wrapped-lists Make executeWrapped available for list requests ---------------- 2b171a1 Matt Thomson Make executeWrapped available for list requests ---------------- --- .../java/com/gocardless/http/ListRequest.java | 27 +++++++++++++++++++ .../com/gocardless/http/ListRequestTest.java | 23 ++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/src/main/java/com/gocardless/http/ListRequest.java b/src/main/java/com/gocardless/http/ListRequest.java index f1e2c5e3..e3563a79 100644 --- a/src/main/java/com/gocardless/http/ListRequest.java +++ b/src/main/java/com/gocardless/http/ListRequest.java @@ -34,6 +34,18 @@ public S execute() { return executor.execute(this, getHttpClient()); } + /** + * Executes this request. + * + * Returns a {@link com.gocardless.http.ApiResponse} that wraps the + * response entity. + * + * @throws com.gocardless.GoCardlessException + */ + public ApiResponse executeWrapped() { + return executor.executeWrapped(this, getHttpClient()); + } + @Override protected ListResponse parseResponse(Reader stream, ResponseParser responseParser) { return responseParser.parsePage(stream, getEnvelope(), getTypeToken()); @@ -80,6 +92,8 @@ protected void setLimit(Integer limit) { public interface ListRequestExecutor { S execute(ListRequest request, HttpClient client); + + ApiResponse executeWrapped(ListRequest request, HttpClient client); } public static ListRequestExecutor, T> pagingExecutor() { @@ -89,6 +103,12 @@ public ListResponse execute(ListRequest, T> request, HttpClient client) { return client.execute(request); } + + @Override + public ApiResponse> executeWrapped( + ListRequest, T> request, HttpClient client) { + return client.executeWrapped(request); + } }; } @@ -98,6 +118,13 @@ public static ListRequestExecutor, T> iteratingExecutor() { public Iterable execute(ListRequest, T> request, HttpClient client) { return new PaginatingIterable<>(request, client); } + + @Override + public ApiResponse> executeWrapped(ListRequest, T> request, + HttpClient client) { + throw new IllegalStateException( + "executeWrapped not available when iterating through list responses"); + } }; } } diff --git a/src/test/java/com/gocardless/http/ListRequestTest.java b/src/test/java/com/gocardless/http/ListRequestTest.java index 6d1677d0..9c311981 100644 --- a/src/test/java/com/gocardless/http/ListRequestTest.java +++ b/src/test/java/com/gocardless/http/ListRequestTest.java @@ -10,12 +10,15 @@ import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; import static org.assertj.core.api.Assertions.assertThat; public class ListRequestTest { @Rule public MockHttp http = new MockHttp(); + @Rule + public ExpectedException exception = ExpectedException.none(); @Test public void shouldPerformListRequest() throws Exception { @@ -31,6 +34,18 @@ public void shouldPerformListRequest() throws Exception { http.assertRequestMade("GET", "/dummy?id=123"); } + @Test + public void shouldPerformWrappedListRequest() throws Exception { + http.enqueueResponse(200, "fixtures/page.json", ImmutableMap.of("foo", "bar")); + DummyListRequest> request = + DummyListRequest.pageRequest(http.client()); + ApiResponse> result = request.executeWrapped(); + assertThat(result.getStatusCode()).isEqualTo(200); + assertThat(result.getHeaders().get("foo")).containsExactly("bar"); + assertThat(result.getResource().getItems()).hasSize(2); + http.assertRequestMade("GET", "/dummy?id=123"); + } + @Test public void shouldBeAbleToIterateThroughList() throws Exception { http.enqueueResponse(200, "fixtures/first-page.json"); @@ -50,6 +65,14 @@ public void shouldBeAbleToIterateThroughList() throws Exception { http.assertRequestMade("GET", "/dummy?after=ID123&id=123"); } + @Test + public void shouldNotAllowExecuteWrappedWhenIterating() { + DummyListRequest> request = + DummyListRequest.iterableRequest(http.client()); + exception.expect(IllegalStateException.class); + request.executeWrapped(); + } + static class DummyListRequest extends ListRequest { private DummyListRequest(HttpClient httpClient, ListRequestExecutor executor) { super(httpClient, executor); From 24e4ab672f7da7b38b8556738cfabbb0f3220ab9 Mon Sep 17 00:00:00 2001 From: Crankshaft Robot Date: Wed, 1 Jul 2015 08:42:28 +0000 Subject: [PATCH 20/20] Crankshaft[BU0000019ZMNKM] Client - Java @ 2015-07-01 08:42:28 +0000 --- README.md | 4 ++-- build.gradle | 2 +- src/main/java/com/gocardless/http/HttpClient.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3fb331fc..95d0ae37 100644 --- a/README.md +++ b/README.md @@ -14,14 +14,14 @@ With Maven: com.gocardless gocardless-pro - 0.2.4 + 0.3.0 ``` With Gradle: ``` -compile 'com.gocardless:gocardless-pro:0.2.4' +compile 'com.gocardless:gocardless-pro:0.3.0' ``` ## Initializing the client diff --git a/build.gradle b/build.gradle index 8912fe71..1dfba903 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'signing' sourceCompatibility = 1.7 group = ' com.gocardless' -version = '0.2.4' +version = '0.3.0' repositories { mavenCentral() diff --git a/src/main/java/com/gocardless/http/HttpClient.java b/src/main/java/com/gocardless/http/HttpClient.java index 6ceda3cc..99dccf0e 100644 --- a/src/main/java/com/gocardless/http/HttpClient.java +++ b/src/main/java/com/gocardless/http/HttpClient.java @@ -19,7 +19,7 @@ * Users of this library should not need to access this class directly. */ public class HttpClient { - private static final String USER_AGENT = String.format("gocardless-pro/0.2.4 %s/%s %s/%s", + private static final String USER_AGENT = String.format("gocardless-pro/0.3.0 %s/%s %s/%s", replaceSpaces(System.getProperty("os.name")), replaceSpaces(System.getProperty("os.version")), replaceSpaces(System.getProperty("java.vm.name")),