1 package com.atlassian.jira.workflow.function;
2
3 import java.util.Iterator;
4 import java.util.Map;
5
6 import com.atlassian.jira.ManagerFactory;
7 import com.atlassian.jira.issue.Issue;
8 import com.atlassian.jira.issue.ModifiedValue;
9 import com.atlassian.jira.issue.MutableIssue;
10 import com.atlassian.jira.issue.fields.FieldManager;
11 import com.atlassian.jira.issue.fields.OrderableField;
12 import com.atlassian.jira.workflow.function.issue.GenerateChangeHistoryFunction;
13 import com.opensymphony.module.propertyset.PropertySet;
14 import com.opensymphony.workflow.FunctionProvider;
15
16 public abstract class AInheritFromParentFunction implements FunctionProvider {
17
18 protected boolean storeModifiedFields = false;
19 protected boolean storeWithHistory = false;
20
21 public void execute(Map transientVars, Map args, PropertySet ps) {
22 MutableIssue issue = (MutableIssue) transientVars.get("issue");
23 Issue parent = issue.getParentObject();
24 inheritFromParent(issue, parent);
25 issue.store();
26
27 if (storeModifiedFields) {
28 if (storeWithHistory) {
29 storeModifiedFields(transientVars, args, ps);
30 } else {
31 storeModifiedFields(issue);
32 }
33 }
34 }
35
36
37
38
39
40 protected void storeModifiedFields(MutableIssue issue) {
41 FieldManager fieldManager = ManagerFactory.getFieldManager();
42
43 Map modifiedFields = issue.getModifiedFields();
44 for (Iterator iterator = modifiedFields.keySet().iterator(); iterator.hasNext();)
45 {
46 String fieldId = (String) iterator.next();
47 if (fieldManager.isOrderableField(fieldId))
48 {
49 OrderableField field = fieldManager.getOrderableField(fieldId);
50 Object newValue = ((ModifiedValue) modifiedFields.get(fieldId)).getNewValue();
51 if (newValue != null) field.createValue(issue, newValue);
52 }
53 }
54
55
56 issue.resetModifiedFields();
57 }
58
59
60
61
62
63
64 protected void storeModifiedFields(Map transientVars, Map args, PropertySet ps) {
65 GenerateChangeHistoryFunction gchFunction = new GenerateChangeHistoryFunction();
66 gchFunction.execute(transientVars, args, ps);
67 }
68
69 protected abstract void inheritFromParent(MutableIssue _issue, Issue _parent);
70 }