/** * {@inheritdoc} */ public function start() { $dispatcher = $this->getDispatcher(); $sourceEvent = new SourcePipelineEvent(); $sourceEvent->setContext($this->getContext()); $dispatcher->dispatch($this->getEventName(self::EVENT_SUFFIX_SOURCE), $sourceEvent); $this->setContext($sourceEvent->getContext()); $sources = $sourceEvent->getSources(); $outputs = []; $startEvent = new StartPipelineEvent(); $startEvent->setContext($this->getContext()); $startEvent->setItemCount($this->countSourceItems($sources)); $dispatcher->dispatch($this->getEventName(self::EVENT_SUFFIX_START), $startEvent); $this->setContext($startEvent->getContext()); $this->progressBar && $this->progressBar->start($this->countSourceItems($sources)); foreach ($sources as $source) { foreach ($source as $item) { $itemEvent = new ItemPipelineEvent($item); $itemEvent->setContext($this->getContext()); $dispatcher->dispatch($this->getEventName(self::EVENT_SUFFIX_MODIFY), $itemEvent); $dispatcher->dispatch($this->getEventName(self::EVENT_SUFFIX_CONSUME), $itemEvent); $output = $itemEvent->getOutput(); if ($output !== null) { $outputs[] = $output; } $this->setContext($itemEvent->getContext()); $this->progressBar && $this->progressBar->advance(); } } $finishEvent = new FinishPipelineEvent(); $finishEvent->setContext($this->getContext()); $dispatcher->dispatch($this->getEventName(self::EVENT_SUFFIX_FINISH), $finishEvent); $this->progressBar && $this->progressBar->finish(); return ['outputs' => $outputs]; }
/** * Test onConsume action. */ public function testOnConsume() { $item = $this->getMock('ONGR\\ConnectionsBundle\\Sync\\DiffProvider\\Item\\AbstractDiffItem'); $this->itemPipelineEvent->expects($this->once())->method('getItem')->will($this->returnValue($item)); $this->extractor->expects($this->once())->method('extract')->with($item); $this->listener->onConsume($this->itemPipelineEvent); }
/** * Skips item, marks event as skipped with a reason. * * @param ItemPipelineEvent $event * @param string $reason */ public static function skip(ItemPipelineEvent $event, $reason = '') { $itemSkip = new ItemSkip(); $itemSkip->setReason($reason); $event->setItemSkip($itemSkip); $event->stopPropagation(); }
/** * Entry point of consume event. * * @param ItemPipelineEvent $event */ public function onConsume(ItemPipelineEvent $event) { if ($event->getItemSkip()) { $this->skip($event); } else { $this->consume($event); } }
/** * Validates the class name of event item and prepares internal document for persistence operation. * * @param ItemPipelineEvent $event * * @return bool */ protected function setItem(ItemPipelineEvent $event) { /** @var AbstractImportItem $tempItem */ $tempItem = $event->getItem(); if (!$tempItem instanceof $this->importItemClass) { $this->log("Item provided is not an {$this->importItemClass}", LogLevel::ERROR); return false; } $this->importItem = $tempItem; return true; }
/** * Modify event. * * @param ItemPipelineEvent $event */ public function onModify(ItemPipelineEvent $event) { $item = $event->getItem(); if ($item instanceof ImportItem) { $this->modify($item, $event); } elseif ($item instanceof SyncExecuteItem) { $syncStorageData = $item->getSyncStorageData(); if ($syncStorageData['type'] !== ActionTypes::DELETE) { $this->modify($item, $event); } else { ItemSkipper::skip($event, 'Delete item with id = ' . $syncStorageData['id']); } } else { $this->log('The type of provided item is not ImportItem or SyncExecuteItem.', LogLevel::ERROR); } }
/** * OnModify. * * @param ItemPipelineEvent $event */ public function onModify(ItemPipelineEvent $event) { if ($event->getItem() == 'skip') { ItemSkipper::skip($event, 'Test reason for skip'); } }
/** * {@inheritdoc} */ public function skip(ItemPipelineEvent $event) { if ($event->getItemSkip()->getReason() === 'Test reason for skip') { $this->skipCalled++; } }
/** * Pipeline consume event listener. * * @param ItemPipelineEvent $event */ public function consume(ItemPipelineEvent $event) { $this->invalidateItem($event->getItem(), $event->getContext()); }
/** * Consumes given event. * * @param ItemPipelineEvent $event */ public function consume(ItemPipelineEvent $event) { $this->extractor->extract($event->getItem()); }
/** * Events onModify action. * * @param ItemPipelineEvent $documentEvent */ public function onModify(ItemPipelineEvent $documentEvent) { $this->processData($documentEvent->getItem()); }