Passed
Pull Request — master (#79)
by Dave
02:42
created

BaselineUpgrader::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 4
c 1
b 0
f 0
nc 1
nop 4
dl 0
loc 10
rs 10
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
class BaselineUpgrader
25
{
26
    /**
27
     * @var FileReader
28
     */
29
    private $fileReader;
30
    /**
31
     * @var LegacyResultsParserConverter
32
     */
33
    private $legacyResultsParserConverter;
34
    /**
35
     * @var HistoryFactoryLookupService
36
     */
37
    private $historyFactoryLookupService;
38
    /**
39
     * @var BaseLineExporter
40
     */
41
    private $baseLineExporter;
42
43
    public function __construct(
44
        FileReader $fileReader,
45
        LegacyResultsParserConverter $legacyResultsParserConverter,
46
        HistoryFactoryLookupService $historyFactoryLookupService,
47
        BaseLineExporter $baseLineExporter
48
    ) {
49
        $this->fileReader = $fileReader;
50
        $this->legacyResultsParserConverter = $legacyResultsParserConverter;
51
        $this->historyFactoryLookupService = $historyFactoryLookupService;
52
        $this->baseLineExporter = $baseLineExporter;
53
    }
54
55
    /**
56
     * @throws BaseLineImportException
57
     * @throws FileAccessException
58
     */
59
    public function upgrade(BaseLineFileName $baseLineFileName): Identifier
60
    {
61
        try {
62
            $baseLineData = $this->fileReader->readJsonFile($baseLineFileName);
63
64
            $historyMarkerAsString = ArrayUtils::getStringValue($baseLineData, BaseLine::HISTORY_MARKER);
65
            $analysisResultsAsArray = ArrayUtils::getArrayValue($baseLineData, BaseLine::ANALYSIS_RESULTS);
66
            $resultsParserName = ArrayUtils::getStringValue($baseLineData, BaseLine::RESULTS_PARSER);
67
            $historyAnalyserName = ArrayUtils::getStringValue($baseLineData, BaseLine::HISTORY_ANALYSER);
68
69
            $resultsParser = $this->legacyResultsParserConverter->getNewResultsParser($resultsParserName);
70
            $historyFactory = $this->historyFactoryLookupService->getHistoryFactory($historyAnalyserName);
71
72
            $historyMarker = $historyFactory->newHistoryMarkerFactory()->newHistoryMarker($historyMarkerAsString);
73
            $analysisResults = BaseLineAnalysisResults::fromArray($analysisResultsAsArray);
74
75
            $baseline = new BaseLine($historyFactory, $analysisResults, $resultsParser, $historyMarker);
76
        } catch (
77
            ArrayParseException |
78
            InvalidResultsParserException |
79
            InvalidHistoryFactoryException |
80
            InvalidHistoryMarkerException |
81
            InvalidContentTypeException |
82
            ParseAtLocationException $e) {
83
            throw BaseLineImportException::fromException($baseLineFileName, $e);
84
        }
85
        $this->baseLineExporter->export($baseline, $baseLineFileName);
86
87
        return $resultsParser->getIdentifier();
88
    }
89
}
90