/** * Creates a new ResponseTransformer-object * * @param ConfigurationInterface $configuration * * @return \ApaiIO\ResponseTransformer\ResponseTransformerInterface */ public static function createResponseTransformer(ConfigurationInterface $configuration) { $class = $configuration->getResponseTransformer(); $factoryCallback = $configuration->getResponseTransformerFactory(); if (true === is_object($class) && $class instanceof \ApaiIO\ResponseTransformer\ResponseTransformerInterface) { return self::applyCallback($factoryCallback, $class); } if (true === is_string($class) && true == array_key_exists($class, self::$responseTransformerObjects)) { return self::applyCallback($factoryCallback, self::$responseTransformerObjects[$class]); } try { $reflectionClass = new \ReflectionClass($class); } catch (\ReflectionException $e) { throw new \InvalidArgumentException(sprintf("Responsetransformerclass not found: %s", $class)); } if ($reflectionClass->implementsInterface('\\ApaiIO\\ResponseTransformer\\ResponseTransformerInterface')) { $responseTransformer = new $class(); if ($factoryCallback = $configuration->getResponseTransformerFactory()) { $responseTransformer = $factoryCallback($responseTransformer); } return self::$responseTransformerObjects[$class] = self::applyCallback($factoryCallback, $responseTransformer); } throw new \LogicException(sprintf("Responsetransformerclass does not implements the ResponseTransformerInterface: %s", $class)); }