Passed
Pull Request — master (#274)
by Alex
03:15
created

SimpleDataService::getReadQueryProvider()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace POData;
6
7
use POData\Common\ODataException;
8
use POData\Configuration\EntitySetRights;
9
use POData\Configuration\IServiceConfiguration;
10
use POData\ObjectModel\IObjectSerialiser;
11
use POData\OperationContext\ServiceHost;
12
use POData\Providers\Metadata\IMetadataProvider;
13
use POData\Providers\Metadata\SimpleMetadataProvider;
14
use POData\Providers\Query\IReadQueryProvider;
15
use POData\Providers\Stream\IStreamProvider2;
16
use POData\Providers\Stream\SimpleStreamProvider;
17
18
/**
19
 * DataService that implements IServiceProvider.
20
 **/
21
class SimpleDataService extends BaseService implements IService
22
{
23
    /**
24
     * @var IMetadataProvider
25
     */
26
    protected $metaProvider;
27
    /**
28
     * @var IReadQueryProvider
29
     */
30
    protected $readQueryProvider;
31
32
    /**
33
     * @var IStreamProvider2;
34
     */
35
    protected $streamProvider;
36
37
    /**
38
     * SimpleDataService constructor.
39
     * @param $db
40
     * @param  SimpleMetadataProvider     $metaProvider
41
     * @param  ServiceHost                $host
42
     * @param  IObjectSerialiser|null     $serialiser
43
     * @param  IStreamProvider2|null      $streamProvider
44
     * @param  IServiceConfiguration|null $config
45
     * @throws ODataException
46
     */
47
    public function __construct(
48
        $db,
49
        SimpleMetadataProvider $metaProvider,
50
        ServiceHost $host,
51
        IObjectSerialiser $serialiser = null,
52
        IStreamProvider2 $streamProvider = null,
53
        IServiceConfiguration $config = null
54
    ) {
55
        $this->metaProvider = $metaProvider;
56
        if ($db instanceof IReadQueryProvider) {
57
            $this->readQueryProvider = $db;
58
        } elseif (!empty($db->queryProviderClassName)) {
59
            $queryProviderClassName = $db->queryProviderClassName;
60
            $this->readQueryProvider    = new $queryProviderClassName($db);
61
        } else {
62
            throw new ODataException('Invalid query provider supplied', 500);
63
        }
64
        $this->setStreamProvider($streamProvider);
65
66
        $this->setHost($host);
67
        parent::__construct($serialiser, $metaProvider, $config);
68
    }
69
70
    /**
71
     * @param  IStreamProvider2|null $streamProvider
72
     * @return void
73
     */
74
    public function setStreamProvider(IStreamProvider2 $streamProvider = null)
75
    {
76
        $this->streamProvider = (null == $streamProvider) ? new SimpleStreamProvider() : $streamProvider;
77
    }
78
79
    /**
80
     * {@inheritdoc}
81
     * @throws Common\InvalidOperationException
82
     */
83
    public function initializeDefaultConfig(IServiceConfiguration $config)
84
    {
85
        $config->setEntitySetPageSize('*', 400);
86
        $config->setEntitySetAccessRule('*', EntitySetRights::ALL());
87
        $config->setAcceptCountRequests(true);
88
        $config->setAcceptProjectionRequests(true);
89
        return $config;
90
    }
91
92
    public function initialize(IServiceConfiguration $config)
93
    {
94
    }
95
96
    /**
97
     * @return IReadQueryProvider
98
     */
99
    public function getReadQueryProvider(): ?IReadQueryProvider
100
    {
101
        return $this->readQueryProvider;
102
    }
103
104
    /**
105
     * @return IMetadataProvider
106
     */
107
    public function getMetadataProvider()
108
    {
109
        return $this->metaProvider;
110
    }
111
112
    /**
113
     * @return IStreamProvider2
114
     */
115
    public function getStreamProviderX()
116
    {
117
        return $this->streamProvider;
118
    }
119
120
    /**
121
     * This method is called only once to initialize service-wide policies.
122
     *
123
     * @param IServiceConfiguration $config data service configuration
124
     */
125
    public function initializeService(IServiceConfiguration $config)
126
    {
127
        $config->setEntitySetAccessRule('*', EntitySetRights::ALL());
128
    }
129
}
130