Skip to content

Commit 1785529

Browse files
Handle deleting task candidates through DelegateTask (#3998)
1 parent 8b3b6d5 commit 1785529

File tree

4 files changed

+72
-5
lines changed

4 files changed

+72
-5
lines changed

modules/flowable-engine/src/test/java/org/flowable/engine/test/api/task/DeleteCandidateTaskListener.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,34 @@
1212
*/
1313
package org.flowable.engine.test.api.task;
1414

15+
import java.util.HashSet;
16+
import java.util.Set;
17+
1518
import org.flowable.engine.delegate.TaskListener;
19+
import org.flowable.identitylink.api.IdentityLink;
1620
import org.flowable.task.service.delegate.DelegateTask;
1721

1822
public class DeleteCandidateTaskListener implements TaskListener {
23+
public static final String VARNAME_CANDIDATE_USERS = "candidateUsers";
24+
public static final String VARNAME_CANDIDATE_GROUPS = "candidateGroups";
25+
1926
@Override
2027
public void notify(DelegateTask delegateTask) {
2128
delegateTask.deleteCandidateUser("admin");
29+
delegateTask.deleteCandidateGroup("admins");
30+
31+
Set<IdentityLink> candidates = delegateTask.getCandidates();
32+
Set<String> candidateUsers = new HashSet<>();
33+
Set<String> candidateGroups = new HashSet<>();
34+
for (IdentityLink candidate : candidates) {
35+
if (candidate.getUserId() != null) {
36+
candidateUsers.add(candidate.getUserId());
37+
} else if (candidate.getGroupId() != null) {
38+
candidateGroups.add(candidate.getGroupId());
39+
}
40+
}
41+
delegateTask.setVariable(VARNAME_CANDIDATE_USERS, candidateUsers);
42+
delegateTask.setVariable(VARNAME_CANDIDATE_GROUPS, candidateGroups);
43+
2244
}
2345
}

modules/flowable-engine/src/test/java/org/flowable/engine/test/api/task/TaskIdentityLinksTest.java

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import java.util.Arrays;
2121
import java.util.List;
22+
import java.util.Set;
2223

2324
import org.flowable.common.engine.api.FlowableException;
2425
import org.flowable.common.engine.impl.history.HistoryLevel;
@@ -321,16 +322,46 @@ public void testDeleteOwner() {
321322
}
322323

323324
@Test
324-
@Deployment(resources = "org/flowable/engine/test/api/task/TaskIdentityLinksTest.testDeleteCandidateUser.bpmn20.xml")
325-
public void testDeleteCandidateUser() {
325+
@Deployment(resources = "org/flowable/engine/test/api/task/TaskIdentityLinksTest.testDeleteCandidates.bpmn20.xml")
326+
public void testDeleteCandidates() {
326327
runtimeService.startProcessInstanceByKey("TaskIdentityLinks");
327328

328329
String taskId = taskService.createTaskQuery().singleResult().getId();
329330

330331
List<IdentityLink> identityLinks = taskService.getIdentityLinksForTask(taskId);
331332
assertThat(identityLinks)
333+
.filteredOn(identityLink -> identityLink.getUserId() != null)
332334
.extracting(IdentityLink::getUserId)
333335
.containsExactly("user");
336+
337+
assertThat(identityLinks)
338+
.filteredOn(identityLink -> identityLink.getGroupId() != null)
339+
.extracting(IdentityLink::getGroupId)
340+
.containsExactly("users");
341+
342+
if (HistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.AUDIT, processEngineConfiguration)) {
343+
List<HistoricIdentityLink> historicIdentityLinks = historyService.getHistoricIdentityLinksForTask(taskId);
344+
345+
assertThat(historicIdentityLinks)
346+
.filteredOn(identityLink -> identityLink.getUserId() != null)
347+
.extracting(HistoricIdentityLink::getUserId)
348+
.containsExactly("user");
349+
350+
assertThat(historicIdentityLinks)
351+
.filteredOn(identityLink -> identityLink.getGroupId() != null)
352+
.extracting(HistoricIdentityLink::getGroupId)
353+
.containsExactly("users");
354+
}
355+
356+
@SuppressWarnings("unchecked")
357+
Set<String> candidateUsers = (Set<String>) taskService.getVariable(taskId, DeleteCandidateTaskListener.VARNAME_CANDIDATE_USERS);
358+
assertThat(candidateUsers)
359+
.containsExactly("user");
360+
361+
@SuppressWarnings("unchecked")
362+
Set<String> candidateGroups = (Set<String>) taskService.getVariable(taskId, DeleteCandidateTaskListener.VARNAME_CANDIDATE_GROUPS);
363+
assertThat(candidateGroups)
364+
.containsExactly("users");
334365
}
335366

336367
@Test

modules/flowable-engine/src/test/resources/org/flowable/engine/test/api/task/TaskIdentityLinksTest.testDeleteCandidateUser.bpmn20.xml renamed to modules/flowable-engine/src/test/resources/org/flowable/engine/test/api/task/TaskIdentityLinksTest.testDeleteCandidates.bpmn20.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
</extensionElements>
1515
<potentialOwner>
1616
<resourceAssignmentExpression>
17-
<formalExpression>user(user),user(admin)</formalExpression>
17+
<formalExpression>user(user),user(admin),group(users),group(admins)</formalExpression>
1818
</resourceAssignmentExpression>
1919
</potentialOwner>
2020
</userTask>

modules/flowable-task-service/src/main/java/org/flowable/task/service/impl/persistence/entity/TaskEntityImpl.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -395,13 +395,27 @@ public void deleteCandidateGroup(String groupId) {
395395
@Override
396396
public void deleteUserIdentityLink(String userId, String identityLinkType) {
397397
IdentityLinkEntityManager identityLinkEntityManager = getIdentityLinkServiceConfiguration().getIdentityLinkEntityManager();
398-
identityLinkEntityManager.deleteTaskIdentityLink(this.id, getIdentityLinks(), userId, null, identityLinkType);
398+
List<IdentityLinkEntity> identityLinkEntities = identityLinkEntityManager.deleteTaskIdentityLink(this.id,
399+
getIdentityLinks(), userId, null, identityLinkType);
400+
InternalTaskAssignmentManager taskAssignmentManager = getTaskAssignmentManager();
401+
if (taskAssignmentManager != null) {
402+
for (IdentityLinkEntity identityLink : identityLinkEntities) {
403+
taskAssignmentManager.deleteUserIdentityLink(this, identityLink);
404+
}
405+
}
399406
}
400407

401408
@Override
402409
public void deleteGroupIdentityLink(String groupId, String identityLinkType) {
403410
IdentityLinkEntityManager identityLinkEntityManager = getIdentityLinkServiceConfiguration().getIdentityLinkEntityManager();
404-
identityLinkEntityManager.deleteTaskIdentityLink(this.id, getIdentityLinks(), null, groupId,identityLinkType);
411+
List<IdentityLinkEntity> identityLinkEntities = identityLinkEntityManager.deleteTaskIdentityLink(this.id,
412+
getIdentityLinks(), null, groupId, identityLinkType);
413+
InternalTaskAssignmentManager taskAssignmentManager = getTaskAssignmentManager();
414+
if (taskAssignmentManager != null) {
415+
for (IdentityLinkEntity identityLink : identityLinkEntities) {
416+
taskAssignmentManager.deleteGroupIdentityLink(this, identityLink);
417+
}
418+
}
405419
}
406420

407421
@Override

0 commit comments

Comments
 (0)