• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

hyperwallet / java-sdk / #654

01 May 2025 10:10PM CUT coverage: 97.037%. Remained the same
#654

push

grmeyer-hw-dev
Update changelog

5567 of 5737 relevant lines covered (97.04%)

67.05 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

95.91
/src/main/java/com/hyperwallet/clientsdk/Hyperwallet.java
1
package com.hyperwallet.clientsdk;
2

3
import com.fasterxml.jackson.core.type.TypeReference;
4
import com.hyperwallet.clientsdk.model.*;
5
import com.hyperwallet.clientsdk.util.*;
6
import org.apache.commons.lang3.StringUtils;
7

8
import java.io.IOException;
9
import java.net.Proxy;
10
import java.text.DateFormat;
11
import java.text.SimpleDateFormat;
12
import java.util.*;
13

14
/**
15
 * The Hyperwallet Client
16
 */
17
public class Hyperwallet {
18

19
    private static final String SANDBOX_API_BASE = "https://api.sandbox.hyperwallet.com/rest/v4";
20
    private static final int DEFAULT_CONNECT_TIMEOUT = 30 * 1000;
21
    private static final int DEFAULT_READ_TIMEOUT = 30 * 1000;
22
    public static final String VERSION = "2.4.3";
23
    private final HyperwalletApiClient apiClient;
24
    private final String programToken;
25
    private final String url;
26

27
    /**
28
     * Create Hyperwallet SDK instance
29
     *
30
     * @param username              API key assigned
31
     * @param password              API Password assigned
32
     * @param programToken          API program token
33
     * @param server                API server url
34
     * @param hyperwalletEncryption API encryption data
35
     * @param connectionTimeout     the timeout value that will be used for making new connections to the Hyperwallet API (in milliseconds).
36
     * @param readTimeout           the timeout value that will be used when reading data from an established connection to
37
     *                              the Hyperwallet API (in milliseconds).
38
     */
39
    public Hyperwallet(final String username, final String password, final String programToken, final String server,
40
            final HyperwalletEncryption hyperwalletEncryption, final int connectionTimeout, final int readTimeout) {
437✔
41
        apiClient = new HyperwalletApiClient(username, password, VERSION, hyperwalletEncryption, connectionTimeout, readTimeout);
437✔
42
        this.programToken = programToken;
437✔
43
        this.url = StringUtils.isEmpty(server) ? SANDBOX_API_BASE : server + "/rest/v4";
437✔
44
    }
437✔
45

46
    /**
47
     * Create Hyperwallet SDK instance
48
     *
49
     * @param username              API key assigned
50
     * @param password              API Password assigned
51
     * @param programToken          API program token
52
     * @param server                API server url
53
     * @param hyperwalletEncryption API encryption data
54
     */
55
    public Hyperwallet(final String username, final String password, final String programToken, final String server,
56
            final HyperwalletEncryption hyperwalletEncryption) {
57
        this(username, password, programToken, server, hyperwalletEncryption, DEFAULT_CONNECT_TIMEOUT, DEFAULT_READ_TIMEOUT);
437✔
58
    }
437✔
59

60
    /**
61
     * Create Hyperwallet SDK instance
62
     *
63
     * @param username          API key assigned
64
     * @param password          API Password assigned
65
     * @param programToken      API program token
66
     * @param server            API server url
67
     * @param connectionTimeout the timeout value that will be used for making new connections to the Hyperwallet API (in milliseconds).
68
     * @param readTimeout       the timeout value that will be used when reading data from an established connection to
69
     *                          the Hyperwallet API (in milliseconds).
70
     */
71
    public Hyperwallet(final String username, final String password, final String programToken, final String server, final int connectionTimeout,
72
            final int readTimeout) {
73
        this(username, password, programToken, server, null, connectionTimeout, readTimeout);
×
74
    }
×
75

76
    /**
77
     * Create Hyperwallet SDK instance
78
     *
79
     * @param username     API key assigned
80
     * @param password     API Password assigned
81
     * @param programToken API program token
82
     * @param server       API serer url
83
     */
84
    public Hyperwallet(final String username, final String password, final String programToken, final String server) {
85
        this(username, password, programToken, server, null);
×
86
    }
×
87

88
    /**
89
     * Create Hyperwallet SDK instance
90
     *
91
     * @param username          API key assigned
92
     * @param password          API Password assigned
93
     * @param programToken      API program token
94
     * @param connectionTimeout the timeout value that will be used for making new connections to the Hyperwallet API (in milliseconds).
95
     * @param readTimeout       the timeout value that will be used when reading data from an established connection to
96
     *                          the Hyperwallet API (in milliseconds).
97
     */
98
    public Hyperwallet(final String username, final String password, final String programToken, final int connectionTimeout, final int readTimeout) {
99
        this(username, password, programToken, null, null, connectionTimeout, readTimeout);
×
100
    }
×
101

102
    /**
103
     * Create Hyperwallet SDK instance
104
     *
105
     * @param username     API key assigned
106
     * @param password     API password
107
     * @param programToken API program token assigned
108
     */
109
    public Hyperwallet(final String username, final String password, final String programToken) {
110
        this(username, password, programToken, null, null);
435✔
111
    }
435✔
112

113
    /**
114
     * Create Hyperwallet SDK instance
115
     *
116
     * @param username              API key assigned
117
     * @param password              API password
118
     * @param programToken          API program token assigned
119
     * @param hyperwalletEncryption API encryption data
120
     */
121
    public Hyperwallet(final String username, final String password, final String programToken,
122
            final HyperwalletEncryption hyperwalletEncryption) {
123
        this(username, password, programToken, null, hyperwalletEncryption);
×
124
    }
×
125

126
    /**
127
     * Create Hyperwallet SDK instance
128
     *
129
     * @param username API key assigned
130
     * @param password API password
131
     */
132
    public Hyperwallet(final String username, final String password) {
133
        this(username, password, null);
430✔
134
    }
430✔
135

136
    /**
137
     * Create Proxy setting for Hyperwallet API Client instance
138
     *
139
     * @param url  url of Proxy
140
     * @param port port of Proxy
141
     */
142
    public void setHyperwalletProxy(final String url, final Integer port) {
143
        apiClient.setProxy(url, port);
×
144
    }
×
145

146
    /**
147
     * Create Proxy setting for Hyperwallet API Client instance
148
     *
149
     * @param proxy value of Proxy
150
     */
151
    public void setHyperwalletProxy(final Proxy proxy) {
152
        apiClient.setProxy(proxy);
×
153
    }
×
154

155
    /**
156
     * Returns Proxy setting for Hyperwallet API Client instance
157
     *
158
     * @return Proxy current Proxy config of client
159
     */
160
    public Proxy getHyperwalletProxy() {
161
        return apiClient.getProxy();
×
162
    }
163

164
    /**
165
     * Checks if current Hyperwallet API Client instance uses a proxy
166
     *
167
     * @return Boolean if client has a proxy config
168
     */
169
    public Boolean usesHyperwalletProxy() {
170
        return apiClient.usesProxy();
×
171
    }
172

173
    /**
174
     * Create Proxy Username setting for Authentication
175
     *
176
     * @param proxyUsername username of Proxy
177
     */
178
    public void setHyperwalletProxyUsername(final String proxyUsername) {
179
        apiClient.setProxyUsername(proxyUsername);
×
180
    }
×
181

182
    /**
183
     * Returns Proxy Username for Hyperwallet API Client instance
184
     *
185
     * @return current ProxyUsername
186
     */
187
    public String getHyperwalletProxyUsername() {
188
        return apiClient.getProxyUsername();
×
189
    }
190

191
    /**
192
     * Create Proxy Password setting for Authentication
193
     *
194
     * @param proxyPassword username of Proxy
195
     */
196
    public void setHyperwalletProxyPassword(final String proxyPassword) {
197
        apiClient.setProxyPassword(proxyPassword);
×
198
    }
×
199

200
    /**
201
     * Returns Proxy Password for Hyperwallet API Client instance
202
     *
203
     * @return current ProxyUsername
204
     */
205
    public String getHyperwalletProxyPassword() {
206
        return apiClient.getProxyPassword();
×
207
    }
208

209
    //--------------------------------------
210
    // Users
211
    //--------------------------------------
212

213
    /**
214
     * Create a User
215
     *
216
     * @param user Hyperwallet user representation
217
     * @return HyperwalletUser created User
218
     */
219
    public HyperwalletUser createUser(HyperwalletUser user) {
220
        if (user == null) {
5✔
221
            throw new HyperwalletException("User is required");
1✔
222
        }
223
        if (!StringUtils.isEmpty(user.getToken())) {
4✔
224
            throw new HyperwalletException("User token may not be present");
1✔
225
        }
226
        user = copy(user);
3✔
227
        user.setStatus(null);
3✔
228
        user.setCreatedOn(null);
3✔
229
        return apiClient.post(url + "/users", user, HyperwalletUser.class);
3✔
230
    }
231

232
    /**
233
     * Get User
234
     *
235
     * @param token user account token
236
     * @return HyperwalletUser retreived user
237
     */
238
    public HyperwalletUser getUser(String token) {
239
        if (StringUtils.isEmpty(token)) {
3✔
240
            throw new HyperwalletException("User token is required");
1✔
241
        }
242
        return apiClient.get(url + "/users/" + token, HyperwalletUser.class);
2✔
243
    }
244

245
    /**
246
     * Update User
247
     *
248
     * @param user Hyperwallet User representation object
249
     * @return HyperwalletUser updated user object
250
     */
251
    public HyperwalletUser updateUser(HyperwalletUser user) {
252
        if (user == null) {
4✔
253
            throw new HyperwalletException("User is required");
1✔
254
        }
255
        if (StringUtils.isEmpty(user.getToken())) {
3✔
256
            throw new HyperwalletException("User token is required");
1✔
257
        }
258
        return apiClient.put(url + "/users/" + user.getToken(), user, HyperwalletUser.class);
2✔
259
    }
260

261
    /**
262
     * List Users
263
     *
264
     * @return HyperwalletList of HyperwalletUser
265
     */
266
    public HyperwalletList<HyperwalletUser> listUsers() {
267
        return listUsers(null);
2✔
268
    }
269

270
    /**
271
     * List Users
272
     *
273
     * @param options List filter option
274
     * @return HyperwalletList of HyperwalletUser
275
     */
276
    public HyperwalletList<HyperwalletUser> listUsers(HyperwalletUsersListPaginationOptions options) {
277
        String url = paginate(this.url + "/users", options);
4✔
278
        if (options != null) {
4✔
279
            url = addParameter(url, "clientUserId", options.getClientUserId());
2✔
280
            url = addParameter(url, "email", options.getEmail());
2✔
281
            url = addParameter(url, "programToken", options.getProgramToken());
2✔
282
            url = addParameter(url, "status", options.getStatus());
2✔
283
            url = addParameter(url, "verificationStatus", options.getVerificationStatus());
2✔
284
            url = addParameter(url, "taxVerificationStatus", options.getTaxVerificationStatus());
2✔
285
        }
286
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletUser>>() {
8✔
287
        });
288
    }
289

290
    /**
291
     * Create Business Stakeholder
292
     *
293
     * @param stakeholder Hyperwallet Stakeholder representation
294
     * @param userToken   String
295
     * @return HyperwalletBusinessStakeholder created Stakeholder
296
     */
297
    public HyperwalletBusinessStakeholder createBusinessStakeholder(String userToken, HyperwalletBusinessStakeholder stakeholder) {
298
        if (stakeholder == null) {
4✔
299
            throw new HyperwalletException("Stakeholder is required");
2✔
300
        }
301
        if (userToken == null) {
2✔
302
            throw new HyperwalletException("User token may not be present");
1✔
303
        }
304
        stakeholder = copy(stakeholder);
1✔
305
        return apiClient.post(url + "/users/" + userToken + "/business-stakeholders", stakeholder, HyperwalletBusinessStakeholder.class);
1✔
306
    }
307

308
    /**
309
     * Update Business Stakeholder
310
     *
311
     * @param userToken   String
312
     * @param stakeholder Hyperwallet Stakeholder representation
313
     * @return HyperwalletBusinessStakeholder updated Stakeholder
314
     */
315
    public HyperwalletBusinessStakeholder updateBusinessStakeholder(String userToken, HyperwalletBusinessStakeholder stakeholder) {
316
        if (stakeholder == null) {
5✔
317
            throw new HyperwalletException("Stakeholder is required");
1✔
318
        }
319
        if (userToken == null) {
4✔
320
            throw new HyperwalletException("User token may not be present");
1✔
321
        }
322
        if (stakeholder.getToken() == null || stakeholder.getToken().equals("")) {
3✔
323
            throw new HyperwalletException("Stakeholder token may not be present");
2✔
324
        }
325
        stakeholder = copy(stakeholder);
1✔
326
        return apiClient.put(url + "/users/" + userToken + "/business-stakeholders/" + stakeholder.getToken(), stakeholder,
1✔
327
                HyperwalletBusinessStakeholder.class);
328
    }
329

330
    /**
331
     * List BusinessStakeholders
332
     *
333
     * @param userToken String
334
     * @return HyperwalletList of HyperwalletBusinessStakeholder
335
     */
336
    public HyperwalletList<HyperwalletBusinessStakeholder> listBusinessStakeholders(String userToken) {
337
        if (userToken == null) {
3✔
338
            throw new HyperwalletException("User token may not be present");
1✔
339
        }
340
        return listBusinessStakeholders(userToken, null);
2✔
341
    }
342

343
    /**
344
     * List BusinessStakeholders
345
     *
346
     * @param userToken String
347
     * @param options   List filter option
348
     * @return HyperwalletList of HyperwalletBusinessStakeholder
349
     */
350
    public HyperwalletList<HyperwalletBusinessStakeholder> listBusinessStakeholders(String userToken, HyperwalletPaginationOptions options) {
351
        if (userToken == null) {
5✔
352
            throw new HyperwalletException("User token may not be present");
1✔
353
        }
354
        String url = paginate(this.url + "/users/" + userToken + "/business-stakeholders", options);
4✔
355
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletBusinessStakeholder>>() {
8✔
356
        });
357
    }
358

359
    /**
360
     * Uploading documents for Business Stakeholder
361
     *
362
     * @param userToken                String
363
     * @param businessStakeholderToken Hyperwallet Stakeholder representation
364
     * @param uploadData               HyperwalletVerificationDocument to get uploaded
365
     * @return HyperwalletBusinessStakeholder updated Stakeholder with document status
366
     */
367
    public HyperwalletBusinessStakeholder uploadStakeholderDocuments(String userToken, String businessStakeholderToken,
368
            List<HyperwalletVerificationDocument> uploadData) {
369
        Multipart multipart = new Multipart();
7✔
370
        if (userToken == null) {
7✔
371
            throw new HyperwalletException("User token may not be present");
1✔
372
        }
373
        if (businessStakeholderToken == null) {
6✔
374
            throw new HyperwalletException("BusinessStakeholderToken may not be present");
1✔
375
        }
376
        if (uploadData == null || uploadData.size() < 1) {
5✔
377
            throw new HyperwalletException("Data for upload is missing");
1✔
378
        }
379
        if (uploadData.get(0).getUploadFiles() == null || uploadData.get(0).getUploadFiles().size() < 1) {
4✔
380
            throw new HyperwalletException("Upload Files are missing");
1✔
381
        }
382
        try {
383
            multipart = HyperwalletMultipartUtils.convert(uploadData);
3✔
384
        } catch (IOException e) {
×
385
            throw new HyperwalletException("Unable to convert to Multipart formdata");
×
386
        }
3✔
387

388
        return apiClient.put(url + "/users/" + userToken + "/business-stakeholders/" + businessStakeholderToken, multipart,
3✔
389
                HyperwalletBusinessStakeholder.class);
390
    }
391

392
    /**
393
     * Create Business Stakeholder Status transition
394
     *
395
     * @param userToken        String
396
     * @param stakeholderToken Hyperwallet Stakeholder token
397
     * @param transition       Hyperwallet Status Transition
398
     * @return HyperwalletStatusTransition new status for Business Stakeholder
399
     */
