Passed
Push — master ( 9ea2c2...e5baa0 )
by Dieter
19:27 queued 10:41
created

Base::createAirSellFromRecommendation()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
/**
3
 * amadeus-ws-client
4
 *
5
 * Copyright 2015 Amadeus Benelux NV
6
 *
7
 * Licensed under the Apache License, Version 2.0 (the "License");
8
 * you may not use this file except in compliance with the License.
9
 * You may obtain a copy of the License at
10
 *
11
 * http://www.apache.org/licenses/LICENSE-2.0
12
 *
13
 * Unless required by applicable law or agreed to in writing, software
14
 * distributed under the License is distributed on an "AS IS" BASIS,
15
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
 * See the License for the specific language governing permissions and
17
 * limitations under the License.
18
 *
19
 * @package Amadeus
20
 * @license https://opensource.org/licenses/Apache-2.0 Apache 2.0
21
 */
22
23
namespace Amadeus\Client\RequestCreator;
24
25
use Amadeus\Client\InvalidMessageException;
26
use Amadeus\Client\Params\RequestCreatorParams;
27
use Amadeus\Client\RequestOptions\AirFlightInfoOptions;
28
use Amadeus\Client\RequestOptions\AirMultiAvailabilityOptions;
29
use Amadeus\Client\RequestOptions\AirRetrieveSeatMapOptions;
30
use Amadeus\Client\RequestOptions\AirSellFromRecommendationOptions;
31
use Amadeus\Client\RequestOptions\CommandCrypticOptions;
32
use Amadeus\Client\RequestOptions\DocIssuanceIssueTicketOptions;
33
use Amadeus\Client\RequestOptions\FareCheckRulesOptions;
34
use Amadeus\Client\RequestOptions\FareConvertCurrencyOptions;
35
use Amadeus\Client\RequestOptions\FareInformativePricingWithoutPnrOptions;
36
use Amadeus\Client\RequestOptions\FareMasterPricerTbSearch;
37
use Amadeus\Client\RequestOptions\FarePricePnrWithBookingClassOptions;
38
use Amadeus\Client\RequestOptions\InfoEncodeDecodeCityOptions;
39
use Amadeus\Client\RequestOptions\MiniRuleGetFromPricingRecOptions;
40
use Amadeus\Client\RequestOptions\OfferConfirmAirOptions;
41
use Amadeus\Client\RequestOptions\OfferConfirmCarOptions;
42
use Amadeus\Client\RequestOptions\OfferConfirmHotelOptions;
43
use Amadeus\Client\RequestOptions\OfferVerifyOptions;
44
use Amadeus\Client\RequestOptions\PnrAddMultiElementsBase;
45
use Amadeus\Client\RequestOptions\PnrCancelOptions;
46
use Amadeus\Client\RequestOptions\PnrCreatePnrOptions;
47
use Amadeus\Client\RequestOptions\PnrDisplayHistoryOptions;
48
use Amadeus\Client\RequestOptions\PnrRetrieveAndDisplayOptions;
49
use Amadeus\Client\RequestOptions\PnrRetrieveOptions;
50
use Amadeus\Client\RequestOptions\PnrTransferOwnershipOptions;
51
use Amadeus\Client\RequestOptions\PriceXplorerExtremeSearchOptions;
52
use Amadeus\Client\RequestOptions\QueueListOptions;
53
use Amadeus\Client\RequestOptions\QueueMoveItemOptions;
54
use Amadeus\Client\RequestOptions\QueuePlacePnrOptions;
55
use Amadeus\Client\RequestOptions\QueueRemoveItemOptions;
56
use Amadeus\Client\RequestOptions\RequestOptionsInterface;
57
use Amadeus\Client\RequestOptions\SalesReportsDisplayQueryReportOptions;
58
use Amadeus\Client\RequestOptions\SecurityAuthenticateOptions;
59
use Amadeus\Client\RequestOptions\TicketCreateTstFromPricingOptions;
60
use Amadeus\Client\RequestOptions\TicketDeleteTstOptions;
61
use Amadeus\Client\RequestOptions\TicketDisplayTstOptions;
62
use Amadeus\Client\Struct;
63
64
/**
65
 * Base request creator - the default request creator.
66
 *
67
 * @package Amadeus\Client\RequestCreator
68
 * @author Dieter Devlieghere <[email protected]>
69
 */
