use of com.epam.pipeline.entity.issue.Attachment 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.Attachment in project cloud-pipeline by epam.
the class IssueManager method updateIssue.
/**
* Updates an {@link Issue} specified by ID. If issue was closed or doesn't exist an error will be occurred.
* @param issueId issue ID
* @param issueVO issue content to update
* @return updated issue
*/
@Transactional(propagation = Propagation.REQUIRED)
public Issue updateIssue(Long issueId, IssueVO issueVO) {
validateIssueParameters(issueVO);
Issue existingIssue = loadIssueAndCheckIfNotClosed(issueId);
Issue issue = updateIssueObject(existingIssue, issueVO);
issueDao.updateIssue(issue);
// Find the attachments that were removed during update and delete them
HashSet<Attachment> newAttachments = new HashSet<>(issueVO.getAttachments());
List<Attachment> allAttachments = attachmentDao.loadAttachmentsByIssueId(issueId);
List<Attachment> toDelete = allAttachments.stream().filter(a -> !newAttachments.contains(a)).collect(Collectors.toList());
attachmentFileManager.deleteAttachments(toDelete);
// Link new attachments to this issue
issueVO.getAttachments().forEach(a -> attachmentDao.updateAttachmentIssueId(a.getId(), issueId));
return issue;
}
use of com.epam.pipeline.entity.issue.Attachment in project cloud-pipeline by epam.
the class AttachmentDaoTest method testCRUD.
@Test
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Throwable.class)
public void testCRUD() {
Attachment attachment = new Attachment();
attachment.setName("testAttachment");
attachment.setCreatedDate(new Date());
attachment.setPath("///");
attachment.setOwner(TEST_OWNER);
attachmentDao.createAttachment(attachment);
Assert.assertNotNull(attachment.getId());
attachmentDao.updateAttachmentIssueId(attachment.getId(), issue.getId());
List<Attachment> attachments = attachmentDao.loadAttachmentsByIssueId(issue.getId());
Assert.assertFalse(attachments.isEmpty());
Attachment loaded = attachments.get(0);
Assert.assertEquals(attachment.getId(), loaded.getId());
Assert.assertEquals(attachment.getName(), loaded.getName());
Assert.assertEquals(attachment.getPath(), loaded.getPath());
Assert.assertEquals(attachment.getCreatedDate(), loaded.getCreatedDate());
attachmentDao.updateAttachmentCommentId(attachment.getId(), comment.getId());
Map<Long, List<Attachment>> attachmentsMap = attachmentDao.loadAttachmentsByCommentIds(Collections.singletonList(comment.getId()));
Assert.assertFalse(attachmentsMap.isEmpty());
loaded = attachmentsMap.get(comment.getId()).get(0);
Assert.assertEquals(attachment.getId(), loaded.getId());
Assert.assertEquals(attachment.getName(), loaded.getName());
Assert.assertEquals(attachment.getPath(), loaded.getPath());
Assert.assertEquals(attachment.getCreatedDate(), loaded.getCreatedDate());
attachmentDao.deleteAttachment(attachment.getId());
Assert.assertTrue(attachmentDao.loadAttachmentsByIssueId(issue.getId()).isEmpty());
}
use of com.epam.pipeline.entity.issue.Attachment in project cloud-pipeline by epam.
the class AttachmentDaoTest method testDeleteByComment.
@Test
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Throwable.class)
public void testDeleteByComment() {
Attachment attachment = new Attachment();
attachment.setName("testAttachment");
attachment.setCreatedDate(new Date());
attachment.setPath("///");
attachment.setOwner(TEST_OWNER);
attachmentDao.createAttachment(attachment);
Assert.assertNotNull(attachment.getId());
attachmentDao.updateAttachmentCommentId(attachment.getId(), comment.getId());
attachmentDao.deleteAttachmentsByCommentIds(Collections.singletonList(comment.getId()));
Assert.assertTrue(attachmentDao.loadAttachmentsByCommentIds(Collections.singletonList(comment.getId())).isEmpty());
}
use of com.epam.pipeline.entity.issue.Attachment in project cloud-pipeline by epam.
the class AttachmentDaoTest method testDeleteByIssueId.
@Test
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Throwable.class)
public void testDeleteByIssueId() {
Attachment attachment = new Attachment();
attachment.setName("testAttachment");
attachment.setCreatedDate(new Date());
attachment.setPath("///");
attachment.setOwner(TEST_OWNER);
attachmentDao.createAttachment(attachment);
Assert.assertNotNull(attachment.getId());
attachmentDao.updateAttachmentIssueId(attachment.getId(), issue.getId());
attachmentDao.deleteAttachmentsByIssueId(issue.getId());
Assert.assertTrue(attachmentDao.loadAttachmentsByIssueId(issue.getId()).isEmpty());
}
Aggregations