400
    public HyperwalletStatusTransition createBusinessStakeholderStatusTransition(String userToken, String stakeholderToken,
401
            HyperwalletStatusTransition transition) {
402
        if (userToken == null) {
8✔
403
            throw new HyperwalletException("User token may not be present");
2✔
404
        }
405
        if (stakeholderToken == null) {
6✔
406
            throw new HyperwalletException("StakeholderToken is required");
2✔
407
        }
408
        if (transition == null) {
4✔
409
            throw new HyperwalletException("Transition is required");
1✔
410
        }
411

412
        transition = copy(transition);
3✔
413
        transition.setCreatedOn(null);
3✔
414
        transition.setFromStatus(null);
3✔
415
        transition.setToStatus(null);
3✔
416

417
        return apiClient.post(url + "/users/" + userToken + "/business-stakeholders/" + stakeholderToken + "/status-transitions", transition,
3✔
418
                HyperwalletStatusTransition.class);
419
    }
420

421
    /**
422
     * Get Business Stakeholder Status transition
423
     *
424
     * @param userToken             String
425
     * @param stakeholderToken      Hyperwallet Stakeholder token
426
     * @param statusTransitionToken Hyperwallet Status Transition token
427
     * @return HyperwalletStatusTransition
428
     */
429
    public HyperwalletStatusTransition getBusinessStakeholderStatusTransition(String userToken, String stakeholderToken,
430
            String statusTransitionToken) {
431
        if (userToken == null) {
4✔
432
            throw new HyperwalletException("User token may not be present");
1✔
433
        }
434
        if (stakeholderToken == null) {
3✔
435
            throw new HyperwalletException("StakeholderToken is required");
1✔
436
        }
437
        if (statusTransitionToken == null) {
2✔
438
            throw new HyperwalletException("Status Transition token may not be present");
1✔
439
        }
440

441
        return apiClient
2✔
442
                .get(url + "/users/" + userToken + "/business-stakeholders/" + stakeholderToken + "/status-transitions/" + statusTransitionToken,
1✔
443
                        HyperwalletStatusTransition.class);
444
    }
445

446
    /**
447
     * List Business Stakeholder Status transition
448
     *
449
     * @param userToken        String
450
     * @param stakeholderToken Hyperwallet Stakeholder token
451
     * @param options          a {@link  HyperwalletPaginationOptions}
452
     * @return HyperwalletList of  HyperwalletStatusTransition
453
     */
454
    public HyperwalletList<HyperwalletStatusTransition> listBusinessStakeholderStatusTransition(String userToken, String stakeholderToken,
455
            HyperwalletPaginationOptions options) {
456
        if (userToken == null) {
4✔
457
            throw new HyperwalletException("User token may not be present");
1✔
458
        }
459
        if (stakeholderToken == null) {
3✔
460
            throw new HyperwalletException("StakeholderToken is required");
2✔
461
        }
462
        String url = paginate(this.url + "/users/" + userToken + "/business-stakeholders/" + stakeholderToken + "/status-transitions", options);
1✔
463
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletStatusTransition>>() {
2✔
464
        });
465
    }
466

467
    /**
468
     * List Business Stakeholder Status transition
469
     *
470
     * @param userToken        String
471
     * @param stakeholderToken Hyperwallet Stakeholder token
472
     * @return HyperwalletList of  HyperwalletStatusTransition
473
     */
474
    public HyperwalletList<HyperwalletStatusTransition> listBusinessStakeholderStatusTransition(String userToken, String stakeholderToken) {
475
        return listBusinessStakeholderStatusTransition(userToken, stakeholderToken, null);
×
476
    }
477

478
    /**
479
     * Activate a business stakeholder
480
     *
481
     * @param userToken        User token
482
     * @param stakeholderToken Business Stakeholder token
483
     * @return The status transition
484
     */
485
    public HyperwalletStatusTransition activateBusinessStakeholder(String userToken, String stakeholderToken) {
486
        return createBusinessStakeholderStatusTransition(userToken, stakeholderToken,
1✔
487
                new HyperwalletStatusTransition(HyperwalletStatusTransition.Status.ACTIVATED));
488
    }
489

490
    /**
491
     * De-activate a business stakeholder
492
     *
493
     * @param userToken        User token
494
     * @param stakeholderToken Business Stakeholder token
495
     * @return The status transition
496
     */
497
    public HyperwalletStatusTransition deactivateBusinessStakeholder(String userToken, String stakeholderToken) {
498
        return createBusinessStakeholderStatusTransition(userToken, stakeholderToken,
3✔
499
                new HyperwalletStatusTransition(HyperwalletStatusTransition.Status.DE_ACTIVATED));
500
    }
501

502
    /**
503
     * Get Authentication Token
504
     *
505
     * @param token user account token
506
     * @return HyperwalletAuthenticationToken retreived authentication token
507
     */
508
    public HyperwalletAuthenticationToken getAuthenticationToken(String token) {
509
        if (StringUtils.isEmpty(token)) {
2✔
510
            throw new HyperwalletException("User token is required");
1✔
511
        }
512
        String urlString = url + "/users/" + token + "/authentication-token";
1✔
513
        return apiClient.post(urlString, null, HyperwalletAuthenticationToken.class);
1✔
514
    }
515

516
    /**
517
     * Get User Status Transition
518
     *
519
     * @param userToken             User token
520
     * @param statusTransitionToken Status transition token
521
     * @return HyperwalletStatusTransition
522
     */
523
    public HyperwalletStatusTransition getUserStatusTransition(String userToken, String statusTransitionToken) {
524
        if (StringUtils.isEmpty(userToken)) {
3✔
525
            throw new HyperwalletException("User token is required");
1✔
526
        }
527
        if (StringUtils.isEmpty(statusTransitionToken)) {
2✔
528
            throw new HyperwalletException("Transition token is required");
1✔
529
        }
530
        return apiClient.get(url + "/users/" + userToken + "/status-transitions/" + statusTransitionToken, HyperwalletStatusTransition.class);
1✔
531
    }
532

533
    /**
534
     * List All User Status Transition information
535
     *
536
     * @param userToken User token
537
     * @return HyperwalletList of HyperwalletStatusTransition
538
     */
539
    public HyperwalletList<HyperwalletStatusTransition> listUserStatusTransitions(String userToken) {
540
        return listUserStatusTransitions(userToken, null);
1✔
541
    }
542

543
    /**
544
     * List Prepaid Card Status Transition information
545
     *
546
     * @param userToken User token
547
     * @param options   List filter option
548
     * @return HyperwalletList of HyperwalletStatusTransition
549
     */
550
    public HyperwalletList<HyperwalletStatusTransition> listUserStatusTransitions(String userToken, HyperwalletPaginationOptions options) {
551
        if (StringUtils.isEmpty(userToken)) {
5✔
552
            throw new HyperwalletException("User token is required");
2✔
553
        }
554
        String url = paginate(this.url + "/users/" + userToken + "/status-transitions", options);
3✔
555
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletStatusTransition>>() {
6✔
556
        });
557
    }
558

559
    /**
560
     * Create User Status transition
561
     *
562
     * @param userToken  String
563
     * @param transition Hyperwallet Status Transition
564
     * @return HyperwalletStatusTransition new status for Hyperwallet User
565
     */
566
    public HyperwalletStatusTransition createUserStatusTransition(String userToken, HyperwalletStatusTransition transition) {
567
        if (userToken == null) {
10✔
568
            throw new HyperwalletException("User token may not be present");
2✔
569
        }
570
        if (transition == null) {
8✔
571
            throw new HyperwalletException("Transition is required");
1✔
572
        }
573

574
        transition = copy(transition);
7✔
575
        transition.setCreatedOn(null);
7✔
576
        transition.setFromStatus(null);
7✔
577
        transition.setToStatus(null);
7✔
578

579
        return apiClient.post(url + "/users/" + userToken + "/status-transitions", transition, HyperwalletStatusTransition.class);
7✔
580
    }
581

582
    /**
583
     * Activate a User
584
     *
585
     * @param userToken User token
586
     * @return The status transition
587
     */
588
    public HyperwalletStatusTransition activateUser(String userToken) {
589
        return createUserStatusTransition(userToken, new HyperwalletStatusTransition(HyperwalletStatusTransition.Status.ACTIVATED));
1✔
590
    }
591

592
    /**
593
     * De-activate a User
594
     *
595
     * @param userToken User token
596
     * @return The status transition
597
     */
598
    public HyperwalletStatusTransition deactivateUser(String userToken) {
599
        return createUserStatusTransition(userToken, new HyperwalletStatusTransition(HyperwalletStatusTransition.Status.DE_ACTIVATED));
2✔
600
    }
601

602
    /**
603
     * Lock a User account
604
     *
605
     * @param userToken User token
606
     * @return The status transition
607
     */
608
    public HyperwalletStatusTransition lockUser(String userToken) {
609
        return createUserStatusTransition(userToken, new HyperwalletStatusTransition(HyperwalletStatusTransition.Status.LOCKED));
1✔
610
    }
611

612
    /**
613
     * Freeze a User account
614
     *
615
     * @param userToken User token
616
     * @return The status transition
617
     */
618
    public HyperwalletStatusTransition freezeUser(String userToken) {
619
        return createUserStatusTransition(userToken, new HyperwalletStatusTransition(HyperwalletStatusTransition.Status.FROZEN));
1✔
620
    }
621

622
    /**
623
     * Pre-activate a User account
624
     *
625
     * @param userToken User token
626
     * @return The status transition
627
     */
628
    public HyperwalletStatusTransition preactivateUser(String userToken) {
629
        return createUserStatusTransition(userToken, new HyperwalletStatusTransition(HyperwalletStatusTransition.Status.PRE_ACTIVATED));
1✔
630
    }
631

632
    //--------------------------------------
633
    // Prepaid Cards
634
    //--------------------------------------
635

636
    /**
637
     * Create Prepaid Card
638
     *
639
     * @param prepaidCard Prepaid Card object to create
640
     * @return HyperwalletPrepaidCard Prepaid Card object created
641
     */
642
    public HyperwalletPrepaidCard createOrReplacePrepaidCard(HyperwalletPrepaidCard prepaidCard) {
643
        if (prepaidCard == null) {
5✔
644
            throw new HyperwalletException("Prepaid Card is required");
1✔
645
        }
646
        if (StringUtils.isEmpty(prepaidCard.getUserToken())) {
4✔
647
            throw new HyperwalletException("User token is required");
1✔
648
        }
649
        if (!StringUtils.isEmpty(prepaidCard.getToken())) {
3✔
650
            throw new HyperwalletException("Prepaid Card token may not be present");
1✔
651
        }
652
        if (prepaidCard.getType() == null) {
2✔
653
            prepaidCard.setType(HyperwalletPrepaidCard.Type.PREPAID_CARD);
1✔
654
        }
655
        prepaidCard = copy(prepaidCard);
2✔
656
        prepaidCard.setStatus(null);
2✔
657
        prepaidCard.setCardType(null);
2✔
658
        prepaidCard.setCreatedOn(null);
2✔
659
        prepaidCard.setTransferMethodCountry(null);
2✔
660
        prepaidCard.setTransferMethodCurrency(null);
2✔
661
        prepaidCard.setCardNumber(null);
2✔
662
        prepaidCard.setCardBrand(null);
2✔
663
        prepaidCard.setDateOfExpiry(null);
2✔
664
        return apiClient.post(url + "/users/" + prepaidCard.getUserToken() + "/prepaid-cards", prepaidCard, HyperwalletPrepaidCard.class);
2✔
665
    }
666

667
    /**
668
     * Get Prepaid Card
669
     *
670
     * @param userToken        User token assigned
671
     * @param prepaidCardToken Prepaid Card token
672
     * @return HyperwalletPrepaidCard Prepaid Card
673
     */
674
    public HyperwalletPrepaidCard getPrepaidCard(String userToken, String prepaidCardToken) {
675
        if (StringUtils.isEmpty(userToken)) {
3✔
676
            throw new HyperwalletException("User token is required");
1✔
677
        }
678
        if (StringUtils.isEmpty(prepaidCardToken)) {
2✔
679
            throw new HyperwalletException("Prepaid Card token is required");
1✔
680
        }
681
        return apiClient.get(url + "/users/" + userToken + "/prepaid-cards/" + prepaidCardToken, HyperwalletPrepaidCard.class);
1✔
682
    }
683

684
    /**
685
     * Update Prepaid Card
686
     *
687
     * @param prepaidCard Prepaid Card object to create
688
     * @return HyperwalletPrepaidCard Prepaid Card object created
689
     */
690
    public HyperwalletPrepaidCard updatePrepaidCard(HyperwalletPrepaidCard prepaidCard) {
691
        if (prepaidCard == null) {
4✔
692
            throw new HyperwalletException("Prepaid Card is required");
1✔
693
        }
694
        if (StringUtils.isEmpty(prepaidCard.getUserToken())) {
3✔
695
            throw new HyperwalletException("User token is required");
1✔
696
        }
697
        if (StringUtils.isEmpty(prepaidCard.getToken())) {
2✔
698
            throw new HyperwalletException("Prepaid Card token is required");
1✔
699
        }
700
        return apiClient.put(url + "/users/" + prepaidCard.getUserToken() + "/prepaid-cards/" + prepaidCard.getToken(),
1✔
701
                prepaidCard,
702
                HyperwalletPrepaidCard.class);
703
    }
704

705
    /**
706
     * List User's Prepaid Card
707
     *
708
     * @param userToken User token assigned
709
     * @return HyperwalletList of HyperwalletPrepaidCard
710
     */
711
    public HyperwalletList<HyperwalletPrepaidCard> listPrepaidCards(String userToken) {
712
        return listPrepaidCards(userToken, null);
2✔
713
    }
714

715
    /**
716
     * List User's Prepaid Card
717
     *
718
     * @param userToken User token assigned
719
     * @param options   List filter option
720
     * @return HyperwalletList of HyperwalletPrepaidCard
721
     */
722
    public HyperwalletList<HyperwalletPrepaidCard> listPrepaidCards(String userToken, HyperwalletPrepaidCardListPaginationOptions options) {
723
        if (StringUtils.isEmpty(userToken)) {
5✔
724
            throw new HyperwalletException("User token is required");
2✔
725
        }
726
        String url = paginate(this.url + "/users/" + userToken + "/prepaid-cards", options);
3✔
727
        if (options != null && options.getStatus() != null) {
3✔
728
            url = addParameter(url, "status", options.getStatus());
1✔
729
        }
730
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletPrepaidCard>>() {
6✔
731
        });
732
    }
733

734
    /**
735
     * Suspend a prepaid card
736
     *
737
     * @param userToken        User token
738
     * @param prepaidCardToken Prepaid card token
739
     * @return The status transition
740
     */
741
    public HyperwalletStatusTransition suspendPrepaidCard(String userToken, String prepaidCardToken) {
742
        return createPrepaidCardStatusTransition(userToken, prepaidCardToken,
3✔
743
                new HyperwalletStatusTransition(HyperwalletStatusTransition.Status.SUSPENDED));
744
    }
745

746
    /**
747
     * Unsuspend a prepaid card
748
     *
749
     * @param userToken        User token
750
     * @param prepaidCardToken Prepaid card token
751
     * @return The status transition
752
     */
753
    public HyperwalletStatusTransition unsuspendPrepaidCard(String userToken, String prepaidCardToken) {
754
        return createPrepaidCardStatusTransition(userToken, prepaidCardToken,
3✔
755
                new HyperwalletStatusTransition(HyperwalletStatusTransition.Status.UNSUSPENDED));
756
    }
757

758
    /**
759
     * Mark a prepaid card as lost or stolen
760
     *
761
     * @param userToken        User token
762
     * @param prepaidCardToken Prepaid card token
763
     * @return The status transition
764
     */
765
    public HyperwalletStatusTransition lostOrStolenPrepaidCard(String userToken, String prepaidCardToken) {
766
        return createPrepaidCardStatusTransition(userToken, prepaidCardToken,
3✔
767
                new HyperwalletStatusTransition(HyperwalletStatusTransition.Status.LOST_OR_STOLEN));
768
    }
