MapHelperBuilder::createSubscribers()   B
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 234

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 178
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 234
ccs 178
cts 178
cp 1
rs 8
c 0
b 0
f 0
cc 1
nc 1
nop 0
crap 1

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
/*
4
 * This file is part of the Ivory Google Map package.
5
 *
6
 * (c) Eric GELOEN <[email protected]>
7
 *
8
 * For the full copyright and license information, please read the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Ivory\GoogleMap\Helper\Builder;
13
14
use Ivory\GoogleMap\Helper\Collector\Base\BoundCollector;
15
use Ivory\GoogleMap\Helper\Collector\Base\CoordinateCollector;
16
use Ivory\GoogleMap\Helper\Collector\Base\PointCollector;
17
use Ivory\GoogleMap\Helper\Collector\Base\SizeCollector;
18
use Ivory\GoogleMap\Helper\Collector\Control\CustomControlCollector;
19
use Ivory\GoogleMap\Helper\Collector\Event\DomEventCollector;
20
use Ivory\GoogleMap\Helper\Collector\Event\DomEventOnceCollector;
21
use Ivory\GoogleMap\Helper\Collector\Event\EventCollector;
22
use Ivory\GoogleMap\Helper\Collector\Event\EventOnceCollector;
23
use Ivory\GoogleMap\Helper\Collector\Layer\GeoJsonLayerCollector;
24
use Ivory\GoogleMap\Helper\Collector\Layer\HeatmapLayerCollector;
25
use Ivory\GoogleMap\Helper\Collector\Layer\KmlLayerCollector;
26
use Ivory\GoogleMap\Helper\Collector\Overlay\CircleCollector;
27
use Ivory\GoogleMap\Helper\Collector\Overlay\DefaultInfoWindowCollector;
28
use Ivory\GoogleMap\Helper\Collector\Overlay\EncodedPolylineCollector;
29
use Ivory\GoogleMap\Helper\Collector\Overlay\ExtendableCollector;
30
use Ivory\GoogleMap\Helper\Collector\Overlay\GroundOverlayCollector;
31
use Ivory\GoogleMap\Helper\Collector\Overlay\IconCollector;
32
use Ivory\GoogleMap\Helper\Collector\Overlay\IconSequenceCollector;
33
use Ivory\GoogleMap\Helper\Collector\Overlay\InfoBoxCollector;
34
use Ivory\GoogleMap\Helper\Collector\Overlay\InfoWindowCollector;
35
use Ivory\GoogleMap\Helper\Collector\Overlay\MarkerCollector;
36
use Ivory\GoogleMap\Helper\Collector\Overlay\MarkerShapeCollector;
37
use Ivory\GoogleMap\Helper\Collector\Overlay\PolygonCollector;
38
use Ivory\GoogleMap\Helper\Collector\Overlay\PolylineCollector;
39
use Ivory\GoogleMap\Helper\Collector\Overlay\RectangleCollector;
40
use Ivory\GoogleMap\Helper\Collector\Overlay\SymbolCollector;
41
use Ivory\GoogleMap\Helper\MapHelper;
42
use Ivory\GoogleMap\Helper\Renderer\Base\BoundRenderer;
43
use Ivory\GoogleMap\Helper\Renderer\Base\CoordinateRenderer;
44
use Ivory\GoogleMap\Helper\Renderer\Base\PointRenderer;
45
use Ivory\GoogleMap\Helper\Renderer\Base\SizeRenderer;
46
use Ivory\GoogleMap\Helper\Renderer\Control\ControlManagerRenderer;
47
use Ivory\GoogleMap\Helper\Renderer\Control\ControlPositionRenderer;
48
use Ivory\GoogleMap\Helper\Renderer\Control\CustomControlRenderer;
49
use Ivory\GoogleMap\Helper\Renderer\Control\FullscreenControlRenderer;
50
use Ivory\GoogleMap\Helper\Renderer\Control\MapTypeControlRenderer;
51
use Ivory\GoogleMap\Helper\Renderer\Control\MapTypeControlStyleRenderer;
52
use Ivory\GoogleMap\Helper\Renderer\Control\RotateControlRenderer;
53
use Ivory\GoogleMap\Helper\Renderer\Control\ScaleControlRenderer;
54
use Ivory\GoogleMap\Helper\Renderer\Control\ScaleControlStyleRenderer;
55
use Ivory\GoogleMap\Helper\Renderer\Control\StreetViewControlRenderer;
56
use Ivory\GoogleMap\Helper\Renderer\Control\ZoomControlRenderer;
57
use Ivory\GoogleMap\Helper\Renderer\Control\ZoomControlStyleRenderer;
58
use Ivory\GoogleMap\Helper\Renderer\Event\DomEventOnceRenderer;
59
use Ivory\GoogleMap\Helper\Renderer\Event\DomEventRenderer;
60
use Ivory\GoogleMap\Helper\Renderer\Event\EventOnceRenderer;
61
use Ivory\GoogleMap\Helper\Renderer\Event\EventRenderer;
62
use Ivory\GoogleMap\Helper\Renderer\Geometry\EncodingRenderer;
63
use Ivory\GoogleMap\Helper\Renderer\Html\JavascriptTagRenderer;
64
use Ivory\GoogleMap\Helper\Renderer\Html\StylesheetRenderer;
65
use Ivory\GoogleMap\Helper\Renderer\Html\StylesheetTagRenderer;
66
use Ivory\GoogleMap\Helper\Renderer\Html\TagRenderer;
67
use Ivory\GoogleMap\Helper\Renderer\Layer\GeoJsonLayerRenderer;
68
use Ivory\GoogleMap\Helper\Renderer\Layer\HeatmapLayerRenderer;
69
use Ivory\GoogleMap\Helper\Renderer\Layer\KmlLayerRenderer;
70
use Ivory\GoogleMap\Helper\Renderer\MapBoundRenderer;
71
use Ivory\GoogleMap\Helper\Renderer\MapCenterRenderer;
72
use Ivory\GoogleMap\Helper\Renderer\MapContainerRenderer;
73
use Ivory\GoogleMap\Helper\Renderer\MapHtmlRenderer;
74
use Ivory\GoogleMap\Helper\Renderer\MapRenderer;
75
use Ivory\GoogleMap\Helper\Renderer\MapTypeIdRenderer;
76
use Ivory\GoogleMap\Helper\Renderer\Overlay\AnimationRenderer;
77
use Ivory\GoogleMap\Helper\Renderer\Overlay\CircleRenderer;
78
use Ivory\GoogleMap\Helper\Renderer\Overlay\DefaultInfoWindowRenderer;
79
use Ivory\GoogleMap\Helper\Renderer\Overlay\EncodedPolylineRenderer;
80
use Ivory\GoogleMap\Helper\Renderer\Overlay\Extendable\BoundsExtendableRenderer;
81
use Ivory\GoogleMap\Helper\Renderer\Overlay\Extendable\DefaultViewportExtendableRenderer;
82
use Ivory\GoogleMap\Helper\Renderer\Overlay\Extendable\ExtendableRenderer;
83
use Ivory\GoogleMap\Helper\Renderer\Overlay\Extendable\HeatmapLayerExtendableRenderer;
84
use Ivory\GoogleMap\Helper\Renderer\Overlay\Extendable\PathExtendableRenderer;
85
use Ivory\GoogleMap\Helper\Renderer\Overlay\Extendable\PositionExtendableRenderer;
86
use Ivory\GoogleMap\Helper\Renderer\Overlay\GroundOverlayRenderer;
87
use Ivory\GoogleMap\Helper\Renderer\Overlay\IconRenderer;
88
use Ivory\GoogleMap\Helper\Renderer\Overlay\IconSequenceRenderer;
89
use Ivory\GoogleMap\Helper\Renderer\Overlay\InfoBoxRenderer;
90
use Ivory\GoogleMap\Helper\Renderer\Overlay\InfoWindowCloseRenderer;
91
use Ivory\GoogleMap\Helper\Renderer\Overlay\InfoWindowOpenRenderer;
92
use Ivory\GoogleMap\Helper\Renderer\Overlay\MarkerClustererRenderer;
93
use Ivory\GoogleMap\Helper\Renderer\Overlay\MarkerRenderer;
94
use Ivory\GoogleMap\Helper\Renderer\Overlay\MarkerShapeRenderer;
95
use Ivory\GoogleMap\Helper\Renderer\Overlay\PolygonRenderer;
96
use Ivory\GoogleMap\Helper\Renderer\Overlay\PolylineRenderer;
97
use Ivory\GoogleMap\Helper\Renderer\Overlay\RectangleRenderer;
98
use Ivory\GoogleMap\Helper\Renderer\Overlay\SymbolPathRenderer;
99
use Ivory\GoogleMap\Helper\Renderer\Overlay\SymbolRenderer;
100
use Ivory\GoogleMap\Helper\Renderer\Utility\CallbackRenderer;
101
use Ivory\GoogleMap\Helper\Renderer\Utility\ObjectToArrayRenderer;
102
use Ivory\GoogleMap\Helper\Renderer\Utility\RequirementRenderer;
103
use Ivory\GoogleMap\Helper\Subscriber\Base\BaseSubscriber;
104
use Ivory\GoogleMap\Helper\Subscriber\Base\BoundSubscriber;
105
use Ivory\GoogleMap\Helper\Subscriber\Base\CoordinateSubscriber;
106
use Ivory\GoogleMap\Helper\Subscriber\Base\PointSubscriber;
107
use Ivory\GoogleMap\Helper\Subscriber\Base\SizeSubscriber;
108
use Ivory\GoogleMap\Helper\Subscriber\Control\ControlSubscriber;
109
use Ivory\GoogleMap\Helper\Subscriber\Control\CustomControlSubscriber;
110
use Ivory\GoogleMap\Helper\Subscriber\Event\DomEventOnceSubscriber;
111
use Ivory\GoogleMap\Helper\Subscriber\Event\DomEventSubscriber;
112
use Ivory\GoogleMap\Helper\Subscriber\Event\EventOnceSubscriber;
113
use Ivory\GoogleMap\Helper\Subscriber\Event\EventSubscriber;
114
use Ivory\GoogleMap\Helper\Subscriber\Event\SimpleEventSubscriber;
115
use Ivory\GoogleMap\Helper\Subscriber\Layer\GeoJsonLayerSubscriber;
116
use Ivory\GoogleMap\Helper\Subscriber\Layer\HeatmapLayerSubscriber;
117
use Ivory\GoogleMap\Helper\Subscriber\Layer\KmlLayerSubscriber;
118
use Ivory\GoogleMap\Helper\Subscriber\Layer\LayerSubscriber;
119
use Ivory\GoogleMap\Helper\Subscriber\MapBoundSubscriber;
120
use Ivory\GoogleMap\Helper\Subscriber\MapCenterSubscriber;
121
use Ivory\GoogleMap\Helper\Subscriber\MapContainerSubscriber;
122
use Ivory\GoogleMap\Helper\Subscriber\MapHtmlSubscriber;
123
use Ivory\GoogleMap\Helper\Subscriber\MapInitSubscriber;
124
use Ivory\GoogleMap\Helper\Subscriber\MapJavascriptSubscriber;
125
use Ivory\GoogleMap\Helper\Subscriber\MapStylesheetSubscriber;
126
use Ivory\GoogleMap\Helper\Subscriber\MapSubscriber;
127
use Ivory\GoogleMap\Helper\Subscriber\Overlay\CircleSubscriber;
128
use Ivory\GoogleMap\Helper\Subscriber\Overlay\DefaultInfoWindowSubscriber;
129
use Ivory\GoogleMap\Helper\Subscriber\Overlay\EncodedPolylineSubscriber;
130
use Ivory\GoogleMap\Helper\Subscriber\Overlay\ExtendableSubscriber;
131
use Ivory\GoogleMap\Helper\Subscriber\Overlay\GroundOverlaySubscriber;
132
use Ivory\GoogleMap\Helper\Subscriber\Overlay\IconSequenceSubscriber;
133
use Ivory\GoogleMap\Helper\Subscriber\Overlay\IconSubscriber;
134
use Ivory\GoogleMap\Helper\Subscriber\Overlay\InfoBoxSubscriber;
135
use Ivory\GoogleMap\Helper\Subscriber\Overlay\InfoWindowCloseSubscriber;
136
use Ivory\GoogleMap\Helper\Subscriber\Overlay\InfoWindowOpenSubscriber;
137
use Ivory\GoogleMap\Helper\Subscriber\Overlay\MarkerClustererSubscriber;
138
use Ivory\GoogleMap\Helper\Subscriber\Overlay\MarkerInfoWindowOpenSubscriber;
139
use Ivory\GoogleMap\Helper\Subscriber\Overlay\MarkerShapeSubscriber;
140
use Ivory\GoogleMap\Helper\Subscriber\Overlay\MarkerSubscriber;
141
use Ivory\GoogleMap\Helper\Subscriber\Overlay\OverlaySubscriber;
142
use Ivory\GoogleMap\Helper\Subscriber\Overlay\PolygonSubscriber;
143
use Ivory\GoogleMap\Helper\Subscriber\Overlay\PolylineSubscriber;
144
use Ivory\GoogleMap\Helper\Subscriber\Overlay\RectangleSubscriber;
145
use Ivory\GoogleMap\Helper\Subscriber\Overlay\SymbolSubscriber;
146
use Ivory\GoogleMap\Helper\Subscriber\Utility\ObjectToArraySubscriber;
147
use Ivory\GoogleMap\Layer\HeatmapLayer;
148
use Ivory\GoogleMap\Layer\KmlLayer;
149
use Ivory\GoogleMap\Overlay\Circle;
150
use Ivory\GoogleMap\Overlay\EncodedPolyline;
151
use Ivory\GoogleMap\Overlay\GroundOverlay;
152
use Ivory\GoogleMap\Overlay\InfoWindow;
153
use Ivory\GoogleMap\Overlay\Marker;
154
use Ivory\GoogleMap\Overlay\Polygon;
155
use Ivory\GoogleMap\Overlay\Polyline;
156
use Ivory\GoogleMap\Overlay\Rectangle;
157
158
/**
159
 * @author GeLo <[email protected]>
160
 */
