All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.camunda.community.rest.impl.Mappers.kt Maven / Gradle / Ivy

package org.camunda.community.rest.impl

import mu.KotlinLogging
import org.camunda.bpm.engine.impl.*
import org.camunda.bpm.engine.task.DelegationState
import org.camunda.bpm.engine.task.Task
import org.camunda.community.rest.adapter.IdentityLinkAdapter
import org.camunda.community.rest.client.model.*

private val logger = KotlinLogging.logger {}

fun Task.toDto(): TaskDto = TaskDto()
  .id(this.id)
  .name(this.name)
  .assignee(this.assignee)
  .owner(this.owner)
  .created(this.createTime)
  .due(this.dueDate)
  .followUp(this.followUpDate)
  .delegationState(when (this.delegationState) {
    DelegationState.PENDING -> TaskDto.DelegationStateEnum.PENDING
    DelegationState.RESOLVED -> TaskDto.DelegationStateEnum.RESOLVED
    else -> null
  })
  .description(this.description)
  .executionId(this.executionId)
  .parentTaskId(this.parentTaskId)
  .priority(this.priority)
  .processDefinitionId(this.processDefinitionId)
  .processInstanceId(this.processInstanceId)
  .caseDefinitionId(this.caseDefinitionId)
  .caseInstanceId(this.caseInstanceId)
  .caseExecutionId(this.caseExecutionId)
  .taskDefinitionKey(this.taskDefinitionKey)
  .suspended(this.isSuspended)
  .formKey(this.formKey)
  .tenantId(this.tenantId)

fun IdentityLinkAdapter.toDto(): IdentityLinkDto = IdentityLinkDto()
  .userId(this.userId)
  .groupId(this.groupId)
  .type(this.type)

fun QueryOrderingProperty.toProcessInstanceSorting(): ProcessInstanceQueryDtoSortingInner = ProcessInstanceQueryDtoSortingInner()
    .sortOrder(if (this.direction == Direction.DESCENDING) ProcessInstanceQueryDtoSortingInner.SortOrderEnum.DESC else ProcessInstanceQueryDtoSortingInner.SortOrderEnum.ASC)
    .sortBy(when ([email protected]) {
        ProcessInstanceQueryProperty.PROCESS_INSTANCE_ID -> ProcessInstanceQueryDtoSortingInner.SortByEnum.INSTANCEID
        ProcessInstanceQueryProperty.PROCESS_DEFINITION_ID -> ProcessInstanceQueryDtoSortingInner.SortByEnum.DEFINITIONID
        ProcessInstanceQueryProperty.PROCESS_DEFINITION_KEY -> ProcessInstanceQueryDtoSortingInner.SortByEnum.DEFINITIONKEY
        ProcessInstanceQueryProperty.TENANT_ID -> ProcessInstanceQueryDtoSortingInner.SortByEnum.TENANTID
        ProcessInstanceQueryProperty.BUSINESS_KEY -> ProcessInstanceQueryDtoSortingInner.SortByEnum.BUSINESSKEY
        else -> {
          logger.warn { "query property ${[email protected]} is not supported for sorting" }
          null
        }
    })

fun QueryOrderingProperty.toHistoricProcessInstanceSorting(): HistoricProcessInstanceQueryDtoSortingInner = HistoricProcessInstanceQueryDtoSortingInner()
  .sortOrder(if (this.direction == Direction.DESCENDING) HistoricProcessInstanceQueryDtoSortingInner.SortOrderEnum.DESC else HistoricProcessInstanceQueryDtoSortingInner.SortOrderEnum.ASC)
  .sortBy(when ([email protected]) {
    HistoricProcessInstanceQueryProperty.PROCESS_INSTANCE_ID_ -> HistoricProcessInstanceQueryDtoSortingInner.SortByEnum.INSTANCEID
    HistoricProcessInstanceQueryProperty.PROCESS_DEFINITION_ID -> HistoricProcessInstanceQueryDtoSortingInner.SortByEnum.DEFINITIONID
    HistoricProcessInstanceQueryProperty.PROCESS_DEFINITION_KEY -> HistoricProcessInstanceQueryDtoSortingInner.SortByEnum.DEFINITIONKEY
    HistoricProcessInstanceQueryProperty.PROCESS_DEFINITION_NAME -> HistoricProcessInstanceQueryDtoSortingInner.SortByEnum.DEFINITIONNAME
    HistoricProcessInstanceQueryProperty.PROCESS_DEFINITION_VERSION -> HistoricProcessInstanceQueryDtoSortingInner.SortByEnum.DEFINITIONVERSION
    HistoricProcessInstanceQueryProperty.TENANT_ID -> HistoricProcessInstanceQueryDtoSortingInner.SortByEnum.TENANTID
    HistoricProcessInstanceQueryProperty.BUSINESS_KEY -> HistoricProcessInstanceQueryDtoSortingInner.SortByEnum.BUSINESSKEY
    HistoricProcessInstanceQueryProperty.START_TIME -> HistoricProcessInstanceQueryDtoSortingInner.SortByEnum.STARTTIME
    HistoricProcessInstanceQueryProperty.END_TIME -> HistoricProcessInstanceQueryDtoSortingInner.SortByEnum.ENDTIME
    HistoricProcessInstanceQueryProperty.DURATION -> HistoricProcessInstanceQueryDtoSortingInner.SortByEnum.DURATION
    else -> {
      logger.warn { "query property ${[email protected]} is not supported for sorting" }
      null
    }
  })