769

770
    /**
771
     * Deactivate a prepaid card
772
     *
773
     * @param userToken        User token
774
     * @param prepaidCardToken Prepaid card token
775
     * @return The status transition
776
     */
777
    public HyperwalletStatusTransition deactivatePrepaidCard(String userToken, String prepaidCardToken) {
778
        return createPrepaidCardStatusTransition(userToken, prepaidCardToken,
3✔
779
                new HyperwalletStatusTransition(HyperwalletStatusTransition.Status.DE_ACTIVATED));
780
    }
781

782
    /**
783
     * Lock a prepaid card
784
     *
785
     * @param userToken        User token
786
     * @param prepaidCardToken Prepaid card token
787
     * @return The status transition
788
     */
789
    public HyperwalletStatusTransition lockPrepaidCard(String userToken, String prepaidCardToken) {
790
        return createPrepaidCardStatusTransition(userToken, prepaidCardToken,
3✔
791
                new HyperwalletStatusTransition(HyperwalletStatusTransition.Status.LOCKED));
792
    }
793

794
    /**
795
     * Unlock a prepaid card
796
     *
797
     * @param userToken        User token
798
     * @param prepaidCardToken Prepaid card token
799
     * @return The status transition
800
     */
801
    public HyperwalletStatusTransition unlockPrepaidCard(String userToken, String prepaidCardToken) {
802
        return createPrepaidCardStatusTransition(userToken, prepaidCardToken,
3✔
803
                new HyperwalletStatusTransition(HyperwalletStatusTransition.Status.UNLOCKED));
804
    }
805

806
    /**
807
     * Create Prepaid Card Status Transition
808
     *
809
     * @param userToken        User token
810
     * @param prepaidCardToken Prepaid Card token
811
     * @param transition       Status transition information
812
     * @return HyperwalletStatusTransition new status for Prepaid Card
813
     */
814
    public HyperwalletStatusTransition createPrepaidCardStatusTransition(String userToken, String prepaidCardToken,
815
            HyperwalletStatusTransition transition) {
816
        if (transition == null) {
23✔
817
            throw new HyperwalletException("Transition is required");
1✔
818
        }
819
        if (StringUtils.isEmpty(userToken)) {
22✔
820
            throw new HyperwalletException("User token is required");
7✔
821
        }
822
        if (StringUtils.isEmpty(prepaidCardToken)) {
15✔
823
            throw new HyperwalletException("Prepaid Card token is required");
7✔
824
        }
825
        if (!StringUtils.isEmpty(transition.getToken())) {
8✔
826
            throw new HyperwalletException("Status Transition token may not be present");
1✔
827
        }
828
        transition = copy(transition);
7✔
829
        transition.setCreatedOn(null);
7✔
830
        transition.setFromStatus(null);
7✔
831
        transition.setToStatus(null);
7✔
832
        return apiClient.post(url + "/users/" + userToken + "/prepaid-cards/" + prepaidCardToken + "/status-transitions", transition,
7✔
833
                HyperwalletStatusTransition.class);
834
    }
835

836
    /**
837
     * Get Prepaid Card Status Transition
838
     *
839
     * @param userToken             User token
840
     * @param prepaidCardToken      Prepaid Card token
841
     * @param statusTransitionToken Status transition token
842
     * @return HyperwalletStatusTransition
843
     */
844
    public HyperwalletStatusTransition getPrepaidCardStatusTransition(String userToken, String prepaidCardToken, String statusTransitionToken) {
845
        if (StringUtils.isEmpty(userToken)) {
4✔
846
            throw new HyperwalletException("User token is required");
1✔
847
        }
848
        if (StringUtils.isEmpty(prepaidCardToken)) {
3✔
849
            throw new HyperwalletException("Prepaid Card token is required");
1✔
850
        }
851
        if (StringUtils.isEmpty(statusTransitionToken)) {
2✔
852
            throw new HyperwalletException("Transition token is required");
1✔
853
        }
854
        return apiClient.get(url + "/users/" + userToken + "/prepaid-cards/" + prepaidCardToken + "/status-transitions/" + statusTransitionToken,
1✔
855
                HyperwalletStatusTransition.class);
856
    }
857

858
    /**
859
     * List All Prepaid Card Status Transition information
860
     *
861
     * @param userToken        User token
862
     * @param prepaidCardToken Prepaid Card token
863
     * @return HyperwalletList of HyperwalletStatusTransition
864
     */
865
    public HyperwalletList<HyperwalletStatusTransition> listPrepaidCardStatusTransitions(String userToken, String prepaidCardToken) {
866
        return listPrepaidCardStatusTransitions(userToken, prepaidCardToken, null);
3✔
867
    }
868

869
    /**
870
     * List Prepaid Card Status Transition information
871
     *
872
     * @param userToken        User token
873
     * @param prepaidCardToken Prepaid Card token
874
     * @param options          List filter option
875
     * @return HyperwalletList of HyperwalletStatusTransition
876
     */
877
    public HyperwalletList<HyperwalletStatusTransition> listPrepaidCardStatusTransitions(String userToken, String prepaidCardToken,
878
            HyperwalletStatusTransitionListPaginationOptions options) {
879
        if (StringUtils.isEmpty(userToken)) {
7✔
880
            throw new HyperwalletException("User token is required");
2✔
881
        }
882
        if (StringUtils.isEmpty(prepaidCardToken)) {
5✔
883
            throw new HyperwalletException("Prepaid Card token is required");
2✔
884
        }
885
        String url = paginate(this.url + "/users/" + userToken + "/prepaid-cards/" + prepaidCardToken + "/status-transitions", options);
3✔
886
        if (options != null && options.getTransition() != null) {
3✔
887
            url = addParameter(url, "transition", options.getTransition());
1✔
888
        }
889
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletStatusTransition>>() {
6✔
890
        });
891
    }
892

893
    //--------------------------------------
894
    // Bank Cards
895
    //--------------------------------------
896

897
    /**
898
     * Create Bank Card
899
     *
900
     * @param bankCard Bank Card object to create
901
     * @return HyperwalletBankCard Bank Card object created
902
     */
903
    public HyperwalletBankCard createBankCard(HyperwalletBankCard bankCard) {
904
        if (bankCard == null) {
5✔
905
            throw new HyperwalletException("Bank Card is required");
1✔
906
        }
907
        if (StringUtils.isEmpty(bankCard.getUserToken())) {
4✔
908
            throw new HyperwalletException("User token is required");
1✔
909
        }
910
        if (!StringUtils.isEmpty(bankCard.getToken())) {
3✔
911
            throw new HyperwalletException("Bank Card token may not be present");
1✔
912
        }
913
        if (bankCard.getType() == null) {
2✔
914
            bankCard.setType(HyperwalletBankCard.Type.BANK_CARD);
1✔
915
        }
916
        bankCard = copy(bankCard);
2✔
917
        bankCard.setStatus(null);
2✔
918
        bankCard.setCardType(null);
2✔
919
        bankCard.setCreatedOn(null);
2✔
920
        bankCard.setCardBrand(null);
2✔
921
        return apiClient.post(url + "/users/" + bankCard.getUserToken() + "/bank-cards", bankCard, HyperwalletBankCard.class);
2✔
922
    }
923

924
    /**
925
     * Get Bank Card
926
     *
927
     * @param userToken     User token assigned
928
     * @param bankCardToken Bank Card token
929
     * @return HyperwalletBankCard Bank Card
930
     */
931
    public HyperwalletBankCard getBankCard(String userToken, String bankCardToken) {
932
        if (StringUtils.isEmpty(userToken)) {
3✔
933
            throw new HyperwalletException("User token is required");
1✔
934
        }
935
        if (StringUtils.isEmpty(bankCardToken)) {
2✔
936
            throw new HyperwalletException("Bank Card token is required");
1✔
937
        }
938
        return apiClient.get(url + "/users/" + userToken + "/bank-cards/" + bankCardToken, HyperwalletBankCard.class);
1✔
939
    }
940

941
    /**
942
     * Update Bank Card
943
     *
944
     * @param bankCard Bank Card object to create
945
     * @return HyperwalletBankCard Bank Card object created
946
     */
947
    public HyperwalletBankCard updateBankCard(HyperwalletBankCard bankCard) {
948
        if (bankCard == null) {
4✔
949
            throw new HyperwalletException("Bank Card is required");
1✔
950
        }
951
        if (StringUtils.isEmpty(bankCard.getUserToken())) {
3✔
952
            throw new HyperwalletException("User token is required");
1✔
953
        }
954
        if (StringUtils.isEmpty(bankCard.getToken())) {
2✔
955
            throw new HyperwalletException("Bank Card token is required");
1✔
956
        }
957
        return apiClient.put(url + "/users/" + bankCard.getUserToken() + "/bank-cards/" + bankCard.getToken(), bankCard, HyperwalletBankCard.class);
1✔
958
    }
959

960
    /**
961
     * List User's Bank Card
962
     *
963
     * @param userToken User token assigned
964
     * @return HyperwalletList of HyperwalletBankCard
965
     */
966
    public HyperwalletList<HyperwalletBankCard> listBankCards(String userToken) {
967
        return listBankCards(userToken, null);
2✔
968
    }
969

970
    /**
971
     * List User's Bank Card
972
     *
973
     * @param userToken User token assigned
974
     * @param options   List filter option
975
     * @return HyperwalletList of HyperwalletBankCard
976
     */
977
    public HyperwalletList<HyperwalletBankCard> listBankCards(String userToken, HyperwalletBankCardListPaginationOptions options) {
978
        if (StringUtils.isEmpty(userToken)) {
5✔
979
            throw new HyperwalletException("User token is required");
2✔
980
        }
981
        String url = paginate(this.url + "/users/" + userToken + "/bank-cards", options);
3✔
982
        if (options != null) {
3✔
983
            url = addParameter(url, "status", options.getStatus());
2✔
984

985
        }
986
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletBankCard>>() {
6✔
987
        });
988
    }
989

990
    /**
991
     * Deactivate a bank card
992
     *
993
     * @param userToken     User token
994
     * @param bankCardToken Bank card token
995
     * @return The status transition
996
     */
997
    public HyperwalletStatusTransition deactivateBankCard(String userToken, String bankCardToken) {
998
        return deactivateBankCard(userToken, bankCardToken, null);
3✔
999
    }
1000

1001
    /**
1002
     * Deactivate a bank card
1003
     *
1004
     * @param userToken     User token
1005
     * @param bankCardToken Bank card token
1006
     * @param notes         Comments regarding the status change
1007
     * @return The status transition
1008
     */
1009
    public HyperwalletStatusTransition deactivateBankCard(String userToken, String bankCardToken, String notes) {
1010
        return createBankCardStatusTransition(userToken,
8✔
1011
                bankCardToken,
1012
                new HyperwalletStatusTransition(HyperwalletStatusTransition.Status.DE_ACTIVATED).notes(notes));
4✔
1013
    }
1014

1015
    /**
1016
     * Create Bank Card Status Transition
1017
     *
1018
     * @param userToken     User token
1019
     * @param bankCardToken Bank Card token
1020
     * @param transition    Status transition information
1021
     * @return HyperwalletStatusTransition new status for Bank Card
1022
     */
1023
    public HyperwalletStatusTransition createBankCardStatusTransition(String userToken, String bankCardToken,
1024
            HyperwalletStatusTransition transition) {
1025
        if (transition == null) {
9✔
1026
            throw new HyperwalletException("Transition is required");
1✔
1027
        }
1028
        if (StringUtils.isEmpty(userToken)) {
8✔
1029
            throw new HyperwalletException("User token is required");
2✔
1030
        }
1031
        if (StringUtils.isEmpty(bankCardToken)) {
6✔
1032
            throw new HyperwalletException("Bank Card token is required");
2✔
1033
        }
1034
        if (!StringUtils.isEmpty(transition.getToken())) {
4✔
1035
            throw new HyperwalletException("Status Transition token may not be present");
1✔
1036
        }
1037
        transition = copy(transition);
3✔
1038
        transition.setCreatedOn(null);
3✔
1039
        transition.setFromStatus(null);
3✔
1040
        transition.setToStatus(null);
3✔
1041
        return apiClient.post(url + "/users/" + userToken + "/bank-cards/" + bankCardToken + "/status-transitions", transition,
3✔
1042
                HyperwalletStatusTransition.class);
1043
    }
1044

1045
    /**
1046
     * Get Bank Card Status Transition
1047
     *
1048
     * @param userToken             User token
1049
     * @param bankCardToken         Bank Card token
1050
     * @param statusTransitionToken Status transition token
1051
     * @return HyperwalletStatusTransition
1052
     */
1053
    public HyperwalletStatusTransition getBankCardStatusTransition(String userToken, String bankCardToken, String statusTransitionToken) {
1054
        if (StringUtils.isEmpty(userToken)) {
4✔
1055
            throw new HyperwalletException("User token is required");
1✔
1056
        }
1057
        if (StringUtils.isEmpty(bankCardToken)) {
3✔
1058
            throw new HyperwalletException("Bank Card token is required");
1✔
1059
        }
1060
        if (StringUtils.isEmpty(statusTransitionToken)) {
2✔
1061
            throw new HyperwalletException("Transition token is required");
1✔
1062
        }
1063
        return apiClient.get(url + "/users/" + userToken + "/bank-cards/" + bankCardToken + "/status-transitions/" + statusTransitionToken,
1✔
1064
                HyperwalletStatusTransition.class);
1065
    }
1066

1067
    /**
1068
     * List All Bank Card Status Transition information
1069
     *
1070
     * @param userToken     User token
1071
     * @param bankCardToken Bank Card token
1072
     * @return HyperwalletList of HyperwalletStatusTransition
1073
     */
1074
    public HyperwalletList<HyperwalletStatusTransition> listBankCardStatusTransitions(String userToken, String bankCardToken) {
1075
        return listBankCardStatusTransitions(userToken, bankCardToken, null);
3✔
1076
    }
1077

1078
    /**
1079
     * List Bank Card Status Transition information
1080
     *
1081
     * @param userToken     User token
1082
     * @param bankCardToken Bank Card token
1083
     * @param options       List filter option
1084
     * @return HyperwalletList of HyperwalletStatusTransition
1085
     */
1086
    public HyperwalletList<HyperwalletStatusTransition> listBankCardStatusTransitions(String userToken, String bankCardToken,
1087
            HyperwalletStatusTransitionListPaginationOptions options) {
1088
        if (StringUtils.isEmpty(userToken)) {
7✔
1089
            throw new HyperwalletException("User token is required");
2✔
1090
        }
1091
        if (StringUtils.isEmpty(bankCardToken)) {
5✔
1092
            throw new HyperwalletException("Bank Card token is required");
2✔
1093
        }
1094
        String url = paginate(this.url + "/users/" + userToken + "/bank-cards/" + bankCardToken + "/status-transitions", options);
3✔
1095
        if (options != null) {
3✔
1096
            url = addParameter(url, "transition", options.getTransition());
2✔
1097
        }
1098
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletStatusTransition>>() {
6✔
1099
        });
1100
    }
1101

1102
    //--------------------------------------
1103
    // Paper Checks
1104
    //--------------------------------------
1105

1106
    /**
1107
     * Create Paper Check
1108
     *
1109
     * @param paperCheck Paper Check object to create
1110
     * @return HyperwalletPaperCheck Paper Check object created
1111
     */
1112
    public HyperwalletPaperCheck createPaperCheck(HyperwalletPaperCheck paperCheck) {
1113
        if (paperCheck == null) {
5✔
1114
            throw new HyperwalletException("Paper Check is required");
1✔
1115
        }
1116
        if (StringUtils.isEmpty(paperCheck.getUserToken())) {
4✔
1117
            throw new HyperwalletException("User token is required");
1✔
1118
        }
1119
        if (!StringUtils.isEmpty(paperCheck.getToken())) {
3✔
1120
            throw new HyperwalletException("Paper Check token may not be present");
1✔
1121
        }
1122
        if (paperCheck.getType() == null) {
2✔
1123
            paperCheck.setType(HyperwalletPaperCheck.Type.PAPER_CHECK);
1✔
1124
        }
1125
        paperCheck = copy(paperCheck);
2✔
1126
        paperCheck.setStatus(null);
2✔
1127
        paperCheck.setCreatedOn(null);
2✔
1128
        return apiClient.post(url + "/users/" + paperCheck.getUserToken() + "/paper-checks", paperCheck, HyperwalletPaperCheck.class);
2✔
1129
    }
