001: /**
002: * Copyright (C) 2001 Yasna.com. All rights reserved.
003: *
004: * ===================================================================
005: * The Apache Software License, Version 1.1
006: *
007: * Redistribution and use in source and binary forms, with or without
008: * modification, are permitted provided that the following conditions
009: * are met:
010: *
011: * 1. Redistributions of source code must retain the above copyright
012: * notice, this list of conditions and the following disclaimer.
013: *
014: * 2. Redistributions in binary form must reproduce the above copyright
015: * notice, this list of conditions and the following disclaimer in
016: * the documentation and/or other materials provided with the
017: * distribution.
018: *
019: * 3. The end-user documentation included with the redistribution,
020: * if any, must include the following acknowledgment:
021: * "This product includes software developed by
022: * Yasna.com (http://www.yasna.com)."
023: * Alternately, this acknowledgment may appear in the software itself,
024: * if and wherever such third-party acknowledgments normally appear.
025: *
026: * 4. The names "Yazd" and "Yasna.com" must not be used to
027: * endorse or promote products derived from this software without
028: * prior written permission. For written permission, please
029: * contact yazd@yasna.com.
030: *
031: * 5. Products derived from this software may not be called "Yazd",
032: * nor may "Yazd" appear in their name, without prior written
033: * permission of Yasna.com.
034: *
035: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
036: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
037: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
038: * DISCLAIMED. IN NO EVENT SHALL YASNA.COM OR
039: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
040: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
041: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
042: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
043: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
044: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
045: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
046: * SUCH DAMAGE.
047: * ====================================================================
048: *
049: * This software consists of voluntary contributions made by many
050: * individuals on behalf of Yasna.com. For more information
051: * on Yasna.com, please see <http://www.yasna.com>.
052: */
053:
054: /**
055: * Copyright (C) 2000 CoolServlets.com. All rights reserved.
056: *
057: * ===================================================================
058: * The Apache Software License, Version 1.1
059: *
060: * Redistribution and use in source and binary forms, with or without
061: * modification, are permitted provided that the following conditions
062: * are met:
063: *
064: * 1. Redistributions of source code must retain the above copyright
065: * notice, this list of conditions and the following disclaimer.
066: *
067: * 2. Redistributions in binary form must reproduce the above copyright
068: * notice, this list of conditions and the following disclaimer in
069: * the documentation and/or other materials provided with the
070: * distribution.
071: *
072: * 3. The end-user documentation included with the redistribution,
073: * if any, must include the following acknowledgment:
074: * "This product includes software developed by
075: * CoolServlets.com (http://www.coolservlets.com)."
076: * Alternately, this acknowledgment may appear in the software itself,
077: * if and wherever such third-party acknowledgments normally appear.
078: *
079: * 4. The names "Jive" and "CoolServlets.com" must not be used to
080: * endorse or promote products derived from this software without
081: * prior written permission. For written permission, please
082: * contact webmaster@coolservlets.com.
083: *
084: * 5. Products derived from this software may not be called "Jive",
085: * nor may "Jive" appear in their name, without prior written
086: * permission of CoolServlets.com.
087: *
088: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
089: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
090: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
091: * DISCLAIMED. IN NO EVENT SHALL COOLSERVLETS.COM OR
092: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
093: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
094: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
095: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
096: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
097: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
098: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
099: * SUCH DAMAGE.
100: * ====================================================================
101: *
102: * This software consists of voluntary contributions made by many
103: * individuals on behalf of CoolServlets.com. For more information
104: * on CoolServlets.com, please see <http://www.coolservlets.com>.
105: */package com.Yasna.forum.database;
106:
107: import java.util.*;
108:
109: import com.Yasna.util.*;
110: import com.Yasna.forum.*;
111:
112: /**
113: * Iterator for database query results.
114: */
115: public class DbQueryIterator implements Iterator {
116:
117: //maintain an array of message ids to iterator through.
118: private int[] messages;
119: //points to the current message id that the user has iterated to.
120: private int currentIndex = -1;
121:
122: private int maxIndex;
123:
124: private DbForumFactory factory;
125:
126: /**
127: * Creates a new query iterator using an array of message id's. The
128: * ForumFactory is used to lookup the actual message objects.
129: *
130: * @param messages the array of message id's to iterate through.
131: * @param factory a DbForumFactory to obtain actual message objects from.
132: */
133: public DbQueryIterator(int[] messages, DbForumFactory factory) {
134: this .messages = messages;
135: this .factory = factory;
136: maxIndex = messages.length;
137: }
138:
139: /**
140: * Creates a new query iterator using an array of message id's. The
141: * ForumFactory is used to lookup the actual message objects. A start index
142: * and number of results limit the scope of the Iterator to a subset of the
143: * message array. However, if the start index or number of results does
144: * not fall into the bounds of the message array, the Iterator may return
145: * fewer results than the number indicated by the numResults paramater.
146: *
147: * @param messages the array of message id's to iterate through.
148: * @param factory a DbForumFactory to obtain actual message objects from.
149: * @param startIndex a starting index in the messages array for the Iterator.
150: * @param numResults the max number of results the Iterator should provide.
151: */
152: public DbQueryIterator(int[] messages, DbForumFactory factory,
153: int startIndex, int numResults) {
154: this .messages = messages;
155: this .factory = factory;
156: currentIndex = startIndex - 1;
157: maxIndex = startIndex + numResults;
158: }
159:
160: /**
161: * Returns true if there are more messages left to iteratate through.
162: */
163: public boolean hasNext() {
164: return (currentIndex + 1 < messages.length && currentIndex + 1 < maxIndex);
165: }
166:
167: /**
168: * Returns the next message.
169: */
170: public Object next() throws java.util.NoSuchElementException {
171: ForumMessage message = null;
172: currentIndex++;
173: if (currentIndex >= messages.length) {
174: throw new java.util.NoSuchElementException();
175: }
176: try {
177: int messageID = messages[currentIndex];
178: message = factory.getMessage(messageID);
179: //Now, get the message from the it's thread so that filters are
180: //applied to the message. This may seem a bit convuluted, but is
181: //necessary.
182: message = message.getForumThread().getMessage(messageID);
183: } catch (Exception e) {
184: e.printStackTrace();
185: }
186: return message;
187: }
188:
189: /**
190: * For security reasons, the remove operation is not supported.
191: */
192: public void remove() {
193: throw new UnsupportedOperationException();
194: }
195: }
|