private static List<OrganizationalEntity> getExcludedEntities(Task task, UserInfo userInfo) { List<OrganizationalEntity> excluded = ((InternalPeopleAssignments) task.getPeopleAssignments()).getExcludedOwners(); List<OrganizationalEntity> excludedUsers = new ArrayList<>(); for (OrganizationalEntity entity : excluded) { if (entity instanceof Group) { userInfo.getMembersForGroup((Group) entity).forEachRemaining(excludedUsers::add); } } excluded.addAll(excludedUsers); return excluded; }
private static List<OrganizationalEntity> getExcludedEntities(Task task, UserInfo userInfo) { List<OrganizationalEntity> excluded = ((InternalPeopleAssignments) task.getPeopleAssignments()).getExcludedOwners(); List<OrganizationalEntity> excludedUsers = new ArrayList<>(); for (OrganizationalEntity entity : excluded) { if (entity instanceof Group) { userInfo.getMembersForGroup((Group) entity).forEachRemaining(excludedUsers::add); } } excluded.addAll(excludedUsers); return excluded; } }
public void remove(long taskId, String userId) { Task task = persistenceContext.findTask(taskId); User user = persistenceContext.findUser(userId); if (((InternalPeopleAssignments)task.getPeopleAssignments()).getRecipients().contains(user)) { ((InternalPeopleAssignments)task.getPeopleAssignments()).getRecipients().remove(user); } else { throw new RuntimeException("Couldn't remove user " + userId + " since it isn't a notification recipient"); } }
private void initializeTask(Task task){ Status assignedStatus = null; if (task.getPeopleAssignments() != null && task.getPeopleAssignments().getPotentialOwners() != null && task.getPeopleAssignments().getPotentialOwners().size() == 1) { // if there is a single potential owner, assign and set status to Reserved OrganizationalEntity potentialOwner = task.getPeopleAssignments().getPotentialOwners().get(0); // if there is a single potential user owner, assign and set status to Reserved if (potentialOwner instanceof User) { ((InternalTaskData) task.getTaskData()).setActualOwner((User) potentialOwner); assignedStatus = Status.Reserved; } //If there is a group set as potentialOwners, set the status to Ready ?? if (potentialOwner instanceof Group) { assignedStatus = Status.Ready; } } else if (task.getPeopleAssignments() != null && task.getPeopleAssignments().getPotentialOwners() != null && task.getPeopleAssignments().getPotentialOwners().size() > 1) { // multiple potential owners, so set to Ready so one can claim. assignedStatus = Status.Ready; } else { //@TODO: we have no potential owners } if (assignedStatus != null) { ((InternalTaskData) task.getTaskData()).setStatus(assignedStatus); } } }
protected boolean checkUserPermissions(String userId, Task task, TaskContext context) { List<String> usersGroup = context.getUserGroupCallback().getGroupsForUser(userId); usersGroup.add(userId); if (checkUserPermissions(usersGroup, task.getPeopleAssignments().getPotentialOwners())) { return true; } return checkUserPermissions(usersGroup, task.getPeopleAssignments().getBusinessAdministrators()); }
protected InternalPeopleAssignments getNullSafePeopleAssignments(Task task) { InternalPeopleAssignments peopleAssignments = (InternalPeopleAssignments) task.getPeopleAssignments(); if (peopleAssignments == null) { peopleAssignments = (InternalPeopleAssignments) TaskModelProvider.getFactory().newPeopleAssignments(); peopleAssignments.setPotentialOwners(new ArrayList<OrganizationalEntity>()); peopleAssignments.setBusinessAdministrators(new ArrayList<OrganizationalEntity>()); peopleAssignments.setExcludedOwners(new ArrayList<OrganizationalEntity>()); peopleAssignments.setRecipients(new ArrayList<OrganizationalEntity>()); peopleAssignments.setTaskStakeholders(new ArrayList<OrganizationalEntity>()); } return peopleAssignments; }
@Before public void initialize() { when(taskContext.getUserGroupCallback()).thenReturn(userGroupCallback); when(taskContext.getTaskQueryService()).thenReturn(taskQueryService); when(taskQueryService.getTaskInstanceById(TASK_ID)).thenReturn(task); when(task.getPeopleAssignments()).thenReturn(peopleAssignments); command = new GetUserTaskCommand(USER_ID, TASK_ID); }
protected void assertPotentialOwners(Task task, int expectedSize, String... expectedNames) { List<OrganizationalEntity> potentialOwners = task.getPeopleAssignments().getPotentialOwners(); assertThat(potentialOwners).hasSize(expectedSize); if (expectedNames.length > 0) { assertThat(potentialOwners).as("No match for expected potential owner name") .extracting(OrganizationalEntity::getId) .contains(expectedNames); } }
@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()); } } }
public void assignTask(Task task) { List<OrganizationalEntity> potentialOwners = task.getPeopleAssignments().getPotentialOwners(); potentialOwners.clear(); Group group = TaskModelProvider.getFactory().newGroup(); ((InternalOrganizationalEntity) group).setId("Crusaders"); potentialOwners.add(group); } }
@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); }
@Test public void testNominateToGroup() { String str = "(with (new Task()) { priority = 55, taskData = (with( new TaskData()) { } ), "; str += "peopleAssignments = (with ( new PeopleAssignments() ) { businessAdministrators = [ new User('Darth Vader'), new User('Bobba Fet') ] } ),"; str += "name = 'This is my task name'})"; Task task = TaskFactory.evalTask(new StringReader(str)); taskService.addTask(task, new HashMap<String, Object>()); long taskId = task.getId(); List<OrganizationalEntity> potentialGroups = new ArrayList<OrganizationalEntity>(); Group group = TaskModelProvider.getFactory().newGroup(); ((InternalOrganizationalEntity) group).setId("Knights Templer"); potentialGroups.add(group); taskService.nominate(taskId, "Darth Vader", potentialGroups); //shouldn't affect the assignments Task task1 = taskService.getTaskById(taskId); assertTrue(task1.getPeopleAssignments().getPotentialOwners().contains(group)); assertEquals(task1.getTaskData().getStatus(), Status.Ready); }
@Test public void testForwardFromReady() throws Exception { // One potential owner, should go straight to state Reserved String str = "(with (new Task()) { priority = 55, taskData = (with( new TaskData()) { } ), "; str += "peopleAssignments = (with ( new PeopleAssignments() ) { potentialOwners = [new User('Bobba Fet'), new User('Darth Vader') ],businessAdministrators = [ new User('Administrator') ], }),"; str += "name = 'This is my task name' })"; Task task = TaskFactory.evalTask(new StringReader(str)); taskService.addTask(task, new HashMap<String, Object>()); long taskId = task.getId(); // Check is Forwarded taskService.forward(taskId, "Darth Vader", "Tony Stark"); Task task2 = taskService.getTaskById(taskId); assertFalse(task2.getPeopleAssignments().getPotentialOwners().contains(createUser("Darth Vader"))); assertTrue(task2.getPeopleAssignments().getPotentialOwners().contains(createUser("Tony Stark"))); assertNull(task2.getTaskData().getActualOwner()); assertEquals(Status.Ready, task2.getTaskData().getStatus()); }
assertTrue(task1.getPeopleAssignments().getBusinessAdministrators().contains(user)); assertEquals(task1.getTaskData().getStatus(), Status.Created);
@Test public void testDelegateFromReady() throws Exception { // One potential owner, should go straight to state Reserved String str = "(with (new Task()) { priority = 55, taskData = (with( new TaskData()) { } ), "; str += "peopleAssignments = (with ( new PeopleAssignments() ) { potentialOwners = [new User('Bobba Fet'), new User('Darth Vader') ],businessAdministrators = [ new User('Administrator') ], }),"; str += "name = 'This is my task name' })"; Task task = TaskFactory.evalTask(new StringReader(str)); taskService.addTask(task, new HashMap<String, Object>()); long taskId = task.getId(); // Check is Delegated taskService.delegate(taskId, "Darth Vader", "Tony Stark"); Task task2 = taskService.getTaskById(taskId); User user = createUser("Darth Vader"); assertTrue(task2.getPeopleAssignments().getPotentialOwners().contains(user)); user = createUser("Tony Stark"); assertTrue(task2.getPeopleAssignments().getPotentialOwners().contains(user)); assertEquals("Tony Stark", task2.getTaskData().getActualOwner().getId()); // this was checking for ready, but it should be reserved.. it was an old bug assertEquals(Status.Reserved, task2.getTaskData().getStatus()); }
@Test public void testForwardReadyWithBusinessAdministrator() throws Exception { String str = "(with (new Task()) { priority = 55, taskData = (with( new TaskData()) { } ), "; str += "peopleAssignments = (with ( new PeopleAssignments() ) { potentialOwners = [new User('Bobba Fet'), new User('Darth Vader') ],businessAdministrators = [ new User('Administrator') ], }),"; str += "name = 'This is my task name' })"; Task task = TaskFactory.evalTask(new StringReader(str)); taskService.addTask(task, new HashMap<String, Object>()); long taskId = task.getId(); // Ready Task task1 = taskService.getTaskById(taskId); assertEquals(Status.Ready, task1.getTaskData().getStatus()); // Check is Delegated taskService.forward(taskId, "Administrator", "Tony Stark"); Task task2 = taskService.getTaskById(taskId); User user = createUser("Darth Vader"); assertTrue(task2.getPeopleAssignments().getPotentialOwners().contains(user)); user = createUser("Tony Stark"); assertTrue(task2.getPeopleAssignments().getPotentialOwners().contains(user)); assertNull(task2.getTaskData().getActualOwner()); assertEquals(Status.Ready, task2.getTaskData().getStatus()); }
@Test public void testForwardReservedWithBusinessAdministrator() throws Exception { String str = "(with (new Task()) { priority = 55, taskData = (with( new TaskData()) { } ), "; str += "peopleAssignments = (with ( new PeopleAssignments() ) { potentialOwners = [new User('Bobba Fet'), new User('Darth Vader') ],businessAdministrators = [ new User('Administrator') ], }),"; str += "name = 'This is my task name' })"; Task task = TaskFactory.evalTask(new StringReader(str)); taskService.addTask(task, new HashMap<String, Object>()); long taskId = task.getId(); // Claim and Reserved taskService.claim(taskId, "Darth Vader"); Task task1 = taskService.getTaskById(taskId); assertEquals(Status.Reserved, task1.getTaskData().getStatus()); assertEquals("Darth Vader", task1.getTaskData().getActualOwner().getId()); // Check is Delegated taskService.forward(taskId, "Administrator", "Tony Stark"); Task task2 = taskService.getTaskById(taskId); User user = createUser("Darth Vader"); assertTrue(task2.getPeopleAssignments().getPotentialOwners().contains(user)); user = createUser("Tony Stark"); assertTrue(task2.getPeopleAssignments().getPotentialOwners().contains(user)); assertNull(task2.getTaskData().getActualOwner()); assertEquals(Status.Ready, task2.getTaskData().getStatus()); }
@Test public void testForwardFromReserved() throws Exception { // One potential owner, should go straight to state Reserved String str = "(with (new Task()) { priority = 55, taskData = (with( new TaskData()) { } ), "; str += "peopleAssignments = (with ( new PeopleAssignments() ) { potentialOwners = [new User('Bobba Fet'), new User('Darth Vader') ],businessAdministrators = [ new User('Administrator') ], }),"; str += "name = 'This is my task name' })"; Task task = TaskFactory.evalTask(new StringReader(str)); taskService.addTask(task, new HashMap<String, Object>()); long taskId = task.getId(); // Claim and Reserved taskService.claim(taskId, "Darth Vader"); Task task1 = taskService.getTaskById(taskId); assertEquals(Status.Reserved, task1.getTaskData().getStatus()); assertEquals("Darth Vader", task1.getTaskData().getActualOwner().getId()); // Check is Delegated taskService.forward(taskId, "Darth Vader", "Tony Stark"); Task task2 = taskService.getTaskById(taskId); User user = createUser("Darth Vader"); assertFalse(task2.getPeopleAssignments().getPotentialOwners().contains(user)); user = createUser("Tony Stark"); assertTrue(task2.getPeopleAssignments().getPotentialOwners().contains(user)); assertNull(task2.getTaskData().getActualOwner()); assertEquals(Status.Ready, task2.getTaskData().getStatus()); }
public void initialize(Task task) { if( task == null ) { return; } this.id = task.getId(); this.priority = task.getPriority(); this.version = task.getVersion(); this.archived = task.isArchived(); this.subTasksStrategy = ((InternalTask) task).getSubTaskStrategy(); this.peopleAssignments = new JaxbPeopleAssignments(task.getPeopleAssignments()); this.names = convertListFromInterfaceToJaxbImpl(task.getNames(), I18NText.class, JaxbI18NText.class); this.name = ((InternalTask)task).getName(); this.subjects = convertListFromInterfaceToJaxbImpl(task.getSubjects(), I18NText.class, JaxbI18NText.class); this.subject = ((InternalTask)task).getSubject(); this.descriptions = convertListFromInterfaceToJaxbImpl(task.getDescriptions(), I18NText.class, JaxbI18NText.class); this.description = ((InternalTask)task).getDescription(); this.taskType = task.getTaskType(); this.formName = ((InternalTask)task).getFormName(); this.taskData = new JaxbTaskData(task.getTaskData()); }
@Test public void testCompleteWithRestrictedGroups() { // One potential owner, should go straight to state Reserved String str = "(with (new Task()) { priority = 55, taskData = (with( new TaskData()) { } ), "; str += "peopleAssignments = (with ( new PeopleAssignments() ) { potentialOwners = [new Group('analyst'), new Group('Crusaders') ],businessAdministrators = [ new User('Administrator') ], }),"; str += "name = 'This is my task name' })"; Task task = TaskFactory.evalTask(new StringReader(str)); taskService.addTask(task, new HashMap<String, Object>()); long taskId = task.getId(); List<OrganizationalEntity> potOwners = task.getPeopleAssignments().getPotentialOwners(); assertNotNull(potOwners); assertEquals(1, potOwners.size()); assertEquals("Crusaders", potOwners.get(0).getId()); // Go straight from Ready to Inprogress taskService.start(taskId, "Darth Vader"); Task task1 = taskService.getTaskById(taskId); assertEquals(Status.InProgress, task1.getTaskData().getStatus()); assertEquals("Darth Vader", task1.getTaskData().getActualOwner().getId()); // Check is Complete taskService.complete(taskId, "Darth Vader", null); Task task2 = taskService.getTaskById(taskId); assertEquals(Status.Completed, task2.getTaskData().getStatus()); assertEquals("Darth Vader", task2.getTaskData().getActualOwner().getId()); }