New example… remember, to add watchers to the ticket, the ticket must be created previously

package example.CloneAndLinkAndAddWatchers

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;
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.project.ProjectManager
import com.atlassian.jira.issue.IssueManager
import org.ofbiz.core.entity.GenericValue
import com.atlassian.jira.issue.watchers.WatcherManager

 
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

 
             //The watchers must be added once the issue is SAVED (created)
             project = projectMgr.getProjectObjByName("JJJJJJ") //project to add lead as watcher in the target project
             WatcherManager watcherManager = componentManager.getWatcherManager()
             watcherManager.startWatching(project.getLeadUser(), newissue)
 }
 }
}
 
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