/**
* Get a repository connected to the backend with the provided doctrine
* dbal connection.
*
* {@inheritDoc}
*
* DoctrineDBAL repositories have no default repository, passing null as
* parameters will always return null.
*
* @api
*/
public function getRepository(array $parameters = null)
{
if (null === $parameters) {
throw new ConfigurationException('Jackalope-doctrine-dbal needs parameters');
}
if (count(array_diff_key(self::$required, $parameters))) {
throw new ConfigurationException('A required parameter is missing: ' . implode(', ', array_keys(array_diff_key(self::$required, $parameters))));
}
if (count(array_diff_key($parameters, self::$required, self::$optional))) {
throw new ConfigurationException('Additional unknown parameters found: ' . implode(', ', array_keys(array_diff_key($parameters, self::$required, self::$optional))));
}
if (isset($parameters['jackalope.factory'])) {
$factory = $parameters['jackalope.factory'] instanceof FactoryInterface ? $parameters['jackalope.factory'] : new $parameters['jackalope.factory']();
} else {
$factory = new Factory();
}
$dbConn = $parameters['jackalope.doctrine_dbal_connection'];
$transport = isset($parameters['jackalope.data_caches']) ? $factory->get('Transport\\DoctrineDBAL\\CachedClient', array($dbConn, $parameters['jackalope.data_caches'])) : $factory->get('Transport\\DoctrineDBAL\\Client', array($dbConn));
if (isset($parameters['jackalope.check_login_on_server'])) {
$transport->setCheckLoginOnServer($parameters['jackalope.check_login_on_server']);
}
if (isset($parameters['jackalope.uuid_generator'])) {
$transport->setUuidGenerator($parameters['jackalope.uuid_generator']);
}
if (isset($parameters['jackalope.logger'])) {
$transport = $factory->get('Transport\\DoctrineDBAL\\LoggingClient', array($transport, $parameters['jackalope.logger']));
}
$options['transactions'] = empty($parameters['jackalope.disable_transactions']);
$options['stream_wrapper'] = empty($parameters['jackalope.disable_stream_wrapper']);
if (isset($parameters[Session::OPTION_AUTO_LASTMODIFIED])) {
$options[Session::OPTION_AUTO_LASTMODIFIED] = $parameters[Session::OPTION_AUTO_LASTMODIFIED];
}
return new Repository($factory, $transport, $options);
}