1130

1131
    /**
1132
     * Get Paper Check
1133
     *
1134
     * @param userToken       User token assigned
1135
     * @param paperCheckToken Paper Check token
1136
     * @return HyperwalletPaperCheck Paper Check
1137
     */
1138
    public HyperwalletPaperCheck getPaperCheck(String userToken, String paperCheckToken) {
1139
        if (StringUtils.isEmpty(userToken)) {
3✔
1140
            throw new HyperwalletException("User token is required");
1✔
1141
        }
1142
        if (StringUtils.isEmpty(paperCheckToken)) {
2✔
1143
            throw new HyperwalletException("Paper Check token is required");
1✔
1144
        }
1145
        return apiClient.get(url + "/users/" + userToken + "/paper-checks/" + paperCheckToken, HyperwalletPaperCheck.class);
1✔
1146
    }
1147

1148
    /**
1149
     * Update Paper Check
1150
     *
1151
     * @param paperCheck Paper Check object to create
1152
     * @return HyperwalletPaperCheck Paper Check object created
1153
     */
1154
    public HyperwalletPaperCheck updatePaperCheck(HyperwalletPaperCheck paperCheck) {
1155
        if (paperCheck == null) {
4✔
1156
            throw new HyperwalletException("Paper Check is required");
1✔
1157
        }
1158
        if (StringUtils.isEmpty(paperCheck.getUserToken())) {
3✔
1159
            throw new HyperwalletException("User token is required");
1✔
1160
        }
1161
        if (StringUtils.isEmpty(paperCheck.getToken())) {
2✔
1162
            throw new HyperwalletException("Paper Check token is required");
1✔
1163
        }
1164
        return apiClient
2✔
1165
                .put(url + "/users/" + paperCheck.getUserToken() + "/paper-checks/" + paperCheck.getToken(), paperCheck, HyperwalletPaperCheck.class);
1✔
1166
    }
1167

1168
    /**
1169
     * List User's Paper Check
1170
     *
1171
     * @param userToken User token assigned
1172
     * @return HyperwalletList of HyperwalletPaperCheck
1173
     */
1174
    public HyperwalletList<HyperwalletPaperCheck> listPaperChecks(String userToken) {
1175
        return listPaperChecks(userToken, null);
2✔
1176
    }
1177

1178
    /**
1179
     * List User's Paper Check
1180
     *
1181
     * @param userToken User token assigned
1182
     * @param options   List filter option
1183
     * @return HyperwalletList of HyperwalletPaperCheck
1184
     */
1185
    public HyperwalletList<HyperwalletPaperCheck> listPaperChecks(String userToken, HyperwalletPaperCheckListPaginationOptions options) {
1186
        if (StringUtils.isEmpty(userToken)) {
5✔
1187
            throw new HyperwalletException("User token is required");
2✔
1188
        }
1189
        String url = paginate(this.url + "/users/" + userToken + "/paper-checks", options);
3✔
1190
        if (options != null) {
3✔
1191
            url = addParameter(url, "status", options.getStatus());
2✔
1192
        }
1193
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletPaperCheck>>() {
6✔
1194
        });
1195
    }
1196

1197
    /**
1198
     * Deactivate a Paper Check
1199
     *
1200
     * @param userToken       User token
1201
     * @param paperCheckToken Paper Check token
1202
     * @return The status transition
1203
     */
1204
    public HyperwalletStatusTransition deactivatePaperCheck(String userToken, String paperCheckToken) {
1205
        return deactivatePaperCheck(userToken, paperCheckToken, null);
3✔
1206
    }
1207

1208
    /**
1209
     * Deactivate a Paper Check
1210
     *
1211
     * @param userToken       User token
1212
     * @param paperCheckToken Paper Check token
1213
     * @param notes           user notes
1214
     * @return The status transition
1215
     */
1216
    public HyperwalletStatusTransition deactivatePaperCheck(String userToken, String paperCheckToken, String notes) {
1217
        return createPaperCheckStatusTransition(userToken,
8✔
1218
                paperCheckToken,
1219
                new HyperwalletStatusTransition(HyperwalletStatusTransition.Status.DE_ACTIVATED).notes(notes));
4✔
1220
    }
1221

1222
    /**
1223
     * Create Paper Check Status Transition
1224
     *
1225
     * @param userToken       User token
1226
     * @param paperCheckToken Paper Check token
1227
     * @param transition      Status transition information
1228
     * @return HyperwalletStatusTransition new status for Paper Check
1229
     */
1230
    public HyperwalletStatusTransition createPaperCheckStatusTransition(String userToken, String paperCheckToken,
1231
            HyperwalletStatusTransition transition) {
1232
        if (transition == null) {
9✔
1233
            throw new HyperwalletException("Transition is required");
1✔
1234
        }
1235
        if (StringUtils.isEmpty(userToken)) {
8✔
1236
            throw new HyperwalletException("User token is required");
2✔
1237
        }
1238
        if (StringUtils.isEmpty(paperCheckToken)) {
6✔
1239
            throw new HyperwalletException("Paper Check token is required");
2✔
1240
        }
1241
        if (!StringUtils.isEmpty(transition.getToken())) {
4✔
1242
            throw new HyperwalletException("Status Transition token may not be present");
1✔
1243
        }
1244
        transition = copy(transition);
3✔
1245
        transition.setCreatedOn(null);
3✔
1246
        transition.setFromStatus(null);
3✔
1247
        transition.setToStatus(null);
3✔
1248
        return apiClient.post(url + "/users/" + userToken + "/paper-checks/" + paperCheckToken + "/status-transitions", transition,
3✔
1249
                HyperwalletStatusTransition.class);
1250
    }
1251

1252
    /**
1253
     * Get Paper Check Status Transition
1254
     *
1255
     * @param userToken             User token
1256
     * @param paperCheckToken       Paper Check token
1257
     * @param statusTransitionToken Status transition token
1258
     * @return HyperwalletStatusTransition
1259
     */
1260
    public HyperwalletStatusTransition getPaperCheckStatusTransition(String userToken, String paperCheckToken, String statusTransitionToken) {
1261
        if (StringUtils.isEmpty(userToken)) {
4✔
1262
            throw new HyperwalletException("User token is required");
1✔
1263
        }
1264
        if (StringUtils.isEmpty(paperCheckToken)) {
3✔
1265
            throw new HyperwalletException("Paper Check token is required");
1✔
1266
        }
1267
        if (StringUtils.isEmpty(statusTransitionToken)) {
2✔
1268
            throw new HyperwalletException("Transition token is required");
1✔
1269
        }
1270
        return apiClient.get(url + "/users/" + userToken + "/paper-checks/" + paperCheckToken + "/status-transitions/" + statusTransitionToken,
1✔
1271
                HyperwalletStatusTransition.class);
1272
    }
1273

1274
    /**
1275
     * List All Paper Check Status Transition information
1276
     *
1277
     * @param userToken       User token
1278
     * @param paperCheckToken Paper Check token
1279
     * @return HyperwalletList of HyperwalletStatusTransition
1280
     */
1281
    public HyperwalletList<HyperwalletStatusTransition> listPaperCheckStatusTransitions(String userToken, String paperCheckToken) {
1282
        return listPaperCheckStatusTransitions(userToken, paperCheckToken, null);
3✔
1283
    }
1284

1285
    /**
1286
     * List Paper Check Status Transition information
1287
     *
1288
     * @param userToken       User token
1289
     * @param paperCheckToken Paper Check token
1290
     * @param options         List filter option
1291
     * @return HyperwalletList of HyperwalletStatusTransition
1292
     */
1293
    public HyperwalletList<HyperwalletStatusTransition> listPaperCheckStatusTransitions(String userToken, String paperCheckToken,
1294
            HyperwalletStatusTransitionListPaginationOptions options) {
1295
        if (StringUtils.isEmpty(userToken)) {
7✔
1296
            throw new HyperwalletException("User token is required");
2✔
1297
        }
1298
        if (StringUtils.isEmpty(paperCheckToken)) {
5✔
1299
            throw new HyperwalletException("Paper Check token is required");
2✔
1300
        }
1301
        String url = paginate(this.url + "/users/" + userToken + "/paper-checks/" + paperCheckToken + "/status-transitions", options);
3✔
1302
        if (options != null) {
3✔
1303
            url = addParameter(url, "transition", options.getTransition());
2✔
1304
        }
1305
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletStatusTransition>>() {
6✔
1306
        });
1307
    }
1308

1309
    //--------------------------------------
1310
    // Transfers
1311
    //--------------------------------------
1312

1313
    /**
1314
     * Create Transfer Request
1315
     *
1316
     * @param transfer HyperwalletTransfer object to create
1317
     * @return HyperwalletTransfer Transfer object created
1318
     */
1319
    public HyperwalletTransfer createTransfer(HyperwalletTransfer transfer) {
1320
        if (transfer == null) {
6✔
1321
            throw new HyperwalletException("Transfer is required");
1✔
1322
        }
1323
        if (StringUtils.isEmpty(transfer.getSourceToken())) {
5✔
1324
            throw new HyperwalletException("Source token is required");
1✔
1325
        }
1326
        if (StringUtils.isEmpty(transfer.getDestinationToken())) {
4✔
1327
            throw new HyperwalletException("Destination token is required");
1✔
1328
        }
1329
        if (StringUtils.isEmpty(transfer.getClientTransferId())) {
3✔
1330
            throw new HyperwalletException("ClientTransferId is required");
1✔
1331
        }
1332
        transfer = copy(transfer);
2✔
1333
        transfer.setStatus(null);
2✔
1334
        transfer.setCreatedOn(null);
2✔
1335
        transfer.setExpiresOn(null);
2✔
1336
        return apiClient.post(url + "/transfers", transfer, HyperwalletTransfer.class);
2✔
1337
    }
1338

1339
    /**
1340
     * Get Transfer Request
1341
     *
1342
     * @param transferToken Transfer token assigned
1343
     * @return HyperwalletTransfer Transfer
1344
     */
1345
    public HyperwalletTransfer getTransfer(String transferToken) {
1346
        if (StringUtils.isEmpty(transferToken)) {
2✔
1347
            throw new HyperwalletException("Transfer token is required");
1✔
1348
        }
1349
        return apiClient.get(url + "/transfers/" + transferToken, HyperwalletTransfer.class);
1✔
1350
    }
1351

1352
    /**
1353
     * List Transfer Requests
1354
     *
1355
     * @param options List filter option
1356
     * @return HyperwalletList of HyperwalletTransfer
1357
     */
1358
    public HyperwalletList<HyperwalletTransfer> listTransfers(HyperwalletTransferListOptions options) {
1359
        String url = paginate(this.url + "/transfers", options);
3✔
1360
        if (options != null) {
3✔
1361
            url = addParameter(url, "clientTransferId", options.getClientTransferId());
2✔
1362
            url = addParameter(url, "sourceToken", options.getSourceToken());
2✔
1363
            url = addParameter(url, "destinationToken", options.getDestinationToken());
2✔
1364
        }
1365
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletTransfer>>() {
6✔
1366
        });
1367
    }
1368

1369
    /**
1370
     * List Transfer Requests
1371
     *
1372
     * @return HyperwalletList of HyperwalletTransfer
1373
     */
1374
    public HyperwalletList<HyperwalletTransfer> listTransfers() {
1375
        return listTransfers(null);
1✔
1376
    }
1377

1378
    /**
1379
     * Create Transfer Status Transition
1380
     *
1381
     * @param transferToken Transfer token assigned
1382
     * @param transition    transition value
1383
     * @return HyperwalletStatusTransition new status for Transfer Request
1384
     */
1385
    public HyperwalletStatusTransition createTransferStatusTransition(String transferToken, HyperwalletStatusTransition transition) {
1386
        if (transition == null) {
4✔
1387
            throw new HyperwalletException("Transition is required");
1✔
1388
        }
1389
        if (StringUtils.isEmpty(transferToken)) {
3✔
1390
            throw new HyperwalletException("Transfer token is required");
1✔
1391
        }
1392
        if (!StringUtils.isEmpty(transition.getToken())) {
2✔
1393
            throw new HyperwalletException("Status Transition token may not be present");
1✔
1394
        }
1395
        transition = copy(transition);
1✔
1396
        transition.setCreatedOn(null);
1✔
1397
        transition.setFromStatus(null);
1✔
1398
        transition.setToStatus(null);
1✔
1399
        return apiClient.post(url + "/transfers/" + transferToken + "/status-transitions", transition, HyperwalletStatusTransition.class);
1✔
1400
    }
1401

1402
    /**
1403
     * Get Transfer Status Transition
1404
     *
1405
     * @param transferToken         Transfer token assigned
1406
     * @param statusTransitionToken Status transition token
1407
     * @return HyperwalletStatusTransition new status for Transfer Request
1408
     */
1409
    public HyperwalletStatusTransition getTransferStatusTransition(String transferToken, String statusTransitionToken) {
1410
        if (StringUtils.isEmpty(transferToken)) {
3✔
1411
            throw new HyperwalletException("Transfer token is required");
1✔
1412
        }
1413
        if (StringUtils.isEmpty(statusTransitionToken)) {
2✔
1414
            throw new HyperwalletException("statusTransitionToken is required");
1✔
1415
        }
1416
        return apiClient.get(url + "/transfers/" + transferToken + "/status-transitions/" + statusTransitionToken, HyperwalletStatusTransition.class);
1✔
1417
    }
1418

1419
    /**
1420
     * List Transfer Status Transition
1421
     *
1422
     * @param transferToken Transfer token assigned
1423
     * @param options       List filter option
1424
     * @return HyperwalletList of HyperwalletStatusTransition
1425
     */
1426
    public HyperwalletList<HyperwalletStatusTransition> listTransferStatusTransition(String transferToken,
1427
            HyperwalletStatusTransitionListPaginationOptions options) {
1428
        if (StringUtils.isEmpty(transferToken)) {
2✔
1429
            throw new HyperwalletException("Transfer token is required");
1✔
1430
        }
1431
        String url = paginate(this.url + "/transfers/" + transferToken + "/status-transitions", options);
1✔
1432
        if (options != null) {
1✔
1433
            url = addParameter(url, "transition", options.getTransition());
1✔
1434
        }
1435
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletStatusTransition>>() {
2✔
1436
        });
1437
    }
1438

1439
    //--------------------------------------
1440
    // Transfer refunds
1441
    //--------------------------------------
1442

1443
    /**
1444
     * Create Transfer Refund
1445
     *
1446
     * @param transferToken  Transfer token assigned
1447
     * @param transferRefund Transfer Refund object to create
1448
     * @return Created Transfer Refund
1449
     */
1450
    public HyperwalletTransferRefund createTransferRefund(String transferToken, HyperwalletTransferRefund transferRefund) {
1451
        if (transferRefund == null) {
4✔
1452
            throw new HyperwalletException("Transfer Refund is required");
1✔
1453
        }
1454
        if (StringUtils.isEmpty(transferToken)) {
3✔
1455
            throw new HyperwalletException("Transfer token is required");
1✔
1456
        }
1457
        if (StringUtils.isEmpty(transferRefund.getClientRefundId())) {
2✔
1458
            throw new HyperwalletException("ClientRefundId is required");
1✔
1459
        }
1460

1461
        transferRefund = copy(transferRefund);
1✔
1462
        transferRefund.clearStatus();
1✔
1463
        transferRefund.clearCreatedOn();
1✔
1464
        return apiClient.post(url + "/transfers/" + transferToken + "/refunds", transferRefund, HyperwalletTransferRefund.class);
1✔
1465
    }
1466

1467
    /**
1468
     * Get Transfer Refund
1469
     *
1470
     * @param transferToken       Transfer token assigned
1471
     * @param transferRefundToken Transfer Refund token assigned
1472
     * @return Transfer Refund object
1473
     */
