/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.portal.workflow.instance.web.internal.display.context; import com.liferay.asset.kernel.model.AssetEntry; import com.liferay.asset.kernel.model.AssetRenderer; import com.liferay.asset.kernel.model.AssetRendererFactory; import com.liferay.portal.kernel.dao.orm.QueryUtil; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.language.LanguageUtil; import com.liferay.portal.kernel.model.Role; import com.liferay.portal.kernel.model.User; import com.liferay.portal.kernel.portlet.LiferayPortletRequest; import com.liferay.portal.kernel.portlet.LiferayPortletResponse; import com.liferay.portal.kernel.security.permission.ResourceActionsUtil; import com.liferay.portal.kernel.service.RoleLocalServiceUtil; import com.liferay.portal.kernel.service.UserLocalServiceUtil; import com.liferay.portal.kernel.util.GetterUtil; import com.liferay.portal.kernel.util.HtmlUtil; import com.liferay.portal.kernel.util.OrderByComparator; import com.liferay.portal.kernel.util.PortalUtil; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.WebKeys; import com.liferay.portal.kernel.workflow.WorkflowConstants; import com.liferay.portal.kernel.workflow.WorkflowException; import com.liferay.portal.kernel.workflow.WorkflowHandler; import com.liferay.portal.kernel.workflow.WorkflowHandlerRegistryUtil; import com.liferay.portal.kernel.workflow.WorkflowInstance; import com.liferay.portal.kernel.workflow.WorkflowLog; import com.liferay.portal.kernel.workflow.WorkflowLogManagerUtil; import com.liferay.portal.kernel.workflow.WorkflowTask; import com.liferay.portal.kernel.workflow.WorkflowTaskManagerUtil; import com.liferay.portal.kernel.workflow.comparator.WorkflowComparatorFactoryUtil; import java.io.Serializable; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author Leonardo Barros */ public class WorkflowInstanceEditDisplayContext extends BaseWorkflowInstanceDisplayContext { public WorkflowInstanceEditDisplayContext( LiferayPortletRequest liferayPortletRequest, LiferayPortletResponse liferayPortletResponse) { super(liferayPortletRequest, liferayPortletResponse); } public AssetEntry getAssetEntry() throws PortalException { AssetRenderer<?> assetRenderer = getAssetRenderer(); if (assetRenderer == null) { return null; } AssetRendererFactory<?> assetRendererFactory = getAssetRendererFactory(); return assetRendererFactory.getAssetEntry( assetRendererFactory.getClassName(), assetRenderer.getClassPK()); } public String getAssetEntryVersionId() { long classPK = getWorkflowContextEntryClassPK(); return String.valueOf(classPK); } public String getAssetName() { return HtmlUtil.escape(getWorkflowDefinitionName()); } public AssetRenderer<?> getAssetRenderer() throws PortalException { WorkflowHandler<?> workflowHandler = getWorkflowHandler(); return workflowHandler.getAssetRenderer( getWorkflowContextEntryClassPK()); } public AssetRendererFactory<?> getAssetRendererFactory() { WorkflowHandler<?> workflowHandler = getWorkflowHandler(); return workflowHandler.getAssetRendererFactory(); } public String getAssignedTheTaskMessageKey(WorkflowLog workflowLog) throws PortalException { User user = getUser(workflowLog.getUserId()); if (user.isMale()) { return "x-assigned-the-task-to-himself"; } else { return "x-assigned-the-task-to-herself"; } } public Object getAssignedTheTaskToMessageArguments(WorkflowLog workflowLog) throws PortalException { String userName = PortalUtil.getUserName( workflowLog.getAuditUserId(), StringPool.BLANK); String actorName = getActorName(workflowLog); return new Object[] { HtmlUtil.escape(userName), HtmlUtil.escape(actorName) }; } public String getHeaderTitle() { return LanguageUtil.get( workflowInstanceRequestHelper.getRequest(), getWorkflowDefinitionName()); } public String getIconCssClass() { WorkflowHandler<?> workflowHandler = getWorkflowHandler(); return workflowHandler.getIconCssClass(); } public String getPanelTitle() { String modelResource = ResourceActionsUtil.getModelResource( workflowInstanceRequestHelper.getLocale(), getWorkflowContextEntryClassName()); return LanguageUtil.format( workflowInstanceRequestHelper.getRequest(), "preview-of-x", modelResource, false); } public Object getPreviousAssigneeMessageArguments(WorkflowLog workflowLog) { return HtmlUtil.escape( PortalUtil.getUserName( workflowLog.getPreviousUserId(), StringPool.BLANK)); } public String getTaskCompleted(WorkflowTask workflowTask) { if (workflowTask.isCompleted()) { return LanguageUtil.get( workflowInstanceRequestHelper.getRequest(), "yes"); } return LanguageUtil.get( workflowInstanceRequestHelper.getRequest(), "no"); } public Object getTaskCompletionMessageArguments(WorkflowLog workflowLog) throws PortalException { String actorName = getActorName(workflowLog); return new Object[] { HtmlUtil.escape(actorName), HtmlUtil.escape(workflowLog.getState()) }; } public String getTaskContentTitleMessage() { WorkflowHandler<?> workflowHandler = getWorkflowHandler(); long classPK = getWorkflowContextEntryClassPK(); return HtmlUtil.escape( workflowHandler.getTitle( classPK, workflowInstanceRequestHelper.getLocale())); } public String getTaskDueDate(WorkflowTask workflowTask) { if (workflowTask.getDueDate() == null) { return LanguageUtil.get( workflowInstanceRequestHelper.getRequest(), "never"); } else { return dateFormatDateTime.format(workflowTask.getDueDate()); } } public Object getTaskInitiallyAssignedMessageArguments( WorkflowLog workflowLog) throws PortalException { return HtmlUtil.escape(getActorName(workflowLog)); } public String getTaskName(WorkflowTask workflowTask) { return HtmlUtil.escape(workflowTask.getName()); } public Object getTaskUpdateMessageArguments(WorkflowLog workflowLog) throws PortalException { return HtmlUtil.escape(getActorName(workflowLog)); } public Object getTransitionMessageArguments(WorkflowLog workflowLog) throws PortalException { String actorName = getActorName(workflowLog); return new Object[] { HtmlUtil.escape(actorName), HtmlUtil.escape(workflowLog.getPreviousState()), HtmlUtil.escape(workflowLog.getState()) }; } public String getUserFullName(WorkflowLog workflowLog) throws PortalException { User user = getUser(workflowLog.getUserId()); return HtmlUtil.escape(user.getFullName()); } public String getWorkflowInstanceEndDate() { WorkflowInstance workflowInstance = getWorkflowInstance(); if (workflowInstance.getEndDate() == null) { return LanguageUtil.get( workflowInstanceRequestHelper.getRequest(), "never"); } else { return dateFormatDateTime.format(workflowInstance.getEndDate()); } } public String getWorkflowInstanceState() { WorkflowInstance workflowInstance = getWorkflowInstance(); return LanguageUtil.get( workflowInstanceRequestHelper.getRequest(), workflowInstance.getState()); } public String getWorkflowLogComment(WorkflowLog workflowLog) { return HtmlUtil.escape(workflowLog.getComment()); } public String getWorkflowLogCreateDate(WorkflowLog workflowLog) { return dateFormatDateTime.format(workflowLog.getCreateDate()); } public List<WorkflowLog> getWorkflowLogs() throws WorkflowException { if (_workflowLogs == null) { OrderByComparator<WorkflowLog> orderByComparator = WorkflowComparatorFactoryUtil.getLogCreateDateComparator(false); _workflowLogs = WorkflowLogManagerUtil.getWorkflowLogsByWorkflowInstance( workflowInstanceRequestHelper.getCompanyId(), getWorkflowInstanceId(), _logTypes, QueryUtil.ALL_POS, QueryUtil.ALL_POS, orderByComparator); } return _workflowLogs; } public List<WorkflowTask> getWorkflowTasks() throws PortalException { if (workflowTasks == null) { workflowTasks = WorkflowTaskManagerUtil.getWorkflowTasksByWorkflowInstance( workflowInstanceRequestHelper.getCompanyId(), null, getWorkflowInstanceId(), null, QueryUtil.ALL_POS, QueryUtil.ALL_POS, null); } return workflowTasks; } public boolean isAuditUser(WorkflowLog workflowLog) { if (workflowLog.getUserId() == 0) { return false; } if (workflowLog.getAuditUserId() == workflowLog.getUserId()) { return true; } return false; } public boolean isWorkflowTasksEmpty() throws PortalException { List<WorkflowTask> workflowTasks = getWorkflowTasks(); return workflowTasks.isEmpty(); } protected String getActorName(WorkflowLog workflowLog) throws PortalException { if (workflowLog.getRoleId() != 0) { Role role = getRole(workflowLog.getRoleId()); return role.getDescriptiveName(); } else if (workflowLog.getUserId() != 0) { User user = getUser(workflowLog.getUserId()); return user.getFullName(); } return StringPool.BLANK; } protected Role getRole(long roleId) throws PortalException { Role role = _roles.get(roleId); if (role == null) { role = RoleLocalServiceUtil.getRole(roleId); _roles.put(roleId, role); } return role; } protected User getUser(long userId) throws PortalException { User user = _users.get(userId); if (user == null) { user = UserLocalServiceUtil.getUser(userId); _users.put(userId, user); } return user; } protected Map<String, Serializable> getWorkflowContext() { WorkflowInstance workflowInstance = getWorkflowInstance(); return workflowInstance.getWorkflowContext(); } protected String getWorkflowContextEntryClassName() { Map<String, Serializable> workflowContext = getWorkflowContext(); return (String)workflowContext.get( WorkflowConstants.CONTEXT_ENTRY_CLASS_NAME); } protected long getWorkflowContextEntryClassPK() { Map<String, Serializable> workflowContext = getWorkflowContext(); return GetterUtil.getLong( (String)workflowContext.get( WorkflowConstants.CONTEXT_ENTRY_CLASS_PK)); } protected String getWorkflowDefinitionName() { WorkflowInstance workflowInstance = getWorkflowInstance(); return workflowInstance.getWorkflowDefinitionName(); } protected WorkflowHandler<?> getWorkflowHandler() { String className = getWorkflowContextEntryClassName(); return WorkflowHandlerRegistryUtil.getWorkflowHandler(className); } protected WorkflowInstance getWorkflowInstance() { return (WorkflowInstance)liferayPortletRequest.getAttribute( WebKeys.WORKFLOW_INSTANCE); } protected long getWorkflowInstanceId() { WorkflowInstance workflowInstance = getWorkflowInstance(); return workflowInstance.getWorkflowInstanceId(); } protected List<WorkflowTask> workflowTasks; private static final List<Integer> _logTypes = Arrays.asList( WorkflowLog.TASK_ASSIGN, WorkflowLog.TASK_COMPLETION, WorkflowLog.TASK_UPDATE, WorkflowLog.TRANSITION); private final Map<Long, Role> _roles = new HashMap<>(); private final Map<Long, User> _users = new HashMap<>(); private List<WorkflowLog> _workflowLogs; }