Skip to content

Commit b0f19dc

Browse files
committed
Merge branch 'release/2025.07.1'
2 parents 00085d9 + a71aa97 commit b0f19dc

File tree

25 files changed

+896
-69
lines changed

25 files changed

+896
-69
lines changed

.github/workflows/master.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
java-version: 17
2424
distribution: 'zulu'
2525
cache: maven
26-
server-id: ossrh
26+
server-id: central
2727
server-username: OSS_CENTRAL_USERNAME # env variable for Maven Central
2828
server-password: OSS_CENTRAL_PASSWORD # env variable for Maven Central
2929

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ If you want to start usage, please add the BOM to your Maven project and add cor
3939

4040
| Adapter-7 Version | Camunda 7 Version | API Version |
4141
|-------------------------------------------------------------------------------------------------------|-------------------|-------------|
42+
| [2025.07.1](https://github.com/bpm-crafters/process-engine-adapters-camunda-7/releases/tag/2025.07.1) | 7.23.4 | 1.3 |
43+
| [2025.06.1](https://github.com/bpm-crafters/process-engine-adapters-camunda-7/releases/tag/2025.06.1) | 7.23 | 1.2 |
4244
| [2025.05.5](https://github.com/bpm-crafters/process-engine-adapters-camunda-7/releases/tag/2025.05.5) | 7.23 | 1.2 |
4345
| [2025.05.4](https://github.com/bpm-crafters/process-engine-adapters-camunda-7/releases/tag/2025.05.4) | 7.23 | 1.2 |
4446
| [2025.05.3](https://github.com/bpm-crafters/process-engine-adapters-camunda-7/releases/tag/2025.05.3) | 7.23 | 1.2 |

bom/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<parent>
55
<groupId>dev.bpm-crafters.process-engine-adapters</groupId>
66
<artifactId>process-engine-adapter-camunda-platform-c7-root</artifactId>
7-
<version>2025.06.1</version>
7+
<version>2025.07.1</version>
88
</parent>
99

1010
<artifactId>process-engine-adapter-camunda-platform-c7-bom</artifactId>

docs/quickstart-c7-remote.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ you will also need to add some additional libraries. Here is the result:
2121
<dependency>
2222
<groupId>org.camunda.community.rest</groupId>
2323
<artifactId>camunda-platform-7-rest-client-spring-boot-starter-feign</artifactId>
24-
<version>7.23.0</version>
24+
<version>7.23.4</version>
2525
</dependency>
2626
<!-- Optional, if you want to use the official camunda client for service task delivery-->
2727
<dependency>

engine-adapter/adapter-testing/pom.xml

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,13 @@
66
<parent>
77
<groupId>dev.bpm-crafters.process-engine-adapters</groupId>
88
<artifactId>process-engine-adapter-camunda-platform-c7-root</artifactId>
9-
<version>2025.06.1</version>
9+
<version>2025.07.1</version>
1010
<relativePath>../../pom.xml</relativePath>
1111
</parent>
1212

1313
<artifactId>process-engine-adapter-camunda-platform-c7-testing</artifactId>
1414
<name>Test: Camunda 7 Adapter Test Fixtures</name>
1515

16-
<dependencyManagement>
17-
<dependencies>
18-
<dependency>
19-
<groupId>org.springframework.boot</groupId>
20-
<artifactId>spring-boot-dependencies</artifactId>
21-
<version>${spring-boot.version}</version>
22-
<scope>import</scope>
23-
<type>pom</type>
24-
</dependency>
25-
</dependencies>
26-
</dependencyManagement>
27-
2816
<dependencies>
2917
<!-- This is a library used on a test scope, so we put everything into compile scope -->
3018

engine-adapter/c7-embedded-core/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>dev.bpm-crafters.process-engine-adapters</groupId>
77
<artifactId>process-engine-adapter-camunda-platform-c7-root</artifactId>
8-
<version>2025.06.1</version>
8+
<version>2025.07.1</version>
99
<relativePath>../../pom.xml</relativePath>
1010
</parent>
1111

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package dev.bpmcrafters.processengineapi.adapter.c7.embedded.task.modification
2+
3+
import dev.bpmcrafters.processengineapi.Empty
4+
import dev.bpmcrafters.processengineapi.task.*
5+
import dev.bpmcrafters.processengineapi.task.ChangeAssignmentModifyTaskCmd.*
6+
import dev.bpmcrafters.processengineapi.task.ChangePayloadModifyTaskCmd.*
7+
import io.github.oshai.kotlinlogging.KotlinLogging
8+
import org.camunda.bpm.engine.TaskService
9+
import java.util.concurrent.CompletableFuture
10+
import java.util.concurrent.Future
11+
12+
private val logger = KotlinLogging.logger {}
13+
14+
/**
15+
* Implementation of the user task modification API.
16+
*/
17+
class C7UserTaskModificationApiImpl(
18+
private val taskService: TaskService,
19+
) : UserTaskModificationApi {
20+
override fun update(cmd: ModifyTaskCmd): Future<Empty> {
21+
logger.debug { "PROCESS-ENGINE-C7-EMBEDDED-051: modifying user task ${cmd.taskId}." }
22+
if (cmd is CompositeModifyTaskCmd) {
23+
cmd.commands.forEach {
24+
handleCommand(it)
25+
}
26+
} else {
27+
handleCommand(cmd)
28+
}
29+
return CompletableFuture.completedFuture(Empty)
30+
}
31+
32+
private fun handleCommand(cmd: ModifyTaskCmd) {
33+
logger.trace { "PROCESS-ENGINE-C7-EMBEDDED-052: handling command ${cmd}." }
34+
when (cmd) {
35+
is ChangeAssignmentModifyTaskCmd -> changeAssignment(cmd)
36+
is ChangePayloadModifyTaskCmd -> changePayload(cmd)
37+
else -> throw UnsupportedOperationException("Unsupported command ${cmd.javaClass.canonicalName}.")
38+
}
39+
}
40+
41+
private fun changeAssignment(cmd: ChangeAssignmentModifyTaskCmd) {
42+
when (cmd) {
43+
is AssignTaskCmd -> taskService.setAssignee(cmd.taskId, cmd.assignee)
44+
is UnassignTaskCmd -> taskService.setAssignee(cmd.taskId, null)
45+
is ClearCandidateUsersTaskCmd -> taskService.removeAllCandidateUsers(cmd.taskId)
46+
is ClearCandidateGroupsTaskCmd -> taskService.removeAllCandidateGroups(cmd.taskId)
47+
is SetCandidateUsersTaskCmd -> taskService.setCandidateUsers(cmd.taskId, cmd.candidateUsers)
48+
is SetCandidateGroupsTaskCmd -> taskService.setCandidateGroups(cmd.taskId, cmd.candidateGroups)
49+
is AddCandidateUserTaskCmd -> taskService.addCandidateUser(cmd.taskId, cmd.candidateUser)
50+
is AddCandidateGroupTaskCmd -> taskService.addCandidateGroup(cmd.taskId, cmd.candidateGroup)
51+
is RemoveCandidateUserTaskCmd -> taskService.deleteCandidateUser(cmd.taskId, cmd.candidateUser)
52+
is RemoveCandidateGroupTaskCmd -> taskService.deleteCandidateGroup(cmd.taskId, cmd.candidateGroup)
53+
else -> throw UnsupportedOperationException("Unsupported command ${cmd.javaClass.canonicalName}.")
54+
}
55+
}
56+
57+
private fun changePayload(cmd: ChangePayloadModifyTaskCmd) {
58+
when (cmd) {
59+
is UpdatePayloadTaskCmd -> taskService.setVariablesLocal(cmd.taskId, cmd.get())
60+
is DeletePayloadTaskCmd -> taskService.removeVariablesLocal(cmd.taskId, cmd.get())
61+
is ClearPayloadTaskCmd -> taskService.removeAllVariablesLocal(cmd.taskId)
62+
else -> throw UnsupportedOperationException("Unsupported command ${cmd.javaClass.canonicalName}.")
63+
}
64+
}
65+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package dev.bpmcrafters.processengineapi.adapter.c7.embedded.task.modification
2+
3+
import org.camunda.bpm.engine.TaskService
4+
import org.camunda.bpm.engine.task.IdentityLinkType
5+
6+
fun TaskService.getAllCandidates(taskId: String) = this
7+
.getIdentityLinksForTask(taskId)
8+
.filter { it.type == IdentityLinkType.CANDIDATE }
9+
10+
fun TaskService.getCandidateUsers(taskId: String) = getAllCandidates(taskId)
11+
.filter { it.userId != null }
12+
.map { it.userId }
13+
14+
fun TaskService.getCandidateGroups(taskId: String) = getAllCandidates(taskId)
15+
.filter { it.groupId != null }
16+
.map { it.groupId }
17+
18+
fun TaskService.removeAllCandidateUsers(taskId: String) = this
19+
.setCandidateUsers(taskId, listOf())
20+
21+
fun TaskService.setCandidateUsers(taskId: String, allCandidateUsers: List<String>) {
22+
val oldCandidates = this.getCandidateUsers(taskId)
23+
val candidatesToRemove = oldCandidates.filter { it !in allCandidateUsers }
24+
val candidatesToAdd = allCandidateUsers.filter { it !in oldCandidates }
25+
26+
candidatesToRemove.forEach {
27+
this.deleteCandidateUser(taskId, it)
28+
}
29+
candidatesToAdd.forEach {
30+
this.addCandidateUser(taskId, it)
31+
}
32+
}
33+
34+
fun TaskService.removeAllCandidateGroups(taskId: String) = this
35+
.setCandidateGroups(taskId, listOf())
36+
37+
fun TaskService.setCandidateGroups(taskId: String, allCandidateGroups: List<String>) {
38+
val oldCandidates = this.getCandidateGroups(taskId)
39+
val candidatesToRemove = oldCandidates.filter { it !in allCandidateGroups }
40+
val candidatesToAdd = allCandidateGroups.filter { it !in oldCandidates }
41+
42+
candidatesToRemove.forEach {
43+
this.deleteCandidateGroup(taskId, it)
44+
}
45+
candidatesToAdd.forEach {
46+
this.addCandidateGroup(taskId, it)
47+
}
48+
}
49+
50+
fun TaskService.removeAllVariablesLocal(taskId: String) {
51+
val variableKeys = this.getVariablesLocal(taskId).map { it.key }
52+
this.removeVariablesLocal(taskId, variableKeys)
53+
}

engine-adapter/c7-embedded-core/src/main/kotlin/dev/bpmcrafters/processengineapi/adapter/c7/embedded/testing/AbstractC7EmbeddedStage.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import dev.bpmcrafters.processengineapi.adapter.c7.embedded.task.completion.C7Us
1313
import dev.bpmcrafters.processengineapi.adapter.c7.embedded.task.completion.LinearMemoryFailureRetrySupplier
1414
import dev.bpmcrafters.processengineapi.adapter.c7.embedded.task.delivery.pull.EmbeddedPullServiceTaskDelivery
1515
import dev.bpmcrafters.processengineapi.adapter.c7.embedded.task.delivery.pull.EmbeddedPullUserTaskDelivery
16+
import dev.bpmcrafters.processengineapi.adapter.c7.embedded.task.modification.C7UserTaskModificationApiImpl
1617
import dev.bpmcrafters.processengineapi.adapter.c7.embedded.task.subscription.C7TaskSubscriptionApiImpl
1718
import dev.bpmcrafters.processengineapi.correlation.CorrelationApi
1819
import dev.bpmcrafters.processengineapi.correlation.SignalApi
@@ -71,6 +72,9 @@ abstract class AbstractC7EmbeddedStage<SUBTYPE : AbstractC7EmbeddedStage<SUBTYPE
7172
@ProvidedScenarioState
7273
protected lateinit var correlationApi: CorrelationApi
7374

75+
@ProvidedScenarioState
76+
protected lateinit var userTaskModificationApi: UserTaskModificationApi
77+
7478
@ProvidedScenarioState
7579
protected lateinit var processEngineServices: ProcessEngineServices
7680

@@ -140,6 +144,8 @@ abstract class AbstractC7EmbeddedStage<SUBTYPE : AbstractC7EmbeddedStage<SUBTYPE
140144
subscriptionRepository
141145
)
142146

147+
userTaskModificationApi = C7UserTaskModificationApiImpl(processEngineServices.taskService)
148+
143149
this.userTaskSupport = UserTaskSupport()
144150
userTaskSupport.subscribe(
145151
taskSubscriptionApi, restrictions, null, null

0 commit comments

Comments
 (0)