/**
  * {@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;
     }
     $invalidItemPositions = new ArrayCollection();
     foreach ($this->collector->getInvalidItems() as $invalidItem) {
         if ($invalidItem instanceof InvalidItemInterface) {
             $invalidItemPositions->add($invalidItem->getItemPosition());
         }
     }
     $readJobParameters = $jobExecution->getJobParameters();
     $currentItemPosition = 0;
     $itemsToWrite = [];
     $fileIterator = $this->getInputFileIterator($readJobParameters);
     $this->setupWriter($jobExecution);
     while ($fileIterator->valid()) {
         $readItem = $fileIterator->current();
         $currentItemPosition++;
         if ($invalidItemPositions->contains($currentItemPosition)) {
             $headers = $fileIterator->getHeaders();
             $invalidItem = array_combine($headers, $readItem);
             if (false !== $invalidItem) {
                 $itemsToWrite[] = $invalidItem;
             }
             $invalidItemPositions->removeElement($currentItemPosition);
         }
         if (count($itemsToWrite) > 0 && 0 === count($itemsToWrite) % $this->batchSize) {
             $this->writer->write($itemsToWrite);
             $itemsToWrite = [];
         }
         if ($invalidItemPositions->isEmpty()) {
             break;
         }
         $fileIterator->next();
     }
     if (count($itemsToWrite) > 0) {
         $this->writer->write($itemsToWrite);
     }
     $this->writer->flush();
 }