Search in sources :

Example 71 with User

use of org.kie.api.task.model.User in project jbpm by kiegroup.

the class MVELLifeCycleManager method assignOwnerAndStatus.

/**
 * This method will potentially assign the actual owner of this TaskData and set the status
 * of the data.
 * <li>If there is only 1 potential owner, and it is a <code>User</code>, that will become the actual
 * owner of the TaskData and the status will be set to <code>Status.Reserved</code>.</li>
 * <li>f there is only 1 potential owner, and it is a <code>Group</code>,  no owner will be assigned
 * and the status will be set to <code>Status.Ready</code>.</li>
 * <li>If there are more than 1 potential owners, the status will be set to <code>Status.Ready</code>.</li>
 * <li>otherwise, the task data will be unchanged</li>
 *
 * @param taskdata - task data
 * @param potentialOwners - list of potential owners
 * @return current status of task data
 */
public static Status assignOwnerAndStatus(InternalTaskData taskData, List<OrganizationalEntity> potentialOwners) {
    if (taskData.getStatus() != Status.Created) {
        throw new PermissionDeniedException("Can only assign task owner if status is Created!");
    }
    Status assignedStatus = null;
    if (potentialOwners.size() == 1) {
        // if there is a single potential owner, assign and set status to Reserved
        OrganizationalEntity potentialOwner = potentialOwners.get(0);
        // if there is a single potential user owner, assign and set status to Reserved
        if (potentialOwner instanceof User) {
            taskData.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 (potentialOwners.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) {
        taskData.setStatus(assignedStatus);
    } else {
        // status wasn't assigned, so just return the currrent status
        assignedStatus = taskData.getStatus();
    }
    return assignedStatus;
}
Also used : Status(org.kie.api.task.model.Status) Group(org.kie.api.task.model.Group) User(org.kie.api.task.model.User) OrganizationalEntity(org.kie.api.task.model.OrganizationalEntity) PermissionDeniedException(org.jbpm.services.task.exception.PermissionDeniedException)

Example 72 with User

use of org.kie.api.task.model.User in project jbpm by kiegroup.

the class TaskRuleServiceImpl method executeRules.

@Override
public void executeRules(Task task, String userId, Object params, String scope) throws TaskException {
    KieBase ruleBase = ruleContextProvider.getKieBase(scope);
    if (ruleBase != null) {
        KieSession session = ruleBase.newKieSession();
        Map<String, Object> globals = ruleContextProvider.getGlobals(scope);
        if (globals != null) {
            for (Map.Entry<String, Object> entry : globals.entrySet()) {
                session.setGlobal(entry.getKey(), entry.getValue());
            }
        }
        User user = TaskModelProvider.getFactory().newUser();
        ((InternalOrganizationalEntity) user).setId(userId);
        TaskServiceRequest request = new TaskServiceRequest(scope, user, null);
        session.setGlobal("request", request);
        session.insert(task);
        if (params != null) {
            if (params instanceof ContentData) {
                ContentMarshallerContext ctx = TaskContentRegistry.get().getMarshallerContext(task);
                params = ContentMarshallerHelper.unmarshall(((ContentData) params).getContent(), ctx.getEnvironment(), ctx.getClassloader());
            }
            session.insert(params);
        }
        session.fireAllRules();
        session.dispose();
        if (!request.isAllowed()) {
            StringBuilder error = new StringBuilder("Cannot perform operation " + scope + " :\n");
            if (request.getReasons() != null) {
                for (String reason : request.getReasons()) {
                    error.append(reason).append('\n');
                }
            }
            throw request.getException(error.toString());
        }
    }
}
Also used : User(org.kie.api.task.model.User) InternalOrganizationalEntity(org.kie.internal.task.api.model.InternalOrganizationalEntity) ContentData(org.kie.internal.task.api.model.ContentData) TaskServiceRequest(org.jbpm.services.task.rule.TaskServiceRequest) KieBase(org.kie.api.KieBase) KieSession(org.kie.api.runtime.KieSession) Map(java.util.Map) ContentMarshallerContext(org.kie.internal.task.api.ContentMarshallerContext)

Example 73 with User

use of org.kie.api.task.model.User in project jbpm by kiegroup.

the class MvelUserGroupCallbackImpl method existsGroup.

public boolean existsGroup(String groupId) {
    Iterator<User> iter = userGroupMapping.keySet().iterator();
    while (iter.hasNext()) {
        User u = iter.next();
        List<Group> groups = userGroupMapping.get(u);
        for (Group g : groups) {
            if (g.getId().equals(groupId)) {
                return true;
            }
        }
    }
    return false;
}
Also used : Group(org.kie.api.task.model.Group) User(org.kie.api.task.model.User)

Example 74 with User

use of org.kie.api.task.model.User in project jbpm by kiegroup.

the class UserTaskServiceImplTest method testNominate.

@Test
public void testNominate() {
    processInstanceId = processService.startProcess(deploymentUnit.getIdentifier(), "org.jbpm.writedocument.empty");
    assertNotNull(processInstanceId);
    List<Long> taskIds = runtimeDataService.getTasksByProcessInstanceId(processInstanceId);
    assertNotNull(taskIds);
    assertEquals(1, taskIds.size());
    Long taskId = taskIds.get(0);
    List<OrganizationalEntity> owners = new ArrayList<OrganizationalEntity>();
    User user = TaskModelProvider.getFactory().newUser("john");
    owners.add(user);
    user = TaskModelProvider.getFactory().newUser("salaboy");
    owners.add(user);
    Group group = TaskModelProvider.getFactory().newGroup("HR");
    owners.add(group);
    userTaskService.nominate(taskId, "Administrator", owners);
    UserTaskInstanceDesc task = runtimeDataService.getTaskById(taskId);
    assertNotNull(task);
    assertEquals(Status.Ready.toString(), task.getStatus());
}
Also used : Group(org.kie.api.task.model.Group) User(org.kie.api.task.model.User) OrganizationalEntity(org.kie.api.task.model.OrganizationalEntity) ArrayList(java.util.ArrayList) UserTaskInstanceDesc(org.jbpm.services.api.model.UserTaskInstanceDesc) AbstractKieServicesBaseTest(org.jbpm.kie.test.util.AbstractKieServicesBaseTest) Test(org.junit.Test)

Example 75 with User

use of org.kie.api.task.model.User in project jbpm by kiegroup.

the class HumanTaskHandlerHelper method parseReassignment.

protected static List<Reassignment> parseReassignment(String reassignString) {
    List<Reassignment> reassignments = new ArrayList<Reassignment>();
    Map<String, String> parameters = asMap(reassignString);
    if (parameters.containsKey("users") || parameters.containsKey("groups")) {
        Reassignment reassignment = TaskModelProvider.getFactory().newReassignment();
        List<OrganizationalEntity> reassignmentUsers = new ArrayList<OrganizationalEntity>();
        String recipients = parameters.get("users");
        if (recipients != null && recipients.trim().length() > 0) {
            String[] recipientsIds = recipients.split(ATTRIBUTES_ELEMENTS_SEPARATOR);
            for (String id : recipientsIds) {
                User user = TaskModelProvider.getFactory().newUser();
                ((InternalOrganizationalEntity) user).setId(id.trim());
                reassignmentUsers.add(user);
            }
        }
        recipients = parameters.get("groups");
        if (recipients != null && recipients.trim().length() > 0) {
            String[] recipientsIds = recipients.split(ATTRIBUTES_ELEMENTS_SEPARATOR);
            for (String id : recipientsIds) {
                Group group = TaskModelProvider.getFactory().newGroup();
                ((InternalOrganizationalEntity) group).setId(id.trim());
                reassignmentUsers.add(group);
            }
        }
        reassignment.setPotentialOwners(reassignmentUsers);
        reassignments.add(reassignment);
    }
    return reassignments;
}
Also used : Group(org.kie.api.task.model.Group) User(org.kie.api.task.model.User) OrganizationalEntity(org.kie.api.task.model.OrganizationalEntity) InternalOrganizationalEntity(org.kie.internal.task.api.model.InternalOrganizationalEntity) ArrayList(java.util.ArrayList) InternalOrganizationalEntity(org.kie.internal.task.api.model.InternalOrganizationalEntity) Reassignment(org.kie.internal.task.api.model.Reassignment)

Aggregations

User (org.kie.api.task.model.User)83 OrganizationalEntity (org.kie.api.task.model.OrganizationalEntity)52 Test (org.junit.Test)44 InternalTask (org.kie.internal.task.api.model.InternalTask)38 ArrayList (java.util.ArrayList)35 InternalOrganizationalEntity (org.kie.internal.task.api.model.InternalOrganizationalEntity)33 Task (org.kie.api.task.model.Task)31 Group (org.kie.api.task.model.Group)27 InternalPeopleAssignments (org.kie.internal.task.api.model.InternalPeopleAssignments)27 InternalTaskData (org.kie.internal.task.api.model.InternalTaskData)20 StringReader (java.io.StringReader)17 HashMap (java.util.HashMap)14 InputStreamReader (java.io.InputStreamReader)11 Reader (java.io.Reader)11 WorkItemImpl (org.drools.core.process.instance.impl.WorkItemImpl)11 ContentData (org.kie.internal.task.api.model.ContentData)11 InternalContent (org.kie.internal.task.api.model.InternalContent)11 Date (java.util.Date)10 List (java.util.List)10 CountDownTaskEventListener (org.jbpm.services.task.util.CountDownTaskEventListener)10