001
014
015 package com.liferay.portal.kernel.workflow;
016
017 import com.liferay.portal.NoSuchWorkflowDefinitionLinkException;
018 import com.liferay.portal.kernel.exception.PortalException;
019 import com.liferay.portal.kernel.exception.SystemException;
020 import com.liferay.portal.kernel.util.LocaleUtil;
021 import com.liferay.portal.service.ServiceContext;
022
023 import java.io.Serializable;
024
025 import java.util.HashMap;
026 import java.util.List;
027 import java.util.Map;
028
029
033 public class WorkflowHandlerRegistryUtil {
034
035 public static WorkflowHandler getWorkflowHandler(String className) {
036 return getWorkflowHandlerRegistry().getWorkflowHandler(className);
037 }
038
039 public static WorkflowHandlerRegistry getWorkflowHandlerRegistry() {
040 return _workflowHandlerRegistry;
041 }
042
043 public static List<WorkflowHandler> getWorkflowHandlers() {
044 return getWorkflowHandlerRegistry().getWorkflowHandlers();
045 }
046
047 public static void register(List<WorkflowHandler> workflowHandlers) {
048 for (WorkflowHandler workflowHandler : workflowHandlers) {
049 register(workflowHandler);
050 }
051 }
052
053 public static void register(WorkflowHandler workflowHandler) {
054 getWorkflowHandlerRegistry().register(workflowHandler);
055 }
056
057 public static void startWorkflowInstance(
058 long companyId, long groupId, long userId, String className,
059 long classPK, Object model, ServiceContext serviceContext)
060 throws PortalException, SystemException {
061
062 if (serviceContext.getWorkflowAction() !=
063 WorkflowConstants.ACTION_PUBLISH) {
064
065 return;
066 }
067
068 WorkflowHandler workflowHandler = getWorkflowHandler(className);
069
070 if (workflowHandler == null) {
071 throw new WorkflowException(
072 "No workflow handler found for " + className);
073 }
074
075 int status = WorkflowConstants.STATUS_PENDING;
076
077 if (!WorkflowThreadLocal.isEnabled() ||
078 !WorkflowEngineManagerUtil.isDeployed()) {
079
080 status = WorkflowConstants.STATUS_APPROVED;
081 }
082
083 Map<String, Serializable> workflowContext =
084 new HashMap<String, Serializable>();
085
086 workflowContext.put(
087 WorkflowConstants.CONTEXT_COMPANY_ID, String.valueOf(companyId));
088 workflowContext.put(
089 WorkflowConstants.CONTEXT_GROUP_ID, String.valueOf(groupId));
090 workflowContext.put(
091 WorkflowConstants.CONTEXT_USER_ID, String.valueOf(userId));
092 workflowContext.put(
093 WorkflowConstants.CONTEXT_ENTRY_CLASS_NAME, className);
094 workflowContext.put(
095 WorkflowConstants.CONTEXT_ENTRY_CLASS_PK, String.valueOf(classPK));
096 workflowContext.put(
097 WorkflowConstants.CONTEXT_ENTRY_TYPE,
098 workflowHandler.getType(LocaleUtil.getDefault()));
099 workflowContext.put(
100 WorkflowConstants.CONTEXT_SERVICE_CONTEXT, serviceContext);
101
102 workflowHandler.updateStatus(status, workflowContext);
103
104 if (WorkflowThreadLocal.isEnabled() &&
105 WorkflowEngineManagerUtil.isDeployed()) {
106
107 try {
108 workflowHandler.startWorkflowInstance(
109 companyId, groupId, userId, classPK, model,
110 workflowContext);
111 }
112 catch(NoSuchWorkflowDefinitionLinkException nswdle) {
113 workflowHandler.updateStatus(
114 WorkflowConstants.STATUS_APPROVED, workflowContext);
115 }
116 }
117 }
118
119 public static void unregister(List<WorkflowHandler> workflowHandlers) {
120 for (WorkflowHandler workflowHandler : workflowHandlers) {
121 unregister(workflowHandler);
122 }
123 }
124
125 public static void unregister(WorkflowHandler workflowHandler) {
126 getWorkflowHandlerRegistry().unregister(workflowHandler);
127 }
128
129 public static Object updateStatus(
130 int status, Map<String, Serializable> workflowContext)
131 throws PortalException, SystemException {
132
133 String className = (String)workflowContext.get(
134 WorkflowConstants.CONTEXT_ENTRY_CLASS_NAME);
135
136 WorkflowHandler workflowHandler = getWorkflowHandler(className);
137
138 if (workflowHandler != null) {
139 return workflowHandler.updateStatus(status, workflowContext);
140 }
141
142 return null;
143 }
144
145 public void setWorkflowHandlerRegistry(
146 WorkflowHandlerRegistry workflowHandlerRegistry) {
147
148 _workflowHandlerRegistry = workflowHandlerRegistry;
149 }
150
151 private static WorkflowHandlerRegistry _workflowHandlerRegistry;
152
153 }