File: D:/HostingSpaces/debout/debout.nl/app/Components/ComponentType/SaveState/SaveStateBuilder.php
<?php
namespace App\Components\ComponentType\SaveState;
use 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\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');
}
}