PatchesApplierFactory::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 2
dl 0
loc 6
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * Copyright © Vaimo Group. All rights reserved.
4
 * See LICENSE_VAIMO.txt for license details.
5
 */
6
namespace Vaimo\ComposerPatches\Factories;
7
8
use Vaimo\ComposerPatches\Config as PluginConfig;
9
use Vaimo\ComposerPatches\Patch\FailureHandlers;
10
use Vaimo\ComposerPatches\Strategies;
11
use Vaimo\ComposerPatches\Interfaces\ListResolverInterface as ListResolver;
12
use Vaimo\ComposerPatches\Strategies\OutputStrategy;
13
14
/**
15
 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
16
 */
17
class PatchesApplierFactory
18
{
19
    /**
20
     * @var \Composer\Composer
21
     */
22
    private $composer;
23
24
    /**
25
     * @var \Vaimo\ComposerPatches\Logger
26
     */
27
    private $logger;
28
29
    /**
30
     * @param \Composer\Composer $composer
31
     * @param \Vaimo\ComposerPatches\Logger $logger
32
     */
33
    public function __construct(
34
        \Composer\Composer $composer,
35
        \Vaimo\ComposerPatches\Logger $logger
36
    ) {
37
        $this->composer = $composer;
38
        $this->logger = $logger;
39
    }
40
41
    public function create(PluginConfig $pluginConfig, ListResolver $listResolver, OutputStrategy $outputStrategy)
42
    {
43
        $installer = $this->composer->getInstallationManager();
44
        $downloader = $this->composer->getDownloadManager();
45
46
        $eventDispatcher = $this->composer->getEventDispatcher();
47
        $rootPackage = $this->composer->getPackage();
48
        $composerConfig = $this->composer->getConfig();
49
50
        $output = $this->logger->getOutputInstance();
51
52
        $vendorRoot = $composerConfig->get(\Vaimo\ComposerPatches\Composer\ConfigKeys::VENDOR_DIR);
53
54
        $packageInfoResolver = new \Vaimo\ComposerPatches\Package\InfoResolver(
55
            $installer,
56
            $vendorRoot
57
        );
58
59
        $failureHandler = $pluginConfig->shouldExitOnFirstFailure()
60
            ? new FailureHandlers\FatalHandler()
61
            : new FailureHandlers\GracefulHandler($this->logger);
62
63
        $patchFileApplier = new \Vaimo\ComposerPatches\Patch\File\Applier(
64
            $this->logger,
65
            $pluginConfig->getPatcherConfig()
66
        );
67
68
        $patchDetailsLogger = new \Vaimo\ComposerPatches\Package\PatchApplier\InfoLogger($this->logger);
69
70
        $patchProcessor = new \Vaimo\ComposerPatches\Package\PatchApplier\ItemProcessor(
71
            $eventDispatcher,
72
            $packageInfoResolver,
73
            $failureHandler,
74
            $patchFileApplier,
75
            $this->logger
76
        );
77
78
        $packagePatchApplier = new \Vaimo\ComposerPatches\Package\PatchApplier(
79
            $patchProcessor,
80
            $patchDetailsLogger,
81
            $outputStrategy,
82
            $this->logger
83
        );
84
85
        $packageCollector = new \Vaimo\ComposerPatches\Package\Collector(
86
            array($rootPackage)
87
        );
88
89
        $stateAnalyser = new \Vaimo\ComposerPatches\Repository\State\Analyser();
90
91
        $queueGenerator = new \Vaimo\ComposerPatches\Repository\PatchesApplier\QueueGenerator(
92
            $listResolver,
93
            $stateAnalyser
94
        );
95
96
        $patcherStateManager = new \Vaimo\ComposerPatches\Managers\PatcherStateManager();
97
98
        $packageResetStrategy = $pluginConfig->shouldForcePackageReset()
99
            ? new Strategies\Package\ForcedResetStrategy()
100
            : new Strategies\Package\DefaultResetStrategy($installer, $downloader);
101
102
        $repositoryManager = new \Vaimo\ComposerPatches\Managers\RepositoryManager(
103
            $installer,
104
            $packageResetStrategy,
105
            new \Vaimo\ComposerPatches\Console\Silencer($output)
106
        );
107
108
        return new \Vaimo\ComposerPatches\Repository\PatchesApplier(
109
            $this->composer,
110
            $packageCollector,
111
            $repositoryManager,
112
            $packagePatchApplier,
113
            $queueGenerator,
114
            $patcherStateManager,
115
            $patchDetailsLogger,
116
            $outputStrategy,
117
            $this->logger
118
        );
119
    }
120
}
121