001
014
015 package com.liferay.portal.service.impl;
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.spring.aop.Skip;
021 import com.liferay.portal.kernel.staging.StagingUtil;
022 import com.liferay.portal.kernel.util.CharPool;
023 import com.liferay.portal.kernel.util.GetterUtil;
024 import com.liferay.portal.kernel.util.ObjectValuePair;
025 import com.liferay.portal.kernel.util.StringUtil;
026 import com.liferay.portal.kernel.util.Validator;
027 import com.liferay.portal.kernel.workflow.WorkflowConstants;
028 import com.liferay.portal.kernel.workflow.WorkflowEngineManagerUtil;
029 import com.liferay.portal.model.User;
030 import com.liferay.portal.model.WorkflowDefinitionLink;
031 import com.liferay.portal.service.base.WorkflowDefinitionLinkLocalServiceBaseImpl;
032 import com.liferay.portal.util.PortalUtil;
033
034 import java.util.Date;
035 import java.util.List;
036
037
044 public class WorkflowDefinitionLinkLocalServiceImpl
045 extends WorkflowDefinitionLinkLocalServiceBaseImpl {
046
047 @Override
048 public WorkflowDefinitionLink addWorkflowDefinitionLink(
049 long userId, long companyId, long groupId, String className,
050 long classPK, long typePK, String workflowDefinitionName,
051 int workflowDefinitionVersion)
052 throws PortalException, SystemException {
053
054 User user = userPersistence.findByPrimaryKey(userId);
055 long classNameId = PortalUtil.getClassNameId(className);
056 Date now = new Date();
057
058 long workflowDefinitionLinkId = counterLocalService.increment();
059
060 WorkflowDefinitionLink workflowDefinitionLink =
061 workflowDefinitionLinkPersistence.create(workflowDefinitionLinkId);
062
063 workflowDefinitionLink.setCreateDate(now);
064 workflowDefinitionLink.setModifiedDate(now);
065 workflowDefinitionLink.setUserId(userId);
066 workflowDefinitionLink.setUserName(user.getFullName());
067 workflowDefinitionLink.setGroupId(groupId);
068 workflowDefinitionLink.setCompanyId(companyId);
069 workflowDefinitionLink.setClassNameId(classNameId);
070 workflowDefinitionLink.setClassPK(classPK);
071 workflowDefinitionLink.setTypePK(typePK);
072 workflowDefinitionLink.setWorkflowDefinitionName(
073 workflowDefinitionName);
074 workflowDefinitionLink.setWorkflowDefinitionVersion(
075 workflowDefinitionVersion);
076
077 workflowDefinitionLinkPersistence.update(workflowDefinitionLink, false);
078
079 return workflowDefinitionLink;
080 }
081
082 @Override
083 public void deleteWorkflowDefinitionLink(
084 long companyId, long groupId, String className, long classPK,
085 long typePK)
086 throws PortalException, SystemException {
087
088 WorkflowDefinitionLink workflowDefinitionLink =
089 fetchWorkflowDefinitionLink(
090 companyId, groupId, className, classPK, typePK, true);
091
092 if (workflowDefinitionLink != null) {
093 deleteWorkflowDefinitionLink(workflowDefinitionLink);
094 }
095 }
096
097 @Override
098 public WorkflowDefinitionLink fetchDefaultWorkflowDefinitionLink(
099 long companyId, String className, long classPK, long typePK)
100 throws SystemException {
101
102 if (!WorkflowEngineManagerUtil.isDeployed()) {
103 return null;
104 }
105
106 long classNameId = PortalUtil.getClassNameId(className);
107
108 return workflowDefinitionLinkPersistence.fetchByG_C_C_C_T(
109 WorkflowConstants.DEFAULT_GROUP_ID, companyId, classNameId, classPK,
110 typePK);
111 }
112
113 @Override
114 public WorkflowDefinitionLink fetchWorkflowDefinitionLink(
115 long companyId, long groupId, String className, long classPK,
116 long typePK)
117 throws PortalException, SystemException {
118
119 return fetchWorkflowDefinitionLink(
120 companyId, groupId, className, classPK, typePK, false);
121 }
122
123 @Override
124 public WorkflowDefinitionLink fetchWorkflowDefinitionLink(
125 long companyId, long groupId, String className, long classPK,
126 long typePK, boolean strict)
127 throws PortalException, SystemException {
128
129 if (!WorkflowEngineManagerUtil.isDeployed()) {
130 return null;
131 }
132
133 long classNameId = PortalUtil.getClassNameId(className);
134
135 WorkflowDefinitionLink workflowDefinitionLink = null;
136
137 if (groupId > 0) {
138 groupId = StagingUtil.getLiveGroupId(groupId);
139 }
140
141 workflowDefinitionLink =
142 workflowDefinitionLinkPersistence.fetchByG_C_C_C_T(
143 groupId, companyId, classNameId, classPK, typePK);
144
145 if (!strict && (workflowDefinitionLink == null)) {
146 workflowDefinitionLink =
147 workflowDefinitionLinkPersistence.fetchByG_C_C_C_T(
148 WorkflowConstants.DEFAULT_GROUP_ID, companyId, classNameId,
149 classPK, typePK);
150 }
151
152 return workflowDefinitionLink;
153 }
154
155 @Override
156 public WorkflowDefinitionLink getDefaultWorkflowDefinitionLink(
157 long companyId, String className, long classPK, long typePK)
158 throws PortalException, SystemException {
159
160 if (!WorkflowEngineManagerUtil.isDeployed()) {
161 throw new NoSuchWorkflowDefinitionLinkException();
162 }
163
164 long classNameId = PortalUtil.getClassNameId(className);
165
166 return workflowDefinitionLinkPersistence.findByG_C_C_C_T(
167 WorkflowConstants.DEFAULT_GROUP_ID, companyId, classNameId, classPK,
168 typePK);
169 }
170
171 @Override
172 public WorkflowDefinitionLink getWorkflowDefinitionLink(
173 long companyId, long groupId, String className, long classPK,
174 long typePK)
175 throws PortalException, SystemException {
176
177 return getWorkflowDefinitionLink(
178 companyId, groupId, className, classPK, typePK, false);
179 }
180
181 @Override
182 public WorkflowDefinitionLink getWorkflowDefinitionLink(
183 long companyId, long groupId, String className, long classPK,
184 long typePK, boolean strict)
185 throws PortalException, SystemException {
186
187 if (!WorkflowEngineManagerUtil.isDeployed()) {
188 throw new NoSuchWorkflowDefinitionLinkException();
189 }
190
191 WorkflowDefinitionLink workflowDefinitionLink =
192 fetchWorkflowDefinitionLink(
193 companyId, groupId, className, classPK, typePK, strict);
194
195 if (workflowDefinitionLink == null) {
196 throw new NoSuchWorkflowDefinitionLinkException(
197 "No workflow for groupId=" + groupId + ", companyId=" +
198 companyId + " and className=" + className);
199 }
200
201 return workflowDefinitionLink;
202 }
203
204 @Override
205 public int getWorkflowDefinitionLinksCount(
206 long companyId, String workflowDefinitionName,
207 int workflowDefinitionVersion)
208 throws SystemException {
209
210 if (!WorkflowEngineManagerUtil.isDeployed()) {
211 return 0;
212 }
213
214 return workflowDefinitionLinkPersistence.countByC_W_W(
215 companyId, workflowDefinitionName, workflowDefinitionVersion);
216 }
217
218 @Override
219 @Skip
220 public boolean hasWorkflowDefinitionLink(
221 long companyId, long groupId, String className)
222 throws PortalException, SystemException {
223
224 return hasWorkflowDefinitionLink(companyId, groupId, className, 0);
225 }
226
227 @Override
228 @Skip
229 public boolean hasWorkflowDefinitionLink(
230 long companyId, long groupId, String className, long classPK)
231 throws PortalException, SystemException {
232
233 return hasWorkflowDefinitionLink(
234 companyId, groupId, className, classPK, 0);
235 }
236
237 @Override
238 @Skip
239 public boolean hasWorkflowDefinitionLink(
240 long companyId, long groupId, String className, long classPK,
241 long typePK)
242 throws PortalException, SystemException {
243
244 if (!WorkflowEngineManagerUtil.isDeployed()) {
245 return false;
246 }
247
248 WorkflowDefinitionLink workflowDefinitionLink =
249 workflowDefinitionLinkLocalService.fetchWorkflowDefinitionLink(
250 companyId, groupId, className, classPK, typePK);
251
252 if (workflowDefinitionLink != null) {
253 return true;
254 }
255
256 return false;
257 }
258
259 @Override
260 public void updateWorkflowDefinitionLink(
261 long userId, long companyId, long groupId, String className,
262 long classPK, long typePK, String workflowDefinition)
263 throws PortalException, SystemException {
264
265 if (Validator.isNull(workflowDefinition)) {
266 deleteWorkflowDefinitionLink(
267 companyId, groupId, className, classPK, typePK);
268 }
269 else {
270 String[] workflowDefinitionParts = StringUtil.split(
271 workflowDefinition, CharPool.AT);
272
273 String workflowDefinitionName = workflowDefinitionParts[0];
274 int workflowDefinitionVersion = GetterUtil.getInteger(
275 workflowDefinitionParts[1]);
276
277 updateWorkflowDefinitionLink(
278 userId, companyId, groupId, className, classPK, typePK,
279 workflowDefinitionName, workflowDefinitionVersion);
280 }
281 }
282
283 @Override
284 public WorkflowDefinitionLink updateWorkflowDefinitionLink(
285 long userId, long companyId, long groupId, String className,
286 long classPK, long typePK, String workflowDefinitionName,
287 int workflowDefinitionVersion)
288 throws PortalException, SystemException {
289
290 User user = userPersistence.findByPrimaryKey(userId);
291 long classNameId = PortalUtil.getClassNameId(className);
292 Date now = new Date();
293
294 WorkflowDefinitionLink workflowDefinitionLink =
295 workflowDefinitionLinkPersistence.fetchByG_C_C_C_T(
296 groupId, companyId, classNameId, classPK, typePK);
297
298 if (workflowDefinitionLink == null) {
299 workflowDefinitionLink = addWorkflowDefinitionLink(
300 userId, companyId, groupId, className, classPK, typePK,
301 workflowDefinitionName, workflowDefinitionVersion);
302 }
303
304 workflowDefinitionLink.setModifiedDate(now);
305 workflowDefinitionLink.setUserId(userId);
306 workflowDefinitionLink.setUserName(user.getFullName());
307 workflowDefinitionLink.setGroupId(groupId);
308 workflowDefinitionLink.setCompanyId(companyId);
309 workflowDefinitionLink.setClassNameId(classNameId);
310 workflowDefinitionLink.setClassPK(classPK);
311 workflowDefinitionLink.setTypePK(typePK);
312 workflowDefinitionLink.setWorkflowDefinitionName(
313 workflowDefinitionName);
314 workflowDefinitionLink.setWorkflowDefinitionVersion(
315 workflowDefinitionVersion);
316
317 workflowDefinitionLinkPersistence.update(workflowDefinitionLink, false);
318
319 return workflowDefinitionLink;
320 }
321
322 @Override
323 public void updateWorkflowDefinitionLinks(
324 long userId, long companyId, long groupId, String className,
325 long classPK,
326 List<ObjectValuePair<Long, String>> workflowDefinitions)
327 throws PortalException, SystemException {
328
329 for (ObjectValuePair<Long, String> workflowDefinition :
330 workflowDefinitions) {
331
332 long typePK = workflowDefinition.getKey();
333 String workflowDefinitionName = workflowDefinition.getValue();
334
335 if (Validator.isNull(workflowDefinitionName)) {
336 deleteWorkflowDefinitionLink(
337 companyId, groupId, className, classPK, typePK);
338 }
339 else {
340 updateWorkflowDefinitionLink(
341 userId, companyId, groupId, className, classPK, typePK,
342 workflowDefinitionName);
343 }
344 }
345 }
346
347 }