AbstractValidatingMapping::validate()   B
last analyzed

Complexity

Conditions 4
Paths 2

Size

Total Lines 25
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 18
nc 2
nop 2
dl 0
loc 25
rs 8.5806
c 0
b 0
f 0
1
<?php
2
3
namespace AmaTeam\Image\Projection\Type;
4
5
use AmaTeam\Image\Projection\API\SpecificationInterface;
6
use AmaTeam\Image\Projection\API\Type\ValidatingMappingInterface;
7
use AmaTeam\Image\Projection\Framework\Validation\Tile\SingleTileValidator;
8
use AmaTeam\Image\Projection\Framework\Validation\Tile\TileFaceValidator;
9
use AmaTeam\Image\Projection\Framework\Validation\Tile\TileRowValidator;
10
use AmaTeam\Image\Projection\Framework\Validation\Tile\TileTreeValidator;
11
12
/**
13
 * Adds validation that expects all faces to have equal layout and tile size.
14
 */
15
abstract class AbstractValidatingMapping implements ValidatingMappingInterface
16
{
17
    /**
18
     * @inheritDoc
19
     */
20
    public function validate(
21
        array $tiles,
22
        SpecificationInterface $specification
23
    ) {
24
        $face = sizeof($tiles) > 0 ? reset($tiles) : [];
25
        $tileSize = $specification->getTileSize();
26
        $tileSize = $tileSize ?: SizeExtractor::extractTileSize($face);
27
        $layout = $specification->getLayout();
28
        $layout = $layout ?: SizeExtractor::calculateLayout($face);
29
        $tileValidator = new SingleTileValidator($tileSize);
30
        $rowValidator = new TileRowValidator(
31
            $layout->getWidth(),
32
            false,
33
            $tileValidator
34
        );
35
        $faceValidator = new TileFaceValidator(
36
            $layout->getHeight(),
37
            false,
38
            $rowValidator
39
        );
40
        $treeValidator = new TileTreeValidator(
41
            $this->getFaces(),
42
            $faceValidator
43
        );
44
        $treeValidator->validate($tiles);
45
    }
46
}
47