1474
    public HyperwalletTransferRefund getTransferRefund(String transferToken, String transferRefundToken) {
1475
        if (StringUtils.isEmpty(transferToken)) {
3✔
1476
            throw new HyperwalletException("Transfer token is required");
1✔
1477
        }
1478
        if (StringUtils.isEmpty(transferRefundToken)) {
2✔
1479
            throw new HyperwalletException("Transfer Refund token is required");
1✔
1480
        }
1481

1482
        return apiClient.get(url + "/transfers/" + transferToken + "/refunds/" + transferRefundToken, HyperwalletTransferRefund.class);
1✔
1483
    }
1484

1485
    /**
1486
     * List Transfer Refund Requests
1487
     *
1488
     * @param options       List filter option
1489
     * @param transferToken Transfer token assigned
1490
     * @return HyperwalletList of HyperwalletTransferRefund
1491
     */
1492
    public HyperwalletList<HyperwalletTransferRefund> listTransferRefunds(String transferToken, HyperwalletTransferRefundListOptions options) {
1493
        if (StringUtils.isEmpty(transferToken)) {
4✔
1494
            throw new HyperwalletException("Transfer token is required");
1✔
1495
        }
1496

1497
        String url = paginate(this.url + "/transfers/" + transferToken + "/refunds", options);
3✔
1498
        if (options != null) {
3✔
1499
            url = addParameter(url, "clientRefundId", options.getClientRefundId());
2✔
1500
            url = addParameter(url, "sourceToken", options.getSourceToken());
2✔
1501
            url = addParameter(url, "status", options.getStatus());
2✔
1502
        }
1503
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletTransferRefund>>() {
6✔
1504
        });
1505
    }
1506

1507
    //--------------------------------------
1508
    // PayPal Accounts
1509
    //--------------------------------------
1510

1511
    /**
1512
     * Create PayPal Account Request
1513
     *
1514
     * @param payPalAccount HyperwalletPayPalAccount object to create
1515
     * @return HyperwalletPayPalAccount created PayPal account for the specified user
1516
     */
1517
    public HyperwalletPayPalAccount createPayPalAccount(HyperwalletPayPalAccount payPalAccount) {
1518
        if (payPalAccount == null) {
9✔
1519
            throw new HyperwalletException("PayPal Account is required");
1✔
1520
        }
1521
        if (StringUtils.isEmpty(payPalAccount.getUserToken())) {
8✔
1522
            throw new HyperwalletException("User token is required");
1✔
1523
        }
1524
        if (StringUtils.isEmpty(payPalAccount.getTransferMethodCountry())) {
7✔
1525
            throw new HyperwalletException("Transfer Method Country is required");
1✔
1526
        }
1527
        if (StringUtils.isEmpty(payPalAccount.getTransferMethodCurrency())) {
6✔
1528
            throw new HyperwalletException("Transfer Method Currency is required");
1✔
1529
        }
1530
        if (StringUtils.isEmpty(payPalAccount.getEmail()) && StringUtils.isEmpty(payPalAccount.getAccountId())) {
5✔
1531
            throw new HyperwalletException("Email or AccountId is required");
1✔
1532
        }
1533
        if (!StringUtils.isEmpty(payPalAccount.getToken())) {
4✔
1534
            throw new HyperwalletException("PayPal Account token may not be present");
1✔
1535
        }
1536
        if (payPalAccount.getType() == null) {
3✔
1537
            payPalAccount.setType(HyperwalletPayPalAccount.Type.PAYPAL_ACCOUNT);
2✔
1538
        }
1539
        payPalAccount = copy(payPalAccount);
3✔
1540
        payPalAccount.setStatus(null);
3✔
1541
        payPalAccount.setCreatedOn(null);
3✔
1542
        return apiClient.post(url + "/users/" + payPalAccount.getUserToken() + "/paypal-accounts", payPalAccount, HyperwalletPayPalAccount.class);
3✔
1543
    }
1544

1545
    /**
1546
     * Get PayPal Account Request
1547
     *
1548
     * @param userToken          User token assigned
1549
     * @param payPalAccountToken PayPal Account token assigned
1550
     * @return HyperwalletPayPalAccount PayPal Account
1551
     */
1552
    public HyperwalletPayPalAccount getPayPalAccount(String userToken, String payPalAccountToken) {
1553
        if (StringUtils.isEmpty(userToken)) {
3✔
1554
            throw new HyperwalletException("User token is required");
1✔
1555
        }
1556
        if (StringUtils.isEmpty(payPalAccountToken)) {
2✔
1557
            throw new HyperwalletException("PayPal Account token is required");
1✔
1558
        }
1559
        return apiClient.get(url + "/users/" + userToken + "/paypal-accounts/" + payPalAccountToken, HyperwalletPayPalAccount.class);
1✔
1560
    }
1561

1562
    /**
1563
     * List PayPal Accounts
1564
     *
1565
     * @param userToken User token assigned
1566
     * @param options   List filter option
1567
     * @return HyperwalletList of HyperwalletPayPalAccount
1568
     */
1569
    public HyperwalletList<HyperwalletPayPalAccount> listPayPalAccounts(String userToken, HyperwalletPayPalAccountListPaginationOptions options) {
1570
        if (StringUtils.isEmpty(userToken)) {
4✔
1571
            throw new HyperwalletException("User token is required");
1✔
1572
        }
1573
        String url = paginate(this.url + "/users/" + userToken + "/paypal-accounts", options);
3✔
1574
        if (options != null) {
3✔
1575
            url = addParameter(url, "status", options.getStatus());
2✔
1576
        }
1577
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletPayPalAccount>>() {
6✔
1578
        });
1579
    }
1580

1581
    /**
1582
     * List PayPal Accounts
1583
     *
1584
     * @param userToken User token assigned
1585
     * @return HyperwalletList of HyperwalletPayPalAccount
1586
     */
1587
    public HyperwalletList<HyperwalletPayPalAccount> listPayPalAccounts(String userToken) {
1588
        return listPayPalAccounts(userToken, null);
1✔
1589
    }
1590

1591
    /**
1592
     * Deactivate PayPal Account
1593
     *
1594
     * @param userToken          User token
1595
     * @param payPalAccountToken PayPal Account token
1596
     * @return HyperwalletStatusTransition deactivated PayPal account
1597
     */
1598
    public HyperwalletStatusTransition deactivatePayPalAccount(String userToken, String payPalAccountToken) {
1599
        return deactivatePayPalAccount(userToken, payPalAccountToken, null);
3✔
1600
    }
1601

1602
    /**
1603
     * Deactivate PayPal Account
1604
     *
1605
     * @param userToken          User token
1606
     * @param payPalAccountToken PayPal Account token
1607
     * @param notes              Comments regarding the status change
1608
     * @return HyperwalletStatusTransition deactivated PayPal account
1609
     */
1610
    public HyperwalletStatusTransition deactivatePayPalAccount(String userToken, String payPalAccountToken, String notes) {
1611
        return createPayPalAccountStatusTransition(userToken,
8✔
1612
                payPalAccountToken,
1613
                new HyperwalletStatusTransition(HyperwalletStatusTransition.Status.DE_ACTIVATED).notes(notes));
4✔
1614
    }
1615

1616
    /**
1617
     * Create PayPal Account Status Transition
1618
     *
1619
     * @param userToken          User token
1620
     * @param payPalAccountToken PayPal Account token
1621
     * @param transition         Status transition information
1622
     * @return HyperwalletStatusTransition new status for PayPal Account
1623
     */
1624
    public HyperwalletStatusTransition createPayPalAccountStatusTransition(String userToken, String payPalAccountToken,
1625
            HyperwalletStatusTransition transition) {
1626
        if (transition == null) {
9✔
1627
            throw new HyperwalletException("Transition is required");
1✔
1628
        }
1629
        if (StringUtils.isEmpty(userToken)) {
8✔
1630
            throw new HyperwalletException("User token is required");
2✔
1631
        }
1632
        if (StringUtils.isEmpty(payPalAccountToken)) {
6✔
1633
            throw new HyperwalletException("PayPal Account token is required");
2✔
1634
        }
1635
        if (!StringUtils.isEmpty(transition.getToken())) {
4✔
1636
            throw new HyperwalletException("Status Transition token may not be present");
1✔
1637
        }
1638
        transition = copy(transition);
3✔
1639
        transition.setCreatedOn(null);
3✔
1640
        transition.setFromStatus(null);
3✔
1641
        transition.setToStatus(null);
3✔
1642
        return apiClient.post(url + "/users/" + userToken + "/paypal-accounts/" + payPalAccountToken + "/status-transitions", transition,
3✔
1643
                HyperwalletStatusTransition.class);
1644
    }
1645

1646
    /**
1647
     * Get PayPal Account Status Transition
1648
     *
1649
     * @param userToken             User token
1650
     * @param payPalAccountToken    PayPal Account token
1651
     * @param statusTransitionToken Status transition token
1652
     * @return HyperwalletStatusTransition
1653
     */
1654
    public HyperwalletStatusTransition getPayPalAccountStatusTransition(String userToken, String payPalAccountToken, String statusTransitionToken) {
1655
        if (StringUtils.isEmpty(userToken)) {
4✔
1656
            throw new HyperwalletException("User token is required");
1✔
1657
        }
1658
        if (StringUtils.isEmpty(payPalAccountToken)) {
3✔
1659
            throw new HyperwalletException("PayPal Account token is required");
1✔
1660
        }
1661
        if (StringUtils.isEmpty(statusTransitionToken)) {
2✔
1662
            throw new HyperwalletException("Transition token is required");
1✔
1663
        }
1664
        return apiClient.get(url + "/users/" + userToken + "/paypal-accounts/" + payPalAccountToken + "/status-transitions/" + statusTransitionToken,
1✔
1665
                HyperwalletStatusTransition.class);
1666
    }
1667

1668
    /**
1669
     * List All PayPal Account Status Transition information
1670
     *
1671
     * @param userToken          User token
1672
     * @param payPalAccountToken PayPal Account token
1673
     * @return HyperwalletList of HyperwalletStatusTransition
1674
     */
1675
    public HyperwalletList<HyperwalletStatusTransition> listPayPalAccountStatusTransitions(String userToken, String payPalAccountToken) {
1676
        return listPayPalAccountStatusTransitions(userToken, payPalAccountToken, null);
3✔
1677
    }
1678

1679
    /**
1680
     * List PayPal Account Status Transition information
1681
     *
1682
     * @param userToken          User token
1683
     * @param payPalAccountToken PayPal Account token
1684
     * @param options            List filter option
1685
     * @return HyperwalletList of HyperwalletStatusTransition
1686
     */
1687
    public HyperwalletList<HyperwalletStatusTransition> listPayPalAccountStatusTransitions(String userToken, String payPalAccountToken,
1688
            HyperwalletStatusTransitionListPaginationOptions options) {
1689
        if (StringUtils.isEmpty(userToken)) {
7✔
1690
            throw new HyperwalletException("User token is required");
2✔
1691
        }
1692
        if (StringUtils.isEmpty(payPalAccountToken)) {
5✔
1693
            throw new HyperwalletException("PayPal Account token is required");
2✔
1694
        }
1695
        String url = paginate(this.url + "/users/" + userToken + "/paypal-accounts/" + payPalAccountToken + "/status-transitions", options);
3✔
1696
        if (options != null) {
3✔
1697
            url = addParameter(url, "transition", options.getTransition());
2✔
1698
        }
1699
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletStatusTransition>>() {
6✔
1700
        });
1701
    }
1702

1703
    /**
1704
     * Update PayPal Account
1705
     *
1706
     * @param payPalAccount PayPal Account to Update.
1707
     * @return HyperwalletPayPalAccount Updated PayPal Account
1708
     */
1709
    public HyperwalletPayPalAccount updatePayPalAccount(HyperwalletPayPalAccount payPalAccount) {
1710
        if (payPalAccount == null) {
×
1711
            throw new HyperwalletException("PayPal Account is required");
×
1712
        }
1713
        if (StringUtils.isEmpty(payPalAccount.getUserToken())) {
×
1714
            throw new HyperwalletException("User token is required");
×
1715
        }
1716
        if (StringUtils.isEmpty(payPalAccount.getToken())) {
×
1717
            throw new HyperwalletException("PayPal Account token is required");
×
1718
        }
1719
        return apiClient.put(url + "/users/" + payPalAccount.getUserToken() + "/paypal-accounts/" + payPalAccount.getToken(), payPalAccount,
×
1720
                HyperwalletPayPalAccount.class);
1721
    }
1722

1723
    //--------------------------------------
1724
    // Venmo Accounts
1725
    //--------------------------------------
1726

1727
    /**
1728
     * Create Venmo Account
1729
     *
1730
     * @param venmoAccount HyperwalletVenmoAccount object to create
1731
     * @return HyperwalletVenmoAccount created Venmo account for the specified user
1732
     */
1733
    public HyperwalletVenmoAccount createVenmoAccount(HyperwalletVenmoAccount venmoAccount) {
1734
        if (venmoAccount == null) {
8✔
1735
            throw new HyperwalletException("Venmo Account is required");
1✔
1736
        }
1737
        if (StringUtils.isEmpty(venmoAccount.getUserToken())) {
7✔
1738
            throw new HyperwalletException("User token is required");
1✔
1739
        }
1740
        if (StringUtils.isEmpty(venmoAccount.getTransferMethodCountry())) {
6✔
1741
            throw new HyperwalletException("Transfer Method Country is required");
1✔
1742
        }
1743
        if (StringUtils.isEmpty(venmoAccount.getTransferMethodCurrency())) {
5✔
1744
            throw new HyperwalletException("Transfer Method Currency is required");
1✔
1745
        }
1746
        if (StringUtils.isEmpty(venmoAccount.getAccountId())) {
4✔
1747
            throw new HyperwalletException("Account is required");
1✔
1748
        }
1749
        if (StringUtils.isNotEmpty(venmoAccount.getToken())) {
3✔
1750
            throw new HyperwalletException("Venmo Account token may not be present");
1✔
1751
        }
1752
        if (venmoAccount.getType() == null) {
2✔
1753
            venmoAccount.setType(HyperwalletVenmoAccount.Type.VENMO_ACCOUNT);
1✔
1754
        }
1755
        venmoAccount = copy(venmoAccount);
2✔
1756
        venmoAccount.setStatus(null);
2✔
1757
        venmoAccount.setCreatedOn(null);
2✔
1758
        return apiClient.post(url + "/users/" + venmoAccount.getUserToken() + "/venmo-accounts", venmoAccount, HyperwalletVenmoAccount.class);
2✔
1759
    }
1760

1761
    /**
1762
     * Get Venmo Account
1763
     *
1764
     * @param userToken         User token assigned
1765
     * @param venmoAccountToken Venmo Account token assigned
1766
     * @return HyperwalletVenmoAccount Venmo Account
1767
     */
1768
    public HyperwalletVenmoAccount getVenmoAccount(String userToken, String venmoAccountToken) {
1769
        if (StringUtils.isEmpty(userToken)) {
3✔
1770
            throw new HyperwalletException("User token is required");
1✔
1771
        }
1772
        if (StringUtils.isEmpty(venmoAccountToken)) {
2✔
1773
            throw new HyperwalletException("venmo Account token is required");
1✔
1774
        }
1775
        return apiClient.get(url + "/users/" + userToken + "/venmo-accounts/" + venmoAccountToken, HyperwalletVenmoAccount.class);
1✔
1776
    }
1777

1778
    /**
1779
     * List Venmo Accounts
1780
     *
1781
     * @param userToken User token assigned
1782
     * @param options   List filter option
1783
     * @return HyperwalletList of HyperwalletVenmoAccount
1784
     */
