protected List<ProcessDefinitionEntity> findProcessDefinition(CommandContext commandContext) {

    // If process definition is already provided (eg. when command is called through the DeployCmd)
    // we don't need to do an extra database fetch and we can simply return it, wrapped in a list
    if (processDefinitionEntity != null) {
      return Arrays.asList(processDefinitionEntity);
    }

    // Validation of input parameters
    if (processDefinitionId == null && processDefinitionKey == null) {
      throw new ActivitiIllegalArgumentException("Process definition id or key cannot be null");
    }

    List<ProcessDefinitionEntity> processDefinitionEntities =
        new ArrayList<ProcessDefinitionEntity>();
    ProcessDefinitionEntityManager processDefinitionManager =
        commandContext.getProcessDefinitionEntityManager();

    if (processDefinitionId != null) {

      ProcessDefinitionEntity processDefinitionEntity =
          processDefinitionManager.findProcessDefinitionById(processDefinitionId);
      if (processDefinitionEntity == null) {
        throw new ActivitiObjectNotFoundException(
            "Cannot find process definition for id '" + processDefinitionId + "'",
            ProcessDefinition.class);
      }
      processDefinitionEntities.add(processDefinitionEntity);

    } else {

      List<ProcessDefinition> processDefinitions =
          new ProcessDefinitionQueryImpl(commandContext)
              .processDefinitionKey(processDefinitionKey)
              .list();

      if (processDefinitions.size() == 0) {
        throw new ActivitiException(
            "Cannot find process definition for key '" + processDefinitionKey + "'");
      }

      for (ProcessDefinition processDefinition : processDefinitions) {
        processDefinitionEntities.add((ProcessDefinitionEntity) processDefinition);
      }
    }
    return processDefinitionEntities;
  }