/**
  * 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;
 }