use of com.epam.pipeline.entity.issue.IssueComment in project cloud-pipeline by epam.
the class IssueManager method updateComment.
/**
* Updates comment specified by ID. If issue was closed or issue doesn't exist or comment doesn't exist an error
* will be thrown. If text for comment is empty exception will be thrown.
* @param issueId issue's ID
* @param commentId comment's ID
* @param commentVO comment's text
* @return updated {@link IssueComment}
*/
@Transactional(propagation = Propagation.REQUIRED)
public IssueComment updateComment(Long issueId, Long commentId, IssueCommentVO commentVO) {
IssueComment issueComment = loadComment(issueId, commentId);
loadIssueAndCheckIfNotClosed(issueId);
String text = commentVO.getText();
ensureNotEmptyString(text, MessageConstants.ERROR_INVALID_COMMENT_TEXT);
issueComment.setText(text);
commentDao.updateComment(issueComment);
// Find the attachments that were removed during update and delete them
HashSet<Attachment> newAttachments = new HashSet<>(commentVO.getAttachments());
List<Attachment> allAttachments = attachmentDao.loadAttachmentsByCommentId(commentId);
List<Attachment> toDelete = allAttachments.stream().filter(a -> !newAttachments.contains(a)).collect(Collectors.toList());
attachmentFileManager.deleteAttachments(toDelete);
// New attachments might be added so we need to link them to this comment
commentVO.getAttachments().forEach(a -> attachmentDao.updateAttachmentCommentId(a.getId(), commentId));
return issueComment;
}
use of com.epam.pipeline.entity.issue.IssueComment in project cloud-pipeline by epam.
the class IssueManager method createComment.
/**
* Creates comment for issue. If issue was closed or doesn't exist an error will be occurred.
* @param issueId issue's ID
* @param commentVO comment text
* @return created {@link IssueComment}
*/
@Transactional(propagation = Propagation.REQUIRED)
public IssueComment createComment(Long issueId, IssueCommentVO commentVO) {
Issue issue = loadIssueAndCheckIfNotClosed(issueId);
validateComment(commentVO);
IssueComment comment = issueMapper.toIssueComment(commentVO);
comment.setIssueId(issueId);
comment.setAuthor(authManager.getAuthorizedUser());
commentDao.createComment(comment);
commentVO.getAttachments().forEach(a -> attachmentDao.updateAttachmentCommentId(a.getId(), comment.getId()));
notificationManager.notifyIssueComment(comment, issue, StringUtils.defaultIfBlank(commentVO.getHtmlText(), comment.getText()));
return comment;
}
use of com.epam.pipeline.entity.issue.IssueComment in project cloud-pipeline by epam.
the class IssueCommentDaoTest method createIssueComment.
private Issue createIssueComment(String issueName) {
Issue issue = createIssue(issueName);
IssueComment comment = getComment(issue, COMMENT_TEXT);
commentDao.createComment(comment);
return issue;
}
use of com.epam.pipeline.entity.issue.IssueComment in project cloud-pipeline by epam.
the class IssueManagerTest method createCommentWithAttachments.
@Test
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Throwable.class)
public void createCommentWithAttachments() {
Issue issue = registerIssue();
Long issueId = issue.getId();
IssueCommentVO commentVO = getCommentVO(COMMENT_TEXT);
commentVO.setAttachments(Collections.singletonList(testAttachment));
IssueComment comment = issueManager.createComment(issueId, commentVO);
IssueComment loaded = issueManager.loadComment(issueId, comment.getId());
Issue loadedIssue = issueManager.loadIssue(issueId);
assertEquals(1, loadedIssue.getComments().stream().mapToLong(c -> c.getAttachments().size()).sum());
assertFalse(loaded.getAttachments().isEmpty());
issueManager.deleteIssue(issueId);
assertFalse(attachmentDao.load(testAttachment.getId()).isPresent());
}
use of com.epam.pipeline.entity.issue.IssueComment in project cloud-pipeline by epam.
the class IssueCommentDao method loadCommentsForIssues.
public Map<Long, List<IssueComment>> loadCommentsForIssues(Collection<Long> issueIds) {
if (CollectionUtils.isEmpty(issueIds)) {
return Collections.emptyMap();
}
Map<Long, List<IssueComment>> map = new HashMap<>();
getJdbcTemplate().query(DaoHelper.replaceInClause(loadAllCommentsForIssuesQuery, issueIds.size()), rs -> {
IssueComment comment = CommentParameters.getRowMapper().mapRow(rs, 0);
if (!map.containsKey(comment.getIssueId())) {
map.put(comment.getIssueId(), new ArrayList<>());
}
map.get(comment.getIssueId()).add(comment);
}, (Object[]) issueIds.toArray(new Object[issueIds.size()]));
return map;
}
Aggregations