| 1 25 package org.nemesis.forum.impl; 26 27 import java.sql.Connection ; 28 import java.sql.PreparedStatement ; 29 import java.sql.ResultSet ; 30 import java.sql.SQLException ; 31 import java.util.ArrayList ; 32 import java.util.Iterator ; 33 import java.util.ListIterator ; 34 import java.util.NoSuchElementException ; 35 36 import org.apache.commons.logging.Log; 37 import org.apache.commons.logging.LogFactory; 38 import org.nemesis.forum.Forum; 39 import org.nemesis.forum.Message; 40 import org.nemesis.forum.User; 41 import org.nemesis.forum.exception.NotFoundException; 42 import org.nemesis.forum.util.jdbc.DbConnectionManager; 43 46 public class DbUserMessagesIterator implements Iterator , ListIterator { 47 static protected Log log = LogFactory.getLog(DbUserMessagesIterator.class); 48 49 private static final String USER_MESSAGES = 50 "SELECT messageID, yazdMessage.threadID FROM yazdMessage,yazdForum,yazdThread WHERE " 51 + "yazdMessage.userID=? AND yazdForum.forumID=? AND " 52 + "yazdThread.forumID=yazdForum.forumID AND " 53 + "yazdMessage.threadID=yazdThread.threadID"; 54 55 private int currentIndex = -1; 56 private int[] messages; 57 private int[] threads; 59 private Forum forum; 60 61 private DbForumFactory factory; 62 63 protected DbUserMessagesIterator(DbForumFactory factory, User user, Forum forum) { 64 this.factory = factory; 65 this.forum = forum; 66 ArrayList tempMessages = new ArrayList (); 69 ArrayList tempThreads = new ArrayList (); 70 Connection con = null; 71 PreparedStatement pstmt = null; 72 try { 73 con = DbConnectionManager.getConnection(); 74 pstmt = con.prepareStatement(USER_MESSAGES); 75 pstmt.setInt(1, user.getID()); 76 pstmt.setInt(2, forum.getID()); 77 ResultSet rs = pstmt.executeQuery(); 78 while (rs.next()) { 79 tempMessages.add(new Integer (rs.getInt(1))); 80 tempThreads.add(new Integer (rs.getInt(2))); 81 } 82 } catch (SQLException sqle) { 83 log.error("Error in DbUserMessagesIterator:constructor()-" , sqle); 84 85 } finally { 86 try { 87 pstmt.close(); 88 } catch (Exception e) { 89 log.error("" , e); 90 } 91 try { 92 con.close(); 93 } catch (Exception e) { 94 log.error("" , e); 95 } 96 } 97 messages = new int[tempMessages.size()]; 99 for (int i = 0; i < messages.length; i++) { 100 messages[i] = ((Integer ) tempMessages.get(i)).intValue(); 101 } 102 threads = new int[tempThreads.size()]; 104 for (int i = 0; i < threads.length; i++) { 105 threads[i] = ((Integer ) tempThreads.get(i)).intValue(); 106 } 107 } 108 109 112 public boolean hasNext() { 113 return (currentIndex + 1 < messages.length); 114 } 115 116 119 public boolean hasPrevious() { 120 return (currentIndex > 0); 121 } 122 123 126 public Object next() throws java.util.NoSuchElementException { 127 Message message = null; 128 currentIndex++; 129 if (currentIndex >= messages.length) { 130 throw new java.util.NoSuchElementException (); 131 } 132 try { 133 message = forum.getThread(threads[currentIndex]).getMessage(messages[currentIndex]); 134 } catch (NotFoundException fmnfe) { 135 log.error("" , fmnfe); 136 } 137 return message; 138 } 139 140 146 public void add(Object o) throws UnsupportedOperationException { 147 throw new UnsupportedOperationException (); 148 } 149 150 156 public void remove() { 157 throw new UnsupportedOperationException (); 158 } 159 160 166 public void set(Object o) throws UnsupportedOperationException { 167 throw new UnsupportedOperationException (); 168 } 169 170 173 public int nextIndex() { 174 return currentIndex + 1; 175 } 176 177 180 public Object previous() throws NoSuchElementException { 181 Message message = null; 182 currentIndex--; 183 if (currentIndex < 0) { 184 currentIndex++; 185 throw new java.util.NoSuchElementException (); 186 } 187 try { 188 message = forum.getThread(threads[currentIndex]).getMessage(messages[currentIndex]); 189 } catch (NotFoundException fmnfe) { 190 log.error("" , fmnfe); 191 } 192 return message; 193 } 194 195 198 public int previousIndex() { 199 return currentIndex - 1; 200 } 201 } 202 | Popular Tags |