View Javadoc

1   package com.atlassian.jira.web.action.issue;
2   
3   import org.ofbiz.core.entity.GenericEntityException;
4   import org.ofbiz.core.entity.GenericValue;
5   
6   import com.atlassian.jira.issue.Issue;
7   import com.atlassian.jira.issue.IssueFactory;
8   import com.atlassian.jira.issue.fields.FieldManager;
9   import com.atlassian.jira.issue.fields.screen.FieldScreenRenderLayoutItem;
10  import com.atlassian.jira.issue.link.IssueLinkManager;
11  import com.atlassian.jira.project.Project;
12  import com.atlassian.jira.security.PermissionManager;
13  
14  /**
15   * FQCN : com.atlassian.jira.web.action.issue.CreateLinkedIssue
16   * @author Kaamelot
17   * @since 3.10.1.30
18   * Description : Create a Linked Issue based on :
19   * - An Original Issue
20   * - a Destination Issue Type
21   * - A Link Issue Type
22   *
23   */
24  public class CreateLinkedIssue extends CreateIssueDetails {
25  
26  	/**	 */
27  	private static final long serialVersionUID = 1L;
28  
29  	protected final FieldManager fieldManager;
30  
31  	protected final IssueFactory issueFactory;
32  
33  	protected final PermissionManager permissionManager;
34  	
35     private final IssueLinkManager issueLinkManager;
36  	
37  	protected IssueLinkedCreationHelperBean issueLinkedCreationHelperBean;
38  
39  	/** The original issue that is to be use to create the new one. */
40  	private Issue originalIssue;
41  	
42  	/** The original issue Id. that is to be use to link with the new one. */
43  	private String originalIssueId;
44  	
45  	/** Link Type Id. use to create the Lin with the new Issue */
46  	private String linkTypeId;
47  
48  	public CreateLinkedIssue(IssueFactory issueFactory, IssueLinkedCreationHelperBean issueLinkedCreationHelperBean, PermissionManager permissionManager, FieldManager fieldManager, IssueLinkManager issueLinkManager) {
49  		super(issueFactory, issueLinkedCreationHelperBean);
50  		this.permissionManager = permissionManager;
51  		this.fieldManager = fieldManager;
52  		this.issueFactory = issueFactory;
53  		this.issueLinkedCreationHelperBean = issueLinkedCreationHelperBean;
54  		this.issueLinkManager = issueLinkManager;
55  	}
56  
57  	public String doDefault() throws Exception {
58  		// Get Original Issue 
59  		Issue issueObject = getIssueObject(getIssue());
60  		setOriginalIssue(issueObject);
61  		setOriginalIssueId(issueObject.getId().toString());
62  		
63  		// Reset Issue. 
64  		resetIssue();
65  
66  		// Initialize Mandatory Properties 
67  		setPid(getOriginalIssue().getProjectObject().getId());
68        getIssueObject().setProject(getProject());
69        getIssueObject().setIssueType(getIssueTypeGV());
70  
71  		// Populate Issue detail with original issue details 
72  		setIssueDetailsFromOriginalIssue();
73  
74  		return INPUT;
75  	}
76  
77  	// Set new issue fields to same values as in issue for similar field
78  	public void setIssueDetailsFromOriginalIssue() throws GenericEntityException {
79  		
80  		issueLinkedCreationHelperBean.populateLinkedIssueFields(getOriginalIssue(),
81  																					getProjectObject(),
82  																               getIssuetype(),
83  																               this,
84  																               getRemoteUser(),
85  																               getFieldScreenRenderer(),
86  																               this,
87  																               this);
88  		
89  	}
90  
91  	protected String doPostCreationTasks() throws Exception {
92  		doLinkWithOriginalIssue();
93  		return super.doPostCreationTasks();
94  	}
95  	
96  	protected void doLinkWithOriginalIssue() throws Exception {
97  		Long linkTypeId = Long.valueOf(getLinkTypeId());
98  		Long originalId = Long.valueOf(getOriginalIssueId());
99        issueLinkManager.createIssueLink(originalId, getIssue().getLong("id"), linkTypeId , null, getRemoteUser());
100 	}
101 
102 	public Issue getIssueObject(GenericValue genericValue) {
103 		return issueFactory.getIssue(genericValue);
104 	}
105 	
106    public Project getProjectObject() {
107 		return getProjectManager().getProjectObj(getPid());
108 	}
109 
110 	public FieldScreenRenderLayoutItem getFieldScreenRenderLayoutItem(String fieldId) {
111 		return getFieldScreenRenderer().getFieldScreenRenderLayoutItem(fieldManager.getOrderableField(fieldId));
112 	}
113 
114 	public Issue getOriginalIssue() {
115 		return originalIssue;
116 	}
117 
118 	public void setOriginalIssue(Issue originalIssue) {
119 		this.originalIssue = originalIssue;
120 	}
121 
122 //	public String getDestinationIssuetype() {
123 //		return destinationIssuetype;
124 //	}
125 //
126 //	public void setDestinationIssuetype(String destinationIssuetype) {
127 //		this.destinationIssuetype = destinationIssuetype;
128 //	}
129 
130 	public String getLinkTypeId() {
131 		return linkTypeId;
132 	}
133 
134 	public void setLinkTypeId(String linkTypeId) {
135 		this.linkTypeId = linkTypeId;
136 	}
137 
138 	public String getOriginalIssueId() {
139 		return originalIssueId;
140 	}
141 
142 	public void setOriginalIssueId(String originalIssueId) {
143 		this.originalIssueId = originalIssueId;
144 	}
145 
146 }