BaselineUpgrader   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 43
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 22
c 1
b 0
f 0
dl 0
loc 43
rs 10
wmc 3

2 Methods

Rating   Name   Duplication   Size   Complexity  
A upgrade() 0 29 2
A __construct() 0 6 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace DaveLiddament\StaticAnalysisResultsBaseliner\Legacy;
6
7
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\BaseLiner\BaseLineAnalysisResults;
8
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\BaseLiner\BaseLineExporter;
9
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\BaseLiner\BaseLineImportException;
10
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\BaseLine;
11
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\BaseLineFileName;
12
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\File\FileAccessException;
13
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\File\FileReader;
14
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\File\InvalidContentTypeException;
15
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\HistoryAnalyser\HistoryFactoryLookupService;
16
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\HistoryAnalyser\InvalidHistoryFactoryException;
17
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\HistoryAnalyser\InvalidHistoryMarkerException;
18
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\Identifier;
19
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\InvalidResultsParserException;
20
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Utils\ArrayParseException;
21
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Utils\ArrayUtils;
22
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Utils\ParseAtLocationException;
23
24
final class BaselineUpgrader
25
{
26
    public function __construct(
27
        private FileReader $fileReader,
28
        private LegacyResultsParserConverter $legacyResultsParserConverter,
29
        private HistoryFactoryLookupService $historyFactoryLookupService,
30
        private BaseLineExporter $baseLineExporter,
31
    ) {
32
    }
33
34
    /**
35
     * @throws BaseLineImportException
36
     * @throws FileAccessException
37
     */
38
    public function upgrade(BaseLineFileName $baseLineFileName): Identifier
39
    {
40
        try {
41
            $baseLineData = $this->fileReader->readJsonFile($baseLineFileName);
42
43
            $historyMarkerAsString = ArrayUtils::getStringValue($baseLineData, BaseLine::HISTORY_MARKER);
44
            $analysisResultsAsArray = ArrayUtils::getArrayValue($baseLineData, BaseLine::ANALYSIS_RESULTS);
45
            $resultsParserName = ArrayUtils::getStringValue($baseLineData, BaseLine::RESULTS_PARSER);
46
            $historyAnalyserName = ArrayUtils::getStringValue($baseLineData, BaseLine::HISTORY_ANALYSER);
47
48
            $resultsParser = $this->legacyResultsParserConverter->getNewResultsParser($resultsParserName);
49
            $historyFactory = $this->historyFactoryLookupService->getHistoryFactory($historyAnalyserName);
50
51
            $historyMarker = $historyFactory->newHistoryMarkerFactory()->newHistoryMarker($historyMarkerAsString);
52
            $analysisResults = BaseLineAnalysisResults::fromArray($analysisResultsAsArray);
53
54
            $baseline = new BaseLine($historyFactory, $analysisResults, $resultsParser, $historyMarker);
55
        } catch (
56
            ArrayParseException|
57
            InvalidResultsParserException|
58
            InvalidHistoryFactoryException|
59
            InvalidHistoryMarkerException|
60
            InvalidContentTypeException|
61
            ParseAtLocationException $e) {
62
                throw BaseLineImportException::fromException($baseLineFileName, $e);
63
            }
64
        $this->baseLineExporter->export($baseline, $baseLineFileName);
65
66
        return $resultsParser->getIdentifier();
67
    }
68
}
69