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 public WorkflowDefinitionLink addWorkflowDefinitionLink(
048 long userId, long companyId, long groupId, String className,
049 long classPK, long typePK, String workflowDefinitionName,
050 int workflowDefinitionVersion)
051 throws PortalException, SystemException {
052
053 User user = userPersistence.findByPrimaryKey(userId);
054 long classNameId = PortalUtil.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, false);
077
078 return workflowDefinitionLink;
079 }
080
081 public void deleteWorkflowDefinitionLink(
082 long companyId, long groupId, String className, long classPK,
083 long typePK)
084 throws PortalException, SystemException {
085
086 try {
087 WorkflowDefinitionLink workflowDefinitionLink =
088 getWorkflowDefinitionLink(
089 companyId, groupId, className, classPK, typePK, true);
090
091 deleteWorkflowDefinitionLink(workflowDefinitionLink);
092 }
093 catch (NoSuchWorkflowDefinitionLinkException nswdle) {
094 }
095 }
096
097 public WorkflowDefinitionLink getDefaultWorkflowDefinitionLink(
098 long companyId, String className, long classPK, long typePK)
099 throws PortalException, SystemException {
100
101 if (!WorkflowEngineManagerUtil.isDeployed()) {
102 throw new NoSuchWorkflowDefinitionLinkException();
103 }
104
105 long classNameId = PortalUtil.getClassNameId(className);
106
107 return workflowDefinitionLinkPersistence.findByG_C_C_C_T(
108 WorkflowConstants.DEFAULT_GROUP_ID, companyId, classNameId, classPK,
109 typePK);
110 }
111
112 public WorkflowDefinitionLink getWorkflowDefinitionLink(
113 long companyId, long groupId, String className, long classPK,
114 long typePK)
115 throws PortalException, SystemException {
116
117 return getWorkflowDefinitionLink(
118 companyId, groupId, className, classPK, typePK, false);
119 }
120
121 public WorkflowDefinitionLink getWorkflowDefinitionLink(
122 long companyId, long groupId, String className, long classPK,
123 long typePK, boolean strict)
124 throws PortalException, SystemException {
125
126 if (!WorkflowEngineManagerUtil.isDeployed()) {
127 throw new NoSuchWorkflowDefinitionLinkException();
128 }
129
130 long classNameId = PortalUtil.getClassNameId(className);
131
132 WorkflowDefinitionLink workflowDefinitionLink = null;
133
134 if (groupId > 0) {
135 groupId = StagingUtil.getLiveGroupId(groupId);
136 }
137
138 workflowDefinitionLink =
139 workflowDefinitionLinkPersistence.fetchByG_C_C_C_T(
140 groupId, companyId, classNameId, classPK, typePK);
141
142 if (!strict && (workflowDefinitionLink == null)) {
143 workflowDefinitionLink =
144 workflowDefinitionLinkPersistence.fetchByG_C_C_C_T(
145 WorkflowConstants.DEFAULT_GROUP_ID, companyId, classNameId,
146 classPK, typePK);
147 }
148
149 if (workflowDefinitionLink == null) {
150 throw new NoSuchWorkflowDefinitionLinkException(
151 "No workflow for groupId=" + groupId + ", companyId=" +
152 companyId + " and classNameId=" + classNameId);
153 }
154
155 return workflowDefinitionLink;
156 }
157
158 public int getWorkflowDefinitionLinksCount(
159 long companyId, String workflowDefinitionName,
160 int workflowDefinitionVersion)
161 throws SystemException{
162
163 if (!WorkflowEngineManagerUtil.isDeployed()) {
164 return 0;
165 }
166
167 return workflowDefinitionLinkPersistence.countByC_W_W(
168 companyId, workflowDefinitionName, workflowDefinitionVersion);
169 }
170
171 @Skip
172 public boolean hasWorkflowDefinitionLink(
173 long companyId, long groupId, String className)
174 throws PortalException, SystemException {
175
176 return hasWorkflowDefinitionLink(companyId, groupId, className, 0);
177 }
178
179 @Skip
180 public boolean hasWorkflowDefinitionLink(
181 long companyId, long groupId, String className, long classPK)
182 throws PortalException, SystemException {
183
184 return hasWorkflowDefinitionLink(
185 companyId, groupId, className, classPK, 0);
186 }
187
188 @Skip
189 public boolean hasWorkflowDefinitionLink(
190 long companyId, long groupId, String className, long classPK,
191 long typePK)
192 throws PortalException, SystemException {
193
194 if (!WorkflowEngineManagerUtil.isDeployed()) {
195 return false;
196 }
197
198 try {
199 workflowDefinitionLinkLocalService.getWorkflowDefinitionLink(
200 companyId, groupId, className, classPK, typePK);
201
202 return true;
203 }
204 catch (NoSuchWorkflowDefinitionLinkException nswdle) {
205 return false;
206 }
207 }
208
209 public void updateWorkflowDefinitionLink(
210 long userId, long companyId, long groupId, String className,
211 long classPK, long typePK, String workflowDefinition)
212 throws PortalException, SystemException {
213
214 if (Validator.isNull(workflowDefinition)) {
215 deleteWorkflowDefinitionLink(
216 companyId, groupId, className, classPK, typePK);
217 }
218 else {
219 String[] workflowDefinitionParts = StringUtil.split(
220 workflowDefinition, CharPool.AT);
221
222 String workflowDefinitionName = workflowDefinitionParts[0];
223 int workflowDefinitionVersion = GetterUtil.getInteger(
224 workflowDefinitionParts[1]);
225
226 updateWorkflowDefinitionLink(
227 userId, companyId, groupId, className, classPK, typePK,
228 workflowDefinitionName, workflowDefinitionVersion);
229 }
230 }
231
232 public WorkflowDefinitionLink updateWorkflowDefinitionLink(
233 long userId, long companyId, long groupId, String className,
234 long classPK, long typePK, String workflowDefinitionName,
235 int workflowDefinitionVersion)
236 throws PortalException, SystemException {
237
238 User user = userPersistence.findByPrimaryKey(userId);
239 long classNameId = PortalUtil.getClassNameId(className);
240 Date now = new Date();
241
242 WorkflowDefinitionLink workflowDefinitionLink =
243 workflowDefinitionLinkPersistence.fetchByG_C_C_C_T(
244 groupId, companyId, classNameId, classPK, typePK);
245
246 if (workflowDefinitionLink == null) {
247 workflowDefinitionLink = addWorkflowDefinitionLink(
248 userId, companyId, groupId, className, classPK, typePK,
249 workflowDefinitionName, workflowDefinitionVersion);
250 }
251
252 workflowDefinitionLink.setModifiedDate(now);
253 workflowDefinitionLink.setUserId(userId);
254 workflowDefinitionLink.setUserName(user.getFullName());
255 workflowDefinitionLink.setGroupId(groupId);
256 workflowDefinitionLink.setCompanyId(companyId);
257 workflowDefinitionLink.setClassNameId(classNameId);
258 workflowDefinitionLink.setClassPK(classPK);
259 workflowDefinitionLink.setTypePK(typePK);
260 workflowDefinitionLink.setWorkflowDefinitionName(
261 workflowDefinitionName);
262 workflowDefinitionLink.setWorkflowDefinitionVersion(
263 workflowDefinitionVersion);
264
265 workflowDefinitionLinkPersistence.update(workflowDefinitionLink, false);
266
267 return workflowDefinitionLink;
268 }
269
270 public void updateWorkflowDefinitionLinks(
271 long userId, long companyId, long groupId, String className,
272 long classPK,
273 List<ObjectValuePair<Long, String>> workflowDefinitions)
274 throws PortalException, SystemException {
275
276 for (ObjectValuePair<Long, String> workflowDefinition :
277 workflowDefinitions) {
278
279 long typePK = workflowDefinition.getKey();
280 String workflowDefinitionName = workflowDefinition.getValue();
281
282 if (Validator.isNull(workflowDefinitionName)) {
283 deleteWorkflowDefinitionLink(
284 companyId, groupId, className, classPK, typePK);
285 }
286 else {
287 updateWorkflowDefinitionLink(
288 userId, companyId, groupId, className, classPK, typePK,
289 workflowDefinitionName);
290 }
291 }
292 }
293
294 }