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.runtime;
22
23 import java.util.HashMap;
24 import java.util.Map;
25
26 import org.efaps.bpm.workitem.EsjpWorkItemHandler;
27 import org.efaps.bpm.workitem.HumanTaskWorkItemHandler;
28 import org.efaps.bpm.workitem.SignallingHandlerWrapper;
29 import org.jbpm.runtime.manager.impl.DefaultRegisterableItemsFactory;
30 import org.jbpm.runtime.manager.impl.RuntimeEngineImpl;
31 import org.jbpm.services.task.wih.ExternalTaskEventListener;
32 import org.kie.api.runtime.manager.RuntimeEngine;
33 import org.kie.api.runtime.process.WorkItemHandler;
34 import org.kie.internal.runtime.manager.Disposable;
35 import org.kie.internal.runtime.manager.DisposeListener;
36 import org.kie.internal.task.api.EventService;
37
38
39
40
41
42
43
44 public class RegisterableItemsFactoryImpl
45 extends DefaultRegisterableItemsFactory
46 {
47
48 @Override
49 @SuppressWarnings({ "unchecked", "rawtypes" })
50 protected WorkItemHandler getHTWorkItemHandler(final RuntimeEngine _runtime)
51 {
52 final ExternalTaskEventListener listener = new ExternalTaskEventListener();
53
54 final HumanTaskWorkItemHandler humanTaskHandler = new HumanTaskWorkItemHandler();
55 humanTaskHandler.setRuntimeManager(((RuntimeEngineImpl) _runtime).getManager());
56
57 if (_runtime.getTaskService() instanceof EventService) {
58 ((EventService) _runtime.getTaskService()).registerTaskEventListener(listener);
59 }
60
61 if (_runtime instanceof Disposable) {
62 ((Disposable) _runtime).addDisposeListener(new DisposeListener()
63 {
64 @Override
65 public void onDispose(final RuntimeEngine _runtime)
66 {
67 if (_runtime.getTaskService() instanceof EventService) {
68 ((EventService) _runtime.getTaskService()).clearTaskEventListeners();
69 }
70 }
71 });
72 }
73 return humanTaskHandler;
74 }
75
76 @Override
77 public Map<String, WorkItemHandler> getWorkItemHandlers(final RuntimeEngine _runtime)
78 {
79 final Map<String, WorkItemHandler> ret = new HashMap<String, WorkItemHandler>();
80 ret.put("ESJPNode", new SignallingHandlerWrapper(new EsjpWorkItemHandler()));
81 ret.putAll(super.getWorkItemHandlers(_runtime));
82 return ret;
83 }
84 }