1
1
package com .twilio .base .bearertoken ;
2
2
3
+ import com .twilio .base .ResourceSetIterationHelper ;
3
4
import com .twilio .http .bearertoken .BearerTokenTwilioRestClient ;
4
5
5
6
import java .util .Iterator ;
@@ -15,13 +16,10 @@ public class ResourceSet<E extends Resource> implements Iterable<E> {
15
16
private final Reader <E > reader ;
16
17
private final BearerTokenTwilioRestClient client ;
17
18
private final Page <E > firstPage ; // Store reference to first page to enable multiple iterations
19
+ private final ResourceSetIterationHelper .ResourceSetState <Page <E >, E > state ;
18
20
19
21
private boolean autoPaging ;
20
- private long pages = 1 ;
21
22
private long pageLimit = Long .MAX_VALUE ;
22
- private long processed = 0 ;
23
- private Page <E > page ;
24
- private Iterator <E > iterator ;
25
23
26
24
/**
27
25
* Initialize the resource set.
@@ -34,8 +32,9 @@ public ResourceSet(final Reader<E> reader, final BearerTokenTwilioRestClient cli
34
32
this .reader = reader ;
35
33
this .client = client ;
36
34
this .firstPage = page ; // Save first page to allow resetting iterator state
37
- this .page = page ;
38
- this .iterator = page .getRecords ().iterator ();
35
+ this .state = new ResourceSetIterationHelper .ResourceSetState <>(p -> p .getRecords ().iterator ());
36
+ this .state .page = page ;
37
+ this .state .iterator = page .getRecords ().iterator ();
39
38
this .autoPaging = true ;
40
39
41
40
if (reader .getLimit () != null ) {
@@ -53,7 +52,7 @@ public ResourceSet setAutoPaging(final boolean autoPaging) {
53
52
}
54
53
55
54
public Integer getPageSize () {
56
- return page .getPageSize ();
55
+ return state . page .getPageSize ();
57
56
}
58
57
59
58
public ResourceSet <E > setPageSize (final int pageSize ) {
@@ -76,23 +75,19 @@ public long getPageLimit() {
76
75
77
76
@ Override
78
77
public Iterator <E > iterator () {
79
- // Reset state to allow multiple iterations
80
- this .processed = 0 ;
81
- this .pages = 1 ;
82
- this .page = this .firstPage ; // Reset to first page for new iteration
83
- this .iterator = this .firstPage .getRecords ().iterator (); // Reset iterator to start of first page
84
-
78
+ // Reset state to allow multiple iterations using helper
79
+ ResourceSetIterationHelper .resetIterationState (firstPage , state );
85
80
return new ResourceSetIterator <>(this );
86
81
}
87
82
88
83
private void fetchNextPage () {
89
- if (!page .hasNextPage () || pages >= pageLimit ) {
84
+ if (!state . page .hasNextPage () || state . pages >= pageLimit ) {
90
85
return ;
91
86
}
92
87
93
- pages ++;
94
- page = reader .nextPage (page , client );
95
- iterator = page .getRecords ().iterator ();
88
+ state . pages ++;
89
+ state . page = reader .nextPage (state . page , client );
90
+ state . iterator = state . page .getRecords ().iterator ();
96
91
}
97
92
98
93
private class ResourceSetIterator <E extends Resource > implements Iterator <E > {
@@ -104,33 +99,33 @@ public ResourceSetIterator(final ResourceSet<E> resourceSet) {
104
99
105
100
@ Override
106
101
public boolean hasNext () {
107
- if (resourceSet .getLimit () != null && resourceSet .processed >= resourceSet .getLimit ()) {
102
+ if (resourceSet .getLimit () != null && resourceSet .state . processed >= resourceSet .getLimit ()) {
108
103
return false ;
109
104
}
110
105
111
- return resourceSet .iterator .hasNext ();
106
+ return resourceSet .state . iterator .hasNext ();
112
107
}
113
108
114
109
@ Override
115
110
public E next () {
116
- if (resourceSet == null || resourceSet .iterator == null ) {
111
+ if (resourceSet == null || resourceSet .state . iterator == null ) {
117
112
throw new NoSuchElementException ();
118
113
}
119
114
120
- E element = resourceSet .iterator .next ();
121
- if (resourceSet .isAutoPaging () && !resourceSet .iterator .hasNext ()) {
115
+ E element = resourceSet .state . iterator .next ();
116
+ if (resourceSet .isAutoPaging () && !resourceSet .state . iterator .hasNext ()) {
122
117
resourceSet .fetchNextPage ();
123
118
}
124
119
125
- resourceSet .processed ++;
120
+ resourceSet .state . processed ++;
126
121
return element ;
127
122
}
128
123
129
124
@ Override
130
125
public void remove () {
131
- if (resourceSet .iterator != null ) {
132
- resourceSet .processed ++;
133
- resourceSet .iterator .remove ();
126
+ if (resourceSet .state . iterator != null ) {
127
+ resourceSet .state . processed ++;
128
+ resourceSet .state . iterator .remove ();
134
129
}
135
130
}
136
131
0 commit comments