<?php
/*
* This file is part of Sulu.
*
* (c) Sulu GmbH
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace Sulu\Component\DocumentManager\Metadata;
use PHPCR\NodeInterface;
use Sulu\Component\DocumentManager\Document\UnknownDocument;
use Sulu\Component\DocumentManager\Metadata;
use Sulu\Component\DocumentManager\MetadataFactoryInterface;
/**
* This class fully implements the MetadataFactoryInterface by composing
* the "base" metadata factory and the node mxins.
*/
class MetadataFactory implements MetadataFactoryInterface
{
/**
* @var MetadataFactoryInterface
*/
private $metadataFactory;
public function __construct(MetadataFactoryInterface $metadataFactory)
{
$this->metadataFactory = $metadataFactory;
}
public function getMetadataForAlias($alias)
{
return $this->metadataFactory->getMetadataForAlias($alias);
}
public function getMetadataForPhpcrType($phpcrType)
{
return $this->metadataFactory->getMetadataForPhpcrType($phpcrType);
}
public function hasMetadataForPhpcrType($phpcrType)
{
return $this->metadataFactory->hasMetadataForPhpcrType($phpcrType);
}
public function getMetadataForClass($class)
{
return $this->metadataFactory->getMetadataForClass($class);
}
public function hasMetadataForClass($class)
{
return $this->metadataFactory->hasMetadataForClass($class);
}
public function hasAlias($alias)
{
return $this->metadataFactory->hasAlias($alias);
}
public function getAliases()
{
return $this->metadataFactory->getAliases();
}
public function getMetadataForPhpcrNode(NodeInterface $node)
{
if (false === $node->hasProperty('jcr:mixinTypes')) {
return $this->getUnknownMetadata();
}
$mixinTypes = (array) $node->getPropertyValue('jcr:mixinTypes');
foreach ($mixinTypes as $mixinType) {
if (true == $this->metadataFactory->hasMetadataForPhpcrType($mixinType)) {
return $this->metadataFactory->getMetadataForPhpcrType($mixinType);
}
}
return $this->getUnknownMetadata();
}
public function getAllMetadata()
{
return $this->metadataFactory->getAllMetadata();
}
/**
* @return Metadata
*/
private function getUnknownMetadata()
{
$metadata = new Metadata();
$metadata->setAlias(null);
$metadata->setPhpcrType(null);
$metadata->setClass(UnknownDocument::class);
return $metadata;
}
}