/**
* {@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;
}