package example.CloneTicketAndLink

import com.atlassian.jira.event.issue.AbstractIssueEventListener
import com.atlassian.jira.event.issue.IssueEvent
import com.atlassian.jira.user.util.UserUtil
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.link.IssueLink
import com.atlassian.jira.util.ImportUtils
import com.atlassian.crowd.embedded.api.User;
import com.opensymphony.workflow.WorkflowContext
import org.apache.log4j.Category
import com.atlassian.jira.issue.customfields.CustomFieldType
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.project.ProjectManager
import com.atlassian.jira.project.Project
import com.atlassian.jira.issue.IssueFactory;
 
class TaskVersionListener extends AbstractIssueEventListener {
    Category log = Category.getInstance(TaskVersionListener.class)

    @Override
    void workflowEvent(IssueEvent event) {
		log.setLevel(org.apache.log4j.Level.DEBUG)
		def issue = event.getIssue()
		if ( issue.getIssueTypeId() == "XXXXX" ) {  // The Issue Type to catch in the Listener
			def projectName = "YYYYY" //Target project name
 
			def issueMgr = ComponentManager.getInstance().getIssueManager()
			def projectMgr = ComponentManager.getInstance().getProjectManager()
			String currentUser = event.getUser().getName();
			User currentUserObj = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser();
			ComponentManager componentManager=ComponentManager.getInstance()
			CustomFieldManager customFieldManager = componentManager.getCustomFieldManager()
			log.debug "IF ISSUE IS TYPE XXXXX CLONE ISSUE TO PROJECT YYYYY WITH SAME FIELDS, ETC"

			def issueFactory = ComponentManager.getInstance().getIssueFactory()
			def newissue = issueFactory.getIssue()
			newissue.setSummary (issue.summary)
			newissue.setProject (projectMgr.getProjectByName(projectName))
			newissue.setIssueTypeId("JJJJ") //The ID of the target Issue Type
			newissue.description = issue.description
			newissue.reporter = issue.getReporter()
			
			//Set the Project Lead of the target project as assignee of the new ticket
			def project = projectMgr.getProjectObjByName(projectName)
			newissue.setAssigneeId(project.getLeadUserKey())
			
			//Copy the fields that you want
			def cf = null;
			//ZZZZZ (list)
			cf = customFieldManager.getCustomFieldObjects(issue).find {it.name == 'ZZZZZ'}
			newissue.setCustomFieldValue(cf, issue.getCustomFieldValue(cf))
			//YYYYYY (date) another way to obtain the custom field
			cf = customFieldManager.getCustomFieldObject("customfield_NNNNN");
			newissue.setCustomFieldValue(cf, issue.getCustomFieldValue(cf))
			//XXXXXX (text, numeric, ...)
			cf = customFieldManager.getCustomFieldObjects(issue).find {it.name == 'XXXXX'}
			newissue.setCustomFieldValue(cf, issue.getCustomFieldValue(cf))
			
 
			def params = ["issue":newissue]
			def subTask = issueMgr.createIssue(currentUserObj, params)
			
 
			def linkMgr = ComponentManager.getInstance().getIssueLinkManager()
			linkMgr.createIssueLink (newissue.id, issue.id, Long.parseLong("ZZZZZ"),Long.valueOf(1), currentUserObj)  //ZZZZZ is the id of the type of link
		}
	}
}
      

Posted by:.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s