Search in sources :

Example 1 with IssueComment

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;
}
Also used : MessageConstants(com.epam.pipeline.common.MessageConstants) IssueVO(com.epam.pipeline.controller.vo.IssueVO) AttachmentDao(com.epam.pipeline.dao.issue.AttachmentDao) Autowired(org.springframework.beans.factory.annotation.Autowired) Supplier(java.util.function.Supplier) StringUtils(org.apache.commons.lang3.StringUtils) HashSet(java.util.HashSet) MessageHelper(com.epam.pipeline.common.MessageHelper) IssueCommentDao(com.epam.pipeline.dao.issue.IssueCommentDao) CollectionUtils(org.apache.commons.collections.CollectionUtils) Propagation(org.springframework.transaction.annotation.Propagation) Service(org.springframework.stereotype.Service) Map(java.util.Map) IssueComment(com.epam.pipeline.entity.issue.IssueComment) EntityManager(com.epam.pipeline.manager.EntityManager) IssueCommentVO(com.epam.pipeline.controller.vo.IssueCommentVO) AbstractSecuredEntity(com.epam.pipeline.entity.AbstractSecuredEntity) IssueStatus(com.epam.pipeline.entity.issue.IssueStatus) Attachment(com.epam.pipeline.entity.issue.Attachment) Collectors(java.util.stream.Collectors) PagedResult(com.epam.pipeline.controller.PagedResult) List(java.util.List) IssueMapper(com.epam.pipeline.mapper.IssueMapper) IssueDao(com.epam.pipeline.dao.issue.IssueDao) Optional(java.util.Optional) AclClass(com.epam.pipeline.entity.security.acl.AclClass) NotificationManager(com.epam.pipeline.manager.notification.NotificationManager) AuthManager(com.epam.pipeline.manager.security.AuthManager) Issue(com.epam.pipeline.entity.issue.Issue) Collections(java.util.Collections) EntityVO(com.epam.pipeline.controller.vo.EntityVO) Transactional(org.springframework.transaction.annotation.Transactional) Assert(org.springframework.util.Assert) IssueComment(com.epam.pipeline.entity.issue.IssueComment) Attachment(com.epam.pipeline.entity.issue.Attachment) HashSet(java.util.HashSet) Transactional(org.springframework.transaction.annotation.Transactional)

Example 2 with 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;
}
Also used : Issue(com.epam.pipeline.entity.issue.Issue) IssueComment(com.epam.pipeline.entity.issue.IssueComment) Transactional(org.springframework.transaction.annotation.Transactional)

Example 3 with IssueComment

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;
}
Also used : Issue(com.epam.pipeline.entity.issue.Issue) IssueComment(com.epam.pipeline.entity.issue.IssueComment)

Example 4 with IssueComment

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());
}
Also used : IssueCommentVO(com.epam.pipeline.controller.vo.IssueCommentVO) Issue(com.epam.pipeline.entity.issue.Issue) IssueComment(com.epam.pipeline.entity.issue.IssueComment) AbstractSpringTest(com.epam.pipeline.AbstractSpringTest) Test(org.junit.Test) Transactional(org.springframework.transaction.annotation.Transactional)

Example 5 with IssueComment

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;
}
Also used : HashMap(java.util.HashMap) IssueComment(com.epam.pipeline.entity.issue.IssueComment) ArrayList(java.util.ArrayList) List(java.util.List)

Aggregations

IssueComment (com.epam.pipeline.entity.issue.IssueComment)20 Issue (com.epam.pipeline.entity.issue.Issue)14 Transactional (org.springframework.transaction.annotation.Transactional)12 Test (org.junit.Test)9 AbstractSpringTest (com.epam.pipeline.AbstractSpringTest)6 IssueCommentVO (com.epam.pipeline.controller.vo.IssueCommentVO)6 List (java.util.List)6 Attachment (com.epam.pipeline.entity.issue.Attachment)5 EntityVO (com.epam.pipeline.controller.vo.EntityVO)4 Map (java.util.Map)4 AbstractSecuredEntity (com.epam.pipeline.entity.AbstractSecuredEntity)3 AclClass (com.epam.pipeline.entity.security.acl.AclClass)3 Collections (java.util.Collections)3 IssueVO (com.epam.pipeline.controller.vo.IssueVO)2 AttachmentDao (com.epam.pipeline.dao.issue.AttachmentDao)2 IssueDao (com.epam.pipeline.dao.issue.IssueDao)2 IssueStatus (com.epam.pipeline.entity.issue.IssueStatus)2 NotificationMessage (com.epam.pipeline.entity.notification.NotificationMessage)2 NotificationSettings (com.epam.pipeline.entity.notification.NotificationSettings)2 NotificationTemplate (com.epam.pipeline.entity.notification.NotificationTemplate)2