protected WorkItem createWorkItem(WorkItemNode workItemNode) { WorkItem workItem = super.createWorkItem(workItemNode); String actorId = assignWorkItem(workItem); if (actorId != null) { ((org.drools.core.process.instance.WorkItem) workItem).setParameter("ActorId", actorId); } return workItem; }
protected String assignWorkItem(WorkItem workItem) { String actorId = null; // if this human task node is part of a swimlane, check whether an actor // has already been assigned to this swimlane String swimlaneName = getHumanTaskNode().getSwimlane(); SwimlaneContextInstance swimlaneContextInstance = getSwimlaneContextInstance(swimlaneName); if (swimlaneContextInstance != null) { actorId = swimlaneContextInstance.getActorId(swimlaneName); workItem.setParameter("SwimlaneActorId", actorId); } // if no actor can be assigned based on the swimlane, check whether an // actor is specified for this human task if (actorId == null) { actorId = (String) workItem.getParameter("ActorId"); if (actorId != null && swimlaneContextInstance != null && actorId.split(separator).length == 1) { swimlaneContextInstance.setActorId(swimlaneName, actorId); workItem.setParameter("SwimlaneActorId", actorId); } } // always return ActorId from workitem as SwimlaneActorId is kept as separate parameter return (String) workItem.getParameter("ActorId"); }
@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)); }
@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 testSetDeadlinesNotStartedReassign() { WorkItem workItem = new WorkItemImpl(); workItem.setParameter("NotStartedReassign", "[users:john]@[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(1, reassignment.getPotentialOwners().size()); assertEquals("john", reassignment.getPotentialOwners().get(0).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)); }
@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)); }
workItem.setParameter("NotCompletedReassign", "[users:john]@[4h,6h]");
workItem.setParameter("NotStartedReassign", "[users:john]@[4h,6h]");
@Test public void testAssignExcludedOwners() { String excludedOwnerId = "espiegelberg"; Task task = TaskModelProvider.getFactory().newTask(); InternalPeopleAssignments peopleAssignments = peopleAssignmentHelper.getNullSafePeopleAssignments(task); WorkItem workItem = new WorkItemImpl(); workItem.setParameter(PeopleAssignmentHelper.EXCLUDED_OWNER_ID, excludedOwnerId); peopleAssignmentHelper.assignExcludedOwners(workItem, peopleAssignments); assertEquals(1, peopleAssignments.getExcludedOwners().size()); OrganizationalEntity organizationalEntity1 = peopleAssignments.getExcludedOwners().get(0); assertTrue(organizationalEntity1 instanceof User); assertEquals(excludedOwnerId, organizationalEntity1.getId()); }
@Test public void testAssignRecipients() { String recipientId = "espiegelberg"; Task task = TaskModelProvider.getFactory().newTask(); InternalPeopleAssignments peopleAssignments = peopleAssignmentHelper.getNullSafePeopleAssignments(task); WorkItem workItem = new WorkItemImpl(); workItem.setParameter(PeopleAssignmentHelper.RECIPIENT_ID, recipientId); peopleAssignmentHelper.assignRecipients(workItem, peopleAssignments); assertEquals(1, peopleAssignments.getRecipients().size()); OrganizationalEntity organizationalEntity1 = peopleAssignments.getRecipients().get(0); assertTrue(organizationalEntity1 instanceof User); assertEquals(recipientId, organizationalEntity1.getId()); }
@Test public void testAssignTaskstakeholders() { String taskStakeholderId = "espiegelberg"; Task task = TaskModelProvider.getFactory().newTask(); InternalPeopleAssignments peopleAssignments = peopleAssignmentHelper.getNullSafePeopleAssignments(task); WorkItem workItem = new WorkItemImpl(); workItem.setParameter(PeopleAssignmentHelper.TASKSTAKEHOLDER_ID, taskStakeholderId); peopleAssignmentHelper.assignTaskStakeholders(workItem, peopleAssignments); assertEquals(1, peopleAssignments.getTaskStakeholders().size()); OrganizationalEntity organizationalEntity1 = peopleAssignments.getTaskStakeholders().get(0); assertTrue(organizationalEntity1 instanceof User); assertEquals(taskStakeholderId, organizationalEntity1.getId()); }
@Test public void testNotStartedNotifyMinimal() { WorkItem workItem = new WorkItemImpl(); workItem.setParameter("NotStartedNotify", "[tousers:john|subject:Test of notification|body:And here is the body]@[4h]");
@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()); }
@Test public void testNotStartedNotifyMinimalWithHtml() { WorkItem workItem = new WorkItemImpl(); workItem.setParameter("NotStartedNotify", "[tousers:john|subject:Test of notification|body:<html>"+ "<body>"+ "Reason {s}<br/>"+
@Test public void testNotStartedNotifyAllElements() { WorkItem workItem = new WorkItemImpl(); workItem.setParameter("NotStartedNotify", "[from:mike|tousers:john,mary|togroups:sales,hr|replyto:mike|subject:Test of notification|body:And here is the body]@[4h]");
@Test public void testAssignBusinessAdministrators() { String businessAdministratorId = "espiegelberg"; Task task = TaskModelProvider.getFactory().newTask(); PeopleAssignments peopleAssignments = peopleAssignmentHelper.getNullSafePeopleAssignments(task); WorkItem workItem = new WorkItemImpl(); workItem.setParameter(PeopleAssignmentHelper.BUSINESSADMINISTRATOR_ID, businessAdministratorId); peopleAssignmentHelper.assignBusinessAdministrators(workItem, peopleAssignments); assertEquals(3, peopleAssignments.getBusinessAdministrators().size()); OrganizationalEntity organizationalEntity1 = peopleAssignments.getBusinessAdministrators().get(0); assertTrue(organizationalEntity1 instanceof User); assertEquals("Administrator", organizationalEntity1.getId()); OrganizationalEntity organizationalEntity2 = peopleAssignments.getBusinessAdministrators().get(1); assertTrue(organizationalEntity2 instanceof Group); assertEquals("Administrators", organizationalEntity2.getId()); OrganizationalEntity organizationalEntity3 = peopleAssignments.getBusinessAdministrators().get(2); assertTrue(organizationalEntity3 instanceof User); assertEquals(businessAdministratorId, organizationalEntity3.getId()); }
@Test public void testAssignBusinessAdministratorGroups() { String businessAdministratorGroupId = "Super users"; Task task = TaskModelProvider.getFactory().newTask(); PeopleAssignments peopleAssignments = peopleAssignmentHelper.getNullSafePeopleAssignments(task); WorkItem workItem = new WorkItemImpl(); workItem.setParameter(PeopleAssignmentHelper.BUSINESSADMINISTRATOR_GROUP_ID, businessAdministratorGroupId); peopleAssignmentHelper.assignBusinessAdministrators(workItem, peopleAssignments); assertEquals(3, peopleAssignments.getBusinessAdministrators().size()); OrganizationalEntity organizationalEntity1 = peopleAssignments.getBusinessAdministrators().get(0); assertTrue(organizationalEntity1 instanceof User); assertEquals("Administrator", organizationalEntity1.getId()); OrganizationalEntity organizationalEntity2 = peopleAssignments.getBusinessAdministrators().get(1); assertTrue(organizationalEntity2 instanceof Group); assertEquals("Administrators", organizationalEntity2.getId()); OrganizationalEntity organizationalEntity3 = peopleAssignments.getBusinessAdministrators().get(2); assertTrue(organizationalEntity3 instanceof Group); assertEquals(businessAdministratorGroupId, organizationalEntity3.getId()); }
workItem.setParameter(PeopleAssignmentHelper.ACTOR_ID, actorId); workItem.setParameter(PeopleAssignmentHelper.ACTOR_ID, actorId + ", drbug "); peopleAssignmentHelper.assignActors(workItem, peopleAssignments, taskData); assertEquals(2, peopleAssignments.getPotentialOwners().size()); workItem.setParameter(PeopleAssignmentHelper.ACTOR_ID, ""); peopleAssignmentHelper.assignActors(workItem, peopleAssignments, taskData); assertEquals(0, peopleAssignments.getPotentialOwners().size());
workItem.setParameter(PeopleAssignmentHelper.ACTOR_ID, actorId); workItem.setParameter(PeopleAssignmentHelper.ACTOR_ID, actorId + "; drbug "); peopleAssignmentHelper.assignActors(workItem, peopleAssignments, taskData); assertEquals(3, peopleAssignments.getPotentialOwners().size()); workItem.setParameter(PeopleAssignmentHelper.ACTOR_ID, ""); peopleAssignmentHelper.assignActors(workItem, peopleAssignments, taskData); assertEquals(0, peopleAssignments.getPotentialOwners().size());
workItem.setParameter(PeopleAssignmentHelper.ACTOR_ID, actorId); workItem.setParameter(PeopleAssignmentHelper.ACTOR_ID, actorId + ": drbug "); peopleAssignmentHelper.assignActors(workItem, peopleAssignments, taskData); assertEquals(3, peopleAssignments.getPotentialOwners().size()); workItem.setParameter(PeopleAssignmentHelper.ACTOR_ID, ""); peopleAssignmentHelper.assignActors(workItem, peopleAssignments, taskData); assertEquals(0, peopleAssignments.getPotentialOwners().size());