1785
    public HyperwalletList<HyperwalletVenmoAccount> listVenmoAccounts(String userToken, HyperwalletVenmoAccountListPaginationOptions options) {
1786
        if (StringUtils.isEmpty(userToken)) {
3✔
1787
            throw new HyperwalletException("User token is required");
1✔
1788
        }
1789
        String url = paginate(this.url + "/users/" + userToken + "/venmo-accounts", options);
2✔
1790
        if (options != null) {
2✔
1791
            url = addParameter(url, "type", options.getType());
1✔
1792
            url = addParameter(url, "status", options.getStatus());
1✔
1793
        }
1794
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletVenmoAccount>>() {
4✔
1795
        });
1796
    }
1797

1798
    /**
1799
     * List Venmo Accounts
1800
     *
1801
     * @param userToken User token assigned
1802
     * @return HyperwalletList of HyperwalletVenmoAccount
1803
     */
1804
    public HyperwalletList<HyperwalletVenmoAccount> listVenmoAccounts(String userToken) {
1805
        return listVenmoAccounts(userToken, null);
1✔
1806
    }
1807

1808
    /**
1809
     * Update Venmo Account
1810
     *
1811
     * @param venmoAccount Venmo Account to Update.
1812
     * @return HyperwalletVenmoAccount Updated Venmo Account
1813
     */
1814
    public HyperwalletVenmoAccount updateVenmoAccount(HyperwalletVenmoAccount venmoAccount) {
1815
        if (venmoAccount == null) {
4✔
1816
            throw new HyperwalletException("Venmo Account is required");
1✔
1817
        }
1818
        if (StringUtils.isEmpty(venmoAccount.getUserToken())) {
3✔
1819
            throw new HyperwalletException("User token is required");
1✔
1820
        }
1821
        if (StringUtils.isEmpty(venmoAccount.getToken())) {
2✔
1822
            throw new HyperwalletException("Venmo Account token is required");
1✔
1823
        }
1824
        return apiClient.put(url + "/users/" + venmoAccount.getUserToken() + "/venmo-accounts/" + venmoAccount.getToken(), venmoAccount,
1✔
1825
                HyperwalletVenmoAccount.class);
1826
    }
1827

1828
    /**
1829
     * Deactivate Venmo Account
1830
     *
1831
     * @param userToken         User token
1832
     * @param venmoAccountToken Venmo account token
1833
     * @return HyperwalletStatusTransition deactivated venmo account
1834
     */
1835
    public HyperwalletStatusTransition deactivateVenmoAccount(String userToken, String venmoAccountToken) {
1836
        return deactivateVenmoAccount(userToken, venmoAccountToken, null);
3✔
1837
    }
1838

1839
    /**
1840
     * Deactivate Venmo Account
1841
     *
1842
     * @param userToken         User token
1843
     * @param venmoAccountToken Venmo account token
1844
     * @param notes             Comments regarding the status change
1845
     * @return HyperwalletStatusTransition deactivated Venmo account
1846
     */
1847
    public HyperwalletStatusTransition deactivateVenmoAccount(String userToken, String venmoAccountToken, String notes) {
1848
        return createVenmoAccountStatusTransition(userToken,
8✔
1849
                venmoAccountToken,
1850
                new HyperwalletStatusTransition(HyperwalletStatusTransition.Status.DE_ACTIVATED).notes(notes));
4✔
1851
    }
1852

1853
    /**
1854
     * Create Venmo Account Status Transition
1855
     *
1856
     * @param userToken         User token
1857
     * @param venmoAccountToken Venmo account token
1858
     * @param transition        Status transition information
1859
     * @return HyperwalletStatusTransition new status for Venmo Account
1860
     */
1861
    public HyperwalletStatusTransition createVenmoAccountStatusTransition(String userToken, String venmoAccountToken,
1862
            HyperwalletStatusTransition transition) {
1863
        if (transition == null) {
9✔
1864
            throw new HyperwalletException("Transition is required");
1✔
1865
        }
1866
        if (StringUtils.isEmpty(userToken)) {
8✔
1867
            throw new HyperwalletException("User token is required");
2✔
1868
        }
1869
        if (StringUtils.isEmpty(venmoAccountToken)) {
6✔
1870
            throw new HyperwalletException("Venmo account token is required");
2✔
1871
        }
1872
        if (!StringUtils.isEmpty(transition.getToken())) {
4✔
1873
            throw new HyperwalletException("Status Transition token may not be present");
1✔
1874
        }
1875
        transition = copy(transition);
3✔
1876
        transition.setCreatedOn(null);
3✔
1877
        transition.setFromStatus(null);
3✔
1878
        transition.setToStatus(null);
3✔
1879
        return apiClient.post(url + "/users/" + userToken + "/venmo-accounts/" + venmoAccountToken + "/status-transitions", transition,
3✔
1880
                HyperwalletStatusTransition.class);
1881
    }
1882

1883
    /**
1884
     * Get Venmo Account Status Transition
1885
     *
1886
     * @param userToken             User token
1887
     * @param venmoAccountToken     Venmo account token
1888
     * @param statusTransitionToken Status transition token
1889
     * @return HyperwalletStatusTransition
1890
     */
1891
    public HyperwalletStatusTransition getVenmoAccountStatusTransition(String userToken, String venmoAccountToken, String statusTransitionToken) {
1892
        if (StringUtils.isEmpty(userToken)) {
4✔
1893
            throw new HyperwalletException("User token is required");
1✔
1894
        }
1895
        if (StringUtils.isEmpty(venmoAccountToken)) {
3✔
1896
            throw new HyperwalletException("Venmo account token is required");
1✔
1897
        }
1898
        if (StringUtils.isEmpty(statusTransitionToken)) {
2✔
1899
            throw new HyperwalletException("Transition token is required");
1✔
1900
        }
1901
        return apiClient.get(url + "/users/" + userToken + "/venmo-accounts/" + venmoAccountToken + "/status-transitions/" + statusTransitionToken,
1✔
1902
                HyperwalletStatusTransition.class);
1903
    }
1904

1905
    /**
1906
     * List All Venmo Account Status Transition information
1907
     *
1908
     * @param userToken         User token
1909
     * @param venmoAccountToken Venmo account token
1910
     * @return HyperwalletList of HyperwalletStatusTransition
1911
     */
1912
    public HyperwalletList<HyperwalletStatusTransition> listVenmoAccountStatusTransitions(String userToken, String venmoAccountToken) {
1913
        return listVenmoAccountStatusTransitions(userToken, venmoAccountToken, null);
3✔
1914
    }
1915

1916
    /**
1917
     * List Venmo Account Status Transition information
1918
     *
1919
     * @param userToken         User token
1920
     * @param venmoAccountToken Venmo account token
1921
     * @param options           List filter option
1922
     * @return HyperwalletList of HyperwalletStatusTransition
1923
     */
1924
    public HyperwalletList<HyperwalletStatusTransition> listVenmoAccountStatusTransitions(String userToken, String venmoAccountToken,
1925
            HyperwalletStatusTransitionListPaginationOptions options) {
1926
        if (StringUtils.isEmpty(userToken)) {
7✔
1927
            throw new HyperwalletException("User token is required");
2✔
1928
        }
1929
        if (StringUtils.isEmpty(venmoAccountToken)) {
5✔
1930
            throw new HyperwalletException("Venmo account token is required");
2✔
1931
        }
1932
        String url = paginate(this.url + "/users/" + userToken + "/venmo-accounts/" + venmoAccountToken + "/status-transitions", options);
3✔
1933
        if (options != null) {
3✔
1934
            url = addParameter(url, "transition", options.getTransition());
2✔
1935
        }
1936
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletStatusTransition>>() {
6✔
1937
        });
1938
    }
1939

1940
    //--------------------------------------
1941
    // Bank Accounts
1942
    //--------------------------------------
1943

1944
    /**
1945
     * Create Bank Account
1946
     *
1947
     * @param bankAccount bank account representation
1948
     * @return HyperwalletBankAccount created bank account for the specicic user
1949
     */
1950
    public HyperwalletBankAccount createBankAccount(HyperwalletBankAccount bankAccount) {
1951
        if (bankAccount == null) {
4✔
1952
            throw new HyperwalletException("Bank Account is required");
1✔
1953
        }
1954
        if (StringUtils.isEmpty(bankAccount.getUserToken())) {
3✔
1955
            throw new HyperwalletException("User token is required");
1✔
1956
        }
1957
        if (!StringUtils.isEmpty(bankAccount.getToken())) {
2✔
1958
            throw new HyperwalletException("Bank Account token may not be present");
1✔
1959
        }
1960
        bankAccount = copy(bankAccount);
1✔
1961
        bankAccount.createdOn(null);
1✔
1962
        bankAccount.setStatus(null);
1✔
1963
        return apiClient.post(url + "/users/" + bankAccount.getUserToken() + "/bank-accounts", bankAccount, HyperwalletBankAccount.class);
1✔
1964
    }
1965

1966
    /**
1967
     * Get Bank Account
1968
     *
1969
     * @param userToken           User token assigned
1970
     * @param transferMethodToken Bank account token assigned
1971
     * @return HyperwalletBankAccount bank account information
1972
     */
1973
    public HyperwalletBankAccount getBankAccount(String userToken, String transferMethodToken) {
1974
        if (StringUtils.isEmpty(userToken)) {
3✔
1975
            throw new HyperwalletException("User token is required");
1✔
1976
        }
1977
        if (StringUtils.isEmpty(transferMethodToken)) {
2✔
1978
            throw new HyperwalletException("Bank Account token is required");
1✔
1979
        }
1980
        return apiClient.get(url + "/users/" + userToken + "/bank-accounts/" + transferMethodToken, HyperwalletBankAccount.class);
1✔
1981
    }
1982

1983
    /**
1984
     * Update Bank Account
1985
     *
1986
     * @param bankAccount Bank Account to update.
1987
     * @return HyperwalletBankAccount updated Bank Account
1988
     */
1989
    public HyperwalletBankAccount updateBankAccount(HyperwalletBankAccount bankAccount) {
1990
        if (bankAccount == null) {
4✔
1991
            throw new HyperwalletException("Bank Account is required");
1✔
1992
        }
1993
        if (StringUtils.isEmpty(bankAccount.getUserToken())) {
3✔
1994
            throw new HyperwalletException("User token is required");
1✔
1995
        }
1996
        if (StringUtils.isEmpty(bankAccount.getToken())) {
2✔
1997
            throw new HyperwalletException("Bank Account token is required");
1✔
1998
        }
1999
        return apiClient.put(url + "/users/" + bankAccount.getUserToken() + "/bank-accounts/" + bankAccount.getToken(), bankAccount,
1✔
2000
                HyperwalletBankAccount.class);
2001
    }
2002

2003
    /**
2004
     * List Bank Accounts
2005
     *
2006
     * @param userToken User token assigned
2007
     * @return HyperwalletList of HyperwalletBankAccount
2008
     */
2009
    public HyperwalletList<HyperwalletBankAccount> listBankAccounts(String userToken) {
2010
        return listBankAccounts(userToken, null);
2✔
2011
    }
2012

2013
    /**
2014
     * List Bank Accounts
2015
     *
2016
     * @param userToken User token assigned
2017
     * @param options   List filter option
2018
     * @return HyperwalletList of HyperwalletBankAccount
2019
     */
2020
    public HyperwalletList<HyperwalletBankAccount> listBankAccounts(String userToken, HyperwalletBankAccountsListPaginationOptions options) {
2021

2022
        if (StringUtils.isEmpty(userToken)) {
5✔
2023
            throw new HyperwalletException("User token is required");
2✔
2024
        }
2025
        String url = paginate(this.url + "/users/" + userToken + "/bank-accounts", options);
3✔
2026
        if (options != null) {
3✔
2027
            url = addParameter(url, "type", options.getType());
2✔
2028
            url = addParameter(url, "status", options.getStatus());
2✔
2029
        }
2030
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletBankAccount>>() {
6✔
2031
        });
2032
    }
2033

2034
    /**
2035
     * Deactivate Bank Account
2036
     *
2037
     * @param userToken        User token
2038
     * @param bankAccountToken Bank Account token
2039
     * @return HyperwalletStatusTransition deactivated bank account
2040
     */
2041
    public HyperwalletStatusTransition deactivateBankAccount(String userToken, String bankAccountToken) {
2042
        return createBankAccountStatusTransition(userToken, bankAccountToken,
3✔
2043
                new HyperwalletStatusTransition(HyperwalletStatusTransition.Status.DE_ACTIVATED));
2044
    }
2045

2046
    /**
2047
     * Create Bank Account Status Transition
2048
     *
2049
     * @param userToken        User token
2050
     * @param bankAccountToken Bank Account token
2051
     * @param transition       Status transition information
2052
     * @return HyperwalletStatusTransition
2053
     */
2054
    public HyperwalletStatusTransition createBankAccountStatusTransition(String userToken, String bankAccountToken,
2055
            HyperwalletStatusTransition transition) {
2056
        if (transition == null) {
8✔
2057
            throw new HyperwalletException("Transition is required");
1✔
2058
        }
2059
        if (StringUtils.isEmpty(userToken)) {
7✔
2060
            throw new HyperwalletException("User token is required");
2✔
2061
        }
2062
        if (StringUtils.isEmpty(bankAccountToken)) {
5✔
2063
            throw new HyperwalletException("Bank Account token is required");
2✔
2064
        }
2065
        if (!StringUtils.isEmpty(transition.getToken())) {
3✔
2066
            throw new HyperwalletException("Status Transition token may not be present");
1✔
2067
        }
2068
        transition = copy(transition);
2✔
2069
        transition.setCreatedOn(null);
2✔
2070
        transition.setFromStatus(null);
2✔
2071
        transition.setToStatus(null);
2✔
2072
        return apiClient.post(url + "/users/" + userToken + "/bank-accounts/" + bankAccountToken + "/status-transitions", transition,
2✔
2073
                HyperwalletStatusTransition.class);
2074
    }
2075

2076
    /**
2077
     * Get Bank Account Status Transition
2078
     *
2079
     * @param userToken             User token
2080
     * @param bankAccountToken      Bank Account token
2081
     * @param statusTransitionToken Status transition token
2082
     * @return HyperwalletStatusTransition
2083
     */
2084
    public HyperwalletStatusTransition getBankAccountStatusTransition(String userToken, String bankAccountToken, String statusTransitionToken) {
2085
        if (StringUtils.isEmpty(userToken)) {
4✔
2086
            throw new HyperwalletException("User token is required");
1✔
2087
        }
2088
        if (StringUtils.isEmpty(bankAccountToken)) {
3✔
2089
            throw new HyperwalletException("Bank Account token is required");
1✔
2090
        }
2091
        if (StringUtils.isEmpty(statusTransitionToken)) {
2✔
2092
            throw new HyperwalletException("Status Transition token may not be present");
1✔
2093
        }
2094
        return apiClient.get(url + "/users/" + userToken + "/bank-accounts/" + bankAccountToken + "/status-transitions/" + statusTransitionToken,
1✔
2095
                HyperwalletStatusTransition.class);
2096
    }
2097

2098
    /**
2099
     * List All Bank Account Status Transition
2100
     *
2101
     * @param userToken        User token
2102
     * @param bankAccountToken Bank Account token
2103
     * @return HyperwalletList of HyperwalletStatusTransition
2104
     */
2105
    public HyperwalletList<HyperwalletStatusTransition> listBankAccountStatusTransitions(String userToken, String bankAccountToken) {
2106
        return listBankAccountStatusTransitions(userToken, bankAccountToken, null);
3✔
2107
    }
2108

2109
    /**
2110
     * List Bank Account Status Transition
2111
     *
2112
     * @param userToken        User token
2113
     * @param bankAccountToken Bank Account token
2114
     * @param options          List filter option
2115
     * @return HyperwalletList of HyperwalletStatusTransition
2116
     */
2117
    public HyperwalletList<HyperwalletStatusTransition> listBankAccountStatusTransitions(String userToken, String bankAccountToken,
2118
            HyperwalletStatusTransitionListPaginationOptions options) {
2119
        if (StringUtils.isEmpty(userToken)) {
7✔
2120
            throw new HyperwalletException("User token is required");
2✔
2121
        }
2122
        if (StringUtils.isEmpty(bankAccountToken)) {
5✔
2123
            throw new HyperwalletException("Bank Account token is required");
2✔
2124
        }
2125
        String url = paginate(this.url + "/users/" + userToken + "/bank-accounts/" + bankAccountToken + "/status-transitions", options);
3✔
2126
        if (options != null) {
3✔
2127
            url = addParameter(url, "transition", options.getTransition());
2✔
2128
        }
2129
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletStatusTransition>>() {
6✔
2130
        });
