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 org.apache.chemistry.opencmis.client.api.ItemIterable;
22
23
24
25
26
27
28 public abstract class AbstractIterable<T> implements ItemIterable<T> {
29
30 private final AbstractPageFetcher<T> pageFetcher;
31 private final long skipCount;
32 private AbstractIterator<T> iterator;
33
34 protected AbstractIterable(AbstractPageFetcher<T> pageFetcher) {
35 this(0, pageFetcher);
36 }
37
38 protected AbstractIterable(long position, AbstractPageFetcher<T> pageFetcher) {
39 this.pageFetcher = pageFetcher;
40 this.skipCount = position;
41 }
42
43
44
45
46
47
48 protected long getSkipCount() {
49 return skipCount;
50 }
51
52
53
54
55
56
57 protected AbstractPageFetcher<T> getPageFetcher() {
58 return pageFetcher;
59 }
60
61
62
63
64
65
66 protected abstract AbstractIterator<T> createIterator();
67
68 @Override
69 public AbstractIterator<T> iterator() {
70 return getIterator();
71 }
72
73 @Override
74 public ItemIterable<T> skipTo(long position) {
75 return new CollectionIterable<T>(position, pageFetcher);
76 }
77
78 @Override
79 public ItemIterable<T> getPage() {
80 return new CollectionPageIterable<T>(skipCount, pageFetcher);
81 }
82
83 @Override
84 public ItemIterable<T> getPage(int maxNumItems) {
85 this.pageFetcher.setMaxNumItems(maxNumItems);
86 return new CollectionPageIterable<T>(skipCount, pageFetcher);
87 }
88
89 @Override
90 public long getPageNumItems() {
91 return getIterator().getPageNumItems();
92 }
93
94 @Override
95 public boolean getHasMoreItems() {
96 return getIterator().getHasMoreItems();
97 }
98
99 @Override
100 public long getTotalNumItems() {
101 return getIterator().getTotalNumItems();
102 }
103
104 private AbstractIterator<T> getIterator() {
105 if (this.iterator == null) {
106 this.iterator = createIterator();
107 }
108 return this.iterator;
109 }
110 }
111