1 /*
2 * #%L
3 * SimpleMongoIteratorImpl.java - mongodb-async-driver - Allanbank Consulting, Inc.
4 * %%
5 * Copyright (C) 2011 - 2014 Allanbank Consulting, Inc.
6 * %%
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * #L%
19 */
20 package com.allanbank.mongodb.client;
21
22 import java.util.ArrayList;
23 import java.util.Collection;
24 import java.util.Iterator;
25 import java.util.List;
26
27 import com.allanbank.mongodb.MongoIterator;
28 import com.allanbank.mongodb.bson.Document;
29
30 /**
31 * Iterator over the results of fixed collection.
32 *
33 * @param <T>
34 * The type being iterated.
35 *
36 * @api.no This class is <b>NOT</b> part of the drivers API. This class may be
37 * mutated in incompatible ways between any two releases of the driver.
38 * @copyright 2011-2013, Allanbank Consulting, Inc., All Rights Reserved
39 */
40 public class SimpleMongoIteratorImpl<T> implements MongoIterator<T> {
41
42 /** The wrapped iterator. */
43 private final Iterator<T> myIterator;
44
45 /**
46 * Create a new SimpleMongoIteratorImpl.
47 *
48 * @param wrapped
49 * The collection to turn into a {@link MongoIterator}.
50 */
51 public SimpleMongoIteratorImpl(final Collection<T> wrapped) {
52 myIterator = wrapped.iterator();
53 }
54
55 /**
56 * {@inheritDoc}
57 * <p>
58 * Overridden to return the null as this cursor cannot be restarted.
59 * </p>
60 */
61 @Override
62 public Document asDocument() {
63 return null;
64 }
65
66 /**
67 * {@inheritDoc}
68 * <p>
69 * Overridden to do nothing.
70 * </p>
71 */
72 @Override
73 public void close() {
74 // Nothing.
75 }
76
77 /**
78 * {@inheritDoc}
79 * <p>
80 * Overridden to return -1.
81 * </p>
82 */
83 @Override
84 public int getBatchSize() {
85 return -1;
86 }
87
88 /**
89 * {@inheritDoc}
90 * <p>
91 * Overridden to return true if there are more documents.
92 * </p>
93 */
94 @Override
95 public boolean hasNext() {
96 return myIterator.hasNext();
97 }
98
99 /**
100 * {@inheritDoc}
101 * <p>
102 * Overridden to return this iterator.
103 * </p>
104 */
105 @Override
106 public Iterator<T> iterator() {
107 return this;
108 }
109
110 /**
111 * {@inheritDoc}
112 * <p>
113 * Overridden to return the next document from the query.
114 * </p>
115 *
116 * @see java.util.Iterator#next()
117 */
118 @Override
119 public T next() {
120 return myIterator.next();
121 }
122
123 /**
124 * {@inheritDoc}
125 * <p>
126 * Overridden to throw an {@link UnsupportedOperationException}.
127 * </p>
128 *
129 * @see java.util.Iterator#remove()
130 */
131 @Override
132 public void remove() {
133 throw new UnsupportedOperationException(
134 "Cannot remove a document via a MongoDB iterator.");
135 }
136
137 /**
138 * {@inheritDoc}
139 * <p>
140 * Overridden to do nothing as this iterator only supports single batch
141 * results.
142 * </p>
143 */
144 @Override
145 public void setBatchSize(final int batchSize) {
146 // Nothing.
147 }
148
149 /**
150 * {@inheritDoc}
151 * <p>
152 * Overridden to do nothing as this iterator only supports single batch
153 * results.
154 * </p>
155 */
156 @Override
157 public void stop() {
158 // Nothing.
159 }
160
161 /**
162 * {@inheritDoc}
163 * <p>
164 * Overridden to return the remaining elements as a array.
165 * </p>
166 */
167 @Override
168 public Object[] toArray() {
169 final List<T> remaining = toList();
170
171 return remaining.toArray();
172 }
173
174 /**
175 * {@inheritDoc}
176 * <p>
177 * Overridden to return the remaining elements as a array.
178 * </p>
179 */
180 @Override
181 public <S> S[] toArray(final S[] to) {
182 final List<T> remaining = toList();
183
184 return remaining.toArray(to);
185 }
186
187 /**
188 * {@inheritDoc}
189 * <p>
190 * Overridden to return the remaining elements as a list.
191 * </p>
192 */
193 @Override
194 public List<T> toList() {
195 final List<T> remaining = new ArrayList<T>();
196
197 while (hasNext()) {
198 remaining.add(next());
199 }
200
201 return remaining;
202 }
203 }