use of org.kie.internal.task.api.TaskPersistenceContext in project jbpm by kiegroup.
the class JPATaskLifeCycleEventListener method afterTaskStartedEvent.
@Override
public void afterTaskStartedEvent(TaskEvent event) {
String userId = event.getTaskContext().getUserId();
Task ti = event.getTask();
TaskPersistenceContext persistenceContext = getPersistenceContext(((TaskContext) event.getTaskContext()).getPersistenceContext());
try {
persistenceContext.persist(new TaskEventImpl(ti.getId(), org.kie.internal.task.api.model.TaskEvent.TaskEventType.STARTED, ti.getTaskData().getProcessInstanceId(), ti.getTaskData().getWorkItemId(), userId));
AuditTaskImpl auditTaskImpl = getAuditTask(event, persistenceContext, ti);
if (auditTaskImpl == null) {
logger.warn("Unable find audit task entry for task id {} '{}', skipping audit task update", ti.getId(), ti.getName());
return;
}
auditTaskImpl.setStatus(ti.getTaskData().getStatus().name());
auditTaskImpl.setActualOwner(getActualOwner(ti));
auditTaskImpl.setLastModificationDate(event.getEventDate());
persistenceContext.merge(auditTaskImpl);
} finally {
cleanup(persistenceContext);
}
}
use of org.kie.internal.task.api.TaskPersistenceContext in project jbpm by kiegroup.
the class JPATaskLifeCycleEventListener method afterTaskAddedEvent.
@Override
public void afterTaskAddedEvent(TaskEvent event) {
String userId = event.getTaskContext().getUserId();
Task ti = event.getTask();
TaskPersistenceContext persistenceContext = getPersistenceContext(((TaskContext) event.getTaskContext()).getPersistenceContext());
try {
if (ti.getTaskData().getProcessId() != null) {
userId = ti.getTaskData().getProcessId();
}
AuditTaskImpl auditTaskImpl = new AuditTaskImpl(ti.getId(), ti.getName(), ti.getTaskData().getStatus().name(), ti.getTaskData().getActivationTime(), (ti.getTaskData().getActualOwner() != null) ? ti.getTaskData().getActualOwner().getId() : "", ti.getDescription(), ti.getPriority(), (ti.getTaskData().getCreatedBy() != null) ? ti.getTaskData().getCreatedBy().getId() : "", ti.getTaskData().getCreatedOn(), ti.getTaskData().getExpirationTime(), ti.getTaskData().getProcessInstanceId(), ti.getTaskData().getProcessId(), ti.getTaskData().getProcessSessionId(), ti.getTaskData().getDeploymentId(), ti.getTaskData().getParentId(), ti.getTaskData().getWorkItemId());
persistenceContext.persist(auditTaskImpl);
persistenceContext.persist(new TaskEventImpl(ti.getId(), org.kie.internal.task.api.model.TaskEvent.TaskEventType.ADDED, ti.getTaskData().getProcessInstanceId(), ti.getTaskData().getWorkItemId(), userId));
} finally {
cleanup(persistenceContext);
}
}
use of org.kie.internal.task.api.TaskPersistenceContext in project jbpm by kiegroup.
the class JPATaskLifeCycleEventListener method afterTaskClaimedEvent.
@Override
public void afterTaskClaimedEvent(TaskEvent event) {
String userId = event.getTaskContext().getUserId();
Task ti = event.getTask();
TaskPersistenceContext persistenceContext = getPersistenceContext(((TaskContext) event.getTaskContext()).getPersistenceContext());
try {
persistenceContext.persist(new TaskEventImpl(ti.getId(), org.kie.internal.task.api.model.TaskEvent.TaskEventType.CLAIMED, ti.getTaskData().getProcessInstanceId(), ti.getTaskData().getWorkItemId(), userId));
AuditTaskImpl auditTaskImpl = getAuditTask(event, persistenceContext, ti);
if (auditTaskImpl == null) {
logger.warn("Unable find audit task entry for task id {} '{}', skipping audit task update", ti.getId(), ti.getName());
return;
}
auditTaskImpl.setStatus(ti.getTaskData().getStatus().name());
auditTaskImpl.setActualOwner(getActualOwner(ti));
auditTaskImpl.setDescription(ti.getDescription());
auditTaskImpl.setLastModificationDate(event.getEventDate());
persistenceContext.merge(auditTaskImpl);
} finally {
cleanup(persistenceContext);
}
}
use of org.kie.internal.task.api.TaskPersistenceContext in project jbpm by kiegroup.
the class TaskCountLoadCalculator method getUserTaskLoads.
@Override
public Collection<UserTaskLoad> getUserTaskLoads(List<User> users, TaskContext context) {
Collection<UserTaskLoad> userTaskLoads = new ArrayList<>();
List<String> userIds = users.stream().map(user -> {
return user.getId();
}).collect(Collectors.toList());
TaskPersistenceContext persistenceContext = ((org.jbpm.services.task.commands.TaskContext) context).getPersistenceContext();
Map<String, Object> params = new HashMap<>();
params.put("owners", userIds);
logger.debug("DB query to be used for finding assignments :: '{}'", getMultiUserQuery());
List<AssignmentImpl> assignments = persistenceContext.queryStringWithParametersInTransaction(getMultiUserQuery(), params, ClassUtil.<List<AssignmentImpl>>castClass(List.class));
Map<String, AssignmentImpl> assignmentMap = assignments.stream().collect(Collectors.toMap(assignKey, (assign) -> assign));
if (assignments != null && !assignments.isEmpty()) {
users.forEach(usr -> {
String uid = usr.getId();
if (assignmentMap.containsKey(uid)) {
Long loadValue = assignmentMap.get(uid).getCurrentlyAssigned();
userTaskLoads.add(new UserTaskLoad(getIdentifier(), usr, new Double(loadValue != null ? loadValue : 0)));
} else {
userTaskLoads.add(new UserTaskLoad(getIdentifier(), usr, new Double(0)));
}
});
} else {
users.forEach(u -> {
userTaskLoads.add(new UserTaskLoad(getIdentifier(), u, new Double(0)));
});
}
return userTaskLoads;
}
use of org.kie.internal.task.api.TaskPersistenceContext in project jbpm by kiegroup.
the class PotentialOwnerBusynessAssignmentStrategy method apply.
@Override
public Assignment apply(Task task, TaskContext context, String excludedUser) {
if (task.getPeopleAssignments().getPotentialOwners().isEmpty()) {
logger.debug("No potential owners in the task {} can't auto assign", task);
return null;
}
List<OrganizationalEntity> potentialOwners = new ArrayList<>(task.getPeopleAssignments().getPotentialOwners());
Set<String> resolvedUsers = new TreeSet<>(Collections.reverseOrder());
List<OrganizationalEntity> excludedOwners = ((InternalPeopleAssignments) task.getPeopleAssignments()).getExcludedOwners();
potentialOwners.stream().filter(po -> po instanceof User && !excludedOwners.contains(po)).forEach(po -> resolvedUsers.add(po.getId()));
UserInfo userInfo = (UserInfo) ((org.jbpm.services.task.commands.TaskContext) context).get(EnvironmentName.TASK_USER_INFO);
if (userInfo != null) {
logger.debug("Groups going to be resolved by {}", userInfo);
potentialOwners.stream().filter(po -> po instanceof Group && !excludedOwners.contains(po)).forEach(po -> {
Iterator<OrganizationalEntity> usersOfGroup = userInfo.getMembersForGroup((Group) po);
if (usersOfGroup != null) {
while (usersOfGroup.hasNext()) {
OrganizationalEntity entity = usersOfGroup.next();
if (!excludedOwners.contains(entity)) {
resolvedUsers.add(entity.getId());
}
}
}
});
}
logger.debug("Resolved users eligible for task {} assignments are {}", task, resolvedUsers);
if (excludedUser != null) {
logger.debug("Removing excluded user {} from the list of eligible users", excludedUser);
resolvedUsers.remove(excludedUser);
}
TaskPersistenceContext persistenceContext = ((org.jbpm.services.task.commands.TaskContext) context).getPersistenceContext();
Map<String, Object> params = new HashMap<>();
params.put("owners", resolvedUsers);
logger.debug("DB query to be used for finding assignments :: '{}'", getQuery());
List<Assignment> assignments = persistenceContext.queryStringWithParametersInTransaction(getQuery(), params, ClassUtil.<List<Assignment>>castClass(List.class));
if (assignments.size() < resolvedUsers.size()) {
logger.debug("Not all eligible users found in db, adding missing bits (eligible {}, found in db {})", resolvedUsers, assignments);
// in case not all users have already assigned tasks added them to the list so can get the tasks
resolvedUsers.forEach(user -> {
Assignment assignment = new AssignmentImpl(user);
if (!assignments.contains(assignment)) {
// always add missing users to the top of the list so they get assigned first
assignments.add(0, assignment);
}
});
}
if (assignments.isEmpty()) {
logger.debug("No assignments found for task {}", task);
return null;
}
logger.debug("Following assignments {} were found for task {}", assignments, task);
// select first from the top of the list as it has the least assigned tasks
Assignment selected = assignments.get(0);
logger.debug("Retruning first of found assignments {}", selected);
return new Assignment(selected.getUser());
}
Aggregations