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
64
65
66 public WorkItemContext(Context ctx, WorkItem workItem) {
67 super(ctx);
68 this.workItem = workItem;
69 }
70
71
72
73
74 public Object getAttribute(String name, int scope) {
75 if (scope == Context.LOCAL_SCOPE) {
76 Attribute attr = this.workItem.getAttribute(name);
77 if (attr != null) {
78 Object obj = AttributeUtils.owfe2java(attr);
79 if (obj != null) {
80 return obj;
81 }
82 }
83 }
84 return super.getAttribute(name, scope);
85 }
86
87
88
89
90 public Map<String, Object> getAttributes(int scope) {
91 if (scope == Context.LOCAL_SCOPE) {
92 return AttributeUtils.map2java(this.workItem.getAttributes());
93 }
94 return super.getAttributes(scope);
95 }
96
97
98
99
100 public void setAttribute(String name, Object value, int scope) {
101 if (scope == Context.LOCAL_SCOPE) {
102 Attribute attr = AttributeUtils.java2owfe(value);
103 try {
104 if (this.workItem.containsAttribute(name)) {
105 log.debug("Attribute {} already set in WorkItem, will overwrite it with value {}", name, attr.toString());
106 this.workItem.setAttribute(name, attr);
107 } else {
108 this.workItem.addAttribute(name, attr);
109 }
110 }
111 catch (AttributeException e) {
112 log.error("can't set value {}", name, e);
113 }
114 } else {
115 super.setAttribute(name, value, scope);
116 }
117 }
118
119
120
121
122 public void removeAttribute(String name, int scope) {
123 if (scope == Context.LOCAL_SCOPE) {
124 this.workItem.removeAttribute(name);
125 } else {
126 super.removeAttribute(name, scope);
127 }
128 }
129
130
131
132
133 public WorkItem getWorkItem() {
134 return this.workItem;
135 }
136
137
138
139
140 public void setWorkItem(WorkItem workItem) {
141 this.workItem = workItem;
142 }
143
144 }