Exemplo n.º 1
0
 /**
  * {@inheritdoc}
  */
 public function execute(StepExecutionWarningHandlerInterface $warningHandler = null)
 {
     $itemsToWrite = [];
     $writeCount = 0;
     $scheduleWrite = false;
     try {
         $stopExecution = false;
         while (!$stopExecution) {
             try {
                 $readItem = $this->reader->read();
                 if (null === $readItem) {
                     $stopExecution = true;
                     continue;
                 }
             } catch (InvalidItemException $e) {
                 $this->handleStepExecutionWarning($this->reader, $e, $warningHandler);
                 continue;
             }
             $processedItem = $this->process($readItem, $warningHandler);
             if (null !== $processedItem) {
                 $itemsToWrite[] = $processedItem;
                 $writeCount++;
                 if (0 === $writeCount % $this->batchSize || $scheduleWrite) {
                     $this->write($itemsToWrite, $warningHandler);
                     $itemsToWrite = [];
                     $scheduleWrite = false;
                 }
             }
             if ($this->reader instanceof IteratorBasedReader) {
                 $sourceIterator = $this->reader->getSourceIterator();
                 if ($sourceIterator instanceof SubordinateReaderInterface && $sourceIterator->writeRequired()) {
                     $scheduleWrite = true;
                 }
             }
         }
         if (count($itemsToWrite) > 0) {
             $this->write($itemsToWrite, $warningHandler);
         }
         $this->ensureResourcesReleased($warningHandler);
     } catch (\Exception $error) {
         $this->ensureResourcesReleased($warningHandler);
         throw $error;
     }
 }