KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > Yasna > forum > database > DbForumIterator


1 /**
2  * Copyright (C) 2001 Yasna.com. All rights reserved.
3  *
4  * ===================================================================
5  * The Apache Software License, Version 1.1
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * 1. Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  *
14  * 2. Redistributions in binary form must reproduce the above copyright
15  * notice, this list of conditions and the following disclaimer in
16  * the documentation and/or other materials provided with the
17  * distribution.
18  *
19  * 3. The end-user documentation included with the redistribution,
20  * if any, must include the following acknowledgment:
21  * "This product includes software developed by
22  * Yasna.com (http://www.yasna.com)."
23  * Alternately, this acknowledgment may appear in the software itself,
24  * if and wherever such third-party acknowledgments normally appear.
25  *
26  * 4. The names "Yazd" and "Yasna.com" must not be used to
27  * endorse or promote products derived from this software without
28  * prior written permission. For written permission, please
29  * contact yazd@yasna.com.
30  *
31  * 5. Products derived from this software may not be called "Yazd",
32  * nor may "Yazd" appear in their name, without prior written
33  * permission of Yasna.com.
34  *
35  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
36  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
37  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
38  * DISCLAIMED. IN NO EVENT SHALL YASNA.COM OR
39  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
42  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
43  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
44  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
45  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
46  * SUCH DAMAGE.
47  * ====================================================================
48  *
49  * This software consists of voluntary contributions made by many
50  * individuals on behalf of Yasna.com. For more information
51  * on Yasna.com, please see <http://www.yasna.com>.
52  */

53
54 /**
55  * Copyright (C) 2000 CoolServlets.com. All rights reserved.
56  *
57  * ===================================================================
58  * The Apache Software License, Version 1.1
59  *
60  * Redistribution and use in source and binary forms, with or without
61  * modification, are permitted provided that the following conditions
62  * are met:
63  *
64  * 1. Redistributions of source code must retain the above copyright
65  * notice, this list of conditions and the following disclaimer.
66  *
67  * 2. Redistributions in binary form must reproduce the above copyright
68  * notice, this list of conditions and the following disclaimer in
69  * the documentation and/or other materials provided with the
70  * distribution.
71  *
72  * 3. The end-user documentation included with the redistribution,
73  * if any, must include the following acknowledgment:
74  * "This product includes software developed by
75  * CoolServlets.com (http://www.coolservlets.com)."
76  * Alternately, this acknowledgment may appear in the software itself,
77  * if and wherever such third-party acknowledgments normally appear.
78  *
79  * 4. The names "Jive" and "CoolServlets.com" must not be used to
80  * endorse or promote products derived from this software without
81  * prior written permission. For written permission, please
82  * contact webmaster@coolservlets.com.
83  *
84  * 5. Products derived from this software may not be called "Jive",
85  * nor may "Jive" appear in their name, without prior written
86  * permission of CoolServlets.com.
87  *
88  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
89  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
90  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
91  * DISCLAIMED. IN NO EVENT SHALL COOLSERVLETS.COM OR
92  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
93  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
94  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
95  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
96  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
97  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
98  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
99  * 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  */

106
107 package com.Yasna.forum.database;
108
109 import java.util.*;
110 //JDK1.1// import com.sun.java.util.collections.*;
111
import java.sql.*;
112
113 import com.Yasna.util.*;
114 import com.Yasna.forum.*;
115
116 /**
117  * Database implementation to iterate through threads in a forum.
118  * At the moment, threads are always ordered by creationDate. Obviously,
119  * various skins will probably want different iterators. The solution will
120  * probably be to pass in various flags to forum.iterator() in order to get
121  * different types of iterators. That will require small changes to this
122  * class.
123  */

