...
코드 블럭 | ||||
---|---|---|---|---|
| ||||
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.attachment.FileSystemAttachmentDirectoryAccessor
import org.apache.log4j.Level
import org.apache.log4j.Logger
import com.atlassian.jira.issue.attachment.CreateAttachmentParamsBean
import java.io.File
import com.atlassian.jira.issue.comments.MutableComment
import com.atlassian.jira.issue.comments.Comment
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.event.type.EventDispatchOption
import com.onresolve.scriptrunner.parameters.annotation.*
import com.atlassian.jira.project.Project
def log = Logger.getLogger("com.curvc")
log.setLevel(Level.DEBUG)
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def issueManager = ComponentAccessor.getIssueManager()
def userManager = ComponentAccessor.getUserManager()
def projectManager = ComponentAccessor.getProjectManager()
def commentManager = ComponentAccessor.getCommentManager()
// 변경할 이슈 입력
@ShortTextInput(label = "Issue", description = "Enter a issueKey")
String issueKey
//찾을 유저 명 입력
@UserPicker(label = "Original User", description = "Select a user")
ApplicationUser user
log.info("본래 유저: " + user.displayName)
// 변경할 유저명 입력
@UserPicker(label = "Change User", description = "Select a Chnage user")
ApplicationUser changeUser
log.info("변경할 유저: " + changeUser.displayName)
// admin user
@UserPicker(label = "Admin User", description = "Select a admin user")
ApplicationUser adminuser
def issue = issueManager.getIssueByCurrentKey(issueKey)
if(issue instanceof MutableIssue){
log.info("해당 issueKey에 대한 Issue가 없습니다.")
return
}
issue as MutableIssue
log.info(issue.getKey())
if(issue.reporter == user){
// 담당자 변경
issue.setReporter(changeUser)
// 첨부파일들 변경
def attachments = ComponentAccessor.attachmentManager.getAttachments(issue)
log.info("첨부파일 수: " + attachments.size())
for (attachment in attachments) {
String type = attachment.getMimetype()
def attachmentname = attachment.getFilename().toString()
log.info(attachmentname)
def attachmentUser = userManager.getUserByKey(attachment.getAuthorKey())
log.info(attachmentUser)
//변경될 첨부파일명
String fileName = attachmentname.toString()
def attachmentid = attachment.getId().toString()
// 첨부파일 위치 파악
def filelocate = ComponentAccessor.getComponent(FileSystemAttachmentDirectoryAccessor.class).getAttachmentDirectory(issue)
def filepath = filelocate.toString() + '/' + attachmentid
File oriFile = new File(filepath)
log.info(filepath)
// 기존첨부파일 신규 등록
def bean = new CreateAttachmentParamsBean.Builder()
.file(oriFile)
.filename(fileName)
.contentType(type)
.author(changeUser)
.issue(issue)
.createdTime(attachment.getCreated())
.build()
ComponentAccessor.attachmentManager.createAttachment(bean)
log.info("create attachment " + fileName)
//Jira 이슈에서 첨부파일 삭제
ComponentAccessor.attachmentManager.deleteAttachment(attachment)
log.info("attahment: " + attachmentname + " recreated")
}
//댓글 변경
def comments = commentManager.getCommentsForUser(issue, user)
log.info(issue.getKey() + " 댓글 수: " + comments.size())
for (int i = 0; i < comments.size(); i++){
def mutableComment = commentManager.getMutableComment(comments[i].getId())
log.info(mutableComment.getAuthorFullName())
if(mutableComment.getAuthorApplicationUser().getKey() == user.getKey()){
commentManager.create(issue, changeUser, changeUser, mutableComment.getBody(), mutableComment.getGroupLevel(), mutableComment.getRoleLevelId(), mutableComment.getCreated(), mutableComment.getUpdated(), false)
commentManager.delete(mutableComment)
log.info("comment recreated")
}
}
// 이슈 갱신
issueManager.updateIssue(adminuser, issue, EventDispatchOption.ISSUE_UPDATED, false)
} |
...