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