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