11package com .twilio .base .bearertoken ;
22
3+ import com .twilio .base .ResourceSetIterationHelper ;
34import com .twilio .http .bearertoken .BearerTokenTwilioRestClient ;
45
56import java .util .Iterator ;
@@ -15,13 +16,10 @@ public class ResourceSet<E extends Resource> implements Iterable<E> {
1516 private final Reader <E > reader ;
1617 private final BearerTokenTwilioRestClient client ;
1718 private final Page <E > firstPage ; // Store reference to first page to enable multiple iterations
19+ private final ResourceSetIterationHelper .ResourceSetState <Page <E >, E > state ;
1820
1921 private boolean autoPaging ;
20- private long pages = 1 ;
2122 private long pageLimit = Long .MAX_VALUE ;
22- private long processed = 0 ;
23- private Page <E > page ;
24- private Iterator <E > iterator ;
2523
2624 /**
2725 * Initialize the resource set.
@@ -34,8 +32,9 @@ public ResourceSet(final Reader<E> reader, final BearerTokenTwilioRestClient cli
3432 this .reader = reader ;
3533 this .client = client ;
3634 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 ();
3938 this .autoPaging = true ;
4039
4140 if (reader .getLimit () != null ) {
@@ -53,7 +52,7 @@ public ResourceSet setAutoPaging(final boolean autoPaging) {
5352 }
5453
5554 public Integer getPageSize () {
56- return page .getPageSize ();
55+ return state . page .getPageSize ();
5756 }
5857
5958 public ResourceSet <E > setPageSize (final int pageSize ) {
@@ -76,23 +75,19 @@ public long getPageLimit() {
7675
7776 @ Override
7877 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 );
8580 return new ResourceSetIterator <>(this );
8681 }
8782
8883 private void fetchNextPage () {
89- if (!page .hasNextPage () || pages >= pageLimit ) {
84+ if (!state . page .hasNextPage () || state . pages >= pageLimit ) {
9085 return ;
9186 }
9287
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 ();
9691 }
9792
9893 private class ResourceSetIterator <E extends Resource > implements Iterator <E > {
@@ -104,33 +99,33 @@ public ResourceSetIterator(final ResourceSet<E> resourceSet) {
10499
105100 @ Override
106101 public boolean hasNext () {
107- if (resourceSet .getLimit () != null && resourceSet .processed >= resourceSet .getLimit ()) {
102+ if (resourceSet .getLimit () != null && resourceSet .state . processed >= resourceSet .getLimit ()) {
108103 return false ;
109104 }
110105
111- return resourceSet .iterator .hasNext ();
106+ return resourceSet .state . iterator .hasNext ();
112107 }
113108
114109 @ Override
115110 public E next () {
116- if (resourceSet == null || resourceSet .iterator == null ) {
111+ if (resourceSet == null || resourceSet .state . iterator == null ) {
117112 throw new NoSuchElementException ();
118113 }
119114
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 ()) {
122117 resourceSet .fetchNextPage ();
123118 }
124119
125- resourceSet .processed ++;
120+ resourceSet .state . processed ++;
126121 return element ;
127122 }
128123
129124 @ Override
130125 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 ();
134129 }
135130 }
136131
0 commit comments