Passed
Push — feature/v4 ( e5e380...dac4aa )
by Samuel
11:37
created

ApiHelperBuilder   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 108
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 5
eloc 56
c 1
b 0
f 0
dl 0
loc 108
ccs 49
cts 49
cp 1
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A createSubscribers() 0 73 1
A getLanguage() 0 3 1
A setLanguage() 0 5 1
A build() 0 3 1
A __construct() 0 10 1
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the Ivory Google Map package.
7
 *
8
 * (c) Eric GELOEN <[email protected]>
9
 *
10
 * For the full copyright and license information, please read the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Ivory\GoogleMap\Helper\Builder;
15
16
use Ivory\GoogleMap\Helper\ApiHelper;
17
use Ivory\GoogleMap\Helper\Collector\Layer\HeatmapLayerCollector;
18
use Ivory\GoogleMap\Helper\Collector\Overlay\EncodedPolylineCollector;
19
use Ivory\GoogleMap\Helper\Collector\Overlay\InfoBoxCollector;
20
use Ivory\GoogleMap\Helper\Collector\Overlay\MarkerCollector;
21
use Ivory\GoogleMap\Helper\Formatter\Formatter;
22
use Ivory\GoogleMap\Helper\Renderer\ApiInitRenderer;
23
use Ivory\GoogleMap\Helper\Renderer\ApiRenderer;
24
use Ivory\GoogleMap\Helper\Renderer\Control\ControlManagerRenderer;
25
use Ivory\GoogleMap\Helper\Renderer\Geometry\EncodingRenderer;
26
use Ivory\GoogleMap\Helper\Renderer\Html\JavascriptTagRenderer;
27
use Ivory\GoogleMap\Helper\Renderer\Html\TagRenderer;
28
use Ivory\GoogleMap\Helper\Renderer\Layer\HeatmapLayerRenderer;
29
use Ivory\GoogleMap\Helper\Renderer\LoaderRenderer;
30
use Ivory\GoogleMap\Helper\Renderer\MapRenderer;
31
use Ivory\GoogleMap\Helper\Renderer\MapTypeIdRenderer;
32
use Ivory\GoogleMap\Helper\Renderer\Overlay\EncodedPolylineRenderer;
33
use Ivory\GoogleMap\Helper\Renderer\Overlay\InfoBoxRenderer;
34
use Ivory\GoogleMap\Helper\Renderer\Overlay\MarkerClustererRenderer;
35
use Ivory\GoogleMap\Helper\Renderer\Place\AutocompleteRenderer;
36
use Ivory\GoogleMap\Helper\Renderer\Utility\CallbackRenderer;
37
use Ivory\GoogleMap\Helper\Renderer\Utility\RequirementLoaderRenderer;
38
use Ivory\GoogleMap\Helper\Renderer\Utility\RequirementRenderer;
39
use Ivory\GoogleMap\Helper\Renderer\Utility\SourceRenderer;
40
use Ivory\GoogleMap\Helper\Subscriber\ApiJavascriptSubscriber;
41
use Ivory\GoogleMap\Helper\Subscriber\Layer\HeatmapLayerSubscriber;
42
use Ivory\GoogleMap\Helper\Subscriber\MapJavascriptSubscriber;
43
use Ivory\GoogleMap\Helper\Subscriber\Overlay\EncodedPolylineSubscriber;
44
use Ivory\GoogleMap\Helper\Subscriber\Overlay\InfoBoxSubscriber;
45
use Ivory\GoogleMap\Helper\Subscriber\Overlay\MarkerClustererSubscriber;
46
use Ivory\GoogleMap\Helper\Subscriber\Place\AutocompleteJavascriptSubscriber;
47
use Ivory\JsonBuilder\JsonBuilder;
48
49
class ApiHelperBuilder extends AbstractJavascriptHelperBuilder
50
{
51
    /** @var string */
52
    private $language;
53
54 5
    public function __construct(
55
        Formatter $formatter = null,
56
        JsonBuilder $jsonBuilder = null,
57
        string $language = 'en',
58
        ?string $key = null
59
    ) {
60 5
        parent::__construct($formatter, $jsonBuilder);
61
62 5
        $this->language = $language;
63 5
        $this->key      = $key;
64 5
    }
65
66 2
    public function getLanguage(): string
67
    {
68 2
        return $this->language;
69
    }
70
71 1
    public function setLanguage(string $language): ApiHelperBuilder
72
    {
73 1
        $this->language = $language;
74
75 1
        return $this;
76
    }
77
78 1
    public function build(): ApiHelper
79
    {
80 1
        return new ApiHelper($this->createEventDispatcher());
81
    }
82
83
    /** {@inheritdoc} */
84 1
    protected function createSubscribers(): array
85
    {
86 1
        $formatter   = $this->getFormatter();
87 1
        $jsonBuilder = $this->getJsonBuilder();
88
89
        // Layer collectors
90 1
        $heatmapLayerCollector = new HeatmapLayerCollector();
91
92
        // Overlay collectors
93 1
        $encodedPolylineCollector = new EncodedPolylineCollector();
94 1
        $markerCollector          = new MarkerCollector();
95 1
        $infoBoxCollector         = new InfoBoxCollector($markerCollector);
96
97
        // Control renderers
98 1
        $controlManagerRenderer = new ControlManagerRenderer();
99
100
        // Layer renderers
101 1
        $heatmapLayerRenderer = new HeatmapLayerRenderer($formatter, $jsonBuilder);
102
103
        // Utility renderers
104 1
        $callbackRenderer          = new CallbackRenderer($formatter);
105 1
        $loaderRenderer            = new LoaderRenderer($formatter, $jsonBuilder, $this->language, $this->key);
106 1
        $requirementLoaderRenderer = new RequirementLoaderRenderer($formatter);
107 1
        $requirementRenderer       = new RequirementRenderer($formatter);
108 1
        $sourceRenderer            = new SourceRenderer($formatter);
109
110
        // Map renderers
111 1
        $mapTypeIdRenderer = new MapTypeIdRenderer($formatter);
112 1
        $mapRenderer       = new MapRenderer(
113 1
            $formatter,
114
            $jsonBuilder,
115
            $mapTypeIdRenderer,
116
            $controlManagerRenderer,
117
            $requirementRenderer
118
        );
119
120
        // Overlay renderers
121 1
        $encodingRenderer        = new EncodingRenderer($formatter);
122 1
        $encodedPolylineRenderer = new EncodedPolylineRenderer($formatter, $jsonBuilder, $encodingRenderer);
123 1
        $infoBoxRenderer         = new InfoBoxRenderer($formatter, $jsonBuilder, $requirementRenderer);
124 1
        $markerClustererRenderer = new MarkerClustererRenderer($formatter, $jsonBuilder, $requirementRenderer);
125
126
        // Place renderers
127 1
        $autocompleteRenderer = new AutocompleteRenderer($formatter, $jsonBuilder, $requirementRenderer);
128
129
        // Html renderers
130 1
        $tagRenderer           = new TagRenderer($formatter);
131 1
        $javascriptTagRenderer = new JavascriptTagRenderer($formatter, $tagRenderer);
132
133
        // Api renderers
134 1
        $apiInitRenderer = new ApiInitRenderer($formatter);
135 1
        $apiRenderer     = new ApiRenderer(
136 1
            $formatter,
137
            $apiInitRenderer,
138
            $loaderRenderer,
139
            $requirementLoaderRenderer,
140
            $sourceRenderer
141
        );
142
143 1
        return array_merge([
144 1
            new ApiJavascriptSubscriber($formatter, $apiRenderer, $javascriptTagRenderer),
145 1
            new AutocompleteJavascriptSubscriber(
146 1
                $formatter,
147
                $autocompleteRenderer,
148
                $callbackRenderer,
149
                $javascriptTagRenderer
150
            ),
151 1
            new EncodedPolylineSubscriber($formatter, $encodedPolylineCollector, $encodedPolylineRenderer),
152 1
            new HeatmapLayerSubscriber($formatter, $heatmapLayerCollector, $heatmapLayerRenderer),
153 1
            new InfoBoxSubscriber($formatter, $infoBoxCollector, $infoBoxRenderer),
154 1
            new MapJavascriptSubscriber($formatter, $mapRenderer, $callbackRenderer, $javascriptTagRenderer),
155 1
            new MarkerClustererSubscriber($formatter, $markerClustererRenderer),
156 1
        ], parent::createSubscribers());
157
    }
158
}
159