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 {
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) && !keepFileVersionLabel) {
080
081 DLFileVersion latestDLFileVersion =
082 DLFileVersionLocalServiceUtil.getLatestFileVersion(
083 fileEntry.getFileEntryId(), false);
084
085 DLUtil.startWorkflowInstance(
086 userId, latestDLFileVersion, DLSyncConstants.EVENT_UPDATE,
087 serviceContext);
088 }
089 }
090
091 @Override
092 public void revertFileEntry(
093 long userId, FileEntry fileEntry, ServiceContext serviceContext)
094 throws PortalException {
095
096 _startWorkflowInstance(userId, fileEntry, serviceContext);
097 }
098
099 @Override
100 public void updateFileEntry(
101 long userId, FileEntry fileEntry, ServiceContext serviceContext)
102 throws PortalException {
103
104 _startWorkflowInstance(userId, fileEntry, serviceContext);
105 }
106
107 @Override
108 public LocalRepository wrapLocalRepository(
109 LocalRepository localRepository) {
110
111 return new LiferayWorkflowLocalRepositoryWrapper(localRepository, this);
112 }
113
114 @Override
115 public Repository wrapRepository(Repository repository) {
116 return new LiferayWorkflowRepositoryWrapper(repository, this);
117 }
118
119 private DLFileVersion _getWorkflowDLFileVersion(
120 long fileEntryId, ServiceContext serviceContext)
121 throws PortalException {
122
123 DLFileEntry dlFileEntry = DLFileEntryLocalServiceUtil.getDLFileEntry(
124 fileEntryId);
125
126 if (dlFileEntry.isCheckedOut()) {
127 return null;
128 }
129
130 DLFileVersion dlFileVersion =
131 DLFileVersionLocalServiceUtil.getLatestFileVersion(
132 fileEntryId, true);
133
134 if (dlFileVersion.isApproved() ||
135 (serviceContext.getWorkflowAction() ==
136 WorkflowConstants.ACTION_PUBLISH)) {
137
138 return dlFileVersion;
139 }
140
141 return null;
142 }
143
144 private void _startWorkflowInstance(
145 long userId, DLFileVersion dlFileVersion,
146 ServiceContext serviceContext)
147 throws PortalException {
148
149 if (dlFileVersion == null) {
150 return;
151 }
152
153 String syncEvent = DLSyncConstants.EVENT_UPDATE;
154
155 if (dlFileVersion.getVersion().equals(
156 DLFileEntryConstants.VERSION_DEFAULT)) {
157
158 syncEvent = DLSyncConstants.EVENT_ADD;
159 }
160
161 DLUtil.startWorkflowInstance(
162 userId, dlFileVersion, syncEvent, serviceContext);
163 }
164
165 private void _startWorkflowInstance(
166 long userId, FileEntry fileEntry, ServiceContext serviceContext)
167 throws PortalException {
168
169 DLFileVersion dlFileVersion = _getWorkflowDLFileVersion(
170 fileEntry.getFileEntryId(), serviceContext);
171
172 _startWorkflowInstance(userId, dlFileVersion, serviceContext);
173 }
174
175 }