Skip to content

Commit 5463e75

Browse files
refactor(client): migrate pages to builder pattern (#541)
1 parent c56d73d commit 5463e75

File tree

48 files changed

+2309
-826
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+2309
-826
lines changed

finch-java-core/src/main/kotlin/com/tryfinch/api/models/HrisBenefitIndividualRetrieveManyBenefitsPage.kt

Lines changed: 86 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,56 +2,103 @@
22

33
package com.tryfinch.api.models
44

5+
import com.tryfinch.api.core.checkRequired
56
import com.tryfinch.api.services.blocking.hris.benefits.IndividualService
67
import java.util.Objects
78
import java.util.Optional
89
import java.util.stream.Stream
910
import java.util.stream.StreamSupport
1011
import kotlin.jvm.optionals.getOrNull
1112

12-
/** Get enrollment information for the given individuals. */
13+
/** @see [IndividualService.retrieveManyBenefits] */
1314
class HrisBenefitIndividualRetrieveManyBenefitsPage
1415
private constructor(
15-
private val individualsService: IndividualService,
16+
private val service: IndividualService,
1617
private val params: HrisBenefitIndividualRetrieveManyBenefitsParams,
1718
private val items: List<IndividualBenefit>,
1819
) {
1920

20-
/** Returns the response that this page was parsed from. */
21-
fun items(): List<IndividualBenefit> = items
21+
fun hasNextPage(): Boolean = items.isNotEmpty()
2222

23-
override fun equals(other: Any?): Boolean {
24-
if (this === other) {
25-
return true
26-
}
23+
fun getNextPageParams(): Optional<HrisBenefitIndividualRetrieveManyBenefitsParams> =
24+
Optional.empty()
2725

28-
return /* spotless:off */ other is HrisBenefitIndividualRetrieveManyBenefitsPage && individualsService == other.individualsService && params == other.params && items == other.items /* spotless:on */
29-
}
26+
fun getNextPage(): Optional<HrisBenefitIndividualRetrieveManyBenefitsPage> =
27+
getNextPageParams().map { service.retrieveManyBenefits(it) }
3028

31-
override fun hashCode(): Int = /* spotless:off */ Objects.hash(individualsService, params, items) /* spotless:on */
29+
fun autoPager(): AutoPager = AutoPager(this)
3230

33-
override fun toString() =
34-
"HrisBenefitIndividualRetrieveManyBenefitsPage{individualsService=$individualsService, params=$params, items=$items}"
31+
/** The parameters that were used to request this page. */
32+
fun params(): HrisBenefitIndividualRetrieveManyBenefitsParams = params
3533

36-
fun hasNextPage(): Boolean = items.isNotEmpty()
34+
/** The response that this page was parsed from. */
35+
fun items(): List<IndividualBenefit> = items
3736

38-
fun getNextPageParams(): Optional<HrisBenefitIndividualRetrieveManyBenefitsParams> =
39-
Optional.empty()
37+
fun toBuilder() = Builder().from(this)
38+
39+
companion object {
4040

41-
fun getNextPage(): Optional<HrisBenefitIndividualRetrieveManyBenefitsPage> {
42-
return getNextPageParams().map { individualsService.retrieveManyBenefits(it) }
41+
/**
42+
* Returns a mutable builder for constructing an instance of
43+
* [HrisBenefitIndividualRetrieveManyBenefitsPage].
44+
*
45+
* The following fields are required:
46+
* ```java
47+
* .service()
48+
* .params()
49+
* .items()
50+
* ```
51+
*/
52+
@JvmStatic fun builder() = Builder()
4353
}
4454

45-
fun autoPager(): AutoPager = AutoPager(this)
55+
/** A builder for [HrisBenefitIndividualRetrieveManyBenefitsPage]. */
56+
class Builder internal constructor() {
57+
58+
private var service: IndividualService? = null
59+
private var params: HrisBenefitIndividualRetrieveManyBenefitsParams? = null
60+
private var items: List<IndividualBenefit>? = null
61+
62+
@JvmSynthetic
63+
internal fun from(
64+
hrisBenefitIndividualRetrieveManyBenefitsPage:
65+
HrisBenefitIndividualRetrieveManyBenefitsPage
66+
) = apply {
67+
service = hrisBenefitIndividualRetrieveManyBenefitsPage.service
68+
params = hrisBenefitIndividualRetrieveManyBenefitsPage.params
69+
items = hrisBenefitIndividualRetrieveManyBenefitsPage.items
70+
}
4671

47-
companion object {
72+
fun service(service: IndividualService) = apply { this.service = service }
4873

49-
@JvmStatic
50-
fun of(
51-
individualsService: IndividualService,
52-
params: HrisBenefitIndividualRetrieveManyBenefitsParams,
53-
items: List<IndividualBenefit>,
54-
) = HrisBenefitIndividualRetrieveManyBenefitsPage(individualsService, params, items)
74+
/** The parameters that were used to request this page. */
75+
fun params(params: HrisBenefitIndividualRetrieveManyBenefitsParams) = apply {
76+
this.params = params
77+
}
78+
79+
/** The response that this page was parsed from. */
80+
fun items(items: List<IndividualBenefit>) = apply { this.items = items }
81+
82+
/**
83+
* Returns an immutable instance of [HrisBenefitIndividualRetrieveManyBenefitsPage].
84+
*
85+
* Further updates to this [Builder] will not mutate the returned instance.
86+
*
87+
* The following fields are required:
88+
* ```java
89+
* .service()
90+
* .params()
91+
* .items()
92+
* ```
93+
*
94+
* @throws IllegalStateException if any required field is unset.
95+
*/
96+
fun build(): HrisBenefitIndividualRetrieveManyBenefitsPage =
97+
HrisBenefitIndividualRetrieveManyBenefitsPage(
98+
checkRequired("service", service),
99+
checkRequired("params", params),
100+
checkRequired("items", items),
101+
)
55102
}
56103

57104
class AutoPager(private val firstPage: HrisBenefitIndividualRetrieveManyBenefitsPage) :
@@ -73,4 +120,17 @@ private constructor(
73120
return StreamSupport.stream(spliterator(), false)
74121
}
75122
}
123+
124+
override fun equals(other: Any?): Boolean {
125+
if (this === other) {
126+
return true
127+
}
128+
129+
return /* spotless:off */ other is HrisBenefitIndividualRetrieveManyBenefitsPage && service == other.service && params == other.params && items == other.items /* spotless:on */
130+
}
131+
132+
override fun hashCode(): Int = /* spotless:off */ Objects.hash(service, params, items) /* spotless:on */
133+
134+
override fun toString() =
135+
"HrisBenefitIndividualRetrieveManyBenefitsPage{service=$service, params=$params, items=$items}"
76136
}

finch-java-core/src/main/kotlin/com/tryfinch/api/models/HrisBenefitIndividualRetrieveManyBenefitsPageAsync.kt

Lines changed: 88 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,59 +2,106 @@
22

33
package com.tryfinch.api.models
44

5+
import com.tryfinch.api.core.checkRequired
56
import com.tryfinch.api.services.async.hris.benefits.IndividualServiceAsync
67
import java.util.Objects
78
import java.util.Optional
89
import java.util.concurrent.CompletableFuture
910
import java.util.concurrent.Executor
1011
import java.util.function.Predicate
1112

12-
/** Get enrollment information for the given individuals. */
13+
/** @see [IndividualServiceAsync.retrieveManyBenefits] */
1314
class HrisBenefitIndividualRetrieveManyBenefitsPageAsync
1415
private constructor(
15-
private val individualsService: IndividualServiceAsync,
16+
private val service: IndividualServiceAsync,
1617
private val params: HrisBenefitIndividualRetrieveManyBenefitsParams,
1718
private val items: List<IndividualBenefit>,
1819
) {
1920

20-
/** Returns the response that this page was parsed from. */
21-
fun items(): List<IndividualBenefit> = items
22-
23-
override fun equals(other: Any?): Boolean {
24-
if (this === other) {
25-
return true
26-
}
27-
28-
return /* spotless:off */ other is HrisBenefitIndividualRetrieveManyBenefitsPageAsync && individualsService == other.individualsService && params == other.params && items == other.items /* spotless:on */
29-
}
30-
31-
override fun hashCode(): Int = /* spotless:off */ Objects.hash(individualsService, params, items) /* spotless:on */
32-
33-
override fun toString() =
34-
"HrisBenefitIndividualRetrieveManyBenefitsPageAsync{individualsService=$individualsService, params=$params, items=$items}"
35-
3621
fun hasNextPage(): Boolean = items.isNotEmpty()
3722

3823
fun getNextPageParams(): Optional<HrisBenefitIndividualRetrieveManyBenefitsParams> =
3924
Optional.empty()
4025

4126
fun getNextPage():
42-
CompletableFuture<Optional<HrisBenefitIndividualRetrieveManyBenefitsPageAsync>> {
43-
return getNextPageParams()
44-
.map { individualsService.retrieveManyBenefits(it).thenApply { Optional.of(it) } }
27+
CompletableFuture<Optional<HrisBenefitIndividualRetrieveManyBenefitsPageAsync>> =
28+
getNextPageParams()
29+
.map { service.retrieveManyBenefits(it).thenApply { Optional.of(it) } }
4530
.orElseGet { CompletableFuture.completedFuture(Optional.empty()) }
46-
}
4731

4832
fun autoPager(): AutoPager = AutoPager(this)
4933

34+
/** The parameters that were used to request this page. */
35+
fun params(): HrisBenefitIndividualRetrieveManyBenefitsParams = params
36+
37+
/** The response that this page was parsed from. */
38+
fun items(): List<IndividualBenefit> = items
39+
40+
fun toBuilder() = Builder().from(this)
41+
5042
companion object {
5143

52-
@JvmStatic
53-
fun of(
54-
individualsService: IndividualServiceAsync,
55-
params: HrisBenefitIndividualRetrieveManyBenefitsParams,
56-
items: List<IndividualBenefit>,
57-
) = HrisBenefitIndividualRetrieveManyBenefitsPageAsync(individualsService, params, items)
44+
/**
45+
* Returns a mutable builder for constructing an instance of
46+
* [HrisBenefitIndividualRetrieveManyBenefitsPageAsync].
47+
*
48+
* The following fields are required:
49+
* ```java
50+
* .service()
51+
* .params()
52+
* .items()
53+
* ```
54+
*/
55+
@JvmStatic fun builder() = Builder()
56+
}
57+
58+
/** A builder for [HrisBenefitIndividualRetrieveManyBenefitsPageAsync]. */
59+
class Builder internal constructor() {
60+
61+
private var service: IndividualServiceAsync? = null
62+
private var params: HrisBenefitIndividualRetrieveManyBenefitsParams? = null
63+
private var items: List<IndividualBenefit>? = null
64+
65+
@JvmSynthetic
66+
internal fun from(
67+
hrisBenefitIndividualRetrieveManyBenefitsPageAsync:
68+
HrisBenefitIndividualRetrieveManyBenefitsPageAsync
69+
) = apply {
70+
service = hrisBenefitIndividualRetrieveManyBenefitsPageAsync.service
71+
params = hrisBenefitIndividualRetrieveManyBenefitsPageAsync.params
72+
items = hrisBenefitIndividualRetrieveManyBenefitsPageAsync.items
73+
}
74+
75+
fun service(service: IndividualServiceAsync) = apply { this.service = service }
76+
77+
/** The parameters that were used to request this page. */
78+
fun params(params: HrisBenefitIndividualRetrieveManyBenefitsParams) = apply {
79+
this.params = params
80+
}
81+
82+
/** The response that this page was parsed from. */
83+
fun items(items: List<IndividualBenefit>) = apply { this.items = items }
84+
85+
/**
86+
* Returns an immutable instance of [HrisBenefitIndividualRetrieveManyBenefitsPageAsync].
87+
*
88+
* Further updates to this [Builder] will not mutate the returned instance.
89+
*
90+
* The following fields are required:
91+
* ```java
92+
* .service()
93+
* .params()
94+
* .items()
95+
* ```
96+
*
97+
* @throws IllegalStateException if any required field is unset.
98+
*/
99+
fun build(): HrisBenefitIndividualRetrieveManyBenefitsPageAsync =
100+
HrisBenefitIndividualRetrieveManyBenefitsPageAsync(
101+
checkRequired("service", service),
102+
checkRequired("params", params),
103+
checkRequired("items", items),
104+
)
58105
}
59106

60107
class AutoPager(private val firstPage: HrisBenefitIndividualRetrieveManyBenefitsPageAsync) {
@@ -86,4 +133,17 @@ private constructor(
86133
return forEach(values::add, executor).thenApply { values }
87134
}
88135
}
136+
137+
override fun equals(other: Any?): Boolean {
138+
if (this === other) {
139+
return true
140+
}
141+
142+
return /* spotless:off */ other is HrisBenefitIndividualRetrieveManyBenefitsPageAsync && service == other.service && params == other.params && items == other.items /* spotless:on */
143+
}
144+
145+
override fun hashCode(): Int = /* spotless:off */ Objects.hash(service, params, items) /* spotless:on */
146+
147+
override fun toString() =
148+
"HrisBenefitIndividualRetrieveManyBenefitsPageAsync{service=$service, params=$params, items=$items}"
89149
}

0 commit comments

Comments
 (0)