Passed
Push — master ( 34419e...bd5a67 )
by Matthew
03:07
created

RendererFactory::setTwigEngine()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
3
namespace Dtc\GridBundle\Grid\Renderer;
4
5
use Symfony\Component\Routing\Router;
6
use Symfony\Bundle\TwigBundle\TwigEngine;
7
8
class RendererFactory
9
{
10
    protected $twigEngine;
11
    protected $router;
12
    protected $themeCss;
13
    protected $themeJs;
14
    protected $pageDivStyle;
15
    protected $jqGridJs;
16
    protected $jqGridCss;
17
    protected $dataTablesCss;
18
    protected $dataTablesJs;
19
    protected $jQuery;
20
    protected $purl;
21
22
    public function __construct(
23
                                Router $router,
24
                                array $config
25
    ) {
26
        $this->router = $router;
27
        $this->themeCss = $config['theme.css'];
28
        $this->themeJs = $config['theme.js'];
29
        $this->pageDivStyle = $config['page_div_style'];
30
        $this->jQuery = $config['jquery'];
31
        $this->purl = $config['purl'];
32
        $this->dataTablesCss = $config['datatables.css'];
33
        $this->dataTablesJs = $config['datatables.js'];
34
        $this->jqGridCss = $config['jq_grid.css'];
35
        $this->jqGridJs = $config['jq_grid.js'];
36
    }
37
38
    public function setTwigEngine(TwigEngine $twigEngine)
39
    {
40
        $this->twigEngine = $twigEngine;
41
    }
42
43
    public function getTwigEngine()
44
    {
45
        return $this->twigEngine;
46
    }
47
48
    /**
49
     * Creates a new renderer of type $type, throws an exception if it's not known how to create a renderer of type $type.
50
     *
51
     * @param $type
52
     *
53
     * @return AbstractRenderer
54
     */
55
    public function create($type)
56
    {
57
        $twigEngine = $this->getTwigEngine();
58
        if (!$twigEngine) {
59
            throw new \Exception('Twig Engine not found.  Please see README.md for instructions.');
60
        }
61
        switch ($type) {
62
            case 'datatables':
63
                $renderer = new DataTablesRenderer($this->twigEngine, $this->router);
64
                break;
65
            case 'jq_grid':
66
                $renderer = new JQGridRenderer($this->twigEngine, $this->router);
67
                break;
68
            case 'table':
69
                $renderer = new TableGridRenderer($this->twigEngine, $this->router);
70
                break;
71
            default:
72
                throw new \Exception("No renderer for type '$type''");
73
        }
74
75
        if (method_exists($renderer, 'setThemeCss')) {
76
            $renderer->setThemeCss($this->themeCss);
77
        }
78
79
        if (method_exists($renderer, 'setThemeJs')) {
80
            $renderer->setThemeJs($this->themeJs);
81
        }
82
83
        if (method_exists($renderer, 'setJQuery')) {
84
            $renderer->setJQuery($this->jQuery);
85
        }
86
87
        if (method_exists($renderer, 'setPurl')) {
88
            $renderer->setPurl($this->purl);
89
        }
90
91
        if (method_exists($renderer, 'setPageDivStyle')) {
92
            $renderer->setPageDivStyle($this->pageDivStyle);
93
        }
94
95
        if (method_exists($renderer, 'setJqGridCss')) {
96
            $renderer->setJqGridCss($this->jqGridCss);
97
        }
98
99
        if (method_exists($renderer, 'setJqGridJs')) {
100
            $renderer->setJqGridJs($this->jqGridJs);
101
        }
102
103
        if (method_exists($renderer, 'setDataTablesCss')) {
104
            $renderer->setDataTablesCss($this->dataTablesCss);
105
        }
106
107
        if (method_exists($renderer, 'setDataTablesJs')) {
108
            $renderer->setDataTablesJs($this->dataTablesJs);
109
        }
110
111
        return $renderer;
112
    }
113
}
114