1
14
15 package com.liferay.portal.kernel.workflow;
16
17 import com.liferay.portal.NoSuchWorkflowDefinitionLinkException;
18 import com.liferay.portal.kernel.exception.PortalException;
19 import com.liferay.portal.kernel.exception.SystemException;
20 import com.liferay.portal.service.ServiceContext;
21
22 import java.io.Serializable;
23
24 import java.util.HashMap;
25 import java.util.List;
26 import java.util.Map;
27
28
34 public class WorkflowHandlerRegistryUtil {
35
36 public static WorkflowHandler getWorkflowHandler(String className) {
37 return getWorkflowHandlerRegistry().getWorkflowHandler(className);
38 }
39
40 public static WorkflowHandlerRegistry getWorkflowHandlerRegistry() {
41 return _workflowHandlerRegistry;
42 }
43
44 public static List<WorkflowHandler> getWorkflowHandlers() {
45 return getWorkflowHandlerRegistry().getWorkflowHandlers();
46 }
47
48 public static void register(List<WorkflowHandler> workflowHandlers) {
49 for (WorkflowHandler workflowHandler : workflowHandlers) {
50 register(workflowHandler);
51 }
52 }
53
54 public static void register(WorkflowHandler workflowHandler) {
55 getWorkflowHandlerRegistry().register(workflowHandler);
56 }
57
58 public static void startWorkflowInstance(
59 long companyId, long groupId, long userId, String className,
60 long classPK, Object model, ServiceContext serviceContext)
61 throws PortalException, SystemException {
62
63 if (serviceContext.getWorkflowAction() !=
64 WorkflowConstants.ACTION_PUBLISH) {
65
66 return;
67 }
68
69 WorkflowHandler workflowHandler = getWorkflowHandler(className);
70
71 if (workflowHandler == null) {
72 throw new WorkflowException(
73 "No workflow handler found for " + className);
74 }
75
76 int status = WorkflowConstants.STATUS_PENDING;
77
78 if (!WorkflowThreadLocal.isEnabled() ||
79 !WorkflowEngineManagerUtil.isDeployed()) {
80
81 status = WorkflowConstants.STATUS_APPROVED;
82 }
83
84 Map<String, Serializable> workflowContext =
85 new HashMap<String, Serializable>();
86
87 workflowContext.put(
88 WorkflowConstants.CONTEXT_COMPANY_ID, String.valueOf(companyId));
89 workflowContext.put(
90 WorkflowConstants.CONTEXT_GROUP_ID, String.valueOf(groupId));
91 workflowContext.put(
92 WorkflowConstants.CONTEXT_USER_ID, String.valueOf(userId));
93 workflowContext.put(
94 WorkflowConstants.CONTEXT_ENTRY_CLASS_NAME, className);
95 workflowContext.put(
96 WorkflowConstants.CONTEXT_ENTRY_CLASS_PK, String.valueOf(classPK));
97 workflowContext.put(
98 WorkflowConstants.CONTEXT_SERVICE_CONTEXT, serviceContext);
99
100 workflowHandler.updateStatus(status, workflowContext);
101
102 if (WorkflowThreadLocal.isEnabled() &&
103 WorkflowEngineManagerUtil.isDeployed()) {
104
105 try {
106 workflowHandler.startWorkflowInstance(
107 companyId, groupId, userId, classPK, model,
108 workflowContext);
109 }
110 catch(NoSuchWorkflowDefinitionLinkException nswdle) {
111 workflowHandler.updateStatus(
112 WorkflowConstants.STATUS_APPROVED, workflowContext);
113 }
114 }
115 }
116
117 public static void unregister(List<WorkflowHandler> workflowHandlers) {
118 for (WorkflowHandler workflowHandler : workflowHandlers) {
119 unregister(workflowHandler);
120 }
121 }
122
123 public static void unregister(WorkflowHandler workflowHandler) {
124 getWorkflowHandlerRegistry().unregister(workflowHandler);
125 }
126
127 public static Object updateStatus(
128 int status, Map<String, Serializable> workflowContext)
129 throws PortalException, SystemException {
130
131 String className = (String)workflowContext.get(
132 WorkflowConstants.CONTEXT_ENTRY_CLASS_NAME);
133
134 WorkflowHandler workflowHandler = getWorkflowHandler(className);
135
136 if (workflowHandler != null) {
137 return workflowHandler.updateStatus(status, workflowContext);
138 }
139
140 return null;
141 }
142
143 public void setWorkflowHandlerRegistry(
144 WorkflowHandlerRegistry workflowHandlerRegistry) {
145
146 _workflowHandlerRegistry = workflowHandlerRegistry;
147 }
148
149 private static WorkflowHandlerRegistry _workflowHandlerRegistry;
150
151 }