/** * Verify if the writer is usable or not * * @param ItemWriterInterface $writer * * @return bool */ protected function isUsableWriter(ItemWriterInterface $writer) { if ($writer instanceof ArchivableWriterInterface && count($writer->getWrittenFiles()) > 1) { return false; } if (($writer instanceof FileWriter || $writer instanceof AbstractFileWriter) && is_file($writer->getPath())) { return true; } return false; }
/** * @param array $processedItems * * @return null */ protected function write($processedItems) { try { $this->writer->write($processedItems); } catch (InvalidItemException $e) { $this->handleStepExecutionWarning($this->stepExecution, $this->writer, $e); } }
/** * {@inheritdoc} * * Re-parse the imported file and write into a new one the invalid lines. */ public function archive(JobExecution $jobExecution) { if (empty($this->collector->getInvalidItems())) { return; } $invalidLineNumbers = new ArrayCollection(); foreach ($this->collector->getInvalidItems() as $invalidItem) { if ($invalidItem instanceof InvalidItemInterface) { $invalidLineNumbers->add($invalidItem->getLineNumber()); } } $readJobParameters = $jobExecution->getJobParameters(); $currentLineNumber = 0; $itemsToWrite = []; $fileIterator = $this->getInputFileIterator($readJobParameters); $headers = $fileIterator->getHeaders(); $this->setupWriter($jobExecution); foreach ($fileIterator as $readItem) { $currentLineNumber++; if ($invalidLineNumbers->contains($currentLineNumber)) { $itemsToWrite[] = array_combine($headers, $readItem); $invalidLineNumbers->removeElement($currentLineNumber); } if (count($itemsToWrite) > 0 && 0 === count($itemsToWrite) % $this->batchSize) { $this->writer->write($itemsToWrite); $itemsToWrite = []; } if ($invalidLineNumbers->isEmpty()) { break; } } if (count($itemsToWrite) > 0) { $this->writer->write($itemsToWrite); } $this->writer->flush(); }
/** * Verify if the writer is usable or not * * @param ItemWriterInterface $writer * * @return bool */ protected function isUsableWriter(ItemWriterInterface $writer) { $isNewWriter = $writer instanceof AbstractItemMediaWriter; $isNewItemMediaWriter = $writer instanceof AbstractFileWriter; if (!($isNewItemMediaWriter || $isNewWriter)) { return false; } if ($writer instanceof ArchivableWriterInterface) { foreach ($writer->getWrittenFiles() as $filePath => $fileName) { if (!is_file($filePath)) { return false; } } return true; } return is_file($writer->getPath()); }
/** * Verify if the writer is usable or not * * @param ItemWriterInterface $writer * * @return bool */ protected function isWriterUsable(ItemWriterInterface $writer) { return $writer instanceof ArchivableWriterInterface && count($writer->getWrittenFiles()) > 1; }