161
class MapHelperBuilder extends AbstractJavascriptHelperBuilder
162
{
163
    /**
164
     * @return MapHelper
165
     */
166 4
    public function build()
167
    {
168 4
        return new MapHelper($this->createEventDispatcher());
169
    }
170
171
    /**
172
     * {@inheritdoc}
173
     */
174 4
    protected function createSubscribers()
175
    {
176 4
        $formatter = $this->getFormatter();
177 4
        $jsonBuilder = $this->getJsonBuilder();
178
179
        // Overlay collectors
180 4
        $markerCollector = new MarkerCollector();
181 4
        $polylineCollector = new PolylineCollector();
182 4
        $circleCollector = new CircleCollector();
183 4
        $defaultInfoWindowCollector = new DefaultInfoWindowCollector($markerCollector);
184 4
        $encodedPolylineCollector = new EncodedPolylineCollector();
185 4
        $extendableCollector = new ExtendableCollector();
186 4
        $groundOverlayCollector = new GroundOverlayCollector();
187 4
        $iconSequenceCollector = new IconSequenceCollector($polylineCollector);
188 4
        $infoBoxCollector = new InfoBoxCollector($markerCollector);
189 4
        $infoWindowCollector = new InfoWindowCollector($markerCollector);
190 4
        $iconCollector = new IconCollector($markerCollector);
191 4
        $markerShapeCollector = new MarkerShapeCollector($markerCollector);
192 4
        $polygonCollector = new PolygonCollector();
193 4
        $rectangleCollector = new RectangleCollector();
194 4
        $symbolCollector = new SymbolCollector($markerCollector, $iconSequenceCollector);
195
196
        // Layer collectors
197 4
        $geoJsonLayerCollector = new GeoJsonLayerCollector();
198 4
        $heatmapLayerCollector = new HeatmapLayerCollector();
199 4
        $kmlLayerCollector = new KmlLayerCollector();
200
201
        // Event collectors
202 4
        $domEventCollector = new DomEventCollector();
203 4
        $domEventOnceCollector = new DomEventOnceCollector();
204 4
        $eventCollector = new EventCollector();
205 4
        $eventOnceCollector = new EventOnceCollector();
206
207
        // Control collectors
208 4
        $customControlCollector = new CustomControlCollector();
209
210
        // Base collectors
211 4
        $boundCollector = new BoundCollector($groundOverlayCollector, $rectangleCollector);
212 4
        $pointCollector = new PointCollector($markerCollector);
213 4
        $sizeCollector = new SizeCollector($infoWindowCollector, $iconCollector);
214 4
        $coordinateCollector = new CoordinateCollector(
215 4
            $boundCollector,
216 3
            $circleCollector,
217 3
            $infoWindowCollector,
218 3
            $markerCollector,
219 3
            $polygonCollector,
220 3
            $polylineCollector,
221 3
            $heatmapLayerCollector
222
        );
223
224
        // Base renderers
225 4
        $boundRenderer = new BoundRenderer($formatter);
226 4
        $coordinateRenderer = new CoordinateRenderer($formatter);
227 4
        $mapTypeIdRenderer = new MapTypeIdRenderer($formatter);
228 4
        $pointRenderer = new PointRenderer($formatter);
229 4
        $sizeRenderer = new SizeRenderer($formatter);
230
231
        // Control renderers
232 4
        $controlPositionRenderer = new ControlPositionRenderer($formatter);
233 4
        $customControlRenderer = new CustomControlRenderer($formatter, $controlPositionRenderer);
234 4
        $fullscreenControlRenderer = new FullscreenControlRenderer($formatter, $jsonBuilder, $controlPositionRenderer);
235 4
        $mapTypeControlStyleRenderer = new MapTypeControlStyleRenderer($formatter);
236 4
        $rotateControlRenderer = new RotateControlRenderer($formatter, $jsonBuilder, $controlPositionRenderer);
237 4
        $scaleControlStyleRenderer = new ScaleControlStyleRenderer($formatter);
238 4
        $streetViewControlRenderer = new StreetViewControlRenderer($formatter, $jsonBuilder, $controlPositionRenderer);
239 4
        $zoomControlStyleRenderer = new ZoomControlStyleRenderer($formatter);
240
241 4
        $mapTypeControlRenderer = new MapTypeControlRenderer(
242 4
            $formatter,
243 3
            $jsonBuilder,
244 3
            $mapTypeIdRenderer,
245 3
            $controlPositionRenderer,
246 3
            $mapTypeControlStyleRenderer
247
        );
248
249 4
        $scaleControlRenderer = new ScaleControlRenderer(
250 4
            $formatter,
251 3
            $jsonBuilder,
252 3
            $controlPositionRenderer,
253 3
            $scaleControlStyleRenderer
254
        );
255
256 4
        $zoomControlRenderer = new ZoomControlRenderer(
257 4
            $formatter,
258 3
            $jsonBuilder,
259 3
            $controlPositionRenderer,
260 3
            $zoomControlStyleRenderer
261
        );
262
263 4
        $controlManagerRenderer = new ControlManagerRenderer();
264 4
        $controlManagerRenderer->addRenderer($fullscreenControlRenderer);
265 4
        $controlManagerRenderer->addRenderer($mapTypeControlRenderer);
266 4
        $controlManagerRenderer->addRenderer($rotateControlRenderer);
267 4
        $controlManagerRenderer->addRenderer($scaleControlRenderer);
268 4
        $controlManagerRenderer->addRenderer($streetViewControlRenderer);
269 4
        $controlManagerRenderer->addRenderer($zoomControlRenderer);
270
271
        // Event renderers
272 4
        $domEventOnceRenderer = new DomEventOnceRenderer($formatter);
273 4
        $domEventRenderer = new DomEventRenderer($formatter);
274 4
        $eventOnceRenderer = new EventOnceRenderer($formatter);
275 4
        $eventRenderer = new EventRenderer($formatter);
276
277
        // Geometry renderers
278 4
        $encodingRenderer = new EncodingRenderer($formatter);
279
280
        // Html renderers
281 4
        $tagRenderer = new TagRenderer($formatter);
282 4
        $javascriptTagRenderer = new JavascriptTagRenderer($formatter, $tagRenderer);
283 4
        $stylesheetRenderer = new StylesheetRenderer($formatter);
284 4
        $stylesheetTagRenderer = new StylesheetTagRenderer($formatter, $tagRenderer, $stylesheetRenderer);
285
286
        // Utility
287 4
        $callbackRenderer = new CallbackRenderer($formatter);
288 4
        $objectToArrayRenderer = new ObjectToArrayRenderer($formatter);
289 4
        $requirementRenderer = new RequirementRenderer($formatter);
290
291
        // Map renderers
292 4
        $mapBoundRenderer = new MapBoundRenderer($formatter);
293 4
        $mapCenterRenderer = new MapCenterRenderer($formatter);
294 4
        $mapContainerRenderer = new MapContainerRenderer($formatter, $jsonBuilder);
295 4
        $mapHtmlRenderer = new MapHtmlRenderer($formatter, $tagRenderer, $stylesheetRenderer);
296 4
        $mapRenderer = new MapRenderer(
297 4
            $formatter,
298 3
            $jsonBuilder,
299 3
            $mapTypeIdRenderer,
300 3
            $controlManagerRenderer,
301 3
            $requirementRenderer
302
        );
303
304
        // Overlay renderers
305 4
        $animationRenderer = new AnimationRenderer($formatter);
306 4
        $circleRenderer = new CircleRenderer($formatter, $jsonBuilder);
307 4
        $defaultInfoWindowRenderer = new DefaultInfoWindowRenderer($formatter, $jsonBuilder);
308 4
        $encodedPolylineRenderer = new EncodedPolylineRenderer($formatter, $jsonBuilder, $encodingRenderer);
309 4
        $groundOverlayRenderer = new GroundOverlayRenderer($formatter, $jsonBuilder);
310 4
        $infoBoxRenderer = new InfoBoxRenderer($formatter, $jsonBuilder, $requirementRenderer);
311 4
        $infoWindowCloseRenderer = new InfoWindowCloseRenderer($formatter);
312 4
        $infoWindowOpenRenderer = new InfoWindowOpenRenderer($formatter);
313 4
        $iconRenderer = new IconRenderer($formatter, $jsonBuilder);
314 4
        $iconSequenceRenderer = new IconSequenceRenderer($formatter, $jsonBuilder);
315 4
        $markerClustererRenderer = new MarkerClustererRenderer($formatter, $jsonBuilder, $requirementRenderer);
316 4
        $markerRenderer = new MarkerRenderer($formatter, $jsonBuilder, $animationRenderer);
317 4
        $markerShapeRenderer = new MarkerShapeRenderer($formatter, $jsonBuilder);
318 4
        $polygonRenderer = new PolygonRenderer($formatter, $jsonBuilder);
319 4
        $polylineRenderer = new PolylineRenderer($formatter, $jsonBuilder);
320 4
        $rectangleRenderer = new RectangleRenderer($formatter, $jsonBuilder);
321 4
        $symbolPathRenderer = new SymbolPathRenderer($formatter);
322 4
        $symbolRenderer = new SymbolRenderer($formatter, $jsonBuilder, $symbolPathRenderer);
323
324
        // Extendable renderers
325 4
        $defaultViewportExtendableRenderer = new DefaultViewportExtendableRenderer($formatter);
326 4
        $heatmapLayerExtendableRenderer = new HeatmapLayerExtendableRenderer($formatter);
327 4
        $pathExtendableRenderer = new PathExtendableRenderer($formatter);
328 4
        $positionExtendableRenderer = new PositionExtendableRenderer($formatter);
329 4
        $boundsExtendableRenderer = new BoundsExtendableRenderer($formatter);
330
331 4
        $extendableRenderer = new ExtendableRenderer();
332 4
        $extendableRenderer->setRenderer(Circle::class, $boundsExtendableRenderer);
333 4
        $extendableRenderer->setRenderer(EncodedPolyline::class, $pathExtendableRenderer);
334 4
        $extendableRenderer->setRenderer(GroundOverlay::class, $boundsExtendableRenderer);
335 4
        $extendableRenderer->setRenderer(HeatmapLayer::class, $heatmapLayerExtendableRenderer);
336 4
        $extendableRenderer->setRenderer(InfoWindow::class, $positionExtendableRenderer);
337 4
        $extendableRenderer->setRenderer(KmlLayer::class, $defaultViewportExtendableRenderer);
338 4
        $extendableRenderer->setRenderer(Marker::class, $positionExtendableRenderer);
339 4
        $extendableRenderer->setRenderer(Polyline::class, $pathExtendableRenderer);
340 4
        $extendableRenderer->setRenderer(Polygon::class, $pathExtendableRenderer);
341 4
        $extendableRenderer->setRenderer(Rectangle::class, $boundsExtendableRenderer);
342
343
        // Layer renderers
344 4
        $geoJsonLayerRenderer = new GeoJsonLayerRenderer($formatter, $jsonBuilder);
345 4
        $heatmapLayerRenderer = new HeatmapLayerRenderer($formatter, $jsonBuilder);
346 4
        $kmlLayerRenderer = new KmlLayerRenderer($formatter, $jsonBuilder);
347
348 4
        return array_merge([
349
            // Base
350 4
            new BaseSubscriber($formatter),
351 4
            new BoundSubscriber($formatter, $boundCollector, $boundRenderer),
352 4
            new CoordinateSubscriber($formatter, $coordinateCollector, $coordinateRenderer),
353 4
            new PointSubscriber($formatter, $pointCollector, $pointRenderer),
354 4
            new SizeSubscriber($formatter, $sizeCollector, $sizeRenderer),
355
356
            // Control
357 4
            new ControlSubscriber($formatter),
358 4
            new CustomControlSubscriber($formatter, $customControlCollector, $customControlRenderer),
359
360
            // Event
361 4
            new DomEventOnceSubscriber($formatter, $domEventOnceCollector, $domEventOnceRenderer),
362 4
            new DomEventSubscriber($formatter, $domEventCollector, $domEventRenderer),
363 4
            new EventOnceSubscriber($formatter, $eventOnceCollector, $eventOnceRenderer),
364 4
            new EventSubscriber($formatter),
365 4
            new SimpleEventSubscriber($formatter, $eventCollector, $eventRenderer),
366
367
            // Layer
368 4
            new GeoJsonLayerSubscriber($formatter, $geoJsonLayerCollector, $geoJsonLayerRenderer),
369 4
            new HeatmapLayerSubscriber($formatter, $heatmapLayerCollector, $heatmapLayerRenderer),
370 4
            new KmlLayerSubscriber($formatter, $kmlLayerCollector, $kmlLayerRenderer),
371 4
            new LayerSubscriber($formatter),
372
373
            // Overlay
374 4
            new CircleSubscriber($formatter, $circleCollector, $circleRenderer),
375 4
            new DefaultInfoWindowSubscriber($formatter, $defaultInfoWindowCollector, $defaultInfoWindowRenderer),
376 4
            new EncodedPolylineSubscriber($formatter, $encodedPolylineCollector, $encodedPolylineRenderer),
377 4
            new ExtendableSubscriber($formatter, $extendableCollector, $extendableRenderer),
378 4
            new GroundOverlaySubscriber($formatter, $groundOverlayCollector, $groundOverlayRenderer),
379 4
            new IconSequenceSubscriber($formatter, $iconSequenceCollector, $iconSequenceRenderer),
380 4
            new IconSubscriber($formatter, $iconCollector, $iconRenderer),
381 4
            new InfoBoxSubscriber($formatter, $infoBoxCollector, $infoBoxRenderer),
382 4
            new InfoWindowCloseSubscriber($formatter, $infoWindowCollector, $infoWindowCloseRenderer),
383 4
            new InfoWindowOpenSubscriber($formatter, $infoWindowCollector, $infoWindowOpenRenderer),
384 4
            new MarkerClustererSubscriber($formatter, $markerClustererRenderer),
385 4
            new MarkerInfoWindowOpenSubscriber($formatter, $markerCollector, $infoWindowOpenRenderer, $eventRenderer),
386 4
            new MarkerShapeSubscriber($formatter, $markerShapeCollector, $markerShapeRenderer),
387 4
            new MarkerSubscriber($formatter, $markerCollector, $markerRenderer),
388 4
            new OverlaySubscriber($formatter),
389 4
            new PolygonSubscriber($formatter, $polygonCollector, $polygonRenderer),
390 4
            new PolylineSubscriber($formatter, $polylineCollector, $polylineRenderer),
391 4
            new RectangleSubscriber($formatter, $rectangleCollector, $rectangleRenderer),
392 4
            new SymbolSubscriber($formatter, $symbolCollector, $symbolRenderer),
393
394
            // Map
395 4
            new MapBoundSubscriber($formatter, $mapBoundRenderer),
396 4
            new MapCenterSubscriber($formatter, $mapCenterRenderer),
397 4
            new MapContainerSubscriber($formatter, $mapContainerRenderer),
398 4
            new MapHtmlSubscriber($formatter, $mapHtmlRenderer),
399 4
            new MapInitSubscriber($formatter),
400 4
            new MapJavascriptSubscriber($formatter, $mapRenderer, $callbackRenderer, $javascriptTagRenderer),
401 4
            new MapStylesheetSubscriber($formatter, $stylesheetTagRenderer),
402 4
            new MapSubscriber($formatter, $mapRenderer),
403
404
            // Utility
405 4
            new ObjectToArraySubscriber($formatter, $objectToArrayRenderer),
406 4
        ], parent::createSubscribers());
407
    }
408
}
409