preprocessors = $preprocessors; $this->sorter = $sorter; $this->defaultPreprocessor = $defaultPreprocessor; $this->objectManager = $objectManager; } /** * Execute preprocessors instances suitable to convert source content type into a destination one * * @param Chain $chain * @return void */ public function process(Chain $chain) { $type = $chain->getTargetContentType(); foreach ($this->getPreProcessors($type) as $preProcessor) { $preProcessor->process($chain); } } /** * Retrieve preProcessors by types * * @param string $type * @return PreProcessorInterface[] * @throws \UnexpectedValueException */ private function getPreProcessors($type) { if (isset($this->instances[$type])) { return $this->instances[$type]; } if (isset($this->preprocessors[$type])) { $preprocessors = $this->sorter->sort($this->preprocessors[$type]); } else { $preprocessors = [ 'default' => [self::PREPROCESSOR_CLASS => $this->defaultPreprocessor] ]; } $this->instances[$type] = []; foreach ($preprocessors as $preprocessor) { $instance = $this->objectManager->get($preprocessor[self::PREPROCESSOR_CLASS]); if (!$instance instanceof PreProcessorInterface) { throw new \UnexpectedValueException( '"' . $preprocessor[self::PREPROCESSOR_CLASS] . '" has to implement the PreProcessorInterface.' ); } $this->instances[$type][] = $instance; } return $this->instances[$type]; } }