/**
* Creates a new Requestobject
*
* @param ConfigurationInterface $configuration The configurationobject
*
* @return \ApaiIO\Request\RequestInterface
*/
public static function createRequest(ConfigurationInterface $configuration)
{
$class = $configuration->getRequest();
$factoryCallback = $configuration->getRequestFactory();
if (true === is_object($class) && $class instanceof \ApaiIO\Request\RequestInterface) {
$class->setConfiguration($configuration);
return self::applyCallback($factoryCallback, $class);
}
if (true === is_string($class) && true === array_key_exists($class, self::$requestObjects)) {
$request = self::$requestObjects[$class];
$request->setConfiguration($configuration);
return self::applyCallback($factoryCallback, $request);
}
try {
$reflectionClass = new \ReflectionClass($class);
} catch (\ReflectionException $e) {
throw new \InvalidArgumentException(sprintf("Requestclass not found: %s", $class));
}
if ($reflectionClass->implementsInterface('\\ApaiIO\\Request\\RequestInterface')) {
$request = new $class();
$request->setConfiguration($configuration);
return self::$requestObjects[$class] = self::applyCallback($factoryCallback, $request);
}
throw new \LogicException(sprintf("Requestclass does not implements the RequestInterface: %s", $class));
}