1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.efaps.bpm.workitem;
22
23 import org.kie.api.runtime.process.WorkItem;
24 import org.kie.api.runtime.process.WorkItemHandler;
25 import org.kie.api.runtime.process.WorkItemManager;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
28
29
30
31
32
33
34
35 public class SignallingHandlerWrapper
36 extends AbstractExceptionWorkItemHandler
37 {
38
39
40
41 private static final Logger LOG = LoggerFactory.getLogger(SignallingHandlerWrapper.class);
42
43
44
45
46 private String eventType;
47
48
49
50
51 private String workItemExceptionParameterName = "org.efaps.bpm.workitem.exception";
52
53
54
55
56 public SignallingHandlerWrapper(final WorkItemHandler _originalTaskHandler)
57 {
58 super(_originalTaskHandler);
59 this.eventType = null;
60 }
61
62
63
64
65 @Override
66 public void handleExecuteException(final Throwable _cause,
67 final WorkItem _workItem,
68 final WorkItemManager _manager)
69 {
70 _workItem.getParameters().put(this.workItemExceptionParameterName, _cause);
71 final String eventTypeTmp = getEventType(_cause, _workItem);
72 SignallingHandlerWrapper.LOG.debug("Signaling event with eventType: {}", eventTypeTmp);
73 ((org.drools.core.process.instance.WorkItemManager) _manager).signalEvent(eventTypeTmp, _workItem,
74 _workItem.getProcessInstanceId());
75 }
76
77
78
79
80
81
82 public String getEventType(final Throwable _cause,
83 final WorkItem _workItem)
84 {
85
86 if (this.eventType == null) {
87 final Object signal = _workItem.getParameter(EsjpWorkItemHandler.PARAMETERNAME_ERRORSIGNAL);
88 if (signal != null) {
89 this.eventType = "Error-" + signal;
90 }
91 if (_cause instanceof WorkItemException) {
92 this.eventType = this.eventType + "-" + _cause.getMessage();
93 }
94 }
95 return this.eventType;
96 }
97
98
99
100
101 @Override
102 public void handleAbortException(final Throwable _cause,
103 final WorkItem _workItem,
104 final WorkItemManager _manager)
105 {
106 _workItem.getParameters().put(this.workItemExceptionParameterName, _cause);
107 final String eventTypeTmp = getEventType(_cause, _workItem);
108 SignallingHandlerWrapper.LOG.debug("Signaling event with eventType: {}", eventTypeTmp);
109 ((org.drools.core.process.instance.WorkItemManager) _manager).signalEvent(eventTypeTmp, _workItem,
110 _workItem.getProcessInstanceId());
111 }
112
113
114
115
116
117
118 public String getEventType()
119 {
120 return this.eventType;
121 }
122
123
124
125
126
127
128 public void setEventType(final String _eventType)
129 {
130 this.eventType = _eventType;
131 }
132
133
134
135
136
137
138 public String getWorkItemExceptionParameterName()
139 {
140 return this.workItemExceptionParameterName;
141 }
142
143
144
145
146
147
148 public void setWorkItemExceptionParameterName(final String _workItemExceptionParameterName)
149 {
150 this.workItemExceptionParameterName = _workItemExceptionParameterName;
151 }
152 }