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 @Override
72 public Object getAttribute(String name, int scope) {
73 if (scope == Context.LOCAL_SCOPE) {
74 Attribute attr = this.workItem.getAttribute(name);
75 if (attr != null) {
76 Object obj = AttributeUtils.owfe2java(attr);
77 if (obj != null) {
78 return obj;
79 }
80 }
81 }
82 return super.getAttribute(name, scope);
83 }
84
85
86
87
88 @Override
89 public Map<String, Object> getAttributes(int scope) {
90 if (scope == Context.LOCAL_SCOPE) {
91 return AttributeUtils.map2java(this.workItem.getAttributes());
92 }
93 return super.getAttributes(scope);
94 }
95
96
97
98
99 @Override
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 @Override
123 public void removeAttribute(String name, int scope) {
124 if (scope == Context.LOCAL_SCOPE) {
125 this.workItem.removeAttribute(name);
126 } else {
127 super.removeAttribute(name, scope);
128 }
129 }
130
131 public WorkItem getWorkItem() {
132 return this.workItem;
133 }
134
135 public void setWorkItem(WorkItem workItem) {
136 this.workItem = workItem;
137 }
138
139 }