fun QueryOrderingProperty.toExecutionSorting(): ExecutionQueryDtoSortingInner = ExecutionQueryDtoSortingInner()
  .sortOrder(if (this.direction == Direction.DESCENDING) ExecutionQueryDtoSortingInner.SortOrderEnum.DESC else ExecutionQueryDtoSortingInner.SortOrderEnum.ASC)
  .sortBy(when ([email protected]) {
    ExecutionQueryProperty.PROCESS_INSTANCE_ID -> ExecutionQueryDtoSortingInner.SortByEnum.INSTANCEID
    ExecutionQueryProperty.PROCESS_DEFINITION_ID -> ExecutionQueryDtoSortingInner.SortByEnum.DEFINITIONID
    ExecutionQueryProperty.PROCESS_DEFINITION_KEY -> ExecutionQueryDtoSortingInner.SortByEnum.DEFINITIONKEY
    ExecutionQueryProperty.TENANT_ID -> ExecutionQueryDtoSortingInner.SortByEnum.TENANTID
    else -> {
      logger.warn { "query property ${[email protected]} is not supported for sorting" }
      null
    }
  })


fun QueryOrderingProperty.toTaskSorting(): TaskQueryDtoSortingInner? {
  val dtoSorting = TaskQueryDtoSortingInner()
    .sortOrder(if (this.direction == Direction.DESCENDING) TaskQueryDtoSortingInner.SortOrderEnum.DESC else TaskQueryDtoSortingInner.SortOrderEnum.ASC)
  return when (this.relation) {
    QueryOrderingProperty.RELATION_VARIABLE -> {
      dtoSorting.apply {
        val variableName = [email protected] { it.property == VariableInstanceQueryProperty.VARIABLE_NAME } ?: throw IllegalStateException("variable name not found")
        val variableType = [email protected] { it.property == VariableInstanceQueryProperty.VARIABLE_TYPE } ?: throw IllegalStateException("variable type not found")
        this.parameters = SortTaskQueryParametersDto().variable(variableName.scalarValue as String).type(variableType.scalarValue as String)
        val relation = [email protected] { it.isPropertyComparison } ?: throw IllegalStateException("no relation condition for property comparison")
        this.sortBy =
          if (relation.property == VariableInstanceQueryProperty.EXECUTION_ID && relation.comparisonProperty == TaskQueryProperty.PROCESS_INSTANCE_ID)
            TaskQueryDtoSortingInner.SortByEnum.PROCESSVARIABLE
          else if (relation.property == VariableInstanceQueryProperty.EXECUTION_ID && relation.comparisonProperty == TaskQueryProperty.EXECUTION_ID)
            TaskQueryDtoSortingInner.SortByEnum.EXECUTIONVARIABLE
          else if (relation.property == VariableInstanceQueryProperty.EXECUTION_ID && relation.comparisonProperty == TaskQueryProperty.EXECUTION_ID)
            TaskQueryDtoSortingInner.SortByEnum.EXECUTIONVARIABLE
          else if (relation.property == VariableInstanceQueryProperty.TASK_ID && relation.comparisonProperty == TaskQueryProperty.TASK_ID)
            TaskQueryDtoSortingInner.SortByEnum.TASKVARIABLE
          else if (relation.property == VariableInstanceQueryProperty.CASE_EXECUTION_ID && relation.comparisonProperty == TaskQueryProperty.CASE_INSTANCE_ID)
            TaskQueryDtoSortingInner.SortByEnum.CASEINSTANCEVARIABLE
          else if (relation.property == VariableInstanceQueryProperty.CASE_EXECUTION_ID && relation.comparisonProperty == TaskQueryProperty.CASE_EXECUTION_ID)
            TaskQueryDtoSortingInner.SortByEnum.CASEEXECUTIONVARIABLE
          else {
            logger.warn { "relation not supported $relation for sorting" }
            null
          }
      }
    }
    else -> dtoSorting.apply {
      this.sortBy = when ([email protected]) {
        TaskQueryProperty.ASSIGNEE -> TaskQueryDtoSortingInner.SortByEnum.ASSIGNEE
        TaskQueryProperty.TASK_ID -> TaskQueryDtoSortingInner.SortByEnum.ID
        TaskQueryProperty.NAME -> TaskQueryDtoSortingInner.SortByEnum.NAME
        TaskQueryProperty.NAME_CASE_INSENSITIVE -> TaskQueryDtoSortingInner.SortByEnum.NAMECASEINSENSITIVE
        TaskQueryProperty.CASE_EXECUTION_ID -> TaskQueryDtoSortingInner.SortByEnum.CASEEXECUTIONID
        TaskQueryProperty.CASE_INSTANCE_ID -> TaskQueryDtoSortingInner.SortByEnum.CASEINSTANCEID
        TaskQueryProperty.CREATE_TIME -> TaskQueryDtoSortingInner.SortByEnum.CREATED
        TaskQueryProperty.DESCRIPTION -> TaskQueryDtoSortingInner.SortByEnum.DESCRIPTION
        TaskQueryProperty.DUE_DATE -> TaskQueryDtoSortingInner.SortByEnum.DUEDATE
        TaskQueryProperty.EXECUTION_ID -> TaskQueryDtoSortingInner.SortByEnum.EXECUTIONID
        TaskQueryProperty.PRIORITY -> TaskQueryDtoSortingInner.SortByEnum.PRIORITY
        TaskQueryProperty.PROCESS_INSTANCE_ID -> TaskQueryDtoSortingInner.SortByEnum.INSTANCEID
        else -> {
          logger.warn { "query property ${[email protected]} is not supported" }
          null
        }
      }
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy