/**
* 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.kaleo.runtime.integration.impl.internal;
import com.liferay.portal.kernel.dao.orm.QueryUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.lock.DuplicateLockException;
import com.liferay.portal.kernel.lock.Lock;
import com.liferay.portal.kernel.lock.LockManager;
import com.liferay.portal.kernel.model.Role;
import com.liferay.portal.kernel.model.RoleConstants;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.model.UserGroupGroupRole;
import com.liferay.portal.kernel.model.UserGroupRole;
import com.liferay.portal.kernel.service.RoleLocalService;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.service.UserGroupGroupRoleLocalService;
import com.liferay.portal.kernel.service.UserGroupRoleLocalService;
import com.liferay.portal.kernel.service.UserLocalService;
import com.liferay.portal.kernel.util.ArrayUtil;
import com.liferay.portal.kernel.util.NaturalOrderStringComparator;
import com.liferay.portal.kernel.util.OrderByComparator;
import com.liferay.portal.kernel.workflow.WorkflowConstants;
import com.liferay.portal.kernel.workflow.WorkflowException;
import com.liferay.portal.kernel.workflow.WorkflowTask;
import com.liferay.portal.kernel.workflow.WorkflowTaskManager;
import com.liferay.portal.workflow.kaleo.KaleoWorkflowModelConverter;
import com.liferay.portal.workflow.kaleo.model.KaleoInstanceToken;
import com.liferay.portal.workflow.kaleo.model.KaleoNode;
import com.liferay.portal.workflow.kaleo.model.KaleoTask;
import com.liferay.portal.workflow.kaleo.model.KaleoTaskAssignment;
import com.liferay.portal.workflow.kaleo.model.KaleoTaskInstanceToken;
import com.liferay.portal.workflow.kaleo.model.KaleoTransition;
import com.liferay.portal.workflow.kaleo.runtime.ExecutionContext;
import com.liferay.portal.workflow.kaleo.runtime.KaleoSignaler;
import com.liferay.portal.workflow.kaleo.runtime.TaskManager;
import com.liferay.portal.workflow.kaleo.runtime.assignment.TaskAssignmentSelector;
import com.liferay.portal.workflow.kaleo.runtime.assignment.TaskAssignmentSelectorRegistry;
import com.liferay.portal.workflow.kaleo.runtime.util.WorkflowContextUtil;
import com.liferay.portal.workflow.kaleo.runtime.util.comparator.KaleoTaskInstanceTokenOrderByComparator;
import com.liferay.portal.workflow.kaleo.service.KaleoTaskAssignmentLocalService;
import com.liferay.portal.workflow.kaleo.service.KaleoTaskInstanceTokenLocalService;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
/**
* @author Michael C. Han
* @author Marcellus Tavares
*/
@Component(
immediate = true, property = {"proxy.bean=false"},
service = WorkflowTaskManager.class
)
public class WorkflowTaskManagerImpl implements WorkflowTaskManager {
@Override
public WorkflowTask assignWorkflowTaskToRole(
long companyId, long userId, long workflowTaskInstanceId,
long roleId, String comment, Date dueDate,
Map<String, Serializable> workflowContext)
throws WorkflowException {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(companyId);
serviceContext.setUserId(userId);
return _taskManager.assignWorkflowTaskToRole(
workflowTaskInstanceId, roleId, comment, dueDate, workflowContext,
serviceContext);
}
@Override
public WorkflowTask assignWorkflowTaskToUser(
long companyId, long userId, long workflowTaskInstanceId,
long assigneeUserId, String comment, Date dueDate,
Map<String, Serializable> workflowContext)
throws WorkflowException {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(companyId);
serviceContext.setUserId(userId);
return _taskManager.assignWorkflowTaskToUser(
workflowTaskInstanceId, assigneeUserId, comment, dueDate,
workflowContext, serviceContext);
}
@Override
public WorkflowTask completeWorkflowTask(
long companyId, long userId, long workflowTaskInstanceId,
String transitionName, String comment,
Map<String, Serializable> workflowContext)
throws WorkflowException {
Lock lock = null;
try {
lock = lockManager.lock(
userId, WorkflowTask.class.getName(), workflowTaskInstanceId,
String.valueOf(userId), false, 1000);
}
catch (PortalException pe) {
if (pe instanceof DuplicateLockException) {
throw new WorkflowException(
"Workflow task " + workflowTaskInstanceId +
" is locked by user " + userId,
pe);
}
throw new WorkflowException(
"Unable to lock workflow task " + workflowTaskInstanceId, pe);
}
try {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(companyId);
serviceContext.setUserId(userId);
WorkflowTask workflowTask = _taskManager.completeWorkflowTask(
workflowTaskInstanceId, transitionName, comment,
workflowContext, serviceContext);
KaleoTaskInstanceToken kaleoTaskInstanceToken =
_kaleoTaskInstanceTokenLocalService.getKaleoTaskInstanceToken(
workflowTask.getWorkflowTaskId());
KaleoInstanceToken kaleoInstanceToken =
kaleoTaskInstanceToken.getKaleoInstanceToken();
if (workflowContext == null) {
workflowContext = WorkflowContextUtil.convert(
kaleoInstanceToken.getKaleoInstance().getWorkflowContext());
}
workflowContext.put(
WorkflowConstants.CONTEXT_TASK_COMMENTS, comment);
workflowContext.put(
WorkflowConstants.CONTEXT_TRANSITION_NAME, transitionName);
ExecutionContext executionContext = new ExecutionContext(
kaleoInstanceToken, kaleoTaskInstanceToken, workflowContext,
serviceContext);
_kaleoSignaler.signalExit(transitionName, executionContext);
return workflowTask;
}
catch (Exception e) {
throw new WorkflowException("Unable to complete task", e);
}
finally {
lockManager.unlock(lock.getClassName(), lock.getKey());
}
}
@Override
public WorkflowTask fetchWorkflowTask(
long companyId, long workflowTaskInstanceId)
throws WorkflowException {
KaleoTaskInstanceToken kaleoTaskInstanceToken =
_kaleoTaskInstanceTokenLocalService.fetchKaleoTaskInstanceToken(
workflowTaskInstanceId);
if (kaleoTaskInstanceToken == null) {
return null;
}
try {
return _kaleoWorkflowModelConverter.toWorkflowTask(
kaleoTaskInstanceToken,
WorkflowContextUtil.convert(
kaleoTaskInstanceToken.getWorkflowContext()));
}
catch (Exception e) {
throw new WorkflowException(e);
}
}
@Override
public List<String> getNextTransitionNames(
long companyId, long userId, long workflowTaskInstanceId)
throws WorkflowException {
try {
KaleoTaskInstanceToken kaleoTaskInstanceToken =
_kaleoTaskInstanceTokenLocalService.getKaleoTaskInstanceToken(
workflowTaskInstanceId);
if (kaleoTaskInstanceToken.isCompleted()) {
return Collections.emptyList();
}
KaleoTask kaleoTask = kaleoTaskInstanceToken.getKaleoTask();
KaleoNode kaleoNode = kaleoTask.getKaleoNode();
List<KaleoTransition> kaleoTransitions =
kaleoNode.getKaleoTransitions();
List<String> transitionNames = new ArrayList<>(
kaleoTransitions.size());
for (KaleoTransition kaleoTransition : kaleoTransitions) {
transitionNames.add(kaleoTransition.getName());
}
return transitionNames;
}
catch (Exception e) {
throw new WorkflowException(e);
}
}
@Override
public long[] getPooledActorsIds(
long companyId, long workflowTaskInstanceId)
throws WorkflowException {
try {
KaleoTaskInstanceToken kaleoTaskInstanceToken =
_kaleoTaskInstanceTokenLocalService.getKaleoTaskInstanceToken(
workflowTaskInstanceId);
List<KaleoTaskAssignment> calculatedKaleoTaskAssignments =
getCalculatedKaleoTaskAssignments(kaleoTaskInstanceToken);
Set<User> users = new HashSet<>();
for (KaleoTaskAssignment calculatedKaleoTaskAssignment :
calculatedKaleoTaskAssignments) {
populateUsers(
calculatedKaleoTaskAssignment, kaleoTaskInstanceToken,
users);
}
Map<String, Long> pooledActors = new TreeMap<>(
new NaturalOrderStringComparator());
for (User user : users) {
pooledActors.put(user.getFullName(), user.getUserId());
}
return ArrayUtil.toLongArray(pooledActors.values());
}
catch (Exception e) {
throw new WorkflowException(e);
}
}
@Override
public WorkflowTask getWorkflowTask(
long companyId, long workflowTaskInstanceId)
throws WorkflowException {
try {
KaleoTaskInstanceToken kaleoTaskInstanceToken =
_kaleoTaskInstanceTokenLocalService.getKaleoTaskInstanceToken(
workflowTaskInstanceId);
return _kaleoWorkflowModelConverter.toWorkflowTask(
kaleoTaskInstanceToken,
WorkflowContextUtil.convert(
kaleoTaskInstanceToken.getWorkflowContext()));
}
catch (Exception e) {
throw new WorkflowException(e);
}
}
@Override
public int getWorkflowTaskCount(long companyId, Boolean completed)
throws WorkflowException {
try {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(companyId);
return _kaleoTaskInstanceTokenLocalService.
getKaleoTaskInstanceTokensCount(completed, serviceContext);
}
catch (Exception e) {
throw new WorkflowException(e);
}
}
@Override
public int getWorkflowTaskCountByRole(
long companyId, long roleId, Boolean completed)
throws WorkflowException {
try {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(companyId);
return _kaleoTaskInstanceTokenLocalService.
getKaleoTaskInstanceTokensCount(
Role.class.getName(), roleId, completed, serviceContext);
}
catch (Exception e) {
throw new WorkflowException(e);
}
}
@Override
public int getWorkflowTaskCountBySubmittingUser(
long companyId, long userId, Boolean completed)
throws WorkflowException {
try {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(companyId);
return _kaleoTaskInstanceTokenLocalService.
getSubmittingUserKaleoTaskInstanceTokensCount(
userId, completed, serviceContext);
}
catch (Exception e) {
throw new WorkflowException(e);
}
}
@Override
public int getWorkflowTaskCountByUser(
long companyId, long userId, Boolean completed)
throws WorkflowException {
try {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(companyId);
serviceContext.setUserId(userId);
return _kaleoTaskInstanceTokenLocalService.
getKaleoTaskInstanceTokensCount(
User.class.getName(), serviceContext.getUserId(), completed,
serviceContext);
}
catch (Exception e) {
throw new WorkflowException(e);
}
}
@Override
public int getWorkflowTaskCountByUserRoles(
long companyId, long userId, Boolean completed)
throws WorkflowException {
try {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(companyId);
serviceContext.setUserId(userId);
return _kaleoTaskInstanceTokenLocalService.searchCount(
null, completed, Boolean.TRUE, serviceContext);
}
catch (Exception e) {
throw new WorkflowException(e);
}
}
@Override
public int getWorkflowTaskCountByWorkflowInstance(
long companyId, Long userId, long workflowInstanceId,
Boolean completed)
throws WorkflowException {
try {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(companyId);
if (userId != null) {
serviceContext.setUserId(userId);
}
return _kaleoTaskInstanceTokenLocalService.
getKaleoTaskInstanceTokensCount(
workflowInstanceId, completed, serviceContext);
}
catch (Exception e) {
throw new WorkflowException(e);
}
}
@Override
public List<WorkflowTask> getWorkflowTasks(
long companyId, Boolean completed, int start, int end,
OrderByComparator<WorkflowTask> orderByComparator)
throws WorkflowException {
try {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(companyId);
List<KaleoTaskInstanceToken> kaleoTaskInstanceTokens =
_kaleoTaskInstanceTokenLocalService.getKaleoTaskInstanceTokens(
completed, start, end,
KaleoTaskInstanceTokenOrderByComparator.
getOrderByComparator(
orderByComparator, _kaleoWorkflowModelConverter),
serviceContext);
return toWorkflowTasks(kaleoTaskInstanceTokens);
}
catch (Exception e) {
throw new WorkflowException(e);
}
}
@Override
public List<WorkflowTask> getWorkflowTasksByRole(
long companyId, long roleId, Boolean completed, int start, int end,
OrderByComparator<WorkflowTask> orderByComparator)
throws WorkflowException {
try {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(companyId);
List<KaleoTaskInstanceToken> kaleoTaskInstanceTokens =
_kaleoTaskInstanceTokenLocalService.getKaleoTaskInstanceTokens(
Role.class.getName(), roleId, completed, start, end,
KaleoTaskInstanceTokenOrderByComparator.
getOrderByComparator(
orderByComparator, _kaleoWorkflowModelConverter),
serviceContext);
return toWorkflowTasks(kaleoTaskInstanceTokens);
}
catch (Exception e) {
throw new WorkflowException(e);
}
}
@Override
public List<WorkflowTask> getWorkflowTasksBySubmittingUser(
long companyId, long userId, Boolean completed, int start, int end,
OrderByComparator<WorkflowTask> orderByComparator)
throws WorkflowException {
try {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(companyId);
List<KaleoTaskInstanceToken> kaleoTaskInstanceTokens =
_kaleoTaskInstanceTokenLocalService.
getSubmittingUserKaleoTaskInstanceTokens(
userId, completed, start, end,
KaleoTaskInstanceTokenOrderByComparator.
getOrderByComparator(
orderByComparator,
_kaleoWorkflowModelConverter),
serviceContext);
return toWorkflowTasks(kaleoTaskInstanceTokens);
}
catch (Exception e) {
throw new WorkflowException(e);
}
}
@Override
public List<WorkflowTask> getWorkflowTasksByUser(
long companyId, long userId, Boolean completed, int start, int end,
OrderByComparator<WorkflowTask> orderByComparator)
throws WorkflowException {
try {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(companyId);
List<KaleoTaskInstanceToken> kaleoTaskInstanceTokens =
_kaleoTaskInstanceTokenLocalService.getKaleoTaskInstanceTokens(
User.class.getName(), userId, completed, start, end,
KaleoTaskInstanceTokenOrderByComparator.
getOrderByComparator(
orderByComparator, _kaleoWorkflowModelConverter),
serviceContext);
return toWorkflowTasks(kaleoTaskInstanceTokens);
}
catch (Exception e) {
throw new WorkflowException(e);
}
}
@Override
public List<WorkflowTask> getWorkflowTasksByUserRoles(
long companyId, long userId, Boolean completed, int start, int end,
OrderByComparator<WorkflowTask> orderByComparator)
throws WorkflowException {
try {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(companyId);
serviceContext.setUserId(userId);
List<KaleoTaskInstanceToken> kaleoTaskInstanceTokens =
_kaleoTaskInstanceTokenLocalService.search(
null, completed, Boolean.TRUE, start, end,
KaleoTaskInstanceTokenOrderByComparator.
getOrderByComparator(
orderByComparator, _kaleoWorkflowModelConverter),
serviceContext);
return toWorkflowTasks(kaleoTaskInstanceTokens);
}
catch (Exception e) {
throw new WorkflowException(e);
}
}
@Override
public List<WorkflowTask> getWorkflowTasksByWorkflowInstance(
long companyId, Long userId, long workflowInstanceId,
Boolean completed, int start, int end,
OrderByComparator<WorkflowTask> orderByComparator)
throws WorkflowException {
try {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(companyId);
if (userId != null) {
serviceContext.setUserId(userId);
}
List<KaleoTaskInstanceToken> kaleoTaskInstanceTokens =
_kaleoTaskInstanceTokenLocalService.getKaleoTaskInstanceTokens(
workflowInstanceId, completed, start, end,
KaleoTaskInstanceTokenOrderByComparator.
getOrderByComparator(
orderByComparator, _kaleoWorkflowModelConverter),
serviceContext);
return toWorkflowTasks(kaleoTaskInstanceTokens);
}
catch (Exception e) {
throw new WorkflowException(e);
}
}
@Override
public boolean hasOtherAssignees(long workflowTaskInstanceId, long userId)
throws WorkflowException {
try {
KaleoTaskInstanceToken kaleoTaskInstanceToken =
_kaleoTaskInstanceTokenLocalService.getKaleoTaskInstanceToken(
workflowTaskInstanceId);
ExecutionContext executionContext = createExecutionContext(
kaleoTaskInstanceToken);
List<KaleoTaskAssignment> configuredKaleoTaskAssignments =
_kaleoTaskAssignmentLocalService.getKaleoTaskAssignments(
kaleoTaskInstanceToken.getKaleoTaskId());
for (KaleoTaskAssignment configuredKaleoTaskAssignment :
configuredKaleoTaskAssignments) {
Collection<KaleoTaskAssignment> calculatedKaleoTaskAssignments =
getKaleoTaskAssignments(
configuredKaleoTaskAssignment, executionContext);
for (KaleoTaskAssignment calculatedKaleoTaskAssignment :
calculatedKaleoTaskAssignments) {
if (hasOtherPooledActors(
calculatedKaleoTaskAssignment,
kaleoTaskInstanceToken, userId)) {
return true;
}
}
}
return false;
}
catch (Exception e) {
throw new WorkflowException(e);
}
}
@Override
public List<WorkflowTask> search(
long companyId, long userId, String keywords, Boolean completed,
Boolean searchByUserRoles, int start, int end,
OrderByComparator<WorkflowTask> orderByComparator)
throws WorkflowException {
try {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(companyId);
serviceContext.setUserId(userId);
List<KaleoTaskInstanceToken> kaleoTaskInstanceTokens =
_kaleoTaskInstanceTokenLocalService.search(
keywords, completed, searchByUserRoles, start, end,
KaleoTaskInstanceTokenOrderByComparator.
getOrderByComparator(
orderByComparator, _kaleoWorkflowModelConverter),
serviceContext);
return toWorkflowTasks(kaleoTaskInstanceTokens);
}
catch (Exception e) {
throw new WorkflowException(e);
}
}
@Override
public List<WorkflowTask> search(
long companyId, long userId, String taskName, String assetType,
Long[] assetPrimaryKey, Date dueDateGT, Date dueDateLT,
Boolean completed, Boolean searchByUserRoles, boolean andOperator,
int start, int end,
OrderByComparator<WorkflowTask> orderByComparator)
throws WorkflowException {
try {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(companyId);
serviceContext.setUserId(userId);
List<KaleoTaskInstanceToken> kaleoTaskInstanceTokens =
_kaleoTaskInstanceTokenLocalService.search(
taskName, assetType, assetPrimaryKey, dueDateGT, dueDateLT,
completed, searchByUserRoles, andOperator, start, end,
KaleoTaskInstanceTokenOrderByComparator.
getOrderByComparator(
orderByComparator, _kaleoWorkflowModelConverter),
serviceContext);
return toWorkflowTasks(kaleoTaskInstanceTokens);
}
catch (Exception e) {
throw new WorkflowException(e);
}
}
@Override
public List<WorkflowTask> search(
long companyId, long userId, String keywords, String[] assetTypes,
Boolean completed, Boolean searchByUserRoles, int start, int end,
OrderByComparator<WorkflowTask> orderByComparator)
throws WorkflowException {
try {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(companyId);
serviceContext.setUserId(userId);
List<KaleoTaskInstanceToken> kaleoTaskInstanceTokens =
_kaleoTaskInstanceTokenLocalService.search(
keywords, assetTypes, completed, searchByUserRoles, start,
end,
KaleoTaskInstanceTokenOrderByComparator.
getOrderByComparator(
orderByComparator, _kaleoWorkflowModelConverter),
serviceContext);
return toWorkflowTasks(kaleoTaskInstanceTokens);
}
catch (Exception e) {
throw new WorkflowException(e);
}
}
@Override
public int searchCount(
long companyId, long userId, String keywords, Boolean completed,
Boolean searchByUserRoles)
throws WorkflowException {
try {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(companyId);
serviceContext.setUserId(userId);
return _kaleoTaskInstanceTokenLocalService.searchCount(
keywords, completed, searchByUserRoles, serviceContext);
}
catch (Exception e) {
throw new WorkflowException(e);
}
}
@Override
public int searchCount(
long companyId, long userId, String taskName, String assetType,
Long[] assetPrimaryKey, Date dueDateGT, Date dueDateLT,
Boolean completed, Boolean searchByUserRoles, boolean andOperator)
throws WorkflowException {
try {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(companyId);
serviceContext.setUserId(userId);
return _kaleoTaskInstanceTokenLocalService.searchCount(
taskName, assetType, assetPrimaryKey, dueDateGT, dueDateLT,
completed, searchByUserRoles, andOperator, serviceContext);
}
catch (Exception e) {
throw new WorkflowException(e);
}
}
@Override
public int searchCount(
long companyId, long userId, String keywords, String[] assetTypes,
Boolean completed, Boolean searchByUserRoles)
throws WorkflowException {
try {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(companyId);
serviceContext.setUserId(userId);
return _kaleoTaskInstanceTokenLocalService.searchCount(
keywords, assetTypes, completed, searchByUserRoles,
serviceContext);
}
catch (Exception e) {
throw new WorkflowException(e);
}
}
@Override
public WorkflowTask updateDueDate(
long companyId, long userId, long workflowTaskInstanceId,
String comment, Date dueDate)
throws WorkflowException {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(companyId);
serviceContext.setUserId(userId);
return _taskManager.updateDueDate(
workflowTaskInstanceId, comment, dueDate, serviceContext);
}
protected ExecutionContext createExecutionContext(
KaleoTaskInstanceToken kaleoTaskInstanceToken)
throws PortalException {
KaleoInstanceToken kaleoInstanceToken =
kaleoTaskInstanceToken.getKaleoInstanceToken();
Map<String, Serializable> workflowContext = WorkflowContextUtil.convert(
kaleoTaskInstanceToken.getWorkflowContext());
ServiceContext workflowContextServiceContext =
(ServiceContext)workflowContext.get(
WorkflowConstants.CONTEXT_SERVICE_CONTEXT);
return new ExecutionContext(
kaleoInstanceToken, workflowContext, workflowContextServiceContext);
}
protected List<KaleoTaskAssignment> getCalculatedKaleoTaskAssignments(
KaleoTaskInstanceToken kaleoTaskInstanceToken)
throws PortalException {
List<KaleoTaskAssignment> calculatedKaleoTaskAssignments =
new ArrayList<>();
ExecutionContext executionContext = createExecutionContext(
kaleoTaskInstanceToken);
List<KaleoTaskAssignment> configuredKaleoTaskAssignments =
_kaleoTaskAssignmentLocalService.getKaleoTaskAssignments(
kaleoTaskInstanceToken.getKaleoTaskId());
for (KaleoTaskAssignment configuredKaleoTaskAssignment :
configuredKaleoTaskAssignments) {
calculatedKaleoTaskAssignments.addAll(
getKaleoTaskAssignments(
configuredKaleoTaskAssignment, executionContext));
}
return calculatedKaleoTaskAssignments;
}
protected Collection<KaleoTaskAssignment> getKaleoTaskAssignments(
KaleoTaskAssignment kaleoTaskAssignment,
ExecutionContext executionContext)
throws PortalException {
String assigneeClassName = kaleoTaskAssignment.getAssigneeClassName();
TaskAssignmentSelector taskAssignmentSelector =
_taskAssignmentSelectorRegistry.getTaskAssignmentSelector(
assigneeClassName);
return taskAssignmentSelector.calculateTaskAssignments(
kaleoTaskAssignment, executionContext);
}
protected boolean hasOtherPooledActors(
KaleoTaskAssignment kaleoTaskAssignment,
KaleoTaskInstanceToken kaleoTaskInstanceToken, long userId)
throws PortalException {
String assigneeClassName = kaleoTaskAssignment.getAssigneeClassName();
long assigneeClassPK = kaleoTaskAssignment.getAssigneeClassPK();
if (assigneeClassName.equals(User.class.getName())) {
if (userId == assigneeClassPK) {
return false;
}
User user = _userLocalService.fetchUser(assigneeClassPK);
if (user != null) {
return true;
}
return false;
}
Role role = _roleLocalService.getRole(assigneeClassPK);
if ((role.getType() == RoleConstants.TYPE_SITE) ||
(role.getType() == RoleConstants.TYPE_ORGANIZATION)) {
List<UserGroupRole> userGroupRoles =
_userGroupRoleLocalService.getUserGroupRolesByGroupAndRole(
kaleoTaskInstanceToken.getGroupId(), assigneeClassPK);
for (UserGroupRole userGroupRole : userGroupRoles) {
if (userGroupRole.getUserId() != userId) {
return true;
}
}
List<UserGroupGroupRole> userGroupGroupRoles =
_userGroupGroupRoleLocalService.
getUserGroupGroupRolesByGroupAndRole(
kaleoTaskInstanceToken.getGroupId(), assigneeClassPK);
for (UserGroupGroupRole userGroupGroupRole : userGroupGroupRoles) {
List<User> userGroupUsers = _userLocalService.getUserGroupUsers(
userGroupGroupRole.getUserGroupId());
for (User user : userGroupUsers) {
if (user.getUserId() != userId) {
return true;
}
}
}
}
else {
List<User> inheritedRoleUsers =
_userLocalService.getInheritedRoleUsers(
assigneeClassPK, QueryUtil.ALL_POS, QueryUtil.ALL_POS,
null);
for (User user : inheritedRoleUsers) {
if (user.getUserId() != userId) {
return true;
}
}
}
return false;
}
protected void populateUsers(
KaleoTaskAssignment kaleoTaskAssignment,
KaleoTaskInstanceToken kaleoTaskInstanceToken, Set<User> users)
throws PortalException {
String assigneeClassName = kaleoTaskAssignment.getAssigneeClassName();
long assigneeClassPK = kaleoTaskAssignment.getAssigneeClassPK();
if (assigneeClassName.equals(User.class.getName())) {
User user = _userLocalService.fetchUser(assigneeClassPK);
if (user != null) {
users.add(user);
}
return;
}
Role role = _roleLocalService.getRole(assigneeClassPK);
if ((role.getType() == RoleConstants.TYPE_SITE) ||
(role.getType() == RoleConstants.TYPE_ORGANIZATION)) {
List<UserGroupRole> userGroupRoles =
_userGroupRoleLocalService.getUserGroupRolesByGroupAndRole(
kaleoTaskInstanceToken.getGroupId(), assigneeClassPK);
for (UserGroupRole userGroupRole : userGroupRoles) {
User user = userGroupRole.getUser();
users.add(user);
}
List<UserGroupGroupRole> userGroupGroupRoles =
_userGroupGroupRoleLocalService.
getUserGroupGroupRolesByGroupAndRole(
kaleoTaskInstanceToken.getGroupId(), assigneeClassPK);
for (UserGroupGroupRole userGroupGroupRole : userGroupGroupRoles) {
List<User> userGroupUsers = _userLocalService.getUserGroupUsers(
userGroupGroupRole.getUserGroupId());
users.addAll(userGroupUsers);
}
}
else {
List<User> inheritedRoleUsers =
_userLocalService.getInheritedRoleUsers(
assigneeClassPK, QueryUtil.ALL_POS, QueryUtil.ALL_POS,
null);
users.addAll(inheritedRoleUsers);
}
}
protected List<WorkflowTask> toWorkflowTasks(
List<KaleoTaskInstanceToken> kaleoTaskInstanceTokens)
throws PortalException {
List<WorkflowTask> workflowTasks = new ArrayList<>(
kaleoTaskInstanceTokens.size());
for (KaleoTaskInstanceToken kaleoTaskInstanceToken :
kaleoTaskInstanceTokens) {
WorkflowTask workflowTask =
_kaleoWorkflowModelConverter.toWorkflowTask(
kaleoTaskInstanceToken,
WorkflowContextUtil.convert(
kaleoTaskInstanceToken.getWorkflowContext()));
workflowTasks.add(workflowTask);
}
return workflowTasks;
}
@Reference
protected LockManager lockManager;
@Reference
private KaleoSignaler _kaleoSignaler;
@Reference
private KaleoTaskAssignmentLocalService _kaleoTaskAssignmentLocalService;
@Reference
private KaleoTaskInstanceTokenLocalService
_kaleoTaskInstanceTokenLocalService;
@Reference
private KaleoWorkflowModelConverter _kaleoWorkflowModelConverter;
@Reference
private RoleLocalService _roleLocalService;
@Reference
private TaskAssignmentSelectorRegistry _taskAssignmentSelectorRegistry;
@Reference
private TaskManager _taskManager;
@Reference
private UserGroupGroupRoleLocalService _userGroupGroupRoleLocalService;
@Reference
private UserGroupRoleLocalService _userGroupRoleLocalService;
@Reference
private UserLocalService _userLocalService;
}