2131
    }
2132

2133
    //--------------------------------------
2134
    // Balances
2135
    //--------------------------------------
2136

2137
    /**
2138
     * List all User's Balances
2139
     *
2140
     * @param userToken User token assigned
2141
     * @return HyperwalletList of HyperwalletBalance
2142
     */
2143
    public HyperwalletList<HyperwalletBalance> listBalancesForUser(String userToken) {
2144
        return listBalancesForUser(userToken, null);
2✔
2145
    }
2146

2147
    /**
2148
     * List all User's Balances
2149
     *
2150
     * @param userToken User token assigned
2151
     * @param options   List filter option
2152
     * @return HyperwalletList list of HyperwalletBalance
2153
     */
2154
    public HyperwalletList<HyperwalletBalance> listBalancesForUser(String userToken, HyperwalletBalanceListOptions options) {
2155
        if (StringUtils.isEmpty(userToken)) {
5✔
2156
            throw new HyperwalletException("User token is required");
2✔
2157
        }
2158
        String url = this.url + "/users/" + userToken + "/balances";
3✔
2159
        if (options != null) {
3✔
2160
            url = addParameter(url, "currency", options.getCurrency());
2✔
2161
            url = addParameter(url, "sortBy", options.getSortBy());
2✔
2162
            url = addParameter(url, "limit", options.getLimit());
2✔
2163
        }
2164
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletBalance>>() {
6✔
2165
        });
2166
    }
2167

2168
    /**
2169
     * List all Program account balances
2170
     *
2171
     * @param accountToken Account token assigned
2172
     * @param programToken Program token assigned
2173
     * @return HyperwalletList of HyperwalletBalance
2174
     */
2175
    public HyperwalletList<HyperwalletBalance> listBalancesForAccount(String programToken, String accountToken) {
2176
        return listBalancesForAccount(programToken, accountToken, null);
3✔
2177
    }
2178

2179
    /**
2180
     * List all Program account balances
2181
     *
2182
     * @param accountToken Account token assigned
2183
     * @param programToken Program token assigned
2184
     * @param options      List filter option
2185
     * @return HyperwalletList list of HyperwalletBalance
2186
     */
2187
    public HyperwalletList<HyperwalletBalance> listBalancesForAccount(String programToken, String accountToken,
2188
            HyperwalletBalanceListOptions options) {
2189
        if (StringUtils.isEmpty(programToken)) {
7✔
2190
            throw new HyperwalletException("Program token is required");
2✔
2191
        }
2192
        if (StringUtils.isEmpty(accountToken)) {
5✔
2193
            throw new HyperwalletException("Account token is required");
2✔
2194
        }
2195
        String url = this.url + "/programs/" + programToken + "/accounts/" + accountToken + "/balances";
3✔
2196
        if (options != null) {
3✔
2197
            url = addParameter(url, "currency", options.getCurrency());
2✔
2198
            url = addParameter(url, "sortBy", options.getSortBy());
2✔
2199
            url = addParameter(url, "limit", options.getLimit());
2✔
2200
        }
2201
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletBalance>>() {
6✔
2202
        });
2203
    }
2204

2205
    /**
2206
     * List all User's Prepaid Card Balances
2207
     *
2208
     * @param userToken        User token assigned
2209
     * @param prepaidCardToken Prepaid Card token assigned from User's Prepaid Card
2210
     * @return HyperwalletList of HyperwalletBalances
2211
     */
2212
    public HyperwalletList<HyperwalletBalance> listBalancesForPrepaidCard(String userToken, String prepaidCardToken) {
2213
        return listBalancesForPrepaidCard(userToken, prepaidCardToken, null);
3✔
2214
    }
2215

2216
    /**
2217
     * List all User's Prepaid Card Balances
2218
     *
2219
     * @param userToken        User token assigned
2220
     * @param prepaidCardToken Prepaid Card token assigned from User's Prepaid Card
2221
     * @param options          List filter option
2222
     * @return HyperwalletList of HyperwalletBalances
2223
     */
2224
    public HyperwalletList<HyperwalletBalance> listBalancesForPrepaidCard(String userToken, String prepaidCardToken,
2225
            HyperwalletBalanceListOptions options) {
2226
        if (StringUtils.isEmpty(userToken)) {
7✔
2227
            throw new HyperwalletException("User token is required");
2✔
2228
        }
2229
        if (StringUtils.isEmpty(prepaidCardToken)) {
5✔
2230
            throw new HyperwalletException("Prepaid Card token is required");
2✔
2231
        }
2232
        String url = this.url + "/users/" + userToken + "/prepaid-cards/" + prepaidCardToken + "/balances";
3✔
2233
        if (options != null) {
3✔
2234
            url = addParameter(url, "sortBy", options.getSortBy());
2✔
2235
            url = addParameter(url, "limit", options.getLimit());
2✔
2236
        }
2237
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletBalance>>() {
6✔
2238
        });
2239
    }
2240

2241
    //--------------------------------------
2242
    // Payments
2243
    //--------------------------------------
2244

2245
    /**
2246
     * Create Payment
2247
     *
2248
     * @param payment Payment
2249
     * @return HyperwalletPayment created payment information
2250
     */
2251
    public HyperwalletPayment createPayment(HyperwalletPayment payment) {
2252
        if (payment == null) {
5✔
2253
            throw new HyperwalletException("Payment is required");
1✔
2254
        }
2255
        if (!StringUtils.isEmpty(payment.getToken())) {
4✔
2256
            throw new HyperwalletException("Payment token may not be present");
1✔
2257
        }
2258
        payment = copy(payment);
3✔
2259
        payment.setCreatedOn(null);
3✔
2260
        return apiClient.post(url + "/payments", payment, HyperwalletPayment.class);
3✔
2261
    }
2262

2263
    /**
2264
     * Get Payment
2265
     *
2266
     * @param paymentToken Payment token
2267
     * @return HyperwalletPayment
2268
     */
2269
    public HyperwalletPayment getPayment(String paymentToken) {
2270
        if (StringUtils.isEmpty(paymentToken)) {
2✔
2271
            throw new HyperwalletException("Payment token is required");
1✔
2272
        }
2273
        return apiClient.get(url + "/payments/" + paymentToken, HyperwalletPayment.class);
1✔
2274
    }
2275

2276
    /**
2277
     * List all Payments
2278
     *
2279
     * @return HyperwalletList of HyperwalletPayment
2280
     */
2281
    public HyperwalletList<HyperwalletPayment> listPayments() {
2282
        return listPayments(null);
1✔
2283
    }
2284

2285
    /**
2286
     * List all Payments
2287
     *
2288
     * @param options List filter option
2289
     * @return HyperwalletList of HyperwalletPayment
2290
     */
2291
    public HyperwalletList<HyperwalletPayment> listPayments(HyperwalletPaymentListOptions options) {
2292
        String url = paginate(this.url + "/payments", options);
3✔
2293
        if (options != null) {
3✔
2294
            url = addParameter(url, "clientPaymentId", options.getClientPaymentId());
2✔
2295
            url = addParameter(url, "releaseDate", convert(options.getReleaseDate()));
2✔
2296
        }
2297
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletPayment>>() {
6✔
2298
        });
2299
    }
2300

2301

2302
    /**
2303
     * Create Payment Status Transition
2304
     *
2305
     * @param paymentToken Payment token
2306
     * @param transition   Status transition information
2307
     * @return HyperwalletStatusTransition new status for Payment
2308
     */
2309
    public HyperwalletStatusTransition createPaymentStatusTransition(String paymentToken, HyperwalletStatusTransition transition) {
2310
        if (transition == null) {
4✔
2311
            throw new HyperwalletException("Transition is required");
1✔
2312
        }
2313
        if (StringUtils.isEmpty(paymentToken)) {
3✔
2314
            throw new HyperwalletException("Payment token is required");
1✔
2315
        }
2316
        if (!StringUtils.isEmpty(transition.getToken())) {
2✔
2317
            throw new HyperwalletException("Status Transition token may not be present");
1✔
2318
        }
2319
        transition = copy(transition);
1✔
2320
        transition.setCreatedOn(null);
1✔
2321
        transition.setFromStatus(null);
1✔
2322
        transition.setToStatus(null);
1✔
2323
        return apiClient.post(url + "/payments/" + paymentToken + "/status-transitions", transition, HyperwalletStatusTransition.class);
1✔
2324
    }
2325

2326
    /**
2327
     * Get Payment Status Transition
2328
     *
2329
     * @param paymentToken          Payment token
2330
     * @param statusTransitionToken Status transition token
2331
     * @return HyperwalletStatusTransition
2332
     */
2333
    public HyperwalletStatusTransition getPaymentStatusTransition(String paymentToken, String statusTransitionToken) {
2334
        if (StringUtils.isEmpty(paymentToken)) {
3✔
2335
            throw new HyperwalletException("Payment token is required");
1✔
2336
        }
2337
        if (StringUtils.isEmpty(statusTransitionToken)) {
2✔
2338
            throw new HyperwalletException("Transition token is required");
1✔
2339
        }
2340
        return apiClient.get(url + "/payments/" + paymentToken + "/status-transitions/" + statusTransitionToken, HyperwalletStatusTransition.class);
1✔
2341
    }
2342

2343
    /**
2344
     * List All Payment Status Transition information
2345
     *
2346
     * @param paymentToken Payment token
2347
     * @return HyperwalletList of HyperwalletStatusTransition
2348
     */
2349
    public HyperwalletList<HyperwalletStatusTransition> listPaymentStatusTransitions(String paymentToken) {
2350
        return listPaymentStatusTransitions(paymentToken, null);
2✔
2351
    }
2352

2353
    /**
2354
     * List Payment Status Transition information
2355
     *
2356
     * @param paymentToken Payment token
2357
     * @param options      List filter option
2358
     * @return HyperwalletList of HyperwalletStatusTransition
2359
     */
2360
    public HyperwalletList<HyperwalletStatusTransition> listPaymentStatusTransitions(String paymentToken,
2361
            HyperwalletStatusTransitionListPaginationOptions options) {
2362
        if (StringUtils.isEmpty(paymentToken)) {
5✔
2363
            throw new HyperwalletException("Payment token is required");
2✔
2364
        }
2365
        String url = paginate(this.url + "/payments/" + paymentToken + "/status-transitions", options);
3✔
2366
        if (options != null) {
3✔
2367
            url = addParameter(url, "transition", options.getTransition());
2✔
2368
        }
2369
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletStatusTransition>>() {
6✔
2370
        });
2371
    }
2372

2373
    //--------------------------------------
2374
    // Programs
2375
    //--------------------------------------
2376

2377
    /**
2378
     * Get Program
2379
     *
2380
     * @param programToken Program token
2381
     * @return HyperwalletProgram
2382
     */
2383
    public HyperwalletProgram getProgram(String programToken) {
2384
        if (StringUtils.isEmpty(programToken)) {
2✔
2385
            throw new HyperwalletException("Program token is required");
1✔
2386
        }
2387
        return apiClient.get(url + "/programs/" + programToken, HyperwalletProgram.class);
1✔
2388
    }
2389

2390
    //--------------------------------------
2391
    // Program Accounts
2392
    //--------------------------------------
2393

2394
    /**
2395
     * Get Programs Account
2396
     *
2397
     * @param programToken Program token
2398
     * @param accountToken Program account token
2399
     * @return HyperwalletAccount
2400
     */
2401
    public HyperwalletAccount getProgramAccount(String programToken, String accountToken) {
2402
        if (StringUtils.isEmpty(programToken)) {
3✔
2403
            throw new HyperwalletException("Program token is required");
1✔
2404
        }
2405
        if (StringUtils.isEmpty(accountToken)) {
2✔
2406
            throw new HyperwalletException("Account token is required");
1✔
2407
        }
2408

2409
        return apiClient.get(url + "/programs/" + programToken + "/accounts/" + accountToken, HyperwalletAccount.class);
1✔
2410
    }
2411

2412
    //--------------------------------------
2413
    // Transfer Method Configurations
2414
    //--------------------------------------
2415

2416
    /**
2417
     * Get Transfer Method Configuration
2418
     *
2419
     * @param userToken   User token
2420
     * @param country     Country
2421
     * @param currency    Currency
2422
     * @param type        Type of Transfer Method to retrieve
2423
     * @param profileType Type of User profile
2424
     * @return HyperwalletTransferMethodConfiguration
2425
     */
2426
    public HyperwalletTransferMethodConfiguration getTransferMethodConfiguration(String userToken, String country, String currency,
2427
            HyperwalletTransferMethod.Type type, HyperwalletUser.ProfileType profileType) {
2428
        if (StringUtils.isEmpty(userToken)) {
6✔
2429
            throw new HyperwalletException("User token is required");
1✔
2430
        }
2431
        if (StringUtils.isEmpty(country)) {
5✔
2432
            throw new HyperwalletException("Country is required");
1✔
2433
        }
2434
        if (StringUtils.isEmpty(currency)) {
4✔
2435
            throw new HyperwalletException("Currency is required");
1✔
2436
        }
2437
        if (type == null) {
3✔
2438
            throw new HyperwalletException("Type is required");
1✔
2439
        }
2440
        if (profileType == null) {
2✔
2441
            throw new HyperwalletException("Profile Type is required");
1✔
2442
        }
2443
        return apiClient.get(url + "/transfer-method-configurations"
2✔
2444
                        + "?userToken=" + userToken
2445
                        + "&country=" + country
2446
                        + "&currency=" + currency
2447
                        + "&type=" + type.name()
1✔
2448
                        + "&profileType=" + profileType.name(),
1✔
2449
                HyperwalletTransferMethodConfiguration.class);
2450
    }
2451

2452
    /**
2453
     * List all Transfer Method Configuration associated with User
2454
     *
2455
     * @param userToken User token
2456
     * @return HyperwalletList of HyperwalletTransferMethodConfiguration
2457
     */
2458
    public HyperwalletList<HyperwalletTransferMethodConfiguration> listTransferMethodConfigurations(String userToken) {
2459
        return listTransferMethodConfigurations(userToken, null);
2✔
2460
    }
2461

2462
    /**
2463
     * List all Transfer Method Configuration associated with User
2464
     *
2465
     * @param userToken User token
2466
     * @param options   List filter options
2467
     * @return HyperwalletList of HyperwalletTransferMethodConfiguration
2468
     */
2469
    public HyperwalletList<HyperwalletTransferMethodConfiguration> listTransferMethodConfigurations(String userToken,
2470
            HyperwalletPaginationOptions options) {
2471
        if (StringUtils.isEmpty(userToken)) {
5✔
2472
            throw new HyperwalletException("User token is required");
2✔
2473
        }
2474
        String url = paginate(this.url + "/transfer-method-configurations?userToken=" + userToken, options);
3✔
2475
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletTransferMethodConfiguration>>() {
6✔
2476
        });
2477
    }
2478

2479
    //--------------------------------------
2480
    // Receipts
2481
    //--------------------------------------
2482

2483
    /**
2484
     * List all program account receipts
2485
     *
2486
     * @param programToken Program token
2487
     * @param accountToken Program account token
2488
     * @return HyperwalletList of HyperwalletReceipt
2489
     */
2490
    public HyperwalletList<HyperwalletReceipt> listReceiptsForProgramAccount(String programToken, String accountToken) {
2491
        return listReceiptsForProgramAccount(programToken, accountToken, null);
3✔
2492
    }
2493

2494
    /**
2495
     * List all program account receipts
2496
     *
2497
     * @param programToken Program token
2498
     * @param accountToken Program account token
2499
     * @param options      List filter options
2500
     * @return HyperwalletList of HyperwalletReceipt
2501
     */
