Completed
Push — master ( 7c1a3d...b733b0 )
by Dieter
07:59
created

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