/** * {@inheritDoc} */ @Override @PreAuthorize("hasPermission(#topicDto.branch.id, 'BRANCH', 'BranchPermission.CREATE_CODE_REVIEW')") public Topic createCodeReview(Topic topicDto, String bodyText, boolean notifyOnAnswers) throws NotFoundException { JCUser currentUser = userService.getCurrentUser(); currentUser.setPostCount(currentUser.getPostCount() + 1); Topic topic = new Topic(currentUser, topicDto.getTitle()); Post first = new Post(currentUser, wrapWithCodeTag(bodyText)); topic.addPost(first); CodeReview codeReview = new CodeReview(); codeReview.setTopic(topic); topic.setCodeReview(codeReview); Branch branch = topicDto.getBranch(); branch.addTopic(topic); branch.setLastPost(first); branchDao.update(branch); JCUser user = userService.getCurrentUser(); securityService.createAclBuilder().grant(GeneralPermission.WRITE).to(user).on(topic).flush(); securityService.createAclBuilder().grant(GeneralPermission.WRITE).to(user).on(first).flush(); notificationService.branchChanged(branch); subscribeOnTopicIfNotificationsEnabled(notifyOnAnswers, topic, currentUser); dao.update(topic); logger.debug("Created new code review topic id={}, branch id={}, author={}", new Object[]{topic.getId(), branch.getId(), currentUser.getUsername()}); return topic; }