MapperFactoryProxy.php 1.79 KB
<?php
/**
 * @copyright  Vertex. All rights reserved.  https://www.vertexinc.com/
 * @author     Mediotype                     https://www.mediotype.com/
 */

namespace Vertex\Tax\Model\Api\Utility;

use Magento\Store\Model\ScopeInterface;
use Vertex\Mapper\MapperFactory;
use Vertex\Tax\Model\Api\ConfigBuilder;
use Vertex\Utility\VersionDeterminer;

/**
 * Retrieve a mapper based on Magento configuration
 */
class MapperFactoryProxy
{
    /** @var ConfigBuilder */
    private $configBuilder;

    /** @var MapperFactory */
    private $factory;

    /** @var VersionDeterminer */
    private $versionDeterminer;

    /**
     * @param MapperFactory $factory
     * @param VersionDeterminer $versionDeterminer
     * @param ConfigBuilder $configBuilder
     */
    public function __construct(
        MapperFactory $factory,
        VersionDeterminer $versionDeterminer,
        ConfigBuilder $configBuilder
    ) {
        $this->factory = $factory;
        $this->versionDeterminer = $versionDeterminer;
        $this->configBuilder = $configBuilder;
    }

    /**
     * Retrieve a mapper instance given a MapperInterface
     *
     * @param string $mapperInterface Mapper Interface to create
     * @param string|null $scopeCode Scope ID to use for configuration
     * @param string $scopeType Scope Type
     * @return mixed
     * @throws \Vertex\Exception\ConfigurationException
     */
    public function getForClass($mapperInterface, $scopeCode = null, $scopeType = ScopeInterface::SCOPE_STORE)
    {
        $config = $this->configBuilder
            ->setScopeCode($scopeCode)
            ->setScopeType($scopeType)
            ->build();

        $version = $this->versionDeterminer->execute($config->getTaxAreaLookupWsdl());

        return $this->factory->getForClass($mapperInterface, $version);
    }
}