@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; }
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()); }
public JaxbPeopleAssignments(PeopleAssignments peopleAssignments) { User taskInitiatorUser = peopleAssignments.getTaskInitiator(); if( taskInitiatorUser != null ) { this.taskInitiatorId = taskInitiatorUser.getId(); } this.businessAdministrators = convertListFromInterfaceToJaxbImpl(((InternalPeopleAssignments) peopleAssignments).getBusinessAdministrators(), OrganizationalEntity.class, JaxbOrganizationalEntity.class); this.excludedOwners = convertListFromInterfaceToJaxbImpl(((InternalPeopleAssignments) peopleAssignments).getExcludedOwners(), OrganizationalEntity.class, JaxbOrganizationalEntity.class); this.potentialOwners = convertListFromInterfaceToJaxbImpl(((InternalPeopleAssignments) peopleAssignments).getPotentialOwners(), OrganizationalEntity.class, JaxbOrganizationalEntity.class); this.recipients = convertListFromInterfaceToJaxbImpl(((InternalPeopleAssignments) peopleAssignments).getRecipients(), OrganizationalEntity.class, JaxbOrganizationalEntity.class); this.taskStakeholders = convertListFromInterfaceToJaxbImpl(((InternalPeopleAssignments) peopleAssignments).getTaskStakeholders(), OrganizationalEntity.class, JaxbOrganizationalEntity.class); }
@Test(expected = PermissionDeniedException.class) public void testUserWithoutPermission() { when(userGroupCallback.getGroupsForUser(USER_ID)).thenReturn(new ArrayList<String>()); when(peopleAssignments.getBusinessAdministrators()).thenReturn(new ArrayList<OrganizationalEntity>()); command.execute(taskContext); fail(); } }
final User initiator = task.getPeopleAssignments().getTaskInitiator(); if (initiator != null && initiator.getId().equals(userId)) { return true; final List<OrganizationalEntity> potentialOwners = task.getPeopleAssignments().getPotentialOwners(); if (potentialOwners != null && (isUserInList(potentialOwners, userId) || isGroupInList(potentialOwners, groups))) { return true; final List<OrganizationalEntity> businessAdministrators = task.getPeopleAssignments().getBusinessAdministrators(); if (businessAdministrators != null && (isUserInList(businessAdministrators, userId) || isGroupInList(businessAdministrators, groups))) { return true;
@Test public void testUserOnBusinessAdministratorGroups() { List<String> userGroups = new ArrayList<>(); userGroups.add("admin"); when(userGroupCallback.getGroupsForUser(USER_ID)).thenReturn(userGroups); List<OrganizationalEntity> admins = new ArrayList<>(); admins.add(new GroupImpl("admin")); when(peopleAssignments.getBusinessAdministrators()).thenReturn(admins); Task commandTask = command.execute(taskContext); assertEquals(task, commandTask); }
genTask.setPeopleAssignments(genPeepAssigns); List<org.kie.remote.jaxb.gen.OrganizationalEntity> genOrgEntList = convertKieOrgEntListToGenOrgEntList(kiePeepAssigns .getBusinessAdministrators()); if( genOrgEntList != null ) { genPeepAssigns.getBusinessAdministrators().addAll(genOrgEntList); genOrgEntList = convertKieOrgEntListToGenOrgEntList(kiePeepAssigns.getPotentialOwners()); if( genOrgEntList != null ) { genPeepAssigns.getPotentialOwners().addAll(genOrgEntList); org.kie.remote.jaxb.gen.OrganizationalEntity genOrgEnt = convertKieOrgEntToGenOrgEnt(kiePeepAssigns.getTaskInitiator()); if( genOrgEnt != null ) { genPeepAssigns.setTaskInitiatorId(genOrgEnt.getId());
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); } } }
private void postInit(Object result) { if (result instanceof Task) { Task task = (Task) result; if (task != null && !eagerDisabled) { task.getNames().size(); task.getDescriptions().size(); task.getSubjects().size(); task.getPeopleAssignments().getBusinessAdministrators().size(); task.getPeopleAssignments().getPotentialOwners().size(); ((InternalPeopleAssignments) task.getPeopleAssignments()).getRecipients().size(); ((InternalPeopleAssignments) task.getPeopleAssignments()).getExcludedOwners().size(); ((InternalPeopleAssignments) task.getPeopleAssignments()).getTaskStakeholders().size(); task.getTaskData().getAttachments().size(); task.getTaskData().getComments().size(); ((InternalTask)task).getDeadlines().getStartDeadlines().size(); ((InternalTask)task).getDeadlines().getEndDeadlines().size(); if (((InternalTask)task).getDelegation() != null) { ((InternalTask)task).getDelegation().getDelegates().size(); } } } else if (result instanceof Collection<?>) { ((Collection<?>) result).size(); } }
@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()); } } }
InternalPeopleAssignments peopleAssignments = (InternalPeopleAssignments) TaskModelProvider.getFactory().newPeopleAssignments(); if (jaxbPeopleAssignments.getTaskInitiator() != null) { User user = createUser(this.getPeopleAssignments().getTaskInitiator().getId()); peopleAssignments.setTaskInitiator(user);
@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()); }
operationAllowed = !isExcludedOwner && isAllowed(user, groupIds, (List<OrganizationalEntity>) task.getPeopleAssignments().getPotentialOwners()); break; operationAllowed = isAllowed(user, groupIds, (List<OrganizationalEntity>) task.getPeopleAssignments().getBusinessAdministrators()); break; operationAllowed = task.getPeopleAssignments().getPotentialOwners().contains(user);
public static void rescheduleDeadlinesForTask(final InternalTask task, TaskContext taskContext, DeadlineType ...types) { Environment environment = taskContext.getTaskContentService().getMarshallerContext(task).getEnvironment(); TaskPersistenceContext persistenceContext = taskContext.getPersistenceContext(); taskContext.loadTaskVariables(task); PeopleAssignments peopleAssignments = task.getPeopleAssignments(); List<OrganizationalEntity> businessAdministrators = peopleAssignments.getBusinessAdministrators(); List<DeadlineType> deadlineTypes = Arrays.asList(types); Deadlines deadlines = HumanTaskHandlerHelper.setDeadlines(task.getTaskData().getTaskInputVariables(), businessAdministrators, environment); if(deadlineTypes.contains(DeadlineType.START)) { for(Deadline deadline : deadlines.getStartDeadlines()) { task.getDeadlines().getStartDeadlines().add(deadline); persistenceContext.persistDeadline(deadline); } } if(deadlineTypes.contains(DeadlineType.END)) { for(Deadline deadline : deadlines.getEndDeadlines()) { task.getDeadlines().getEndDeadlines().add(deadline); persistenceContext.persistDeadline(deadline); } } persistenceContext.updateTask(task); scheduleDeadlinesForTask(task, taskContext, types); }
@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();
this.activationTime = source.getTaskData().getActivationTime(); this.actualOwner = safeOrgEntity(source.getTaskData().getActualOwner()); this.businessAdmins = source.getPeopleAssignments().getBusinessAdministrators() .stream() .map(entity -> safeOrgEntity(entity)) this.outputData = source.getTaskData().getTaskOutputVariables(); this.parentId = source.getTaskData().getParentId(); this.potentialOwners = source.getPeopleAssignments().getPotentialOwners() .stream() .map(entity -> safeOrgEntity(entity))
@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()); } } }
@SuppressWarnings("unchecked") protected void assignGroups(WorkItem workItem, PeopleAssignments peopleAssignments) { List<OrganizationalEntity> potentialOwners = peopleAssignments.getPotentialOwners(); Object groupIds = adjustParam(workItem.getParameter(GROUP_ID), groupFilter); if (groupIds instanceof Collection) { processPeopleAssignments((Collection<OrganizationalEntity>)groupIds, potentialOwners); } else { processPeopleAssignments((String)groupIds, potentialOwners, false); } }
List<OrganizationalEntity> potentialOwners = task.getPeopleAssignments().getPotentialOwners(); assertEquals(1, potentialOwners.size()); assertEquals(actorId, potentialOwners.get(0).getId()); List<OrganizationalEntity> businessAdministrators = task.getPeopleAssignments().getBusinessAdministrators(); assertEquals(4, businessAdministrators.size()); assertEquals("Administrator", businessAdministrators.get(0).getId());
@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()); }