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