/**
* 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.rest.internal.helper;
import com.liferay.asset.kernel.model.AssetEntry;
import com.liferay.asset.kernel.model.AssetRendererFactory;
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.service.ClassNameLocalService;
import com.liferay.portal.kernel.service.RoleLocalService;
import com.liferay.portal.kernel.service.UserLocalService;
import com.liferay.portal.kernel.service.WorkflowInstanceLinkLocalService;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.workflow.WorkflowConstants;
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.WorkflowInstanceManager;
import com.liferay.portal.kernel.workflow.WorkflowInstanceManagerUtil;
import com.liferay.portal.kernel.workflow.WorkflowTask;
import com.liferay.portal.kernel.workflow.WorkflowTaskAssignee;
import com.liferay.portal.kernel.workflow.WorkflowTaskManager;
import com.liferay.portal.workflow.rest.internal.model.WorkflowAssetModel;
import com.liferay.portal.workflow.rest.internal.model.WorkflowAssigneeModel;
import com.liferay.portal.workflow.rest.internal.model.WorkflowTaskModel;
import com.liferay.portal.workflow.rest.internal.model.WorkflowTaskTransitionOperationModel;
import com.liferay.portal.workflow.rest.internal.model.WorkflowUserModel;
import java.io.Serializable;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
/**
* @author Adam Brandizzi
*/
@Component(immediate = true, service = WorkflowHelper.class)
public class WorkflowHelper {
public WorkflowTask assignWorkflowTask(
long companyId, long userId, long workflowTaskId)
throws PortalException {
Map<String, Serializable> workflowContext = getWorkflowContext(
companyId, workflowTaskId);
return _workflowTaskManager.assignWorkflowTaskToUser(
companyId, userId, workflowTaskId, userId, null, null,
workflowContext);
}
public WorkflowTask completeWorkflowTask(
long companyId, long userId, long workflowTaskId,
WorkflowTaskTransitionOperationModel
workflowTaskTransitionOperationModel)
throws PortalException {
Map<String, Serializable> workflowContext = getWorkflowContext(
companyId, workflowTaskId);
return _workflowTaskManager.completeWorkflowTask(
companyId, userId, workflowTaskId,
workflowTaskTransitionOperationModel.getTransition(),
workflowTaskTransitionOperationModel.getComment(), workflowContext);
}
public WorkflowTaskModel getWorkflowTaskModel(
long companyId, long userId, long workflowTaskId, Locale locale)
throws PortalException {
WorkflowTask workflowTask = _workflowTaskManager.getWorkflowTask(
companyId, workflowTaskId);
WorkflowAssigneeModel workflowAssigneeModel = getWorkflowAssigneeModel(
workflowTask);
WorkflowAssetModel workflowAssetModel = getWorkflowAssetModel(
companyId, workflowTaskId, locale);
String state = getState(companyId, workflowTaskId, locale);
List<String> transitions = _workflowTaskManager.getNextTransitionNames(
companyId, userId, workflowTaskId);
return new WorkflowTaskModel(
workflowTask, workflowAssigneeModel, workflowAssetModel, state,
transitions);
}
protected String getState(
long companyId, long workflowTaskId, Locale locale)
throws PortalException {
Map<String, Serializable> workflowContext = getWorkflowContext(
companyId, workflowTaskId);
long groupId = GetterUtil.getLong(
workflowContext.get(WorkflowConstants.CONTEXT_GROUP_ID));
String className = GetterUtil.getString(
workflowContext.get(WorkflowConstants.CONTEXT_ENTRY_CLASS_NAME));
long classPK = GetterUtil.getLong(
workflowContext.get(WorkflowConstants.CONTEXT_ENTRY_CLASS_PK));
String state = _workflowInstanceLinkLocalService.getState(
companyId, groupId, className, classPK);
return LanguageUtil.get(locale, state);
}
protected WorkflowAssetModel getWorkflowAssetModel(
long companyId, long workflowTaskId, Locale locale)
throws PortalException {
Map<String, Serializable> workflowContext = getWorkflowContext(
companyId, workflowTaskId);
String className = GetterUtil.getString(
workflowContext.get(WorkflowConstants.CONTEXT_ENTRY_CLASS_NAME));
WorkflowHandler<?> workflowHandler =
WorkflowHandlerRegistryUtil.getWorkflowHandler(className);
AssetRendererFactory<?> assetRendererFactory =
workflowHandler.getAssetRendererFactory();
long classPK = GetterUtil.getLong(
workflowContext.get(WorkflowConstants.CONTEXT_ENTRY_CLASS_PK));
AssetEntry assetEntry = assetRendererFactory.getAssetEntry(
className, classPK);
WorkflowUserModel workflowUserModel = getWorkflowUserModel(
assetEntry.getUserId());
return new WorkflowAssetModel(assetEntry, locale, workflowUserModel);
}
protected WorkflowAssigneeModel getWorkflowAssigneeModel(
WorkflowTask workflowTask)
throws PortalException {
List<WorkflowTaskAssignee> workflowTaskAssignees =
workflowTask.getWorkflowTaskAssignees();
for (WorkflowTaskAssignee workflowTaskAssignee :
workflowTaskAssignees) {
if (workflowTaskAssignee.getAssigneeClassName().equals(
User.class.getName())) {
User user = _userLocalService.fetchUser(
workflowTaskAssignee.getAssigneeClassPK());
return new WorkflowAssigneeModel(user);
}
else if (workflowTaskAssignee.getAssigneeClassName().equals(
Role.class.getName())) {
Role role = _roleLocalService.fetchRole(
workflowTaskAssignee.getAssigneeClassPK());
return new WorkflowAssigneeModel(role);
}
}
return null;
}
protected Map<String, Serializable> getWorkflowContext(
long companyId, long workflowTaskId)
throws PortalException {
WorkflowInstance workflowInstance = getWorkflowInstance(
companyId, workflowTaskId);
return workflowInstance.getWorkflowContext();
}
protected WorkflowInstance getWorkflowInstance(
long companyId, long workflowTaskId)
throws PortalException {
WorkflowTask workflowTask = _workflowTaskManager.getWorkflowTask(
companyId, workflowTaskId);
return WorkflowInstanceManagerUtil.getWorkflowInstance(
companyId, workflowTask.getWorkflowInstanceId());
}
protected WorkflowUserModel getWorkflowUserModel(long userId)
throws PortalException {
User user = _userLocalService.fetchUser(userId);
if (user != null) {
return new WorkflowUserModel(user);
}
return null;
}
@Reference
private ClassNameLocalService _classNameLocalService;
@Reference
private RoleLocalService _roleLocalService;
@Reference
private UserLocalService _userLocalService;
@Reference
private WorkflowInstanceLinkLocalService _workflowInstanceLinkLocalService;
@Reference
private WorkflowInstanceManager _workflowInstanceManager;
@Reference
private WorkflowTaskManager _workflowTaskManager;
}