<?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;    }}