use of org.activiti.engine.task.TaskQuery in project midpoint by Evolveum.
the class WorkItemProvider method createTaskQuery.
// primitive 'query interpreter'
// returns null if no results should be returned
private TaskQuery createTaskQuery(ObjectQuery query, boolean includeVariables, Collection<SelectorOptions<GetOperationOptions>> options, OperationResult result) throws SchemaException {
FilterComponents components = factorOutQuery(query, F_ASSIGNEE_REF, F_CANDIDATE_REF, F_EXTERNAL_ID);
List<ObjectFilter> remainingClauses = components.getRemainderClauses();
if (!remainingClauses.isEmpty()) {
throw new SchemaException("Unsupported clause(s) in search filter: " + remainingClauses);
}
final ItemPath WORK_ITEM_ID_PATH = new ItemPath(F_EXTERNAL_ID);
final ItemPath ASSIGNEE_PATH = new ItemPath(F_ASSIGNEE_REF);
final ItemPath CANDIDATE_PATH = new ItemPath(F_CANDIDATE_REF);
final ItemPath CREATED_PATH = new ItemPath(WorkItemType.F_CREATE_TIMESTAMP);
final Map.Entry<ItemPath, Collection<? extends PrismValue>> workItemIdFilter = components.getKnownComponent(WORK_ITEM_ID_PATH);
final Map.Entry<ItemPath, Collection<? extends PrismValue>> assigneeFilter = components.getKnownComponent(ASSIGNEE_PATH);
final Map.Entry<ItemPath, Collection<? extends PrismValue>> candidateRolesFilter = components.getKnownComponent(CANDIDATE_PATH);
TaskQuery taskQuery = activitiEngine.getTaskService().createTaskQuery();
if (workItemIdFilter != null) {
Collection<? extends PrismValue> filterValues = workItemIdFilter.getValue();
if (filterValues.size() > 1) {
throw new IllegalArgumentException("In a query there must be exactly one value for workItemId: " + filterValues);
}
taskQuery = taskQuery.taskId(((PrismPropertyValue<String>) filterValues.iterator().next()).getValue());
}
if (assigneeFilter != null) {
taskQuery = addAssigneesToQuery(taskQuery, assigneeFilter);
}
if (candidateRolesFilter != null) {
// TODO what about candidate users? (currently these are not supported)
List<String> candidateGroups = MiscDataUtil.prismRefsToStrings((Collection<PrismReferenceValue>) candidateRolesFilter.getValue());
if (!candidateGroups.isEmpty()) {
taskQuery = taskQuery.taskCandidateGroupIn(candidateGroups);
} else {
// no groups -> no result
return null;
}
}
if (query != null && query.getPaging() != null) {
ObjectPaging paging = query.getPaging();
if (paging.getOrderingInstructions().size() > 1) {
throw new UnsupportedOperationException("Ordering by more than one property is not supported: " + paging.getOrderingInstructions());
} else if (paging.getOrderingInstructions().size() == 1) {
ItemPath orderBy = paging.getOrderBy();
if (CREATED_PATH.equivalent(orderBy)) {
taskQuery = taskQuery.orderByTaskCreateTime();
} else {
throw new UnsupportedOperationException("Ordering by " + orderBy + " is not currently supported");
}
switch(paging.getDirection()) {
case DESCENDING:
taskQuery = taskQuery.desc();
break;
case ASCENDING:
default:
taskQuery = taskQuery.asc();
break;
}
}
}
if (includeVariables) {
return taskQuery.includeTaskLocalVariables().includeProcessVariables();
} else {
return taskQuery;
}
}
use of org.activiti.engine.task.TaskQuery in project CzechIdMng by bcvsolutions.
the class DefaultWorkflowTaskInstanceService method internalSearch.
private PageImpl<WorkflowTaskInstanceDto> internalSearch(WorkflowFilterDto filter, Pageable pageable) {
// if currently logged user can read all task continue
if (!canReadAllTask()) {
// if user can't read all task check filter
if (filter.getCandidateOrAssigned() == null) {
filter.setCandidateOrAssigned(securityService.getCurrentId().toString());
} else {
IdmIdentityDto identity = (IdmIdentityDto) lookupService.lookupDto(IdmIdentityDto.class, filter.getCandidateOrAssigned());
if (!identity.getId().equals(securityService.getCurrentId())) {
throw new ResultCodeException(CoreResultCode.FORBIDDEN, "You do not have permission for access to all tasks!");
}
}
// else is filled candidate and it is equals currently logged user
}
String processDefinitionId = filter.getProcessDefinitionId();
Map<String, Object> equalsVariables = filter.getEqualsVariables();
TaskQuery query = taskService.createTaskQuery();
query.active();
query.includeProcessVariables();
if (processDefinitionId != null) {
query.processDefinitionId(processDefinitionId);
}
if (filter.getProcessDefinitionKey() != null) {
query.processDefinitionKey(filter.getProcessDefinitionKey());
}
if (filter.getProcessInstanceId() != null) {
query.processInstanceId(filter.getProcessInstanceId());
}
if (filter.getId() != null) {
query.taskId(filter.getId().toString());
}
if (filter.getCreatedAfter() != null) {
query.taskCreatedAfter(filter.getCreatedAfter().toDate());
}
if (filter.getCreatedBefore() != null) {
query.taskCreatedBefore(filter.getCreatedBefore().toDate());
}
if (equalsVariables != null) {
for (Entry<String, Object> entry : equalsVariables.entrySet()) {
query.processVariableValueEquals(entry.getKey(), entry.getValue());
}
}
if (filter.getCandidateOrAssigned() != null) {
BaseDto dto = lookupService.lookupDto(IdmIdentityDto.class, filter.getCandidateOrAssigned());
Assert.notNull(dto);
query.taskCandidateOrAssigned(String.valueOf(dto.getId()));
}
query.orderByTaskCreateTime();
query.desc();
long count = query.count();
// it's possible that pageable is null
List<Task> tasks = null;
if (pageable == null) {
tasks = query.list();
} else {
tasks = query.listPage((pageable.getPageNumber()) * pageable.getPageSize(), pageable.getPageSize());
}
List<WorkflowTaskInstanceDto> dtos = new ArrayList<>();
if (tasks != null) {
for (Task task : tasks) {
dtos.add(toResource(task));
}
}
return new PageImpl<WorkflowTaskInstanceDto>(dtos, pageable, count);
}
use of org.activiti.engine.task.TaskQuery in project daijie-example by daijiejay.
the class BaseService method getProcessById.
@Override
public ModelResult<PageResult<Map<String, Object>>> getProcessById(Integer id) {
List<Map<String, Object>> rows = new ArrayList<>();
PageResult<Map<String, Object>> datas = new PageResult<>();
TaskQuery query = taskService.createTaskQuery().processInstanceId(id.toString());
List<Task> tasks = query.list();
tasks.forEach(task -> {
Map<String, Object> row = new HashMap<>();
row.put("taskId", task.getId());
row.put("taskName", task.getName());
row.put("assignee", task.getAssignee());
row.put("category", task.getCategory());
row.put("createTime", task.getCreateTime());
row.put("delegationState", task.getDelegationState());
row.put("description", task.getDescription());
row.put("dueDate", task.getDueDate());
row.put("executionId", task.getExecutionId());
row.put("formKey", task.getFormKey());
row.put("owner", task.getOwner());
row.put("parentTaskId", task.getParentTaskId());
row.put("priority", task.getPriority());
row.put("processDefinitionId", task.getProcessDefinitionId());
row.put("processInstanceId", task.getProcessInstanceId());
row.put("taskDefinitionKey", task.getTaskDefinitionKey());
rows.add(row);
});
datas.setTotal(query.count());
datas.setRows(rows);
return Result.build(datas);
}
use of org.activiti.engine.task.TaskQuery in project daijie-example by daijiejay.
the class BaseService method getProcessByOperator.
@Override
public ModelResult<PageResult<Map<String, Object>>> getProcessByOperator(String assignee) {
List<Map<String, Object>> rows = new ArrayList<>();
PageResult<Map<String, Object>> datas = new PageResult<>();
TaskQuery query = taskService.createTaskQuery().taskAssignee(assignee);
List<Task> tasks = query.list();
tasks.forEach(task -> {
Map<String, Object> taskVariables = taskService.getVariables(task.getId());
Map<String, Object> row = new HashMap<>();
row.put("taskId", task.getId());
row.put("taskName", task.getName());
row.put("assignee", task.getAssignee());
row.put("category", task.getCategory());
row.put("createTime", task.getCreateTime());
row.put("delegationState", task.getDelegationState());
row.put("description", task.getDescription());
row.put("dueDate", task.getDueDate());
row.put("executionId", task.getExecutionId());
row.put("formKey", task.getFormKey());
row.put("owner", task.getOwner());
row.put("parentTaskId", task.getParentTaskId());
row.put("priority", task.getPriority());
row.put("processDefinitionId", task.getProcessDefinitionId());
row.put("processInstanceId", task.getProcessInstanceId());
row.put("taskDefinitionKey", task.getTaskDefinitionKey());
row.put("checkUserId", taskVariables.get("checkUserId"));
rows.add(row);
});
datas.setTotal(query.count());
datas.setRows(rows);
return Result.build(datas);
}
use of org.activiti.engine.task.TaskQuery in project carbon-business-process by wso2.
the class UserSubstitutionUtils method bulkReassign.
/**
* Reassign the given tasks or all the tasks if the given task list is null, to the given substitute
* @param assignee - original user of the tasks
* @param substitute - user who getting assigned
* @param taskList - list of tasks to reassign. Leave this null to reassign all tha tasks of the assignee.
*/
public static void bulkReassign(String assignee, String substitute, List<String> taskList) {
if (taskList != null) {
// reassign the given tasks
reassignFromTaskIdsList(taskList, substitute);
} else {
// reassign all existing tasks for assignee
TaskQuery taskQuery = BPMNServerHolder.getInstance().getEngine().getTaskService().createTaskQuery();
taskQuery.taskAssignee(assignee);
reassignFromTasksList(taskQuery.list(), substitute);
transformUnclaimedTasks(assignee, substitute);
}
// should mark bulk reassign done
}
Aggregations