001
014
015 package com.liferay.portlet.documentlibrary.workflow;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.util.GetterUtil;
019 import com.liferay.portal.kernel.workflow.BaseWorkflowHandler;
020 import com.liferay.portal.kernel.workflow.WorkflowConstants;
021 import com.liferay.portal.model.WorkflowDefinitionLink;
022 import com.liferay.portal.security.permission.ResourceActionsUtil;
023 import com.liferay.portal.service.ServiceContext;
024 import com.liferay.portal.service.WorkflowDefinitionLinkLocalServiceUtil;
025 import com.liferay.portal.theme.ThemeDisplay;
026 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
027 import com.liferay.portlet.documentlibrary.model.DLFileEntryTypeConstants;
028 import com.liferay.portlet.documentlibrary.model.DLFileVersion;
029 import com.liferay.portlet.documentlibrary.model.DLFolder;
030 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
031 import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
032 import com.liferay.portlet.documentlibrary.service.DLFileVersionLocalServiceUtil;
033 import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil;
034
035 import java.io.Serializable;
036
037 import java.util.Locale;
038 import java.util.Map;
039
040
045 public class DLFileEntryWorkflowHandler
046 extends BaseWorkflowHandler<DLFileEntry> {
047
048 @Override
049 public String getClassName() {
050 return DLFileEntry.class.getName();
051 }
052
053 @Override
054 public String getType(Locale locale) {
055 return ResourceActionsUtil.getModelResource(locale, getClassName());
056 }
057
058 @Override
059 public WorkflowDefinitionLink getWorkflowDefinitionLink(
060 long companyId, long groupId, long classPK)
061 throws PortalException {
062
063 DLFileVersion dlFileVersion =
064 DLFileVersionLocalServiceUtil.getFileVersion(classPK);
065
066 long folderId = dlFileVersion.getFolderId();
067
068 while (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
069 DLFolder dlFolder = DLFolderLocalServiceUtil.getFolder(folderId);
070
071 if (dlFolder.getRestrictionType() !=
072 DLFolderConstants.RESTRICTION_TYPE_INHERIT) {
073
074 break;
075 }
076
077 folderId = dlFolder.getParentFolderId();
078 }
079
080 WorkflowDefinitionLink workflowDefinitionLink =
081 WorkflowDefinitionLinkLocalServiceUtil.fetchWorkflowDefinitionLink(
082 companyId, groupId, DLFolder.class.getName(), folderId,
083 dlFileVersion.getFileEntryTypeId(), true);
084
085 if (workflowDefinitionLink == null) {
086 workflowDefinitionLink =
087 WorkflowDefinitionLinkLocalServiceUtil.
088 fetchWorkflowDefinitionLink(
089 companyId, groupId, DLFolder.class.getName(), folderId,
090 DLFileEntryTypeConstants.FILE_ENTRY_TYPE_ID_ALL, true);
091 }
092
093 return workflowDefinitionLink;
094 }
095
096 @Override
097 public boolean isVisible() {
098 return _VISIBLE;
099 }
100
101 @Override
102 public DLFileEntry updateStatus(
103 int status, Map<String, Serializable> workflowContext)
104 throws PortalException {
105
106 long userId = GetterUtil.getLong(
107 (String)workflowContext.get(WorkflowConstants.CONTEXT_USER_ID));
108 long classPK = GetterUtil.getLong(
109 (String)workflowContext.get(
110 WorkflowConstants.CONTEXT_ENTRY_CLASS_PK));
111
112 ServiceContext serviceContext = (ServiceContext)workflowContext.get(
113 "serviceContext");
114
115 return DLFileEntryLocalServiceUtil.updateStatus(
116 userId, classPK, status, serviceContext, workflowContext);
117 }
118
119 @Override
120 protected String getIconPath(ThemeDisplay themeDisplay) {
121 return themeDisplay.getPathThemeImages() + "/common/clip.png";
122 }
123
124 private static final boolean _VISIBLE = false;
125
126 }