Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
100.00% |
1 / 1 |
|
100.00% |
11 / 11 |
CRAP | |
100.00% |
64 / 64 |
| Validator | |
100.00% |
1 / 1 |
|
100.00% |
11 / 11 |
33 | |
100.00% |
64 / 64 |
| __construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
8 / 8 |
|||
| setup | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
| validateDataModel | |
100.00% |
1 / 1 |
3 | |
100.00% |
5 / 5 |
|||
| validateEntity | |
100.00% |
1 / 1 |
7 | |
100.00% |
13 / 13 |
|||
| validateAttribute | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
| validateReference | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
| validateIndex | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
| validateCollection | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
| validateCollectionMany | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
| addGenericGeneratorConfig | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
| addValidator | |
100.00% |
1 / 1 |
8 | |
100.00% |
17 / 17 |
|||
| <?php | |
| declare(strict_types = 1); | |
| namespace Siesta\Validator; | |
| use Siesta\Config\GenericGeneratorConfig; | |
| use Siesta\Contract\AttributeValidator; | |
| use Siesta\Contract\CollectionManyValidator; | |
| use Siesta\Contract\CollectionValidator; | |
| use Siesta\Contract\DataModelValidator; | |
| use Siesta\Contract\EntityValidator; | |
| use Siesta\Contract\IndexValidator; | |
| use Siesta\Contract\ReferenceValidator; | |
| use Siesta\Model\Attribute; | |
| use Siesta\Model\Collection; | |
| use Siesta\Model\CollectionMany; | |
| use Siesta\Model\DataModel; | |
| use Siesta\Model\Entity; | |
| use Siesta\Model\Index; | |
| use Siesta\Model\Reference; | |
| use Siesta\Model\ValidationLogger; | |
| /** | |
| * @author Gregor Müller | |
| */ | |
| class Validator | |
| { | |
| const DATAMODEL_VALIDATOR_INTERFACE = 'Siesta\Contract\DataModelValidator'; | |
| const ENTIY_VALIDATOR_INTERFACE = 'Siesta\Contract\EntityValidator'; | |
| const ATTRIBUTE_VALIDATOR_INTERFACE = 'Siesta\Contract\AttributeValidator'; | |
| const REFERENCE_VALIDATOR_INTERFACE = 'Siesta\Contract\ReferenceValidator'; | |
| const INDEX_VALIDATOR_INTERFACE = 'Siesta\Contract\IndexValidator'; | |
| const COLLECTION_VALIDATOR_INTERFACE = 'Siesta\Contract\CollectionValidator'; | |
| const COLLECTION_MANY_VALIDATOR_INTERFACE = 'Siesta\Contract\CollectionManyValidator'; | |
| /** | |
| * @var DataModelValidator[] | |
| */ | |
| protected $dataModelValidatorList; | |
| /** | |
| * @var EntityValidator[] | |
| */ | |
| protected $entityValidatorList; | |
| /** | |
| * @var AttributeValidator[] | |
| */ | |
| protected $attributeValidatorList; | |
| /** | |
| * @var ReferenceValidator[] | |
| */ | |
| protected $referenceValidatorList; | |
| /** | |
| * @var IndexValidator[] | |
| */ | |
| protected $indexValidatorList; | |
| /*** | |
| * @var CollectionValidator[] | |
| */ | |
| protected $collectionValidatorList; | |
| /** | |
| * @var CollectionManyValidator[] | |
| */ | |
| protected $collectionManyValidatorList; | |
| /** | |
| * Validator constructor. | |
| */ | |
| public function __construct() | |
| { | |
| $this->dataModelValidatorList = []; | |
| $this->entityValidatorList = []; | |
| $this->attributeValidatorList = []; | |
| $this->referenceValidatorList = []; | |
| $this->indexValidatorList = []; | |
| $this->collectionValidatorList = []; | |
| $this->collectionManyValidatorList = []; | |
| } | |
| /** | |
| * @param GenericGeneratorConfig[] $genericGeneratorConfigList | |
| */ | |
| public function setup(array $genericGeneratorConfigList) | |
| { | |
| foreach ($genericGeneratorConfigList as $genericGeneratorConfig) { | |
| $this->addGenericGeneratorConfig($genericGeneratorConfig); | |
| } | |
| } | |
| /** | |
| * @param DataModel $dataModel | |
| * @param ValidationLogger $logger | |
| */ | |
| public function validateDataModel(DataModel $dataModel, ValidationLogger $logger) | |
| { | |
| foreach ($this->dataModelValidatorList as $dataModelValidator) { | |
| $dataModelValidator->validate($dataModel, $logger); | |
| } | |
| foreach ($dataModel->getEntityList() as $entity) { | |
| $this->validateEntity($dataModel, $entity, $logger); | |
| } | |
| } | |
| /** | |
| * @param DataModel $dataModel | |
| * @param Entity $entity | |
| * @param ValidationLogger $logger | |
| */ | |
| protected function validateEntity(DataModel $dataModel, Entity $entity, ValidationLogger $logger) | |
| { | |
| foreach ($this->entityValidatorList as $validator) { | |
| $validator->validate($dataModel, $entity, $logger); | |
| } | |
| foreach ($entity->getAttributeList() as $attribute) { | |
| $this->validateAttribute($dataModel, $entity, $attribute, $logger); | |
| } | |
| foreach ($entity->getReferenceList() as $reference) { | |
| $this->validateReference($dataModel, $entity, $reference, $logger); | |
| } | |
| foreach ($entity->getIndexList() as $index) { | |
| $this->validateIndex($dataModel, $entity, $index, $logger); | |
| } | |
| foreach ($entity->getCollectionList() as $collection) { | |
| $this->validateCollection($dataModel, $entity, $collection, $logger); | |
| } | |
| foreach ($entity->getCollectionManyList() as $collectionMany) { | |
| $this->validateCollectionMany($dataModel, $entity, $collectionMany, $logger); | |
| } | |
| } | |
| /** | |
| * @param DataModel $dataModel | |
| * @param Entity $entity | |
| * @param Attribute $attribute | |
| * @param ValidationLogger $logger | |
| */ | |
| protected function validateAttribute(DataModel $dataModel, Entity $entity, Attribute $attribute, ValidationLogger $logger) | |
| { | |
| foreach ($this->attributeValidatorList as $validator) { | |
| $validator->validate($dataModel, $entity, $attribute, $logger); | |
| } | |
| } | |
| /** | |
| * @param DataModel $dataModel | |
| * @param Entity $entity | |
| * @param Reference $reference | |
| * @param ValidationLogger $logger | |
| */ | |
| protected function validateReference(DataModel $dataModel, Entity $entity, Reference $reference, ValidationLogger $logger) | |
| { | |
| foreach ($this->referenceValidatorList as $validator) { | |
| $validator->validate($dataModel, $entity, $reference, $logger); | |
| } | |
| } | |
| /** | |
| * @param DataModel $dataModel | |
| * @param Entity $entity | |
| * @param Index $index | |
| * @param ValidationLogger $logger | |
| */ | |
| protected function validateIndex(DataModel $dataModel, Entity $entity, Index $index, ValidationLogger $logger) | |
| { | |
| foreach ($this->indexValidatorList as $validator) { | |
| $validator->validate($dataModel, $entity, $index, $logger); | |
| } | |
| } | |
| /** | |
| * @param DataModel $dataModel | |
| * @param Entity $entity | |
| * @param Collection $collection | |
| * @param ValidationLogger $logger | |
| */ | |
| protected function validateCollection(DataModel $dataModel, Entity $entity, Collection $collection, ValidationLogger $logger) | |
| { | |
| foreach ($this->collectionValidatorList as $validator) { | |
| $validator->validate($dataModel, $entity, $collection, $logger); | |
| } | |
| } | |
| /** | |
| * @param DataModel $dataModel | |
| * @param Entity $entity | |
| * @param CollectionMany $collectionMany | |
| * @param ValidationLogger $logger | |
| */ | |
| protected function validateCollectionMany(DataModel $dataModel, Entity $entity, CollectionMany $collectionMany, ValidationLogger $logger) | |
| { | |
| foreach ($this->collectionManyValidatorList as $validator) { | |
| $validator->validate($dataModel, $entity, $collectionMany, $logger); | |
| } | |
| } | |
| /** | |
| * @param GenericGeneratorConfig $config | |
| */ | |
| protected function addGenericGeneratorConfig(GenericGeneratorConfig $config) | |
| { | |
| foreach ($config->getValidatorList() as $validatorClassName) { | |
| $this->addValidator($validatorClassName); | |
| } | |
| } | |
| /** | |
| * @param string $validatorClassName | |
| */ | |
| protected function addValidator(string $validatorClassName) | |
| { | |
| $reflect = new \ReflectionClass($validatorClassName); | |
| $validator = new $validatorClassName; | |
| if ($reflect->implementsInterface(self::DATAMODEL_VALIDATOR_INTERFACE)) { | |
| $this->dataModelValidatorList[$validatorClassName] = $validator; | |
| } | |
| if ($reflect->implementsInterface(self::ENTIY_VALIDATOR_INTERFACE)) { | |
| $this->entityValidatorList[$validatorClassName] = $validator; | |
| } | |
| if ($reflect->implementsInterface(self::ATTRIBUTE_VALIDATOR_INTERFACE)) { | |
| $this->attributeValidatorList[$validatorClassName] = $validator; | |
| } | |
| if ($reflect->implementsInterface(self::REFERENCE_VALIDATOR_INTERFACE)) { | |
| $this->referenceValidatorList[$validatorClassName] = $validator; | |
| } | |
| if ($reflect->implementsInterface(self::INDEX_VALIDATOR_INTERFACE)) { | |
| $this->indexValidatorList[$validatorClassName] = $validator; | |
| } | |
| if ($reflect->implementsInterface(self::COLLECTION_VALIDATOR_INTERFACE)) { | |
| $this->collectionValidatorList[$validatorClassName] = $validator; | |
| } | |
| if ($reflect->implementsInterface(self::COLLECTION_MANY_VALIDATOR_INTERFACE)) { | |
| $this->collectionManyValidatorList[$validatorClassName] = $validator; | |
| } | |
| } | |
| } |