src/Model/Property/CompositionPropertyDecorator.php
<?php
declare(strict_types = 1);
namespace PHPModelGenerator\Model\Property;
use PHPModelGenerator\Exception\SchemaException;
use PHPModelGenerator\Model\SchemaDefinition\JsonSchema;
use PHPModelGenerator\Model\SchemaDefinition\ResolvedDefinitionsCollection;
/**
* Class CompositionPropertyDecorator
*
* @package PHPModelGenerator\Model\Property
*/
class CompositionPropertyDecorator extends PropertyProxy
{
private const PROPERTY_KEY = 'composition';
/**
* Store all properties from nested schemas of the composed property validator. If the composition validator fails
* all affected properties must be set to null to adopt only valid values in the base model.
*
* @var PropertyInterface[]
*/
protected $affectedObjectProperties = [];
/**
* CompositionPropertyDecorator constructor.
*
* @throws SchemaException
*/
public function __construct(string $propertyName, JsonSchema $jsonSchema, PropertyInterface $property)
{
parent::__construct(
$propertyName,
$jsonSchema,
new ResolvedDefinitionsCollection([self::PROPERTY_KEY => $property]),
self::PROPERTY_KEY,
);
$property->onResolve(function (): void {
$this->resolve();
});
}
/**
* Append an object property which is affected by the composition validator
*/
public function appendAffectedObjectProperty(PropertyInterface $property): void
{
$this->affectedObjectProperties[] = $property;
}
/**
* @return PropertyInterface[]
*/
public function getAffectedObjectProperties(): array
{
return $this->affectedObjectProperties;
}
}