Completed
Push — master ( e3df42...7db57b )
by Nikolas
03:09
created

WebApplication   C

Complexity

Total Complexity 6

Size/Duplication

Total Lines 122
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 40

Importance

Changes 18
Bugs 1 Features 5
Metric Value
wmc 6
c 18
b 1
f 5
lcom 2
cbo 40
dl 0
loc 122
rs 5

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 16 1
A init() 0 5 2
A registerRenderers() 0 23 1
A registerFields() 0 18 1
A setNameAndBrand() 0 4 1
1
<?php
2
namespace rtens\domin\delivery\web;
3
4
use rtens\domin\ActionRegistry;
5
use rtens\domin\delivery\FieldRegistry;
6
use rtens\domin\delivery\RendererRegistry;
7
use rtens\domin\delivery\web\fields\ActionField;
8
use rtens\domin\delivery\web\fields\ColorField;
9
use rtens\domin\delivery\web\fields\DateIntervalField;
10
use rtens\domin\delivery\web\renderers\charting\ChartRenderer;
11
use rtens\domin\delivery\web\renderers\charting\ScatterChartRenderer;
12
use rtens\domin\delivery\web\renderers\ColorRenderer;
13
use rtens\domin\delivery\web\renderers\dashboard\ActionPanelRenderer;
14
use rtens\domin\delivery\web\renderers\dashboard\DashboardItemRenderer;
15
use rtens\domin\delivery\web\renderers\DateIntervalRenderer;
16
use rtens\domin\delivery\web\renderers\ElementRenderer;
17
use rtens\domin\delivery\web\renderers\MapRenderer;
18
use rtens\domin\delivery\web\renderers\tables\DataTableRenderer;
19
use rtens\domin\delivery\web\renderers\tables\TableRenderer;
20
use rtens\domin\parameters\IdentifiersProvider;
21
use rtens\domin\reflection\types\TypeFactory;
22
use rtens\domin\delivery\web\fields\ImageField;
23
use rtens\domin\delivery\web\fields\NumberField;
24
use rtens\domin\delivery\web\menu\Menu;
25
use rtens\domin\delivery\web\renderers\ListRenderer;
26
use rtens\domin\delivery\web\renderers\BooleanRenderer;
27
use rtens\domin\delivery\web\renderers\DateTimeRenderer;
28
use rtens\domin\delivery\web\renderers\FileRenderer;
29
use rtens\domin\delivery\web\renderers\HtmlRenderer;
30
use rtens\domin\delivery\web\renderers\IdentifierRenderer;
31
use rtens\domin\delivery\web\renderers\ImageRenderer;
32
use rtens\domin\delivery\web\renderers\link\LinkPrinter;
33
use rtens\domin\delivery\web\renderers\link\LinkRegistry;
34
use rtens\domin\delivery\web\renderers\ObjectRenderer;
35
use rtens\domin\delivery\web\renderers\PrimitiveRenderer;
36
use rtens\domin\delivery\web\fields\ArrayField;
37
use rtens\domin\delivery\web\fields\BooleanField;
38
use rtens\domin\delivery\web\fields\DateTimeField;
39
use rtens\domin\delivery\web\fields\EnumerationField;
40
use rtens\domin\delivery\web\fields\FileField;
41
use rtens\domin\delivery\web\fields\HtmlField;
42
use rtens\domin\delivery\web\fields\IdentifierField;
43
use rtens\domin\delivery\web\fields\MultiField;
44
use rtens\domin\delivery\web\fields\NullableField;
45
use rtens\domin\delivery\web\fields\ObjectField;
46
use rtens\domin\delivery\web\fields\StringField;
47
use watoki\curir\protocol\Url;
48
use watoki\factory\Factory;
49
50
class WebApplication {
51
52
    /** @var string */
53
    public $name = 'domin';
54
55
    /** @var Factory */
56
    public $factory;
57
58
    /** @var ActionRegistry */
59
    public $actions;
60
61
    /** @var RendererRegistry */
62
    public $renderers;
63
64
    /** @var LinkRegistry */
65
    public $links;
66
67
    /** @var TypeFactory */
68
    public $types;
69
70
    /** @var FieldRegistry */
71
    public $fields;
72
73
    /** @var IdentifiersProvider */
74
    public $identifiers;
75
76
    /** @var Menu */
77
    public $menu;
78
79
    /** @var MobileDetector */
80
    public $detector;
81
82
    /** @var WebCommentParser */
83
    public $parser;
84
85
    /**
86
     * @param Factory $factory <-
87
     * @param ActionRegistry $actions <-
88
     * @param FieldRegistry $fields <-
89
     * @param RendererRegistry $renderers <-
90
     * @param LinkRegistry $links <-
91
     * @param IdentifiersProvider $identifiers <-
92
     * @param TypeFactory $types <-
93
     * @param MobileDetector $detect <-
94
     * @param WebCommentParser $parser <-
95
     */
96
    public function __construct(Factory $factory, ActionRegistry $actions, FieldRegistry $fields,
97
                                RendererRegistry $renderers, LinkRegistry $links, IdentifiersProvider $identifiers,
98
                                TypeFactory $types, MobileDetector $detect, WebCommentParser $parser) {
99
        $factory->setSingleton($this);
100
101
        $this->factory = $factory;
102
        $this->actions = $actions;
103
        $this->renderers = $renderers;
104
        $this->links = $links;
105
        $this->types = $types;
106
        $this->fields = $fields;
107
        $this->identifiers = $identifiers;
108
        $this->detector = $detect;
109
        $this->parser = $parser;
110
        $this->menu = new Menu($actions);
0 ignored issues
show
Unused Code introduced by
The call to Menu::__construct() has too many arguments starting with $actions.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
111
    }
112
113
    /**
114
     * @param callable $callback Receives the WebApplication instance
115
     * @param null|Factory $factory
116
     * @return Factory
117
     */
118
    public static function init(callable $callback, Factory $factory = null) {
119
        $factory = $factory ?: new Factory();
120
        $callback($factory->setSingleton($factory->getInstance(self::class)));
121
        return $factory;
122
    }
123
124
    public function registerRenderers(Url $baseUrl) {
125
        $links = new LinkPrinter($baseUrl, $this->links, $this->actions, $this->parser);
126
127
        $this->renderers->add(new ElementRenderer());
128
        $this->renderers->add(new BooleanRenderer());
129
        $this->renderers->add(new ColorRenderer());
130
        $this->renderers->add(new PrimitiveRenderer());
131
        $this->renderers->add(new DateTimeRenderer());
132
        $this->renderers->add(new DateIntervalRenderer());
133
        $this->renderers->add(new HtmlRenderer());
134
        $this->renderers->add(new IdentifierRenderer($links));
135
        $this->renderers->add(new FileRenderer());
136
        $this->renderers->add(new ImageRenderer());
137
        $this->renderers->add(new ScatterChartRenderer());
138
        $this->renderers->add(new ChartRenderer());
139
        $this->renderers->add(new DashboardItemRenderer($this->renderers));
140
        $this->renderers->add(new ActionPanelRenderer($this->renderers, $this->actions, $this->fields, $baseUrl));
141
        $this->renderers->add(new DataTableRenderer($this->renderers));
142
        $this->renderers->add(new TableRenderer($this->renderers, $links));
143
        $this->renderers->add(new ListRenderer($this->renderers, $links));
144
        $this->renderers->add(new MapRenderer($this->renderers, $links));
145
        $this->renderers->add(new ObjectRenderer($this->renderers, $this->types, $links));
146
    }
147
148
    public function registerFields() {
149
        $this->fields->add(new StringField());
150
        $this->fields->add(new NumberField());
151
        $this->fields->add(new BooleanField());
152
        $this->fields->add(new ColorField());
153
        $this->fields->add(new FileField());
154
        $this->fields->add(new ImageField());
155
        $this->fields->add(new HtmlField());
156
        $this->fields->add(new DateTimeField());
157
        $this->fields->add(new DateIntervalField());
158
        $this->fields->add(new ArrayField($this->fields, $this->detector));
159
        $this->fields->add(new NullableField($this->fields));
160
        $this->fields->add(new ActionField($this->fields, $this->actions));
161
        $this->fields->add(new ObjectField($this->types, $this->fields));
162
        $this->fields->add(new MultiField($this->fields));
163
        $this->fields->add(new IdentifierField($this->fields, $this->identifiers));
164
        $this->fields->add(new EnumerationField($this->fields));
165
    }
166
167
    public function setNameAndBrand($name) {
168
        $this->name = $name;
169
        $this->menu->setBrand($name);
170
    }
171
}