BaseLineImporter::import()   A
last analyzed

Complexity

Conditions 2
Paths 11

Size

Total Lines 25
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 19
nc 11
nop 1
dl 0
loc 25
rs 9.6333
c 0
b 0
f 0
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\Domain\BaseLiner;
14
15
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\BaseLine;
16
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\BaseLineFileName;
17
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\File\FileAccessException;
18
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\File\FileReader;
19
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\File\InvalidContentTypeException;
20
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\HistoryAnalyser\HistoryFactoryLookupService;
21
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\HistoryAnalyser\InvalidHistoryFactoryException;
22
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\HistoryAnalyser\InvalidHistoryMarkerException;
23
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\InvalidResultsParserException;
24
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\ResultsParserLookupService;
25
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Utils\ArrayParseException;
26
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Utils\ArrayUtils;
27
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Utils\ParseAtLocationException;
28
29
/**
30
 * Imports a baseline from the file.
31
 */
32
final class BaseLineImporter
33
{
34
    public function __construct(
35
        private FileReader $fileReader,
36
        private ResultsParserLookupService $resultsParserLookupService,
37
        private HistoryFactoryLookupService $historyFactoryLookupService,
38
    ) {
39
    }
40
41
    /**
42
     * Imports baseline results.
43
     *
44
     * @throws BaseLineImportException
45
     * @throws FileAccessException
46
     */
47
    public function import(BaseLineFileName $fileName): BaseLine
48
    {
49
        try {
50
            $baseLineData = $this->fileReader->readJsonFile($fileName);
51
52
            $historyMarkerAsString = ArrayUtils::getStringValue($baseLineData, BaseLine::HISTORY_MARKER);
53
            $analysisResultsAsArray = ArrayUtils::getArrayValue($baseLineData, BaseLine::ANALYSIS_RESULTS);
54
            $resultsParserName = ArrayUtils::getStringValue($baseLineData, BaseLine::RESULTS_PARSER);
55
            $historyAnalyserName = ArrayUtils::getStringValue($baseLineData, BaseLine::HISTORY_ANALYSER);
56
57
            $resultsParser = $this->resultsParserLookupService->getResultsParser($resultsParserName);
58
            $historyFactory = $this->historyFactoryLookupService->getHistoryFactory($historyAnalyserName);
59
60
            $historyMarker = $historyFactory->newHistoryMarkerFactory()->newHistoryMarker($historyMarkerAsString);
61
            $analysisResults = BaseLineAnalysisResults::fromArray($analysisResultsAsArray);
62
63
            return new BaseLine($historyFactory, $analysisResults, $resultsParser, $historyMarker);
64
        } catch (
65
            ArrayParseException|
66
            InvalidResultsParserException|
67
            InvalidHistoryFactoryException|
68
            InvalidHistoryMarkerException|
69
            InvalidContentTypeException|
70
            ParseAtLocationException $e) {
71
                throw BaseLineImportException::fromException($fileName, $e);
72
            }
73
    }
74
}
75