1 package org.javabb.dao.hibernate; 2 3 import java.sql.ResultSet ; 4 import java.util.ArrayList ; 5 import java.util.Date ; 6 import java.util.Iterator ; 7 import java.util.List ; 8 import java.util.Set ; 9 10 import org.apache.commons.logging.Log; 11 import org.apache.commons.logging.LogFactory; 12 import org.javabb.dao.entity.IForumDAO; 13 import org.javabb.infra.ConfigurationFactory; 14 import org.javabb.infra.DateUtil; 15 import org.javabb.infra.Paging; 16 import org.javabb.transaction.PostTransaction; 17 import org.javabb.transaction.UserTransaction; 18 import org.javabb.vo.Forum; 19 import org.javabb.vo.Post; 20 import org.javabb.vo.Topic; 21 import org.javabb.vo.User; 22 23 38 39 44 public class ForumHibernateDAO extends HibernateDAO implements IForumDAO { 45 46 private final Log log = LogFactory.getLog(ForumHibernateDAO.class); 47 48 private PostTransaction postTransaction; 50 public void setPostTransaction(PostTransaction postTransaction) { 51 this.postTransaction = postTransaction; 52 } 53 54 private UserTransaction userTransaction; 56 public void setUserTransaction(UserTransaction userTransaction) { 57 this.userTransaction = userTransaction; 58 } 59 60 63 public Forum load(Long id) { 64 return (Forum) load(Forum.class, id); 65 } 66 67 70 public Forum insertForum(Forum forum) { 71 return (Forum)getHibernateTemplate().saveOrUpdateCopy(forum); 72 } 73 74 77 public List findAll() { 78 return findAll(Forum.class, "o.forumOrder ASC", ALL_PAGES, ALL_PAGES); 79 } 80 81 public List findByCategoryOrderAsc(Long id) { 82 return this.findAll(Forum.class, 83 new String []{"category.idCategory"}, 84 new String []{""+id}, 85 new String []{"forumOrder"}, 86 new String []{"asc"}); 87 } 88 89 90 93 public List findByCategory(Long id) { 94 return findByAttribute(Forum.class, "o.category.idCategory", id); 95 } 96 97 100 public void update(Forum forum) { 101 getHibernateTemplate().update(forum); 102 } 103 104 107 public int countAllForums() { 108 return countRows(Forum.class, "idForum"); 109 } 110 111 117 public void transferForum(Forum forum, int forumTo) throws Exception { 118 executeSQL("update jbb_topics set id_forum = " + forumTo 119 + " where id_forum = " 120 + forum.getIdForum()); 121 } 122 123 128 public void deleteForum(Forum forum) throws Exception { 129 deleteFrom("from org.javabb.vo.Post as p where p.topic.forum.idForum = " + forum.getIdForum()); 130 deleteFrom("from org.javabb.vo.Topic as t where t.forum.idForum = " + forum.getIdForum()); 131 deleteFrom("from org.javabb.vo.Forum as f where f.idForum = " + forum.getIdForum()); 132 } 133 134 137 public void refreshForum(Long forumId) { 138 139 log.debug("Refreshing forums..."); 140 141 Forum forum = load(forumId); 142 143 String customHql = "Topic as t where t.forum.idForum=" + forum.getIdForum(); 145 146 Integer cntTopics = countRowsOfTable(customHql, "t.idTopic"); 147 forum.setTopicCount(new Long (cntTopics.intValue())); 148 149 151 customHql = "Post as p where p.topic.forum.idForum=" + forum.getIdForum(); 152 Integer postCount = countRowsOfTable(customHql, "p.idPost"); 153 forum.setPostCount(new Long (postCount.intValue())); 154 155 String [] whereField = { "topic.forum.idForum" }; 157 String [] whereValue = { "" + forum.getIdForum() }; 158 String [] orderField = { "postDate" }; 159 String [] orderValue = { "desc" }; 160 161 Post lastPost = null; 162 List lstPosts = findAll(Post.class, whereField, whereValue, orderField, orderValue, 0, 1); 163 164 if (!lstPosts.isEmpty()) { 165 lastPost = (Post) lstPosts.get(0); 166 forum.setLastPostId(lastPost.getId()); 168 forum.setLastPostUserId(lastPost.getUser().getId()); 169 forum.setLastPostUserName(lastPost.getUser().getUser()); 170 forum.setLastPostDate(lastPost.getPostDate()); 171 } else { 172 forum.setLastPostId(null); 174 forum.setLastPostUserId(null); 175 forum.setLastPostUserName(null); 176 forum.setLastPostDate(null); 177 } 178 179 lstPosts = null; 180 181 log.debug("Forums: ok!"); 182 183 184 } 187 188 191 public void refreshTopic(Long topicId) { 192 193 log.debug("Refreshing topics..."); 194 Topic topic = new Topic(); 196 topic.setId(topicId); 197 topic = (Topic) load(topic); 198 199 Forum forum = topic.getForum(); 200 forum = (Forum) load(forum); 201 202 String customHql = "Topic as t where t.forum.idForum=" + forum.getIdForum(); 203 Integer cntTopics = countRowsOfTable(customHql, "t.idTopic"); 204 forum.setTopicCount(new Long (cntTopics.intValue())); 205 206 String hqlRowsByTopic = "Post as p where p.topic.idTopic=" + topicId; 207 Integer cntPosts = countRowsOfTable(hqlRowsByTopic, "p.idPost"); 208 topic.setRespostas(new Integer (cntPosts.intValue() - 1)); 209 210 Post post = postTransaction.findbyTopicDesc(topic); 211 212 User user = null; 213 if(post.getUser().getUser() == null){ 214 user = userTransaction.getUser(post.getUser().getIdUser()); 215 topic.setLastPostUserName(user.getUser()); 216 } else { 217 topic.setLastPostUserName(post.getUser().getUser()); 218 } 219 220 topic.setLastPostId(post.getId()); 221 topic.setLastPostDate(post.getPostDate()); 222 topic.setLastPostUserId(post.getUser().getIdUser()); 223 224 Integer pageLastPost = postTransaction.getPageOfLastPostByTopic(topic); 225 topic.setPageLastPost(pageLastPost); 226 227 log.debug("Topics: ok!"); 228 } 229 230 233 public void refreshPost(Long postId) { 234 235 log.debug("Refreshing posts..."); 236 Post post = new Post(); 238 post.setId(postId); 239 post = (Post) load(post); 240 241 Topic topic = post.getTopic(); 242 topic = (Topic) load(topic); 243 Forum forum = topic.getForum(); 244 forum = (Forum) load(forum); 245 246 String customHql = "Post as p where p.topic.forum.idForum=" + forum.getIdForum(); 247 Integer postCount = countRowsOfTable(customHql, "p.idPost"); 248 forum.setPostCount(new Long (postCount.intValue())); 249 250 String [] whereField = { "topic.forum.idForum" }; 252 String [] whereValue = { "" + forum.getIdForum() }; 253 String [] orderField = { "postDate" }; 254 String [] orderValue = { "desc" }; 255 256 Post lastPost = null; 257 List lstPosts = findAll(Post.class, whereField, whereValue, orderField, orderValue, 0, 1); 258 259 if (!lstPosts.isEmpty()) { 260 lastPost = (Post) lstPosts.get(0); 261 } 262 lstPosts = null; 263 264 User usr = (User) load(lastPost.getUser()); 265 266 forum.setLastPostId(lastPost.getId()); 267 forum.setLastPostUserId(usr.getIdUser()); 268 269 forum.setLastPostUserName(usr.getUser()); 270 forum.setLastPostDate(lastPost.getPostDate()); 271 272 usr = null; 273 274 String [] whereFieldPage = { "topic.idTopic" }; 276 String [] whereValuePage = { topic.getIdTopic().toString() }; 277 278 int rowsPerPage = ConfigurationFactory.getConf().postsPage.intValue(); 280 int nroRecords = countRowsByWhere("Post", "idPost", whereFieldPage, whereValuePage).intValue(); 281 int totalPages = Paging.getNroPages(rowsPerPage, nroRecords); 282 283 forum.setLastPagePost(new Long (totalPages)); 284 285 log.debug("Posts: ok!"); 286 } 287 288 289 297 public List obtainUnreadForuns(Set readTopics, Date lastUserVisit, Long userId) throws Exception { 298 Iterator itTopics = readTopics.iterator(); 299 List forumIds = new ArrayList (); 300 301 String lastUserStr = DateUtil.dateFormat(lastUserVisit, "yyyy-MM-dd HH:mm:ss"); 302 303 if(userId == null){ 304 userId = new Long (0); 305 } 306 307 308 String sql = " SELECT distinct(t.id_forum) " + 309 " FROM jbb_posts p, jbb_topics t " + 310 " WHERE p.id_post = last_post_id " + 311 " AND p.data_post > '" + lastUserStr + "'" + 312 " AND t.last_post_user_id <> " + userId; 313 314 while(itTopics.hasNext()){ 315 Long topicId = (Long )itTopics.next(); 316 sql += " AND t.id_topic <> " + topicId; 317 } 318 319 320 logger.debug("native:" + sql); 321 322 ResultSet rs = this.getSession().connection().createStatement().executeQuery(sql); 323 while(rs.next()){ 324 forumIds.add(new Long (rs.getLong(1))); 325 } 326 return forumIds; 327 } 328 329 330 331 } 332 | Popular Tags |