View Javadoc

1   package com.atlassian.jira.workflow.function;
2   
3   import java.util.Collection;
4   import java.util.Iterator;
5   import java.util.Map;
6   
7   import com.atlassian.jira.ComponentManager;
8   import com.atlassian.jira.function.issue.FunctionHelper;
9   import com.atlassian.jira.issue.Issue;
10  import com.atlassian.jira.issue.MutableIssue;
11  import com.atlassian.jira.project.version.VersionManager;
12  import com.opensymphony.module.propertyset.PropertySet;
13  import com.opensymphony.workflow.FunctionProvider;
14  import com.opensymphony.workflow.WorkflowException;
15  
16  /**
17   * FQCN : com.atlassian.jira.workflow.function.APropagateVersion
18   * @author Kaamelot
19   * @since
20   * Description : Propagate Version reference to all Issue's SubTask 
21   *
22   */
23  public abstract class APropagateVersion extends ATransitionFunction implements FunctionProvider {
24  	protected VersionManager versionManager = ComponentManager.getInstance().getVersionManager();
25  	/** Performs :
26  	 * - Version creation if not existing
27  	 * - Version assignation, only it the Version have just been created (!!!)  
28  	 */
29  	public void execute(Map transientVars, Map args, PropertySet ps) throws WorkflowException {
30  		init(transientVars, args, ps);
31  		propagateVersion();
32  	}
33  
34  	/**
35  	 * Propagate Fix Version reference to all Issue's SubTask
36  	 */
37  	protected void propagateVersion()  {
38  		Collection versions = getIssue().getFixVersions();
39  		Collection linkedIssues = getLinkedIssues(getIssue());
40  		propagateVersion(versions,linkedIssues);
41  	}
42  	
43  	/**
44  	 * @param _issue Issue
45  	 * @return Collection of Version
46  	 */
47  	protected abstract Collection getVersions(Issue _issue);
48  
49  	/**
50  	 * @param _issue Inward Issue
51  	 * @return Collection of linked Issues
52  	 */
53  	protected abstract Collection getLinkedIssues(Issue _issue);
54  
55  	/**
56  	 * Propagate Version reference to all Linked Issue
57  	 */
58  	protected void propagateVersion(Collection _versions, Collection _linkedIssues)  {
59  		for (Iterator it = _linkedIssues.iterator(); it.hasNext();) {
60  			MutableIssue linkedIssue = (MutableIssue) it.next();
61  			FunctionHelper.updateIssueFieldFixForVersion(linkedIssue, _versions);
62  		}
63  	}
64  
65  }