|
| 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 | +} |
0 commit comments