protected Integer getActivityPriority(
      ExecutionEntity execution, JobDeclaration<?> jobDeclaration) {
    if (jobDeclaration != null) {
      ParameterValueProvider priorityProvider = jobDeclaration.getJobPriorityProvider();
      if (priorityProvider != null) {
        return evaluateValueProvider(priorityProvider, execution, jobDeclaration);
      }
    }

    return null;
  }
  protected Integer evaluateValueProvider(
      ParameterValueProvider valueProvider,
      ExecutionEntity execution,
      JobDeclaration<?> jobDeclaration) {
    Object value = valueProvider.getValue(execution);

    if (!(value instanceof Integer)) {
      throw new ProcessEngineException(
          "Priority for job "
              + jobDeclaration.getActivityId()
              + "/"
              + jobDeclaration.getJobHandlerType()
              + " instantiated "
              + "in context of "
              + execution
              + " is not an Integer");
    } else {
      return (Integer) value;
    }
  }
  protected Integer getJobDefinitionPriority(
      ExecutionEntity execution, JobDeclaration<?> jobDeclaration) {
    String jobDefinitionId = jobDeclaration.getJobDefinitionId();

    if (jobDefinitionId != null) {
      JobDefinitionEntity jobDefinition =
          Context.getCommandContext().getJobDefinitionManager().findById(jobDefinitionId);

      if (jobDefinition != null) {
        return jobDefinition.getJobPriority();
      }
    }

    return null;
  }