1 53 54 106 107 package com.Yasna.forum.database; 108 109 import java.util.Iterator ; 110 import java.sql.*; 111 112 import com.Yasna.forum.*; 113 114 117 public class DbThreadIterator implements Iterator { 118 119 120 private static final String MESSAGE_COUNT = 121 "SELECT count(messageID) FROM yazdMessage WHERE threadID=?"; 122 private static final String GET_MESSAGES = 123 "SELECT messageID, creationDate FROM yazdMessage WHERE threadID=? " + 124 "ORDER BY creationDate ASC"; 125 126 private ForumThread thread; 127 private int [] messages; 128 private int currentIndex = -1; 129 130 private ForumMessage nextMessage = null; 131 132 protected DbThreadIterator(ForumThread thread) { 133 this.thread = thread; 134 Connection con = null; 135 PreparedStatement pstmt = null; 136 try { 137 con = DbConnectionManager.getConnection(); 138 pstmt = con.prepareStatement(MESSAGE_COUNT); 139 pstmt.setInt(1, thread.getID()); 140 ResultSet rs = pstmt.executeQuery(); 141 rs.next(); 142 messages = new int[rs.getInt(1)]; 143 pstmt.close(); 144 145 pstmt = con.prepareStatement(GET_MESSAGES); 146 pstmt.setInt(1, thread.getID()); 147 rs = pstmt.executeQuery(); 148 for (int i=0; i<messages.length; i++) { 149 rs.next(); 150 messages[i] = rs.getInt(1); 151 } 152 } 153 catch( SQLException sqle ) { 154 System.err.println("Error in DbThreadIterator:constructor()-" + sqle); 155 } 156 finally { 157 try { pstmt.close(); } 158 catch (Exception e) { e.printStackTrace(); } 159 try { con.close(); } 160 catch (Exception e) { e.printStackTrace(); } 161 } 162 } 163 164 protected DbThreadIterator(ForumThread thread, int startIndex, int numResults) 165 { 166 this.thread = thread; 167 168 int[] tempMessages = new int[numResults]; 169 int messageCount = 0; 173 174 Connection con = null; 175 PreparedStatement pstmt = null; 176 177 try { 178 con = DbConnectionManager.getConnection(); 179 pstmt = con.prepareStatement(GET_MESSAGES); 180 pstmt.setInt(1, thread.getID()); 181 ResultSet rs = pstmt.executeQuery(); 182 for (int i=0; i<startIndex; i++) { 184 rs.next(); 185 } 186 for (int i=0; i<numResults; i++) { 188 if (rs.next()) { 189 tempMessages[messageCount] = rs.getInt("messageID"); 190 messageCount++; 191 } 192 else { 193 break; 194 } 195 } 196 } 197 catch( SQLException sqle ) { 198 System.err.println("Error in DbThreadIterator:constructor()-" + sqle); 199 } 200 finally { 201 try { pstmt.close(); } 202 catch (Exception e) { e.printStackTrace(); } 203 try { con.close(); } 204 catch (Exception e) { e.printStackTrace(); } 205 } 206 messages = new int[messageCount]; 207 for (int i=0; i<messageCount; i++) { 208 messages[i] = tempMessages[i]; 209 } 210 } 211 212 217 public boolean hasNext() { 218 if (currentIndex+1 >= messages.length) { 221 return false; 222 } 223 return true; 224 225 243 } 244 245 251 public Object next() throws java.util.NoSuchElementException { 252 ForumMessage message = null; 253 if (nextMessage != null) { 254 message = nextMessage; 255 nextMessage = null; 256 } 257 else { 258 message = getNextMessage(); 259 if (message == null) { 260 throw new java.util.NoSuchElementException (); 261 } 262 } 263 return message; 264 } 265 266 272 public void remove() throws UnsupportedOperationException { 273 throw new UnsupportedOperationException (); 274 } 275 276 280 private ForumMessage getNextMessage() { 281 while (currentIndex+1 < messages.length) { 282 currentIndex++; 283 try { 284 ForumMessage message = thread.getMessage(messages[currentIndex]); 285 return message; 286 } 287 catch (ForumMessageNotFoundException mnfe) { } 288 } 289 return null; 290 } 291 } 292 | Popular Tags |