001
014
015 package com.liferay.portal.repository.capabilities;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.repository.LocalRepository;
019 import com.liferay.portal.kernel.repository.Repository;
020 import com.liferay.portal.kernel.repository.capabilities.WorkflowCapability;
021 import com.liferay.portal.kernel.repository.model.FileEntry;
022 import com.liferay.portal.kernel.repository.model.FileVersion;
023 import com.liferay.portal.kernel.workflow.WorkflowConstants;
024 import com.liferay.portal.kernel.workflow.WorkflowThreadLocal;
025 import com.liferay.portal.repository.liferayrepository.LiferayWorkflowLocalRepositoryWrapper;
026 import com.liferay.portal.repository.liferayrepository.LiferayWorkflowRepositoryWrapper;
027 import com.liferay.portal.repository.util.RepositoryWrapperAware;
028 import com.liferay.portal.service.ServiceContext;
029 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
030 import com.liferay.portlet.documentlibrary.model.DLFileEntryConstants;
031 import com.liferay.portlet.documentlibrary.model.DLFileVersion;
032 import com.liferay.portlet.documentlibrary.model.DLSyncConstants;
033 import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
034 import com.liferay.portlet.documentlibrary.service.DLFileVersionLocalServiceUtil;
035 import com.liferay.portlet.documentlibrary.util.DLAppHelperThreadLocal;
036 import com.liferay.portlet.documentlibrary.util.DLUtil;
037
038
041 public class LiferayWorkflowCapability
042 implements RepositoryWrapperAware, WorkflowCapability, WorkflowSupport {
043
044 @Override
045 public void addFileEntry(
046 long userId, FileEntry fileEntry, ServiceContext serviceContext)
047 throws PortalException {
048
049 boolean previousEnabled = WorkflowThreadLocal.isEnabled();
050
051 if (!DLAppHelperThreadLocal.isEnabled()) {
052 WorkflowThreadLocal.setEnabled(false);
053 }
054
055 try {
056 FileVersion fileVersion = fileEntry.getFileVersion();
057
058 DLUtil.startWorkflowInstance(
059 userId, (DLFileVersion)fileVersion.getModel(),
060 DLSyncConstants.EVENT_ADD, serviceContext);
061 }
062 finally {
063 if (!DLAppHelperThreadLocal.isEnabled()) {
064 WorkflowThreadLocal.setEnabled(previousEnabled);
065 }
066 }
067 }
068
069 @Override
070 public void checkInFileEntry(
071 long userId, FileEntry fileEntry, ServiceContext serviceContext)
072 throws PortalException {
073
074 boolean keepFileVersionLabel =
075 DLFileEntryLocalServiceUtil.isKeepFileVersionLabel(
076 fileEntry.getFileEntryId(), serviceContext);
077
078 if ((serviceContext.getWorkflowAction() ==
079 WorkflowConstants.ACTION_PUBLISH) &&
080 !keepFileVersionLabel) {
081
082 DLFileVersion latestDLFileVersion =
083 DLFileVersionLocalServiceUtil.getLatestFileVersion(
084 fileEntry.getFileEntryId(), false);
085
086 DLUtil.startWorkflowInstance(
087 userId, latestDLFileVersion, DLSyncConstants.EVENT_UPDATE,
088 serviceContext);
089 }
090 }
091
092 @Override
093 public int getStatus(FileEntry fileEntry) {
094 DLFileEntry dlFileEntry = (DLFileEntry)fileEntry.getModel();
095
096 return dlFileEntry.getStatus();
097 }
098
099 @Override
100 public void revertFileEntry(
101 long userId, FileEntry fileEntry, ServiceContext serviceContext)
102 throws PortalException {
103
104 _startWorkflowInstance(userId, fileEntry, serviceContext);
105 }
106
107 @Override
108 public void updateFileEntry(
109 long userId, FileEntry fileEntry, ServiceContext serviceContext)
110 throws PortalException {
111
112 _startWorkflowInstance(userId, fileEntry, serviceContext);
113 }
114
115 @Override
116 public LocalRepository wrapLocalRepository(
117 LocalRepository localRepository) {
118
119 return new LiferayWorkflowLocalRepositoryWrapper(localRepository, this);
120 }
121
122 @Override
123 public Repository wrapRepository(Repository repository) {
124 return new LiferayWorkflowRepositoryWrapper(repository, this);
125 }
126
127 private DLFileVersion _getWorkflowDLFileVersion(
128 long fileEntryId, ServiceContext serviceContext)
129 throws PortalException {
130
131 DLFileEntry dlFileEntry = DLFileEntryLocalServiceUtil.getDLFileEntry(
132 fileEntryId);
133
134 if (dlFileEntry.isCheckedOut()) {
135 return null;
136 }
137
138 DLFileVersion dlFileVersion =
139 DLFileVersionLocalServiceUtil.getLatestFileVersion(
140 fileEntryId, true);
141
142 if (dlFileVersion.isApproved() ||
143 (serviceContext.getWorkflowAction() ==
144 WorkflowConstants.ACTION_PUBLISH)) {
145
146 return dlFileVersion;
147 }
148
149 return null;
150 }
151
152 private void _startWorkflowInstance(
153 long userId, DLFileVersion dlFileVersion,
154 ServiceContext serviceContext)
155 throws PortalException {
156
157 if (dlFileVersion == null) {
158 return;
159 }
160
161 String syncEvent = DLSyncConstants.EVENT_UPDATE;
162
163 if (dlFileVersion.getVersion().equals(
164 DLFileEntryConstants.VERSION_DEFAULT)) {
165
166 syncEvent = DLSyncConstants.EVENT_ADD;
167 }
168
169 DLUtil.startWorkflowInstance(
170 userId, dlFileVersion, syncEvent, serviceContext);
171 }
172
173 private void _startWorkflowInstance(
174 long userId, FileEntry fileEntry, ServiceContext serviceContext)
175 throws PortalException {
176
177 DLFileVersion dlFileVersion = _getWorkflowDLFileVersion(
178 fileEntry.getFileEntryId(), serviceContext);
179
180 _startWorkflowInstance(userId, dlFileVersion, serviceContext);
181 }
182
183 }