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;
}
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());
}
}
}
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;
}
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());
}
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;
}
Aggregations