/** * {@inheritDoc} */ @PreAuthorize("hasPermission(#topic.branch.id, 'BRANCH', 'BranchPermission.MOVE_TOPICS')") @Override public void moveTopic(Topic topic, Long branchId) throws NotFoundException { Branch sourceBranch = topic.getBranch(); Branch targetBranch = branchDao.get(branchId); if (targetBranch == null) { throw new NotFoundException("Target branch not exist"); } targetBranch.addTopic(topic); branchDao.saveOrUpdate(targetBranch); List<Post> topicPosts = topic.getPosts(); if (topicPosts.contains(sourceBranch.getLastPost())) { branchLastPostService.refreshLastPostInBranch(sourceBranch); } branchLastPostService.refreshLastPostInBranch(targetBranch); notificationService.sendNotificationAboutTopicMoved(topic); logger.info("Moved topic \"{}\". Topic id: {}", topic.getTitle(), topic.getId()); }
/** * {@inheritDoc} */ @Override public void fillStatisticInfo(List<org.jtalks.common.model.entity.Branch> branches) { for (org.jtalks.common.model.entity.Branch commonBranch : branches) { Branch jcommuneBranch = (Branch) commonBranch; int postsCount = getDao().getCountPostsInBranch(jcommuneBranch); jcommuneBranch.setPostsCount(postsCount); int topicsCount = topicDao.countTopics(jcommuneBranch); jcommuneBranch.setTopicsCount(topicsCount); if (jcommuneBranch.getLastPost() == null) { lastPostService.refreshLastPostInBranch(jcommuneBranch); } //TODO Was removed till milestone 2 due to performance issues // JCUser user = userService.getCurrentUser(); // if (!user.isAnonymous()) { // boolean isUnreadPosts = getDao().isUnreadPostsInBranch(jcommuneBranch, user); // jcommuneBranch.setUnreadPosts(isUnreadPosts); // } } }
/** * Performs actual topic deletion. Deletes all topic related data and * recalculates user's post count. * * @param topic topic to delete * @return branch without deleted topic */ private Branch deleteTopicSilent(Topic topic) { List<Post> topicPosts = topic.getPosts(); for (Post post : topicPosts) { JCUser user = post.getUserCreated(); user.setPostCount(user.getPostCount() - 1); } Branch branch = topic.getBranch(); Post lastPostInBranch = branch.getLastPost(); boolean branchLastPostFromDeletedTopic = topicPosts.contains(lastPostInBranch); if (branchLastPostFromDeletedTopic) { branch.clearLastPost(); } branch.deleteTopic(topic); branchDao.saveOrUpdate(branch); if (branchLastPostFromDeletedTopic) { branchLastPostService.refreshLastPostInBranch(branch); } securityService.deleteFromAcl(Topic.class, topic.getId()); return branch; }