124 public class DbForumIterator implements Iterator, ListIterator {
125
126     /** DATABASE QUERIES **/
127     private static final String JavaDoc GET_THREADS_SORT_BY_CREATION_DATE =
128         "SELECT threadID, creationDate FROM yazdThread WHERE forumID=? " +
129         "ORDER BY sticky desc,creationDate DESC";
130     private static final String JavaDoc GET_THREADS_SORT_BY_MODIFIED_DATE =
131         "SELECT threadID, modifiedDate FROM yazdThread WHERE forumID=? " +
132         "ORDER BY sticky desc,modifiedDate DESC";
133
134     //A reference to the forum object that the iterator was created from.
135
//This is used to load thread objects.
136
private DbForum forum;
137     //maintain an array of thread ids to iterator through.
138
private int [] threads;
139     //points to the current thread id that the user has iterated to.
140
private int currentIndex = -1;
141
142     DbForumFactory factory;
143
144     public DbForumIterator(DbForum forum, DbForumFactory factory)
145     {
146         this.forum = forum;
147         this.factory = factory;
148         //We don't know how many results will be returned, so store them
149
//in an ArrayList.
150
ArrayList tempThreads = new ArrayList();
151         Connection con = null;
152         PreparedStatement pstmt = null;
153         try {
154             con = DbConnectionManager.getConnection();
155             pstmt = con.prepareStatement(GET_THREADS_SORT_BY_CREATION_DATE);
156             pstmt.setInt(1,forum.getID());
157             ResultSet rs = pstmt.executeQuery();
158
159             while (rs.next()) {
160                 tempThreads.add(new Integer JavaDoc(rs.getInt("threadID")));
161             }
162         }
163         catch( SQLException sqle ) {
164             System.err.println("Error in DbThreadIterator:constructor()-" + sqle);
165         }
166         finally {
167             try { pstmt.close(); }
168             catch (Exception JavaDoc e) { e.printStackTrace(); }
169             try { con.close(); }
170             catch (Exception JavaDoc e) { e.printStackTrace(); }
171         }
172         threads = new int[tempThreads.size()];
173         for (int i=0; i<threads.length; i++) {
174             threads[i] = ((Integer JavaDoc)tempThreads.get(i)).intValue();
175         }
176     }
177
178     public DbForumIterator(DbForum forum, DbForumFactory factory,
179             int startIndex, int numResults, int sortBy)
180     {
181         this.forum = forum;
182         this.factory = factory;
183
184         int[] tempThreads = new int[numResults];
185         //It's very possible that there might not be as many threads to get
186
//as we requested. Therefore, we keep track of how many threads we
187
//get by keeping a threadCount.
188
int threadCount = 0;
189
190         Connection con = null;
191         PreparedStatement pstmt = null;
192         try {
193             con = DbConnectionManager.getConnection();
194             if (Forum.SORT_BY_CREATE_DATE==sortBy) {
195                 pstmt = con.prepareStatement(GET_THREADS_SORT_BY_CREATION_DATE);
196             } else {
197                 pstmt = con.prepareStatement(GET_THREADS_SORT_BY_MODIFIED_DATE);
198             }
199             pstmt.setInt(1,forum.getID());
200             ResultSet rs = pstmt.executeQuery();
201
202             //Move to start of index
203
for (int i=0; i<startIndex; i++) {
204                 rs.next();
205             }
206             //Now read in desired number of results
207
for (int i=0; i<numResults; i++) {
208                 if (rs.next()) {
209                     tempThreads[threadCount] = rs.getInt("threadID");
210                     threadCount++;
211                 }
212                 else {
213                     break;
214                 }
215             }
216         }
217         catch( SQLException sqle ) {
218             System.err.println("Error in DbThreadIterator:constructor()-" + sqle);
219         }
220         finally {
221             try { pstmt.close(); }
222             catch (Exception JavaDoc e) { e.printStackTrace(); }
223             try { con.close(); }
224             catch (Exception JavaDoc e) { e.printStackTrace(); }
225         }
226         threads = new int[threadCount];
227         for (int i=0; i<threadCount; i++) {
228             threads[i] = tempThreads[i];
229         }
230     }
231
232     public void add(Object JavaDoc o) throws UnsupportedOperationException JavaDoc {
233         throw new UnsupportedOperationException JavaDoc();
234     }
235
236     public boolean hasNext() {
237         return (currentIndex+1 < threads.length);
238     }
239
240     public boolean hasPrevious() {
241         return (currentIndex > 0);
242     }
243
244     public Object JavaDoc next() throws java.util.NoSuchElementException JavaDoc {
245         ForumThread thread = null;
246         currentIndex++;
247         if (currentIndex >= threads.length) {
248             currentIndex--;
249             throw new java.util.NoSuchElementException JavaDoc();
250         }
251         try {
252             thread = forum.getThread(threads[currentIndex]);
253         }
254         catch (ForumThreadNotFoundException tnfe) {
255             System.err.println(tnfe);
256         }
257         return thread;
258     }
259
260     public int nextIndex() {
261         return currentIndex+1;
262     }
263
264     public Object JavaDoc previous() throws java.util.NoSuchElementException JavaDoc {
265         ForumThread thread = null;
266         currentIndex--;
267         if (currentIndex < 0) {
268             currentIndex++;
269             throw new java.util.NoSuchElementException JavaDoc();
270         }
271         try {
272             thread = forum.getThread(threads[currentIndex]);
273         }
274         catch (ForumThreadNotFoundException tnfe) {
275             System.err.println(tnfe);
276         }
277         return thread;
278     }
279
280     public int previousIndex() {
281         return currentIndex-1;
282     }
283
284     public void remove() throws UnsupportedOperationException JavaDoc {
285         throw new UnsupportedOperationException JavaDoc();
286     }
287
288     public void set(Object JavaDoc o) throws UnsupportedOperationException JavaDoc {
289         throw new UnsupportedOperationException JavaDoc();
290     }
291 }
292
Popular Tags