HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/stafa/stafa.nl/app/Komma/Components/ComponentType/SaveState/SaveStateBuilder.php
<?php


namespace App\Komma\Components\ComponentType\SaveState;


use App\Komma\Kms\Core\Attributes\Attribute;

/**
 * Class SaveStateBuilder
 *
 * Use this class to build saveState instance.
 * This savestate instance can be used for a dynamic attribute
 *
 * @package App\Komma\Components\ComponentType\SaveStateAttributes\SaveState
 */
class SaveStateBuilder extends AbstractSaveStateBuilder
{
    public function __construct()
    {
        $this->saveState = new SaveState();
    }

    /**
     * @return SaveStateInterface
     */
    public function build(): SaveStateInterface
    {
        $this->validateSaveState($this->saveState);
        return $this->saveState;
    }

    /**
     * @param Attribute $attributeInstance
     * @return AbstractSaveStateBuilder
     */
    public function addAttributeInstance(Attribute $attributeInstance): AbstractSaveStateBuilder
    {
        $this->saveState->addAttributeInstance($attributeInstance);
        return $this;
    }

    /**
     * @param string $version
     * @return SaveStateBuilder
     */
    public function setVersion(string $version): AbstractSaveStateBuilder
    {
        $allowedVersions = ['1.0'];
        if(!in_array($version, $allowedVersions, true)) throw new \InvalidArgumentException('The given version number is not allowed. Allowed ones are: '.implode(', ',$allowedVersions));

        $this->saveState->setVersion($version);
        return $this;
    }

    /**
     * Validate that the save state instance is
     * @param SaveStateInterface $saveState
     */
    private function validateSaveState(SaveStateInterface $saveState)
    {
        if($saveState->getVersion() === '') throw new \RuntimeException('The savestate does not have an valid version number set');
        if($saveState->getAttributeInstances() === null) throw new \RuntimeException('The savestate does not have attributes set');
    }
}