1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * This library is free software; you can redistribute it and/or modify it under
5    * the terms of the GNU Lesser General Public License as published by the Free
6    * Software Foundation; either version 2.1 of the License, or (at your option)
7    * any later version.
8    *
9    * This library is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12   * details.
13   */
14  
15  package com.liferay.portal.service.impl;
16  
17  import com.liferay.portal.NoSuchWorkflowDefinitionLinkException;
18  import com.liferay.portal.kernel.exception.PortalException;
19  import com.liferay.portal.kernel.exception.SystemException;
20  import com.liferay.portal.kernel.workflow.WorkflowDefinitionManagerUtil;
21  import com.liferay.portal.model.User;
22  import com.liferay.portal.model.WorkflowDefinitionLink;
23  import com.liferay.portal.service.base.WorkflowDefinitionLinkLocalServiceBaseImpl;
24  import com.liferay.portal.util.PortalUtil;
25  
26  import java.util.Date;
27  
28  /**
29   * <a href="WorkflowDefinitionLinkLocalServiceImpl.java.html"><b><i>View Source
30   * </i></b></a>
31   *
32   * @author Jorge Ferrer
33   * @author Bruno Farache
34   * @author Brian Wing Shun Chan
35   */
36  public class WorkflowDefinitionLinkLocalServiceImpl
37      extends WorkflowDefinitionLinkLocalServiceBaseImpl {
38  
39      public WorkflowDefinitionLink addWorkflowDefinitionLink(
40              long userId, long companyId, long groupId, String className,
41              String workflowDefinitionName, int workflowDefinitionVersion)
42          throws PortalException, SystemException {
43  
44          User user = userPersistence.findByPrimaryKey(userId);
45          long classNameId = PortalUtil.getClassNameId(className);
46          Date now = new Date();
47  
48          long workflowDefinitionLinkId = counterLocalService.increment();
49  
50          WorkflowDefinitionLink workflowDefinitionLink =
51              workflowDefinitionLinkPersistence.create(workflowDefinitionLinkId);
52  
53          workflowDefinitionLink.setCreateDate(now);
54          workflowDefinitionLink.setModifiedDate(now);
55          workflowDefinitionLink.setUserId(userId);
56          workflowDefinitionLink.setUserName(user.getFullName());
57          workflowDefinitionLink.setGroupId(groupId);
58          workflowDefinitionLink.setCompanyId(companyId);
59          workflowDefinitionLink.setClassNameId(classNameId);
60          workflowDefinitionLink.setWorkflowDefinitionName(
61              workflowDefinitionName);
62          workflowDefinitionLink.setWorkflowDefinitionVersion(
63              workflowDefinitionVersion);
64  
65          workflowDefinitionLinkPersistence.update(workflowDefinitionLink, false);
66  
67          return workflowDefinitionLink;
68      }
69  
70      public void deleteWorkflowDefinitionLink(
71              long userId, long companyId, long groupId, String className)
72          throws PortalException, SystemException {
73  
74          try {
75              WorkflowDefinitionLink workflowDefinitionLink =
76                  getWorkflowDefinitionLink(companyId, groupId, className);
77  
78              deleteWorkflowDefinitionLink(workflowDefinitionLink);
79  
80              WorkflowDefinitionManagerUtil.undeployWorkflowDefinition(
81                  companyId, userId,
82                  workflowDefinitionLink.getWorkflowDefinitionName(),
83                  workflowDefinitionLink.getWorkflowDefinitionVersion());
84          }
85          catch (NoSuchWorkflowDefinitionLinkException nswdle) {
86          }
87      }
88  
89      public WorkflowDefinitionLink getWorkflowDefinitionLink(
90              long companyId, long groupId, String className)
91          throws PortalException, SystemException {
92  
93          long classNameId = PortalUtil.getClassNameId(className);
94  
95          WorkflowDefinitionLink workflowDefinitionLink = null;
96  
97          if (groupId > 0) {
98              workflowDefinitionLink =
99                  workflowDefinitionLinkPersistence.fetchByG_C_C(
100                     groupId, companyId, classNameId);
101         }
102 
103         if (workflowDefinitionLink == null) {
104             workflowDefinitionLink =
105                 workflowDefinitionLinkPersistence.fetchByG_C_C(
106                     0, companyId, classNameId);
107         }
108 
109         if (workflowDefinitionLink == null) {
110             throw new NoSuchWorkflowDefinitionLinkException(
111                 "No workflow for groupId=" + groupId + ", companyId=" +
112                     companyId + " and classNameId=" + classNameId);
113         }
114 
115         return workflowDefinitionLink;
116     }
117 
118     public boolean hasWorkflowDefinitionLink(
119             long companyId, long groupId, String className)
120         throws PortalException, SystemException {
121 
122         try {
123             getWorkflowDefinitionLink(companyId, groupId, className);
124 
125             return true;
126         }
127         catch (NoSuchWorkflowDefinitionLinkException nswdle) {
128             return false;
129         }
130     }
131 
132     public WorkflowDefinitionLink updateWorkflowDefinitionLink(
133             long userId, long companyId, long groupId, String className,
134             String workflowDefinitionName, int workflowDefinitionVersion)
135         throws PortalException, SystemException {
136 
137         User user = userPersistence.findByPrimaryKey(userId);
138         long classNameId = PortalUtil.getClassNameId(className);
139         Date now = new Date();
140 
141         WorkflowDefinitionLink workflowDefinitionLink =
142             workflowDefinitionLinkPersistence.fetchByG_C_C(
143                 groupId, companyId, classNameId);
144 
145         if (workflowDefinitionLink == null) {
146             workflowDefinitionLink = addWorkflowDefinitionLink(
147                 userId, companyId, groupId, className, workflowDefinitionName,
148                 workflowDefinitionVersion);
149         }
150 
151         workflowDefinitionLink.setModifiedDate(now);
152         workflowDefinitionLink.setUserId(userId);
153         workflowDefinitionLink.setUserName(user.getFullName());
154         workflowDefinitionLink.setGroupId(groupId);
155         workflowDefinitionLink.setCompanyId(companyId);
156         workflowDefinitionLink.setClassNameId(classNameId);
157         workflowDefinitionLink.setWorkflowDefinitionName(
158             workflowDefinitionName);
159         workflowDefinitionLink.setWorkflowDefinitionVersion(
160             workflowDefinitionVersion);
161 
162         workflowDefinitionLinkPersistence.update(workflowDefinitionLink, false);
163 
164         return workflowDefinitionLink;
165     }
166 
167 }