Refine search
@Override public void afterTaskForwardedEvent(TaskEvent event) { String userId = event.getTaskContext().getUserId(); Task ti = event.getTask(); StringBuilder message = new StringBuilder(); String entitiesAsString = (ti.getPeopleAssignments().getPotentialOwners()).stream().map(oe -> oe.getId()).collect(Collectors.joining(",")); message.append("Forward to [" + entitiesAsString + "]"); TaskEventImpl taskEvent = new TaskEventImpl(ti.getId(), org.kie.internal.task.api.model.TaskEvent.TaskEventType.FORWARDED, ti.getTaskData().getProcessInstanceId(), ti.getTaskData().getWorkItemId(), userId, message.toString()); AuditTaskImpl auditTaskImpl = createAuditTask(ti, event.getEventDate()); auditTaskImpl.setDescription(ti.getDescription()); auditTaskImpl.setName(ti.getName()); auditTaskImpl.setActivationTime(ti.getTaskData().getActivationTime()); auditTaskImpl.setPriority(ti.getPriority()); auditTaskImpl.setDueDate(ti.getTaskData().getExpirationTime()); auditTaskImpl.setStatus(ti.getTaskData().getStatus().name()); auditTaskImpl.setActualOwner(getActualOwner(ti)); auditTaskImpl.setLastModificationDate(event.getEventDate()); sendMessage(new AuditTaskData(auditTaskImpl, taskEvent), 4); }
public static void writeOrganizationalEntityList(List<OrganizationalEntity> list, ObjectOutput out) throws IOException { out.writeInt( list.size() ); for( OrganizationalEntity item : list ) { if ( item instanceof User ) { out.writeShort( 0 ); } else { out.writeShort( 1 ); } item.writeExternal( out ); } }
@Test //JBPM-4291 public void testSetDeadlinesNotCompletedReassignWithGroups() { WorkItem workItem = new WorkItemImpl(); workItem.setParameter("NotCompletedReassign", "[users:john|groups:sales]@[4h]"); @SuppressWarnings("unchecked") Deadlines deadlines = HumanTaskHandlerHelper.setDeadlines(workItem.getParameters(), Collections.EMPTY_LIST, null); assertNotNull(deadlines); assertEquals(1, deadlines.getEndDeadlines().size()); assertEquals(0, deadlines.getStartDeadlines().size()); assertEquals(1, deadlines.getEndDeadlines().get(0).getEscalations().size()); assertEquals(1, deadlines.getEndDeadlines().get(0).getEscalations().get(0).getReassignments().size()); assertEquals(0, deadlines.getEndDeadlines().get(0).getEscalations().get(0).getNotifications().size()); // verify reassignment Reassignment reassignment = deadlines.getEndDeadlines().get(0).getEscalations().get(0).getReassignments().get(0); assertEquals(2, reassignment.getPotentialOwners().size()); assertEquals("john", reassignment.getPotentialOwners().get(0).getId()); assertEquals("sales", reassignment.getPotentialOwners().get(1).getId()); // check deadline expiration time assertNotNull(deadlines.getEndDeadlines().get(0).getDate()); long expirationTime = deadlines.getEndDeadlines().get(0).getDate().getTime() - System.currentTimeMillis(); assertEquals(4, roundExpirationTime(expirationTime)); }
@Test public void testAssignGroups() { String groupId = "Software Developers, Project Managers"; Task task = TaskModelProvider.getFactory().newTask(); PeopleAssignments peopleAssignments = peopleAssignmentHelper.getNullSafePeopleAssignments(task); WorkItem workItem = new WorkItemImpl(); workItem.setParameter(PeopleAssignmentHelper.GROUP_ID, groupId); peopleAssignmentHelper.assignGroups(workItem, peopleAssignments); OrganizationalEntity organizationalEntity1 = peopleAssignments.getPotentialOwners().get(0); assertTrue(organizationalEntity1 instanceof Group); assertEquals("Software Developers", organizationalEntity1.getId()); OrganizationalEntity organizationalEntity2 = peopleAssignments.getPotentialOwners().get(1); assertTrue(organizationalEntity2 instanceof Group); assertEquals("Project Managers", organizationalEntity2.getId()); }
Task task = (InternalTask) TaskFactory.evalTask(reader, vars); taskService.addTask(task, new HashMap<String, Object>()); long taskId = task.getId(); List<OrganizationalEntity> potentialOwners = (List<OrganizationalEntity>) task.getPeopleAssignments().getPotentialOwners(); List<String> ids = new ArrayList<String>(potentialOwners.size()); for (OrganizationalEntity entity : potentialOwners) { ids.add(entity.getId()); assertThat(task.getTaskData().getStatus()).isEqualTo(Status.Ready); potentialOwners = (List<OrganizationalEntity>) task.getPeopleAssignments().getPotentialOwners(); ids.add(entity.getId());
break; String entitiesAsString = entities.stream().map(oe -> oe.getId()).collect(Collectors.joining(",")); message.append(entitiesAsString); message.append(messageSufix); TaskEventImpl taskEvent = new TaskEventImpl(task.getId(), org.kie.internal.task.api.model.TaskEvent.TaskEventType.UPDATED, task.getTaskData().getProcessInstanceId(), task.getTaskData().getWorkItemId(), userId, message.toString());
@Override public void abortWorkItem(WorkItem workItem, WorkItemManager manager) { Task task = taskService.getTaskByWorkItemId(workItem.getId()); if (task != null) { try { String adminUser = ADMIN_USER; List<OrganizationalEntity> businessAdmins = task.getPeopleAssignments().getBusinessAdministrators(); for (OrganizationalEntity admin : businessAdmins) { if (admin instanceof Group) { continue; } if (!admin.getId().equals(ADMIN_USER)) { adminUser = admin.getId(); break; } } logger.debug("Task {} is going to be exited by {} who is business admin", task.getId(), adminUser); taskService.exit(task.getId(), adminUser); } catch (PermissionDeniedException e) { logger.info(e.getMessage()); } } }
protected String safeOrgEntity(OrganizationalEntity entity) { if (entity != null) { return entity.getId(); } return null; }
@Test public void testAssignBusinessAdministratorsChangedDefaults() { peopleAssignmentHelper = new PeopleAssignmentHelper("myadmin", "mygroup"); Task task = TaskModelProvider.getFactory().newTask(); PeopleAssignments peopleAssignments = peopleAssignmentHelper.getNullSafePeopleAssignments(task); WorkItem workItem = new WorkItemImpl(); peopleAssignmentHelper.assignBusinessAdministrators(workItem, peopleAssignments); assertEquals(2, peopleAssignments.getBusinessAdministrators().size()); OrganizationalEntity organizationalEntity1 = peopleAssignments.getBusinessAdministrators().get(0); assertTrue(organizationalEntity1 instanceof User); assertEquals("myadmin", organizationalEntity1.getId()); OrganizationalEntity organizationalEntity2 = peopleAssignments.getBusinessAdministrators().get(1); assertTrue(organizationalEntity2 instanceof Group); assertEquals("mygroup", organizationalEntity2.getId()); }
private static String getActors(Task task) { User actualOwner = task.getTaskData().getActualOwner(); if (actualOwner != null) { return actualOwner.getId(); } else { String result = ""; for (OrganizationalEntity o: task.getPeopleAssignments().getPotentialOwners()) { if (result.length() != 0) { result += ","; } result += o.getId(); } return result; } }
@Override public Assignment apply(Task task, TaskContext taskContext, String excludedUser) { UserInfo userInfo = (UserInfo) ((org.jbpm.services.task.commands.TaskContext)taskContext).get(EnvironmentName.TASK_USER_INFO); List<OrganizationalEntity> excluded = (getExcludedEntities(task, userInfo)); // Get the the users from the task's the potential owners, making sure that excluded users are not included List<OrganizationalEntity> potentialOwners = task.getPeopleAssignments().getPotentialOwners().stream() .filter(oe -> oe instanceof User && !excluded.contains(oe) && !oe.getId().equals(excludedUser)) .collect(Collectors.toList()); // Get the users belonging to groups that are potential owners task.getPeopleAssignments().getPotentialOwners().stream().filter(oe -> oe instanceof Group) .forEach(oe -> { Iterator<OrganizationalEntity> groupUsers = userInfo.getMembersForGroup((Group)oe); if (groupUsers != null) { groupUsers.forEachRemaining(user -> { if (user != null && !excluded.contains(user) && !potentialOwners.contains(user) && !user.getId().equals(excludedUser)) { potentialOwners.add(user); } }); } }); logger.debug("Asking the load calculator [{}] for task loads for the users {}",calculator.getIdentifier(),potentialOwners); List<User> users = potentialOwners.stream().map(entityToUser).collect(Collectors.toList()); Collection<UserTaskLoad> loads = calculator.getUserTaskLoads(users, taskContext); UserTaskLoad lightestLoad = loads.stream().min(UserTaskLoad::compareTo).orElse(null); return lightestLoad != null ? new Assignment(lightestLoad.getUser().getId()):null; }
@Test public void testSetDeadlinesNotStartedReassignWithGroups() { WorkItem workItem = new WorkItemImpl(); workItem.setParameter("NotStartedReassign", "[users:john|groups:sales]@[4h]"); @SuppressWarnings("unchecked") Deadlines deadlines = HumanTaskHandlerHelper.setDeadlines(workItem.getParameters(), Collections.EMPTY_LIST, null); assertNotNull(deadlines); assertEquals(1, deadlines.getStartDeadlines().size()); assertEquals(0, deadlines.getEndDeadlines().size()); assertEquals(1, deadlines.getStartDeadlines().get(0).getEscalations().size()); assertEquals(1, deadlines.getStartDeadlines().get(0).getEscalations().get(0).getReassignments().size()); assertEquals(0, deadlines.getStartDeadlines().get(0).getEscalations().get(0).getNotifications().size()); // verify reassignment Reassignment reassignment = deadlines.getStartDeadlines().get(0).getEscalations().get(0).getReassignments().get(0); assertEquals(2, reassignment.getPotentialOwners().size()); assertEquals("john", reassignment.getPotentialOwners().get(0).getId()); assertEquals("sales", reassignment.getPotentialOwners().get(1).getId()); // check deadline expiration time assertNotNull(deadlines.getStartDeadlines().get(0).getDate()); long expirationTime = deadlines.getStartDeadlines().get(0).getDate().getTime() - System.currentTimeMillis(); assertEquals(4, roundExpirationTime(expirationTime)); }
String recipientId = "mary,steve"; WorkItem workItem = new WorkItemImpl(); workItem.setParameter(PeopleAssignmentHelper.ACTOR_ID, actorId); workItem.setParameter(PeopleAssignmentHelper.TASKSTAKEHOLDER_ID, taskStakeholderId); workItem.setParameter(PeopleAssignmentHelper.BUSINESSADMINISTRATOR_ID, businessAdministratorId); workItem.setParameter(PeopleAssignmentHelper.BUSINESSADMINISTRATOR_GROUP_ID, businessAdministratorGroupId); workItem.setParameter(PeopleAssignmentHelper.EXCLUDED_OWNER_ID, excludedOwnerId); assertEquals("espiegelberg", potentialOwners.get(0).getId()); assertEquals("john", potentialOwners.get(1).getId()); assertEquals("Administrator", businessAdministrators.get(0).getId()); assertEquals("Administrators", businessAdministrators.get(1).getId()); assertEquals("drbug", businessAdministrators.get(2).getId()); assertEquals("peter", businessAdministrators.get(3).getId()); assertEquals("Super users", businessAdministrators.get(4).getId()); assertEquals("Flow administrators", businessAdministrators.get(5).getId()); assertEquals("drmary", taskStakehoders.get(0).getId()); assertEquals("krisv", taskStakehoders.get(1).getId()); assertEquals("john", excludedOwners.get(0).getId()); assertEquals("poul", excludedOwners.get(1).getId()); assertEquals("mary", recipients.get(0).getId()); assertEquals("steve", recipients.get(1).getId());
Task task = (Task) TaskFactory.evalTask(reader, vars); taskService.addTask(task, new HashMap<String, Object>()); long taskId = task.getId(); List<OrganizationalEntity> potentialOwners = (List<OrganizationalEntity>) task.getPeopleAssignments().getPotentialOwners(); List<String> ids = new ArrayList<String>(potentialOwners.size()); for (OrganizationalEntity entity : potentialOwners) { ids.add(entity.getId()); assertEquals(Status.Ready, task.getTaskData().getStatus()); potentialOwners = (List<OrganizationalEntity>) task.getPeopleAssignments().getPotentialOwners(); ids.add(entity.getId());
break; String entitiesAsString = entities.stream().map(oe -> oe.getId()).collect(Collectors.joining(",")); message.append(entitiesAsString); message.append(messageSufix); persistenceContext.persist(new TaskEventImpl(task.getId(), org.kie.internal.task.api.model.TaskEvent.TaskEventType.UPDATED, task.getTaskData().getProcessInstanceId(), task.getTaskData().getWorkItemId(), userId, message.toString()));
@Override public void abortWorkItem(WorkItem workItem, WorkItemManager manager) { RuntimeEngine runtime = runtimeManager.getRuntimeEngine(ProcessInstanceIdContext.get(workItem.getProcessInstanceId())); Task task = runtime.getTaskService().getTaskByWorkItemId(workItem.getId()); if (task != null) { try { String adminUser = ADMIN_USER; List<OrganizationalEntity> businessAdmins = task.getPeopleAssignments().getBusinessAdministrators(); for (OrganizationalEntity admin : businessAdmins) { if (admin instanceof Group) { continue; } if (!admin.getId().equals(ADMIN_USER)) { adminUser = admin.getId(); break; } } logger.debug("Task {} is going to be exited by {} who is business admin", task.getId(), adminUser); runtime.getTaskService().exit(task.getId(), adminUser); } catch (PermissionDeniedException e) { logger.info(e.getMessage()); } } }
@Test public void testAssignBusinessAdministratorsChangedDefaults() { peopleAssignmentHelper = new PeopleAssignmentHelper("myadmin", "mygroup"); Task task = TaskModelProvider.getFactory().newTask(); PeopleAssignments peopleAssignments = peopleAssignmentHelper.getNullSafePeopleAssignments(task); WorkItem workItem = new WorkItemImpl(); peopleAssignmentHelper.assignBusinessAdministrators(workItem, peopleAssignments); assertEquals(2, peopleAssignments.getBusinessAdministrators().size()); OrganizationalEntity organizationalEntity1 = peopleAssignments.getBusinessAdministrators().get(0); assertTrue(organizationalEntity1 instanceof User); assertEquals("myadmin", organizationalEntity1.getId()); OrganizationalEntity organizationalEntity2 = peopleAssignments.getBusinessAdministrators().get(1); assertTrue(organizationalEntity2 instanceof Group); assertEquals("mygroup", organizationalEntity2.getId()); }
@Override public Assignment apply(Task task, TaskContext taskContext, String excludedUser) { UserInfo userInfo = (UserInfo) ((org.jbpm.services.task.commands.TaskContext) taskContext).get(EnvironmentName.TASK_USER_INFO); List<OrganizationalEntity> excluded = getExcludedEntities(task, userInfo); // Get the the users from the task's the potential owners List<OrganizationalEntity> potentialOwners = task.getPeopleAssignments().getPotentialOwners().stream() .filter(oe -> oe instanceof User && !excluded.contains(oe)) .collect(Collectors.toList()); // Get the users belonging to groups that are potential owners task.getPeopleAssignments().getPotentialOwners().stream().filter(oe -> oe instanceof Group) .forEach(oe -> { Iterator<OrganizationalEntity> groupUsers = userInfo.getMembersForGroup((Group) oe); if (groupUsers != null) { groupUsers.forEachRemaining(user -> { if (user != null && !excluded.contains(user) && !potentialOwners.contains(user)) { potentialOwners.add(user); } }); } }); if (excludedUser != null) { logger.debug("Removing excluded user {} from the list of eligible users", excludedUser); potentialOwners.removeIf(entity -> entity.getId().equals(excludedUser)); } String queueName = getQueueName(task); CircularQueue<OrganizationalEntity> mappedQueue = synchronizedQueue(queueName, potentialOwners); OrganizationalEntity owner = mappedQueue.take(); return new Assignment(owner.getId()); }
@Test public void testSetDeadlinesNotCompletedReassign() { WorkItem workItem = new WorkItemImpl(); workItem.setParameter("NotCompletedReassign", "[users:john]@[4h]"); @SuppressWarnings("unchecked") Deadlines deadlines = HumanTaskHandlerHelper.setDeadlines(workItem.getParameters(), Collections.EMPTY_LIST, null); assertNotNull(deadlines); assertEquals(1, deadlines.getEndDeadlines().size()); assertEquals(0, deadlines.getStartDeadlines().size()); assertEquals(1, deadlines.getEndDeadlines().get(0).getEscalations().size()); assertEquals(1, deadlines.getEndDeadlines().get(0).getEscalations().get(0).getReassignments().size()); assertEquals(0, deadlines.getEndDeadlines().get(0).getEscalations().get(0).getNotifications().size()); // verify reassignment Reassignment reassignment = deadlines.getEndDeadlines().get(0).getEscalations().get(0).getReassignments().get(0); assertEquals(1, reassignment.getPotentialOwners().size()); assertEquals("john", reassignment.getPotentialOwners().get(0).getId()); // check deadline expiration time assertNotNull(deadlines.getEndDeadlines().get(0).getDate()); long expirationTime = deadlines.getEndDeadlines().get(0).getDate().getTime() - System.currentTimeMillis(); assertEquals(4, roundExpirationTime(expirationTime)); }