Passed
Push — master ( 4ab488...bcfbc7 )
by Bálint
03:58
created

CreateNorthWindMetadata   A

Complexity

Total Complexity 1

Size/Duplication

Total Lines 107
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 1
eloc 69
dl 0
loc 107
c 0
b 0
f 0
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
B create() 0 98 1
1
<?php
2
3
use POData\Providers\Metadata\ResourceStreamInfo;
4
use POData\Providers\Metadata\Type\EdmPrimitiveType;
5
use POData\Common\InvalidOperationException;
6
require_once 'POData\Providers\Metadata\IDataServiceMetadataProvider.php';
7
use POData\Providers\Metadata\SimpleMetadataProvider;
8
//Begin Resource Classes
9
10
11
class Address
12
{
13
    //Edm.String
14
    public $StreetName;
15
    //Edm.String
16
    public $City;
17
    //Edm.String
18
    public $Region;
19
    //Edm.String
20
    public $PostalCode;
21
    //Edm.String
22
    public $Country;
23
    //NorthWind.Address
24
    public $AltAddress;
25
}
26
27
28
class Customer
29
{
30
    //Key Edm.String
31
    public $CustomerID;
32
    //Edm.String
33
    public $CompanyName;
34
    //Edm.String
35
    public $ContactName;
36
    //Edm.String
37
    public $ContactTitle;
38
    //Edm.String
39
    public $Phone;
40
    //Edm.String
41
    public $Fax;
42
    //NorthWind.Address
43
    public $Address;
44
    //array(string)
45
    public $EmailAddresses;
46
    //array(Address)
47
    public $OtherAddresses;
48
    //Navigation Property Orders (ResourceSetReference)
49
    public $Orders;
50
}
51
52
53
class Order
54
{
55
    //Key Edm.Int32
56
    public $OrderID;
57
    //Edm.String
58
    public $CustomerID;
59
    //Edm.Int32
60
    public $EmployeeID;
61
    //Edm.DateTime
62
    public $OrderDate;
63
    //Edm.DateTime
64
    public $RequiredDate;
65
    //Edm.DateTime
66
    public $ShippedDate;
67
    //Edm.Int32
68
    public $ShipVia;
69
    //Edm.Decimal
70
    public $Freight;
71
    //Edm.String
72
    public $ShipName;
73
    //Edm.String
74
    public $ShipAddress;
75
    //Edm.String
76
    public $ShipCity;
77
    //Edm.String
78
    public $ShipRegion;
79
    //Edm.String
80
    public $ShipPostalCode;
81
    //Edm.String
82
    public $ShipCountry;
83
    //Navigation Property Customer (ResourceReference)
84
    public $Customer;
85
    //Navigation Property Order_Details (ResourceSetReference)
86
    public $Order_Details;
87
}
88
89
90
class Order_Details
91
{
92
    //Edm.Single
93
    public $Discount;
94
    //Edm.Int32
95
    public $OrderID;
96
    //Edm.Int32
97
    public $ProductID;
98
    //Edm.Int16
99
    public $Quantity;
100
    //Edm.Decimal
101
    public $UnitPrice;
102
    //Navigation Property Order (ResourceReference)
103
    public $Order;
104
105
}
106
107
108
class Employee
109
{
110
    //Key Edm.Int32
111
        public $EmployeeID;
112
        //Edm.String
113
        public $FirstName;
114
        //Edm.String
115
        public $LastName;
116
        //Edm.String
117
        public $Title;
118
        //Edm.String
119
        public $TitleOfCourtesy;
120
        //Edm.DateTime
121
        public $BirthDate;
122
        //Edm.DateTime
123
        public $HireDate;
124
        //Edm.String
125
        public $Address;
126
        //Edm.String
127
        public $City;
128
        //Edm.String
129
        public $Region;
130
        //Edm.String
131
        public $PostalCode;
132
        //Edm.String
133
        public $Country;
134
        //Edm.String
135
        public $HomePhone;
136
        //Edm.String
137
        public $Extension;
138
        //Edm.String
139
        public $Notes;
140
        //Bag of strings
141
        public $Emails;
142
        //Edm.Int32
143
        public $ReportsTo;
144
        //Edm.Binary
145
        public $Photo;
146
        //Edm.String
147
        public $PhotoPath;
148
        //Navigation Property to associated instance of Employee instance 
149
        //representing manager (ResourceReference)
150
        //public $Manager; 
151
        //Navigation Property to associated instance of Employee instances 
152
        //representing subordinates (ResourceSetReference)
153
        //public $Subordinates;
154
}
155
//End Resource Classes
156
157
158
159
class CreateNorthWindMetadata
160
{
161
    /**
162
     * create metadata
163
     * 
164
     * @throws InvalidOperationException
165
     * 
166
     * @return SimpleMetadataProvider
167
     */
168
    public static function create()
169
    {
170
        $metadata = new SimpleMetadataProvider('NorthWindEntities', 'NorthWind');
171
        
172
        //Register the complex type 'Address' having a property of same type.
173
        $addressComplexType = $metadata->addComplexType(new ReflectionClass('Address'), 'Address', 'NorthWind', null);
174
        $metadata->addPrimitiveProperty($addressComplexType, 'StreetName', EdmPrimitiveType::STRING);
175
        $metadata->addPrimitiveProperty($addressComplexType, 'City', EdmPrimitiveType::STRING);
176
        $metadata->addPrimitiveProperty($addressComplexType, 'Region', EdmPrimitiveType::STRING);
177
        $metadata->addPrimitiveProperty($addressComplexType, 'PostalCode', EdmPrimitiveType::STRING);		
178
        $metadata->addPrimitiveProperty($addressComplexType, 'Country', EdmPrimitiveType::STRING);
179
        //A complex sub property to hold alternate address
180
        $metadata->addComplexProperty($addressComplexType, 'AltAddress', $addressComplexType);
181
        
182
        //Register the entity (resource) type 'Customer'
183
        $customersEntityType = $metadata->addEntityType(new ReflectionClass('Customer'), 'Customer', 'NorthWind');
184
        $metadata->addKeyProperty($customersEntityType, 'CustomerID', EdmPrimitiveType::STRING);
185
        $metadata->addPrimitiveProperty($customersEntityType, 'CompanyName', EdmPrimitiveType::STRING);
186
        $metadata->addPrimitiveProperty($customersEntityType, 'ContactName', EdmPrimitiveType::STRING);
187
        $metadata->addPrimitiveProperty($customersEntityType, 'ContactTitle', EdmPrimitiveType::STRING);
188
        $metadata->addPrimitiveProperty($customersEntityType, 'Phone', EdmPrimitiveType::STRING);
189
        $metadata->addPrimitiveProperty($customersEntityType, 'Fax', EdmPrimitiveType::STRING);
190
        $metadata->addComplexProperty($customersEntityType, 'Address', $addressComplexType);
191
        //Add a bag property (bag of complex type) to hold array of other addresses
192
        $metadata->addComplexProperty($customersEntityType, 'OtherAddresses', $addressComplexType, true);
193
        //Add a bag property (bag of primitve type) to hold array of email addresses
194
        $metadata->addPrimitiveProperty($customersEntityType, 'EmailAddresses', EdmPrimitiveType::STRING, true);
195
196
        //Register the entity (resource) type 'Order'
197
        $orderEntityType = $metadata->addEntityType(new ReflectionClass('Order'), 'Order', 'NorthWind');
198
        $metadata->addKeyProperty($orderEntityType, 'OrderID', EdmPrimitiveType::INT32);
199
        $metadata->addPrimitiveProperty($orderEntityType, 'CustomerID', EdmPrimitiveType::STRING);
200
        $metadata->addPrimitiveProperty($orderEntityType, 'EmployeeID', EdmPrimitiveType::INT32);
201
        //Adding an etag property
202
        $metadata->addETagProperty($orderEntityType, 'OrderDate', EdmPrimitiveType::DATETIME);
203
        $metadata->addPrimitiveProperty($orderEntityType, 'RequiredDate', EdmPrimitiveType::DATETIME);
204
        $metadata->addPrimitiveProperty($orderEntityType, 'ShippedDate', EdmPrimitiveType::DATETIME);
205
        $metadata->addPrimitiveProperty($orderEntityType, 'ShipVia', EdmPrimitiveType::INT32);
206
        $metadata->addPrimitiveProperty($orderEntityType, 'Freight', EdmPrimitiveType::DECIMAL);
207
        $metadata->addPrimitiveProperty($orderEntityType, 'ShipName', EdmPrimitiveType::STRING);
208
        $metadata->addPrimitiveProperty($orderEntityType, 'ShipAddress', EdmPrimitiveType::STRING);
209
        $metadata->addPrimitiveProperty($orderEntityType, 'ShipCity', EdmPrimitiveType::STRING);
210
        $metadata->addPrimitiveProperty($orderEntityType, 'ShipRegion', EdmPrimitiveType::STRING);
211
        $metadata->addPrimitiveProperty($orderEntityType, 'ShipPostalCode', EdmPrimitiveType::STRING);
212
        $metadata->addPrimitiveProperty($orderEntityType, 'ShipCountry', EdmPrimitiveType::STRING);
213
      
214
        //Register the entity (resource) type 'Order_Details'
215
        $orderDetailsEntityType = $metadata->addEntityType(new ReflectionClass('Order_Details'), 'Order_Details', 'NorthWind');
216
        $metadata->addKeyProperty($orderDetailsEntityType, 'ProductID', EdmPrimitiveType::INT32);
217
        $metadata->addKeyProperty($orderDetailsEntityType, 'OrderID', EdmPrimitiveType::INT32);
218
        $metadata->addPrimitiveProperty($orderDetailsEntityType, 'UnitPrice', EdmPrimitiveType::DECIMAL);
219
        $metadata->addPrimitiveProperty($orderDetailsEntityType, 'Quantity', EdmPrimitiveType::INT16);
220
        $metadata->addPrimitiveProperty($orderDetailsEntityType, 'Discount', EdmPrimitiveType::SINGLE);
221
     
222
        //Register the entity (resource) type 'Employee'
223
        $employeeEntityType = $metadata->addEntityType(new ReflectionClass('Employee'), 'Employee', 'NorthWind');
224
        $metadata->addKeyProperty($employeeEntityType, 'EmployeeID', EdmPrimitiveType::INT32);
225
        $metadata->addPrimitiveProperty($employeeEntityType, 'FirstName', EdmPrimitiveType::STRING);
226
        $metadata->addPrimitiveProperty($employeeEntityType, 'LastName', EdmPrimitiveType::STRING);
227
        $metadata->addPrimitiveProperty($employeeEntityType, 'Title', EdmPrimitiveType::STRING);
228
        $metadata->addPrimitiveProperty($employeeEntityType, 'TitleOfCourtesy', EdmPrimitiveType::STRING);
229
        $metadata->addPrimitiveProperty($employeeEntityType, 'BirthDate', EdmPrimitiveType::DATETIME);
230
        $metadata->addPrimitiveProperty($employeeEntityType, 'HireDate', EdmPrimitiveType::DATETIME);
231
        $metadata->addPrimitiveProperty($employeeEntityType, 'Address', EdmPrimitiveType::STRING);
232
        $metadata->addPrimitiveProperty($employeeEntityType, 'City', EdmPrimitiveType::STRING);
233
        $metadata->addPrimitiveProperty($employeeEntityType, 'Region', EdmPrimitiveType::STRING);
234
        $metadata->addPrimitiveProperty($employeeEntityType, 'PostalCode', EdmPrimitiveType::STRING);
235
        $metadata->addPrimitiveProperty($employeeEntityType, 'Country', EdmPrimitiveType::STRING);
236
        $metadata->addPrimitiveProperty($employeeEntityType, 'HomePhone', EdmPrimitiveType::STRING);
237
        $metadata->addPrimitiveProperty($employeeEntityType, 'Extension', EdmPrimitiveType::STRING);
238
        $metadata->addPrimitiveProperty($employeeEntityType, 'Notes', EdmPrimitiveType::STRING);
239
        $metadata->addPrimitiveProperty($employeeEntityType, 'ReportsTo', EdmPrimitiveType::INT32);
240
        //$metadata->addPrimitiveProperty($employeeEntityType, 'Photo', EdmPrimitiveType::BINARY);
241
        $metadata->addPrimitiveProperty($employeeEntityType, 'Emails', EdmPrimitiveType::STRING, true);
242
        $metadata->addPrimitiveProperty($employeeEntityType, 'PhotoPath', EdmPrimitiveType::STRING);
243
        //Set Employee entity type as MLE thus the url http://host/NorthWind.svc/Employee(1875)/$value will give the stream associated with employee with id 1875
244
        $employeeEntityType->setMediaLinkEntry(true);
0 ignored issues
show
Bug introduced by
true of type true is incompatible with the type POData\Providers\Metadata\Type\Boolean expected by parameter $isMLE of POData\Providers\Metadat...pe::setMediaLinkEntry(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

244
        $employeeEntityType->setMediaLinkEntry(/** @scrutinizer ignore-type */ true);
Loading history...
245
        //Add a named stream property to the employee entity type
246
        //so the url http://host/NorthWind.svc/Employee(9831)/TumbNail_48X48 will give stream associated with employee's thumbnail (of size 48 x 48) image
247
        //$streamInfo = new ResourceStreamInfo('TumbNail_48X48');
248
        //$employeeEntityType->addNamedStream($streamInfo);
249
        
250
        $customersResourceSet = $metadata->addResourceSet('Customers', $customersEntityType);
251
        $ordersResourceSet = $metadata->addResourceSet('Orders', $orderEntityType);
252
        $orderDetialsResourceSet = $metadata->addResourceSet('Order_Details', $orderDetailsEntityType);
253
        $employeeResourceSet = $metadata->addResourceSet('Employees', $employeeEntityType);
0 ignored issues
show
Unused Code introduced by
The assignment to $employeeResourceSet is dead and can be removed.
Loading history...
254
255
        //Register the assoications (navigations)
256
        //Customers (1) <==> Orders (0-*)
257
        $metadata->addResourceSetReferenceProperty($customersEntityType, 'Orders', $ordersResourceSet);
258
        $metadata->addResourceReferenceProperty($orderEntityType, 'Customer', $customersResourceSet);
259
260
        //Register the assoications (navigations)
261
        //Orders (1) <==> Orders_Details (0-*)
262
        $metadata->addResourceReferenceProperty($orderDetailsEntityType, 'Order', $ordersResourceSet);
263
        $metadata->addResourceSetReferenceProperty($orderEntityType, 'Order_Details', $orderDetialsResourceSet);
264
265
        return $metadata;
266
    }
267
}
268