1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.workflow;
35
36 import info.magnolia.context.Context;
37 import info.magnolia.context.ContextDecorator;
38
39 import java.util.Map;
40
41 import openwfe.org.engine.workitem.Attribute;
42 import openwfe.org.engine.workitem.AttributeException;
43 import openwfe.org.engine.workitem.AttributeUtils;
44 import openwfe.org.engine.workitem.WorkItem;
45
46 import org.slf4j.Logger;
47 import org.slf4j.LoggerFactory;
48
49
50
51
52
53
54
55 public class WorkItemContext extends ContextDecorator {
56 private static final Logger log = LoggerFactory.getLogger(WorkItemContext.class);
57
58
59
60
61 private WorkItem workItem;
62
63 public WorkItemContext(Context ctx, WorkItem workItem) {
64 super(ctx);
65 this.workItem = workItem;
66 }
67
68
69
70
71 public Object getAttribute(String name, int scope) {
72 if (scope == Context.LOCAL_SCOPE) {
73 Attribute attr = this.workItem.getAttribute(name);
74 if (attr != null) {
75 Object obj = AttributeUtils.owfe2java(attr);
76 if (obj != null) {
77 return obj;
78 }
79 }
80 }
81 return super.getAttribute(name, scope);
82 }
83
84
85
86
87 public Map<String, Object> getAttributes(int scope) {
88 if (scope == Context.LOCAL_SCOPE) {
89 return AttributeUtils.map2java(this.workItem.getAttributes());
90 }
91 return super.getAttributes(scope);
92 }
93
94
95
96
97 public void setAttribute(String name, Object value, int scope) {
98 if (scope == Context.LOCAL_SCOPE) {
99 Attribute attr = AttributeUtils.java2owfe(value);
100 try {
101 if (this.workItem.containsAttribute(name)) {
102 log.debug("Attribute {} already set in WorkItem, will overwrite it with value {}", name, attr.toString());
103 this.workItem.setAttribute(name, attr);
104 } else {
105 this.workItem.addAttribute(name, attr);
106 }
107 }
108 catch (AttributeException e) {
109 log.error("can't set value {}", name, e);
110 }
111 } else {
112 super.setAttribute(name, value, scope);
113 }
114 }
115
116
117
118
119 public void removeAttribute(String name, int scope) {
120 if (scope == Context.LOCAL_SCOPE) {
121 this.workItem.removeAttribute(name);
122 } else {
123 super.removeAttribute(name, scope);
124 }
125 }
126
127 public WorkItem getWorkItem() {
128 return this.workItem;
129 }
130
131 public void setWorkItem(WorkItem workItem) {
132 this.workItem = workItem;
133 }
134
135 }