70
class Base implements RequestCreatorInterface
71
{
72
    /**
73
     * @var RequestCreatorParams
74
     */
75
    protected $params;
76
77
    /**
78
     * Associative array of messages (as keys) and versions (as values) that are present in the WSDL.
79
     *
80
     * @var array
81
     */
82
    protected $messagesAndVersions = [];
83
84
    /**
85
     * @param $params
86
     */
87
    public function __construct(RequestCreatorParams $params)
88
    {
89
        $this->params = $params;
90
        $this->messagesAndVersions = $params->messagesAndVersions;
91
    }
92
93
    /**
94
     * @param string $messageName the message name as named in the WSDL
95
     * @param RequestOptionsInterface $params
96
     * @throws Struct\InvalidArgumentException When invalid input is detected during message creation.
97
     * @throws InvalidMessageException when trying to create a request for a message that is not in your WSDL.
98
     * @return mixed the created request
99
     */
100
    public function createRequest($messageName, RequestOptionsInterface $params)
101
    {
102
        $this->checkMessageIsInWsdl($messageName);
103
104
        $methodName = 'create' . str_replace("_", "", $messageName);
105
106
        if (method_exists($this, $methodName)) {
107
            return $this->$methodName($params);
108
        } else {
109
            throw new \RuntimeException('Message ' . $methodName . ' is not implemented in ' . __CLASS__);
110
        }
111
    }
112
113
    /**
114
     * @return Struct\Security\SignOut
115
     */
116
    protected function createSecuritySignOut()
117
    {
118
        return new Struct\Security\SignOut();
119
    }
120
121
    /**
122
     * Create request object for Security_Authenticate message
123
     *
124
     * @param SecurityAuthenticateOptions $params
125
     * @return Struct\Security\Authenticate
126
     */
127
    protected function createSecurityAuthenticate(SecurityAuthenticateOptions $params)
128
    {
129
        return new Struct\Security\Authenticate($params);
130
    }
131
132
    /**
133
     * Create request object for PNR_Retrieve message
134
     *
135
     * @param PnrRetrieveOptions $params
136
     * @return Struct\Pnr\Retrieve
137
     */
138
    protected function createPNRRetrieve(PnrRetrieveOptions $params)
139
    {
140
        $retrieveRequest = new Struct\Pnr\Retrieve(
141
            Struct\Pnr\Retrieve::RETR_TYPE_BY_RECLOC,
142
            $params->recordLocator
143
        );
144
145
        return $retrieveRequest;
146
    }
147
148
    /**
149
     * @param PnrRetrieveAndDisplayOptions $params
150
     * @return Struct\Pnr\RetrieveAndDisplay
151
     */
152
    protected function createPNRRetrieveAndDisplay(PnrRetrieveAndDisplayOptions $params)
153
    {
154
        $req = new Struct\Pnr\RetrieveAndDisplay(
155
            $params->recordLocator,
156
            $params->retrieveOption
157
        );
158
159
        return $req;
160
    }
161
162
    /**
163
     * @param PnrAddMultiElementsBase $params
164
     * @return Struct\Pnr\AddMultiElements
165
     */
166
    protected function createPNRAddMultiElements(PnrAddMultiElementsBase $params)
167
    {
168
        if ($params instanceof PnrCreatePnrOptions && empty($params->receivedFrom)) {
169
            //Automagically add RF if not present:
170
            $params->receivedFrom = $this->params->receivedFrom;
171
        }
172
173
        $req = new Struct\Pnr\AddMultiElements($params);
174
175
        return $req;
176
    }
177
178
    /**
179
     * @param PnrCancelOptions $params
180
     * @return Struct\Pnr\Cancel
181
     */
182
    protected function createPNRCancel(PnrCancelOptions $params)
183
    {
184
        return new Struct\Pnr\Cancel($params);
185
    }
186
187
    /**
188
     * @param PnrDisplayHistoryOptions $params
189
     * @return Struct\Pnr\DisplayHistory
190
     */
191
    protected function createPNRDisplayHistory(PnrDisplayHistoryOptions $params)
192
    {
193
        return new Struct\Pnr\DisplayHistory($params);
194
    }
195
196
    /**
197
     * @param PnrTransferOwnershipOptions $params
198
     * @return Struct\Pnr\TransferOwnership
199
     */
200
    protected function createPNRTransferOwnership(PnrTransferOwnershipOptions $params)
201
    {
202
        return new Struct\Pnr\TransferOwnership($params);
203
    }
204
205
    /**
206
     * @param QueueListOptions $params
207
     * @return Struct\Queue\QueueList
208
     */
209
    protected function createQueueList(QueueListOptions $params)
210
    {
211
        $queueListRequest = new Struct\Queue\QueueList(
212
            $params->queue->queue,
213
            $params->queue->category
214
        );
215
216
        return $queueListRequest;
217
    }
218
219
    /**
220
     * @param QueuePlacePnrOptions $params
221
     * @return Struct\Queue\PlacePnr
222
     */
223
    protected function createQueuePlacePnr(QueuePlacePnrOptions $params)
224
    {
225
        $req = new Struct\Queue\PlacePnr(
226
            $params->recordLocator,
227
            $params->sourceOfficeId,
228
            $params->targetQueue
229
        );
230
231
        return $req;
232
    }
233
234
    /**
235
     * @param QueueRemoveItemOptions $params
236
     * @return Struct\Queue\RemoveItem
237
     */
238
    protected function createQueueRemoveItem(QueueRemoveItemOptions $params)
239
    {
240
        $req = new Struct\Queue\RemoveItem(
241
            $params->queue,
242
            $params->recordLocator,
243
            $params->originatorOfficeId
244
        );
245
246
        return $req;
247
    }
248
249
    /**
250
     * @param QueueMoveItemOptions $params
251
     * @return Struct\Queue\MoveItem
252
     */
253
    protected function createQueueMoveItem(QueueMoveItemOptions $params)
254
    {
255
        $req = new Struct\Queue\MoveItem(
256
            $params->recordLocator,
257
            $params->officeId,
258
            $params->sourceQueue,
259
            $params->destinationQueue
260
        );
261
262
        return $req;
263
    }
264
265
    /**
266
     * @param OfferVerifyOptions $params
267
     * @return Struct\Offer\Verify
268
     */
269
    protected function createOfferVerifyOffer(OfferVerifyOptions $params)
270
    {
271
        $req = new Struct\Offer\Verify(
272
            $params->offerReference,
273
            $params->segmentName
274
        );
275
276
        return $req;
277
    }
278
279
    /**
280
     * @param OfferConfirmAirOptions $params
281
     * @return Struct\Offer\ConfirmAir
282
     */
283
    protected function createOfferConfirmAirOffer(OfferConfirmAirOptions $params)
284
    {
285
        return new Struct\Offer\ConfirmAir($params);
286
    }
287
288
289
    /**
290
     * @param OfferConfirmHotelOptions $params
291
     * @return Struct\Offer\ConfirmHotel
292
     */
293
    protected function createOfferConfirmHotelOffer(OfferConfirmHotelOptions $params)
294
    {
295
        return new Struct\Offer\ConfirmHotel($params);
296
    }
297
298
    /**
299
     * @param OfferConfirmCarOptions $params
300
     * @return Struct\Offer\ConfirmCar
301
     */
302
    protected function createOfferConfirmCarOffer(OfferConfirmCarOptions $params)
303
    {
304
        return new Struct\Offer\ConfirmCar($params);
305
    }
306
307
    /**
308
     * createFareMasterPricerTravelBoardSearch
309
     *
310
     * @param FareMasterPricerTbSearch $params
311
     * @return Struct\Fare\MasterPricerTravelBoardSearch
312
     */
313
    protected function createFareMasterPricerTravelBoardSearch(FareMasterPricerTbSearch $params)
314
    {
315
        return new Struct\Fare\MasterPricerTravelBoardSearch($params);
316
    }
317
318
319
    /**
320
     * createFareCheckRules
321
     *
322
     * @param FareCheckRulesOptions $params
323
     * @return Struct\Fare\CheckRules
324
     */
325
    protected function createFareCheckRules(FareCheckRulesOptions $params)
326
    {
327
        return new Struct\Fare\CheckRules($params);
328
    }
329
330
    /**
331
     * createFareConvertCurrency
332
     *
333
     * @param FareConvertCurrencyOptions $params
334
     * @return Struct\Fare\ConvertCurrency
335
     */
336
    protected function createFareConvertCurrency(FareConvertCurrencyOptions $params)
337
    {
338
        return new Struct\Fare\ConvertCurrency($params);
339
    }
340
341
    /**
342
     * makeFarePricePnrWithBookingClass
343
     *
344
     * @param FarePricePnrWithBookingClassOptions $params
345
     * @return Struct\Fare\PricePNRWithBookingClass12|Struct\Fare\PricePNRWithBookingClass13
346
     */
347
    protected function createFarePricePnrWithBookingClass(FarePricePnrWithBookingClassOptions $params)
348
    {
349
        $version = $this->getActiveVersionFor('Fare_PricePNRWithBookingClass');
350
        if ($version < 13) {
351
            return new Struct\Fare\PricePNRWithBookingClass12($params);
352
        } else {
353
            return new Struct\Fare\PricePNRWithBookingClass13($params);
354
        }
355
    }
356
357
    /**
358
     * createFareInformativePricingWithoutPNR
359
     *
360
     * @param FareInformativePricingWithoutPnrOptions $params
361
     * @return Struct\Fare\InformativePricingWithoutPNR12|Struct\Fare\InformativePricingWithoutPNR13
362
     */
363
    protected function createFareInformativePricingWithoutPNR(FareInformativePricingWithoutPnrOptions $params)
364
    {
365
        $version = $this->getActiveVersionFor('Fare_InformativePricingWithoutPNR');
366
        if ($version < 13) {
367
            return new Struct\Fare\InformativePricingWithoutPNR12($params);
368
        } else {
369
            return new Struct\Fare\InformativePricingWithoutPNR13($params);
370
        }
371
    }
372
373
    /**
374
     * Air_MultiAvailability
375
     *
376
     * @param AirMultiAvailabilityOptions $params
377
     * @return Struct\Air\MultiAvailability
378
     */
379
    protected function createAirMultiAvailability(AirMultiAvailabilityOptions $params)
380
    {
381
        return new Struct\Air\MultiAvailability($params);
382
    }
383
384
    /**
385
     * Air_SellFromRecommendation
386
     *
387
     * @param AirSellFromRecommendationOptions $params
388
     * @return Struct\Air\SellFromRecommendation
389
     */
390
    protected function createAirSellFromRecommendation(AirSellFromRecommendationOptions $params)
391
    {
392
        return new Struct\Air\SellFromRecommendation($params);
393
    }
394
395
    /**
396
     * Air_FlightInfo
397
     *
398
     * @param AirFlightInfoOptions $params
399
     * @return Struct\Air\FlightInfo
400
     */
401
    protected function createAirFlightInfo(AirFlightInfoOptions $params)
402
    {
403
        return new Struct\Air\FlightInfo($params);
404
    }
405
406
    /**
407
     * @param AirRetrieveSeatMapOptions $params
408
     * @return Struct\Air\RetrieveSeatMap
409
     */
410
    protected function createAirRetrieveSeatMap(AirRetrieveSeatMapOptions $params)
411
    {
412
        return new Struct\Air\RetrieveSeatMap($params);
413
    }
414
415
    /**
416
     * Command_Cryptic
417
     *
418
     * @param CommandCrypticOptions $params
419
     * @return Struct\Command\Cryptic
420
     */
421
    protected function createCommandCryptic(CommandCrypticOptions $params)
422
    {
423
        return new Struct\Command\Cryptic($params->entry);
424
    }
425
426
    /**
427
     * Info_EncodeDecodeCity
428
     *
429
     * @param InfoEncodeDecodeCityOptions $params
430
     * @return Struct\Info\EncodeDecodeCity
431
     */
432
    protected function createInfoEncodeDecodeCity(InfoEncodeDecodeCityOptions $params)
433
    {
434
        return new Struct\Info\EncodeDecodeCity($params);
435
    }
436
437
    /**
438
     * makeMiniRuleGetFromPricingRec
439
     *
440
     * @param MiniRuleGetFromPricingRecOptions $params
441
     * @return Struct\MiniRule\GetFromPricingRec
442
     */
443
    protected function createMiniRuleGetFromPricingRec(MiniRuleGetFromPricingRecOptions $params)
444
    {
445
        return new Struct\MiniRule\GetFromPricingRec($params);
446
    }
447
448
    /**
449
     * Ticket_CreateTstFromPricing
450
     *
451
     * @param TicketCreateTstFromPricingOptions $params
452
     * @return Struct\Ticket\CreateTSTFromPricing
453
     */
454
    protected function createTicketCreateTSTFromPricing(TicketCreateTstFromPricingOptions $params)
455
    {
456
        return new Struct\Ticket\CreateTSTFromPricing($params);
457
    }
458
459
    /**
460
     * Ticket_DeleteTST
461
     *
462
     * @param TicketDeleteTstOptions $params
463
     * @return Struct\Ticket\DeleteTST
464
     */
465
    protected function createTicketDeleteTST(TicketDeleteTstOptions $params)
466
    {
467
        return new Struct\Ticket\DeleteTST($params);
468
    }
469
470
    /**
471
     * Ticket_DisplayTST
472
     *
473
     * @param TicketDisplayTstOptions $params
474
     * @return Struct\Ticket\DisplayTST
475
     */
476
    protected function createTicketDisplayTST(TicketDisplayTstOptions $params)
477
    {
478
        return new Struct\Ticket\DisplayTST($params);
479
    }
480
481
    /**
482
     * DocIssuance_IssueTicket
483
     *
484
     * @param DocIssuanceIssueTicketOptions $params
485
     * @return Struct\DocIssuance\IssueTicket
486
     */
487
    protected function createDocIssuanceIssueTicket(DocIssuanceIssueTicketOptions $params)
488
    {
489
        return new Struct\DocIssuance\IssueTicket($params);
490
    }
491
492
    /**
493
     * PriceXplorer_ExtremeSearch
494
     *
495
     * @param PriceXplorerExtremeSearchOptions $params
496
     * @return Struct\PriceXplorer\ExtremeSearch
497
     */
498
    protected function createPriceXplorerExtremeSearch(PriceXplorerExtremeSearchOptions $params)
499
    {
500
        return new Struct\PriceXplorer\ExtremeSearch($params);
501
    }
502
503
    /**
504
     * SalesReports_DisplayQueryReport
505
     *
506
     * @param SalesReportsDisplayQueryReportOptions $params
507
     * @return Struct\SalesReports\DisplayQueryReport
508
     */
509
    protected function createSalesReportsDisplayQueryReport(SalesReportsDisplayQueryReportOptions $params)
510
    {
511
        return new Struct\SalesReports\DisplayQueryReport($params);
512
    }
513
514
    /**
515
     * Check if a given message is in the active WSDL. Throws exception if it isn't.
516
     *
517
     * @throws InvalidMessageException if message is not in WSDL.
518
     * @param string $messageName
519
     */
520
    protected function checkMessageIsInWsdl($messageName)
521
    {
522
        if (!array_key_exists($messageName, $this->messagesAndVersions)) {
523
            throw new InvalidMessageException('Message "' . $messageName . '" is not in WDSL');
524
        }
525
    }
526
527
    /**
528
     * Get the version number active in the WSDL for the given message
529
     *
530
     * @param string $messageName
531
     * @return float|string
532
     */
533
    protected function getActiveVersionFor($messageName)
534
    {
535
        return $this->messagesAndVersions[$messageName];
536
    }
537
}
538