1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.chemistry.opencmis.client.runtime.util;
20
21 import java.util.Iterator;
22 import java.util.List;
23
24 import org.apache.chemistry.opencmis.client.runtime.util.AbstractPageFetcher.Page;
25
26
27
28
29
30
31
32 public abstract class AbstractIterator<T> implements Iterator<T> {
33
34 private long skipCount;
35 private int skipOffset;
36 private final AbstractPageFetcher<T> pageFetcher;
37
38 private Page<T> page;
39 private Long totalNumItems;
40 private Boolean hasMoreItems;
41
42
43
44
45 protected AbstractIterator(long skipCount, AbstractPageFetcher<T> pageFetcher) {
46 this.skipCount = skipCount;
47 this.pageFetcher = pageFetcher;
48 }
49
50 public long getPosition() {
51 return skipCount + skipOffset;
52 }
53
54 public long getPageNumItems() {
55 Page<T> currentPage = getCurrentPage();
56 if (currentPage != null) {
57 List<T> items = currentPage.getItems();
58 if (items != null) {
59 return items.size();
60 }
61 }
62 return 0L;
63 }
64
65 public long getTotalNumItems() {
66 if (totalNumItems == null) {
67 totalNumItems = Long.valueOf(-1);
68 Page<T> currentPage = getCurrentPage();
69 if (currentPage != null) {
70
71 if (currentPage.getTotalNumItems() != null) {
72 totalNumItems = currentPage.getTotalNumItems();
73 }
74 }
75 }
76 return totalNumItems.longValue();
77 }
78
79 public boolean getHasMoreItems() {
80 if (hasMoreItems == null) {
81 hasMoreItems = Boolean.FALSE;
82 Page<T> currentPage = getCurrentPage();
83 if (currentPage != null) {
84 if (currentPage.getHasMoreItems() != null) {
85 hasMoreItems = currentPage.getHasMoreItems();
86 }
87 }
88 }
89 return hasMoreItems.booleanValue();
90 }
91
92 @Override
93 public void remove() {
94 throw new UnsupportedOperationException();
95 }
96
97
98
99
100
101
102 protected long getSkipCount() {
103 return skipCount;
104 }
105
106
107
108
109
110
111 protected int getSkipOffset() {
112 return skipOffset;
113 }
114
115
116
117
118
119
120 protected int incrementSkipOffset() {
121 return skipOffset++;
122 }
123
124
125
126
127
128
129 protected Page<T> getCurrentPage() {
130 if (page == null) {
131 page = pageFetcher.fetchPage(skipCount);
132 }
133 return page;
134 }
135
136
137
138
139
140
141 protected Page<T> incrementPage() {
142 skipCount += skipOffset;
143 skipOffset = 0;
144 totalNumItems = null;
145 hasMoreItems = null;
146 page = pageFetcher.fetchPage(skipCount);
147 return page;
148 }
149
150 }