/**
  * @param array $configuration
  * @param ProcessDefinition $definition
  * @return ProcessTrigger
  * @throws InvalidParameterException
  */
 public function buildProcessTrigger(array $configuration, ProcessDefinition $definition)
 {
     $this->assertConfigurationOptions($configuration, array('event'));
     $event = $configuration['event'];
     if (!in_array($event, ProcessTrigger::getAllowedEvents())) {
         throw new InvalidParameterException(sprintf('Event "%s" is not allowed', $event));
     }
     $field = $this->getConfigurationOption($configuration, 'field', null);
     $priority = $this->getConfigurationOption($configuration, 'priority', Job::PRIORITY_DEFAULT);
     $queued = $this->getConfigurationOption($configuration, 'queued', false);
     $timeShift = $this->getConfigurationOption($configuration, 'time_shift', null);
     if ($timeShift && !is_int($timeShift) && !$timeShift instanceof \DateInterval) {
         throw new InvalidParameterException('Time shift parameter must be either integer or DateInterval');
     }
     if ($field && $event != ProcessTrigger::EVENT_UPDATE) {
         throw new InvalidParameterException('Field is only allowed for update event');
     }
     $trigger = new ProcessTrigger();
     $trigger->setEvent($event)->setField($field)->setPriority($priority)->setQueued($queued)->setDefinition($definition);
     if ($timeShift instanceof \DateInterval) {
         $trigger->setTimeShiftInterval($timeShift);
     } else {
         $trigger->setTimeShift($timeShift);
     }
     return $trigger;
 }
 /**
  * @param array $configuration
  * @param ProcessDefinition $definition
  * @return ProcessTrigger
  * @throws InvalidParameterException
  */
 public function buildProcessTrigger(array $configuration, ProcessDefinition $definition)
 {
     $event = $this->getConfigurationOption($configuration, 'event', null);
     $cron = $this->getCronExpression($configuration);
     $this->validateEventAndCronParameters($event, $cron);
     $field = $this->getConfigurationOption($configuration, 'field', null);
     $priority = $this->getConfigurationOption($configuration, 'priority', Job::PRIORITY_DEFAULT);
     $queued = $this->getConfigurationOption($configuration, 'queued', false);
     $timeShift = $this->getConfigurationOption($configuration, 'time_shift', null);
     if ($timeShift && !is_int($timeShift) && !$timeShift instanceof \DateInterval) {
         throw new InvalidParameterException('Time shift parameter must be either integer or DateInterval');
     }
     if ($field && $event !== ProcessTrigger::EVENT_UPDATE) {
         throw new InvalidParameterException('Field is only allowed for update event');
     }
     $trigger = new ProcessTrigger();
     $trigger->setEvent($event)->setField($field)->setPriority($priority)->setQueued($queued)->setDefinition($definition)->setCron($cron);
     if ($timeShift instanceof \DateInterval) {
         $trigger->setTimeShiftInterval($timeShift);
     } else {
         $trigger->setTimeShift($timeShift);
     }
     return $trigger;
 }