2502
    public HyperwalletList<HyperwalletReceipt> listReceiptsForProgramAccount(String programToken, String accountToken,
2503
            HyperwalletReceiptPaginationOptions options) {
2504
        if (StringUtils.isEmpty(programToken)) {
7✔
2505
            throw new HyperwalletException("Program token is required");
2✔
2506
        }
2507
        if (StringUtils.isEmpty(accountToken)) {
5✔
2508
            throw new HyperwalletException("Account token is required");
2✔
2509
        }
2510
        String url = paginate(this.url + "/programs/" + programToken + "/accounts/" + accountToken + "/receipts", options);
3✔
2511
        if (options != null && options.getType() != null) {
3✔
2512
            url = addParameter(url, "type", options.getType().name());
1✔
2513
        }
2514
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletReceipt>>() {
6✔
2515
        });
2516
    }
2517

2518
    /**
2519
     * List all user receipts
2520
     *
2521
     * @param userToken User token
2522
     * @return HyperwalletList of HyperwalletReceipt
2523
     */
2524
    public HyperwalletList<HyperwalletReceipt> listReceiptsForUser(String userToken) {
2525
        return listReceiptsForUser(userToken, null);
1✔
2526
    }
2527

2528
    /**
2529
     * List all user receipts
2530
     *
2531
     * @param userToken Program token
2532
     * @param options   List filter options
2533
     * @return HyperwalletList of HyperwalletReceipt
2534
     */
2535
    public HyperwalletList<HyperwalletReceipt> listReceiptsForUser(String userToken, HyperwalletReceiptPaginationOptions options) {
2536
        if (StringUtils.isEmpty(userToken)) {
5✔
2537
            throw new HyperwalletException("User token is required");
2✔
2538
        }
2539
        String url = paginate(this.url + "/users/" + userToken + "/receipts", options);
3✔
2540
        if (options != null && options.getType() != null) {
3✔
2541
            url = addParameter(url, "type", options.getType().name());
1✔
2542
        }
2543
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletReceipt>>() {
6✔
2544
        });
2545
    }
2546

2547
    /**
2548
     * List all prepaid card receipts
2549
     *
2550
     * @param userToken        User token
2551
     * @param prepaidCardToken Prepaid card token
2552
     * @return HyperwalletList of HyperwalletReceipt
2553
     */
2554
    public HyperwalletList<HyperwalletReceipt> listReceiptsForPrepaidCard(String userToken, String prepaidCardToken) {
2555
        return listReceiptsForPrepaidCard(userToken, prepaidCardToken, null);
3✔
2556
    }
2557

2558
    /**
2559
     * List all prepaid card receipts
2560
     *
2561
     * @param userToken        User token
2562
     * @param prepaidCardToken Prepaid card token
2563
     * @param options          List filter options
2564
     * @return HyperwalletList of HyperwalletReceipt
2565
     */
2566
    public HyperwalletList<HyperwalletReceipt> listReceiptsForPrepaidCard(String userToken, String prepaidCardToken,
2567
            HyperwalletReceiptPaginationOptions options) {
2568
        if (StringUtils.isEmpty(userToken)) {
7✔
2569
            throw new HyperwalletException("User token is required");
2✔
2570
        }
2571
        if (StringUtils.isEmpty(prepaidCardToken)) {
5✔
2572
            throw new HyperwalletException("Prepaid card token is required");
2✔
2573
        }
2574
        String url = paginate(this.url + "/users/" + userToken + "/prepaid-cards/" + prepaidCardToken + "/receipts", options);
3✔
2575
        if (options != null && options.getType() != null) {
3✔
2576
            url = addParameter(url, "type", options.getType().name());
1✔
2577
        }
2578
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletReceipt>>() {
6✔
2579
        });
2580
    }
2581

2582
    //--------------------------------------
2583
    // Webhook Notification
2584
    //--------------------------------------
2585

2586
    /**
2587
     * Retrieve webhook event notification
2588
     *
2589
     * @param webhookToken Webhook token
2590
     * @return HyperwalletWebhookNotification
2591
     */
2592
    public HyperwalletWebhookNotification getWebhookEvent(String webhookToken) {
2593
        if (StringUtils.isEmpty(webhookToken)) {
2✔
2594
            throw new HyperwalletException("Webhook token is required");
1✔
2595
        }
2596
        return apiClient.get(url + "/webhook-notifications/" + webhookToken, HyperwalletWebhookNotification.class);
1✔
2597
    }
2598

2599
    /**
2600
     * List all webhook event notifications
2601
     *
2602
     * @return HyperwalletList of HyperwalletWebhookNotification
2603
     */
2604
    public HyperwalletList<HyperwalletWebhookNotification> listWebhookEvents() {
2605
        return listWebhookEvents(null);
1✔
2606
    }
2607

2608
    /**
2609
     * List all webhook event notifications
2610
     *
2611
     * @param options List filter options
2612
     * @return HyperwalletList of HyperwalletWebhookNotification
2613
     */
2614
    public HyperwalletList<HyperwalletWebhookNotification> listWebhookEvents(HyperwalletWebhookNotificationPaginationOptions options) {
2615
        String url = paginate(this.url + "/webhook-notifications", options);
3✔
2616
        if (options != null) {
3✔
2617
            url = addParameter(url, "type", options.getType());
2✔
2618
            url = addParameter(url, "programToken", options.getProgramToken());
2✔
2619
        }
2620
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletWebhookNotification>>() {
6✔
2621
        });
2622
    }
2623

2624
    //--------------------------------------
2625
    // Transfer Methods
2626
    //--------------------------------------
2627

2628
    /**
2629
     * Create a Transfer Method
2630
     *
2631
     * @param jsonCacheToken String JSON cache token
2632
     * @param transferMethod TransferMethod object to create
2633
     * @return HyperwalletTransferMethod Transfer Method object created
2634
     */
2635
    public HyperwalletTransferMethod createTransferMethod(String jsonCacheToken, HyperwalletTransferMethod transferMethod) {
2636

2637
        if (transferMethod == null || StringUtils.isEmpty(transferMethod.getUserToken())) {
4✔
2638
            throw new HyperwalletException("User token is required");
2✔
2639
        }
2640
        if (StringUtils.isEmpty(jsonCacheToken)) {
2✔
2641
            throw new HyperwalletException("JSON token is required");
1✔
2642
        }
2643
        transferMethod = copy(transferMethod);
1✔
2644

2645
        transferMethod.setToken(null);
1✔
2646
        transferMethod.setStatus(null);
1✔
2647
        transferMethod.setCreatedOn(null);
1✔
2648

2649
        HashMap<String, String> headers = new HashMap<String, String>();
1✔
2650
        headers.put("Json-Cache-Token", jsonCacheToken);
1✔
2651

2652
        return apiClient.post(url + "/users/" + transferMethod.getUserToken() + "/transfer-methods", transferMethod, HyperwalletTransferMethod.class,
1✔
2653
                headers);
2654
    }
2655

2656

2657
    /**
2658
     * Create a Transfer Method
2659
     *
2660
     * @param jsonCacheToken String JSON cache token
2661
     * @param userToken      String user token
2662
     * @return HyperwalletTransferMethod Transfer Method object created
2663
     */
2664
    public HyperwalletTransferMethod createTransferMethod(String jsonCacheToken, String userToken) {
2665

2666
        if (StringUtils.isEmpty(userToken)) {
3✔
2667
            throw new HyperwalletException("User token is required");
1✔
2668
        }
2669
        if (StringUtils.isEmpty(jsonCacheToken)) {
2✔
2670
            throw new HyperwalletException("JSON token is required");
1✔
2671
        }
2672

2673
        HyperwalletTransferMethod transferMethod = new HyperwalletTransferMethod();
1✔
2674
        transferMethod.setUserToken(userToken);
1✔
2675

2676
        HashMap<String, String> headers = new HashMap<String, String>();
1✔
2677
        headers.put("Json-Cache-Token", jsonCacheToken);
1✔
2678

2679
        return apiClient.post(url + "/users/" + transferMethod.getUserToken() + "/transfer-methods", transferMethod, HyperwalletTransferMethod.class,
1✔
2680
                headers);
2681
    }
2682

2683
    /**
2684
     * List Transfer Methods
2685
     *
2686
     * @param userToken String user token
2687
     * @param options   List filter option
2688
     * @return HyperwalletList of HyperwalletTransferMethod
2689
     */
2690
    public HyperwalletList<HyperwalletTransferMethod> listTransferMethods(String userToken, HyperwalletTransferMethodListOptions options) {
2691
        String url = paginate(this.url + "/users/" + userToken + "/transfer-methods", options);
3✔
2692
        if (StringUtils.isEmpty(userToken)) {
3✔
2693
            throw new HyperwalletException("User token is required");
1✔
2694
        }
2695

2696
        if (options != null && options.getStatus() != null) {
2✔
2697
            url = addParameter(url, "status", options.getStatus());
1✔
2698
            url = addParameter(url, "type", options.getType());
1✔
2699

2700
        }
2701
        return apiClient.get(url, new TypeReference<HyperwalletList<HyperwalletTransferMethod>>() {
4✔
2702
        });
2703
    }
2704

2705
    //--------------------------------------
2706
    // Upload documents for user endpoint
2707
    //--------------------------------------
2708

2709
    /**
2710
     * Upload documents
2711
     *
2712
     * @param userToken  userToken for which documents to be uploaded
2713
     * @param uploadData HyperwalletVerificationDocument to get uploaded
2714
     * @return HyperwalletUser user object with document upload status
2715
     */
2716
    public HyperwalletUser uploadUserDocuments(String userToken, List<HyperwalletVerificationDocument> uploadData) {
2717
        Multipart multipart = new Multipart();
3✔
2718
        if (StringUtils.isEmpty(userToken)) {
3✔
2719
            throw new HyperwalletException("User token is not present");
1✔
2720
        }
2721
        if (uploadData == null || uploadData.size() < 1) {
2✔
2722
            throw new HyperwalletException("Data for upload is missing");
×
2723
        }
2724
        if (uploadData.get(0).getUploadFiles() == null || uploadData.get(0).getUploadFiles().size() < 1) {
2✔
2725
            throw new HyperwalletException("Upload Files are missing");
×
2726
        }
2727
        try {
2728
            multipart = HyperwalletMultipartUtils.convert(uploadData);
2✔
2729
        } catch (IOException e) {
×
2730
            throw new HyperwalletException("Unable to convert to Multipart formdata");
×
2731
        }
2✔
2732
        return apiClient.put(url + "/users/" + userToken, multipart, HyperwalletUser.class);
2✔
2733
    }
2734

2735
    //--------------------------------------
2736
    // Internal utils
2737
    //--------------------------------------
2738

2739
    private String paginate(String url, HyperwalletPaginationOptions options) {
2740
        if (options == null) {
78✔
2741
            return url;
28✔
2742
        }
2743
        url = addParameter(url, "createdAfter", convert(options.getCreatedAfter()));
50✔
2744
        url = addParameter(url, "createdBefore", convert(options.getCreatedBefore()));
50✔
2745
        url = addParameter(url, "sortBy", options.getSortBy());
50✔
2746
        url = addParameter(url, "limit", options.getLimit());
50✔
2747
        return url;
50✔
2748
    }
2749

2750
    private String addParameter(String url, String key, Object value) {
2751
        if (url == null || key == null || value == null) {
280✔
2752
            return url;
76✔
2753
        }
2754
        return url + (url.indexOf("?") == -1 ? "?" : "&") + key + "=" + value;
204✔
2755
    }
2756

2757
    private String convert(Date in) {
2758
        if (in == null) {
102✔
2759
            return null;
24✔
2760
        }
2761
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US);
78✔
2762
        dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
78✔
2763
        return dateFormat.format(in);
78✔
2764
    }
2765

2766
    private void setProgramToken(HyperwalletUser user) {
2767
        if (user != null && user.getProgramToken() == null) {
3✔
2768
            user.setProgramToken(this.programToken);
2✔
2769
        }
2770
    }
3✔
2771

2772
    private void setProgramToken(HyperwalletPayment payment) {
2773
        if (payment != null && payment.getProgramToken() == null) {
3✔
2774
            payment.setProgramToken(this.programToken);
2✔
2775
        }
2776
    }
3✔
2777

2778
    private HyperwalletUser copy(HyperwalletUser user) {
2779
        user = HyperwalletJsonUtil.fromJson(HyperwalletJsonUtil.toJson(user), HyperwalletUser.class);
3✔
2780
        setProgramToken(user);
3✔
2781
        return user;
3✔
2782
    }
2783

2784
    private HyperwalletPayment copy(HyperwalletPayment payment) {
2785
        payment = HyperwalletJsonUtil.fromJson(HyperwalletJsonUtil.toJson(payment), HyperwalletPayment.class);
3✔
2786
        setProgramToken(payment);
3✔
2787
        return payment;
3✔
2788
    }
2789

2790
    private HyperwalletPrepaidCard copy(HyperwalletPrepaidCard method) {
2791
        method = HyperwalletJsonUtil.fromJson(HyperwalletJsonUtil.toJson(method), HyperwalletPrepaidCard.class);
2✔
2792
        return method;
2✔
2793
    }
2794

2795
    private HyperwalletBusinessStakeholder copy(HyperwalletBusinessStakeholder method) {
2796
        method = HyperwalletJsonUtil.fromJson(HyperwalletJsonUtil.toJson(method), HyperwalletBusinessStakeholder.class);
2✔
2797
        return method;
2✔
2798
    }
2799

2800
    private HyperwalletBankCard copy(HyperwalletBankCard card) {
2801
        card = HyperwalletJsonUtil.fromJson(HyperwalletJsonUtil.toJson(card), HyperwalletBankCard.class);
2✔
2802
        return card;
2✔
2803
    }
2804

2805
    private HyperwalletPaperCheck copy(HyperwalletPaperCheck check) {
2806
        check = HyperwalletJsonUtil.fromJson(HyperwalletJsonUtil.toJson(check), HyperwalletPaperCheck.class);
2✔
2807
        return check;
2✔
2808
    }
2809

2810
    private HyperwalletBankAccount copy(HyperwalletBankAccount method) {
2811
        method = HyperwalletJsonUtil.fromJson(HyperwalletJsonUtil.toJson(method), HyperwalletBankAccount.class);
1✔
2812
        return method;
1✔
2813
    }
2814

2815
    private HyperwalletStatusTransition copy(HyperwalletStatusTransition statusTransition) {
2816
        statusTransition = HyperwalletJsonUtil.fromJson(HyperwalletJsonUtil.toJson(statusTransition), HyperwalletStatusTransition.class);
33✔
2817
        return statusTransition;
33✔
2818
    }
2819

2820
    private HyperwalletTransferMethod copy(HyperwalletTransferMethod transferMethod) {
2821
        transferMethod = HyperwalletJsonUtil.fromJson(HyperwalletJsonUtil.toJson(transferMethod), HyperwalletTransferMethod.class);
1✔
2822
        return transferMethod;
1✔
2823
    }
2824

2825
    private HyperwalletTransfer copy(HyperwalletTransfer transfer) {
2826
        transfer = HyperwalletJsonUtil.fromJson(HyperwalletJsonUtil.toJson(transfer), HyperwalletTransfer.class);
2✔
2827
        return transfer;
2✔
2828
    }
2829

2830
    private HyperwalletPayPalAccount copy(HyperwalletPayPalAccount payPalAccount) {
2831
        payPalAccount = HyperwalletJsonUtil.fromJson(HyperwalletJsonUtil.toJson(payPalAccount), HyperwalletPayPalAccount.class);
3✔
2832
        return payPalAccount;
3✔
2833
    }
2834

2835
    private HyperwalletTransferRefund copy(HyperwalletTransferRefund transferRefund) {
2836
        return HyperwalletJsonUtil.fromJson(HyperwalletJsonUtil.toJson(transferRefund), HyperwalletTransferRefund.class);
1✔
2837
    }
2838

2839
    private HyperwalletVenmoAccount copy(HyperwalletVenmoAccount venmoAccount) {
2840
        return HyperwalletJsonUtil.fromJson(HyperwalletJsonUtil.toJson(venmoAccount), HyperwalletVenmoAccount.class);
2✔
2841
    }
2842

2843
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc