/**
* Get class name mapped to collection
*
* @param string $name name of collection
* @param array $defaultDefinition definition used when no definition found for defined class
* @throws Exception
* @return string|array name of class or array of class definition
*/
private function getCollectionDefinition($name, array $defaultDefinition = null)
{
if (isset($this->mapping[$name])) {
$classDefinition = $this->mapping[$name];
} elseif ($this->regexpMapping) {
foreach ($this->regexpMapping as $collectionNamePattern => $regexpMappingClassDefinition) {
if (preg_match($collectionNamePattern, $name, $matches)) {
$classDefinition = clone $regexpMappingClassDefinition;
$classDefinition->setOption('regexp', $matches);
break;
}
}
}
// mapping not configured - use default
if (!isset($classDefinition)) {
if (!empty($this->mapping['*'])) {
$classDefinition = clone $this->mapping['*'];
$collectionClass = $classDefinition->getClass() . '\\' . implode('\\', array_map('ucfirst', explode('.', $name)));
$classDefinition->setClass($collectionClass);
} else {
$classDefinition = new Definition();
if ($defaultDefinition) {
$classDefinition->merge($defaultDefinition);
}
}
}
// check if class exists
if (!class_exists($classDefinition->getClass())) {
throw new Exception('Class ' . $classDefinition->getClass() . ' not found while map collection name to class');
}
return $classDefinition;
}