ResultsParsersRegistry::getAll()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 3
rs 10
1
<?php
2
3
/**
4
 * Static Analysis Results Baseliner (sarb).
5
 *
6
 * (c) Dave Liddament
7
 *
8
 * For the full copyright and licence information please view the LICENSE file distributed with this source code.
9
 */
10
11
declare(strict_types=1);
12
13
namespace DaveLiddament\StaticAnalysisResultsBaseliner\Framework\Container;
14
15
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\InvalidResultsParserException;
16
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\ResultsParser;
17
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\ResultsParserLookupService;
18
use Webmozart\Assert\Assert;
19
20
final class ResultsParsersRegistry implements ResultsParserLookupService
21
{
22
    /**
23
     * @var ResultsParser[]
24
     *
25
     * @psalm-var array<string, ResultsParser>
26
     */
27
    private $resultsParsers;
28
29
    /**
30
     * resultsParsersRegistry constructor.
31
     *
32
     * @param ResultsParser[] $resultsParsers
33
     */
34
    public function __construct(iterable $resultsParsers)
35
    {
36
        $this->resultsParsers = [];
37
        foreach ($resultsParsers as $staticAnalysisResultsParser) {
38
            $this->addStaticAnalysisResultsParser($staticAnalysisResultsParser);
39
        }
40
    }
41
42
    public function getIdentifiers(): array
43
    {
44
        return array_keys($this->resultsParsers);
45
    }
46
47
    public function getResultsParser(string $identifier): ResultsParser
48
    {
49
        if (array_key_exists($identifier, $this->resultsParsers)) {
50
            return $this->resultsParsers[$identifier];
51
        }
52
53
        throw InvalidResultsParserException::invalidIdentifier($identifier);
54
    }
55
56
    public function getAll(): array
57
    {
58
        return $this->resultsParsers;
59
    }
60
61
    private function addStaticAnalysisResultsParser(ResultsParser $staticAnalysisResultsParser): void
62
    {
63
        $identifier = $staticAnalysisResultsParser->getIdentifier()->getCode();
64
        Assert::keyNotExists($this->resultsParsers, $identifier,
65
            "Multiple Static Analysis Results Parsers configured with the identifier [$identifier]",
66
        );
67
68
        $this->resultsParsers[$identifier] = $staticAnalysisResultsParser;
69
    }
70
}
71