ListManager   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 157
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 7
eloc 47
c 1
b 0
f 0
dl 0
loc 157
ccs 42
cts 42
cp 1
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 20 1
A getData() 0 7 2
A buildList() 0 19 1
A getResponse() 0 7 2
A generateList() 0 7 1
1
<?php
2
3
namespace Povs\ListerBundle\Service;
4
5
use Povs\ListerBundle\Declaration\ListInterface;
6
use Povs\ListerBundle\DependencyInjection\Locator\ListLocator;
7
use Povs\ListerBundle\Exception\ListException;
8
use Povs\ListerBundle\Factory\MapperFactory;
9
use Povs\ListerBundle\Factory\ListValueFactory;
10
use Povs\ListerBundle\Factory\ViewFactory;
11
use Povs\ListerBundle\View\ListView;
12
use Symfony\Component\HttpFoundation\Response;
13
14
/**
15
 * @author Povilas Margaiatis <[email protected]>
16
 */
17
class ListManager
18
{
19
    /**
20
     * @var ListTypeResolver
21
     */
22
    private $typeResolver;
23
24
    /**
25
     * @var ConfigurationResolver
26
     */
27
    private $configurationResolver;
28
29
    /**
30
     * @var RequestHandler
31
     */
32
    private $requestHandler;
33
34
    /**
35
     * @var FilterBuilder
36
     */
37
    private $filterBuilder;
38
39
    /**
40
     * @var ListQueryBuilder
41
     */
42
    private $queryBuilder;
43
44
    /**
45
     * @var ViewFactory
46
     */
47
    private $viewFactory;
48
49
    /**
50
     * @var MapperFactory
51
     */
52
    private $mapperFactory;
53
54
    /**
55
     * @var ListValueFactory
56
     */
57
    private $valueFactory;
58
59
    /**
60
     * @var ListLocator
61
     */
62
    private $listLocator;
63
64
    /**
65
     * Is set when called buildList method
66
     *
67
     * @var ListView|null
68
     */
69
    private $listView;
70
71
    /**
72
     * ListManager constructor.
73
     *
74
     * @param ListTypeResolver      $typeResolver
75
     * @param ConfigurationResolver $configurationResolver
76
     * @param RequestHandler        $requestHandler
77
     * @param FilterBuilder         $filterBuilder
78
     * @param ListQueryBuilder      $queryBuilder
79
     * @param ViewFactory           $viewFactory
80
     * @param MapperFactory         $mapperFactory
81
     * @param ListValueFactory      $valueFactory
82
     * @param ListLocator           $listLocator
83
     */
84 4
    public function __construct(
85
        ListTypeResolver $typeResolver,
86
        ConfigurationResolver $configurationResolver,
87
        RequestHandler $requestHandler,
88
        FilterBuilder $filterBuilder,
89
        ListQueryBuilder $queryBuilder,
90
        ViewFactory $viewFactory,
91
        MapperFactory $mapperFactory,
92
        ListValueFactory $valueFactory,
93
        ListLocator $listLocator
94
    ) {
95 4
        $this->typeResolver = $typeResolver;
96 4
        $this->configurationResolver = $configurationResolver;
97 4
        $this->requestHandler = $requestHandler;
98 4
        $this->filterBuilder = $filterBuilder;
99 4
        $this->queryBuilder = $queryBuilder;
100 4
        $this->viewFactory = $viewFactory;
101 4
        $this->mapperFactory = $mapperFactory;
102 4
        $this->valueFactory = $valueFactory;
103 4
        $this->listLocator = $listLocator;
104
    }
105
106
    /**
107
     * @param string $list
108
     * @param string $type
109
     * @param array  $parameters
110
     */
111 2
    public function buildList(string $list, string $type, array $parameters = []): void
112
    {
113 2
        $list = $this->generateList($list, $parameters);
114 2
        $this->typeResolver->resolveType($type);
115 2
        $listMapper = $this->mapperFactory->createListMapper($list, $this->typeResolver->getTypeName());
116 2
        $filterMapper = $this->mapperFactory->createFilterMapper($list);
117 2
        $filterForm = $this->filterBuilder->buildFilterForm($filterMapper);
118 2
        $this->requestHandler->handleRequest($listMapper, $filterMapper, $filterForm);
119 2
        $listValue = $this->valueFactory->createListValue($listMapper, $filterMapper);
120 2
        $joinMapper = $this->mapperFactory->createJoinMapper($list, $listMapper, $filterMapper, $listValue);
121 2
        $queryBuilder = $this->queryBuilder->buildQuery($list, $joinMapper, $listMapper, $filterMapper, $listValue);
122 2
        $lazyQueryBuilder = $this->queryBuilder->buildLazyQuery($list, $joinMapper, $listMapper);
123 2
        $this->listView = $this->viewFactory->createView(
124 2
            $listMapper,
125 2
            $filterForm,
126 2
            $queryBuilder,
127 2
            $lazyQueryBuilder,
128 2
            $this->typeResolver->getPerPage(),
129 2
            $this->typeResolver->getCurrentPage()
130 2
        );
131
    }
132
133
    /**
134
     * @param array $options
135
     *
136
     * @return Response
137
     */
138 2
    public function getResponse(array $options = []): Response
139
    {
140 2
        if (!$this->listView) {
141 1
            throw ListException::listNotBuilt();
142
        }
143
144 1
        return $this->typeResolver->getResponse($this->listView, $options);
145
    }
146
147
    /**
148
     * @param array $options
149
     *
150
     * @return mixed
151
     */
152 2
    public function getData(array $options = [])
153
    {
154 2
        if (!$this->listView) {
155 1
            throw ListException::listNotBuilt();
156
        }
157
158 1
        return $this->typeResolver->getData($this->listView, $options);
159
    }
160
161
    /**
162
     * @param string $list
163
     * @param array  $parameters
164
     *
165
     * @return ListInterface
166
     */
167 2
    private function generateList(string $list, array $parameters = []): ListInterface
168
    {
169 2
        $list = $this->listLocator->get($list);
170 2
        $list->setParameters($parameters);
171 2
        $this->configurationResolver->resolve($list);
172
173 2
        return $list;
174
    }
175
}
176