Completed
Push — develop ( b1074b...ecf42f )
by Mikaël
27:36
created

Generator::getOptionPrefix()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 2
eloc 2
nc 2
nop 1
crap 2
1
<?php
2
3
namespace WsdlToPhp\PackageGenerator\Generator;
4
5
use WsdlToPhp\PackageGenerator\Model\Schema;
6
use WsdlToPhp\PackageGenerator\Model\Wsdl;
7
use WsdlToPhp\PackageGenerator\Model\AbstractModel;
8
use WsdlToPhp\PackageGenerator\Model\EmptyModel;
9
use WsdlToPhp\PackageGenerator\Model\Struct;
10
use WsdlToPhp\PackageGenerator\Model\Service;
11
use WsdlToPhp\PackageGenerator\Model\Method;
12
use WsdlToPhp\PackageGenerator\Container\Model\Service as ServiceContainer;
13
use WsdlToPhp\PackageGenerator\Container\Model\Struct as StructContainer;
14
use WsdlToPhp\PackageGenerator\ConfigurationReader\GeneratorOptions;
15
use WsdlToPhp\PackageGenerator\WsdlHandler\Wsdl as WsdlDocument;
16
17
class Generator implements \JsonSerializable
18
{
19
    /**
20
     * Wsdl
21
     * @var Wsdl
22
     */
23
    private $wsdl;
24
    /**
25
     * @var GeneratorOptions
26
     */
27
    private $options;
28
    /**
29
     * Used parsers
30
     * @var GeneratorParsers
31
     */
32
    private $parsers;
33
    /**
34
     * Used files
35
     * @var GeneratorFiles
36
     */
37
    private $files;
38
    /**
39
     * Used containers
40
     * @var GeneratorContainers
41
     */
42
    private $containers;
43
    /**
44
     * Used SoapClient
45
     * @var GeneratorSoapClient
46
     */
47
    private $soapClient;
48
    /**
49
     * Constructor
50
     * @param GeneratorOptions $options
51
     */
52 730
    public function __construct(GeneratorOptions $options)
53
    {
54 730
        $this->setOptions($options)->initialize();
55 720
    }
56
    /**
57
     * @return Generator
58
     */
59 730
    protected function initialize()
60
    {
61 730
        return $this->initContainers()
62 730
            ->initParsers()
63 730
            ->initFiles()
64 730
            ->initSoapClient()
65 725
            ->initWsdl();
66
    }
67
    /**
68
     * @throws \InvalidArgumentException
69
     * @return Generator
70
     */
71 730
    protected function initSoapClient()
72
    {
73 730
        if (!isset($this->soapClient)) {
74 730
            $this->soapClient = new GeneratorSoapClient($this);
75 435
        }
76 725
        return $this;
77
    }
78
    /**
79
     * @return Generator
80
     */
81 730
    protected function initContainers()
82
    {
83 730
        if (!isset($this->containers)) {
84 730
            $this->containers = new GeneratorContainers($this);
85 438
        }
86 730
        return $this;
87
    }
88
    /**
89
     * @return Generator
90
     */
91 730
    protected function initParsers()
92
    {
93 730
        if (!isset($this->parsers)) {
94 730
            $this->parsers = new GeneratorParsers($this);
95 438
        }
96 730
        return $this;
97
    }
98
    /**
99
     * @return GeneratorParsers
100
     */
101 180
    public function getParsers()
102
    {
103 180
        return $this->parsers;
104
    }
105
    /**
106
     * @return Generator
107
     */
108 730
    protected function initFiles()
109
    {
110 730
        if (!isset($this->files)) {
111 730
            $this->files = new GeneratorFiles($this);
112 438
        }
113 730
        return $this;
114
    }
115
    /**
116
     * @return GeneratorFiles
117
     */
118 60
    public function getFiles()
119
    {
120 60
        return $this->files;
121
    }
122
    /**
123
     * @throws \InvalidArgumentException
124
     * @return Generator
125
     */
126 35
    protected function initDirectory()
127
    {
128 35
        Utils::createDirectory($this->getOptions()->getDestination());
129 35
        if (!is_writable($this->getOptionDestination())) {
130 5
            throw new \InvalidArgumentException(sprintf('Unable to use dir "%s" as dir does not exists, its creation has been impossible or it\'s not writable', $this->getOptionDestination()), __LINE__);
131
        }
132 30
        return $this;
133
    }
134
    /**
135
     * @return Generator
136
     */
137 730
    protected function initWsdl()
138
    {
139 730
        $this->setWsdl(new Wsdl($this, $this->getOptionOrigin(), $this->getUrlContent($this->getOptionOrigin())));
140 725
        return $this;
141
    }
142
    /**
143
     * @return Generator
144
     */
145 45
    protected function doSanityChecks()
146
    {
147 45
        $destination = $this->getOptionDestination();
148 45
        if (empty($destination)) {
149 5
            throw new \InvalidArgumentException('Package\'s destination must be defined', __LINE__);
150
        }
151 40
        $composerName = $this->getOptionComposerName();
152 40
        if ($this->getOptionStandalone() && empty($composerName)) {
153 5
            throw new \InvalidArgumentException('Package\'s composer name must be defined', __LINE__);
154
        }
155 35
        return $this;
156
    }
157
    /**
158
     * @return Generator
159
     */
160 40
    protected function doParse()
161
    {
162 40
        $this->parsers->doParse();
163 40
        return $this;
164
    }
165
    /**
166
     * @return Generator
167
     */
168 30
    protected function doGenerate()
169
    {
170 30
        $this->files->doGenerate();
171 30
        return $this;
172
    }
173
    /**
174
     * Generates all classes based on options
175
     * @return Generator
176
     */
177 45
    public function generatePackage()
178
    {
179 27
        return $this
180 45
            ->doSanityChecks()
181 35
            ->parse()
182 35
            ->initDirectory()
183 30
            ->doGenerate();
184
    }
185
    /**
186
     * Only parses what has to be parsed, called before actually generating the package
187
     * @return Generator
188
     */
189 40
    public function parse()
190
    {
191 40
        return $this->doParse();
192
    }
193
    /**
194
     * Gets the struct by its name
195
     * @uses Generator::getStructs()
196
     * @param string $structName the original struct name
197
     * @return Struct|null
198
     */
199 515
    public function getStruct($structName)
200
    {
201 515
        return $this->getStructs()->getStructByName($structName);
202
    }
203
    /**
204
     * Gets a service by its name
205
     * @param string $serviceName the service name
206
     * @return Service|null
207
     */
208 240
    public function getService($serviceName)
209
    {
210 240
        return $this->getServices()->getServiceByName($serviceName);
211
    }
212
    /**
213
     * Returns the method
214
     * @uses Generator::getServiceName()
215
     * @uses Generator::getService()
216
     * @uses Service::getMethod()
217
     * @param string $methodName the original function name
218
     * @return Method|null
219
     */
220 230
    public function getServiceMethod($methodName)
221
    {
222 230
        return $this->getService($this->getServiceName($methodName)) instanceof Service ? $this->getService($this->getServiceName($methodName))->getMethod($methodName) : null;
223
    }
224
    /**
225
     * @return ServiceContainer
226
     */
227 445
    public function getServices()
228
    {
229 445
        return $this->containers->getServices();
230
    }
231
    /**
232
     * @return StructContainer
233
     */
234 605
    public function getStructs()
235
    {
236 605
        return $this->containers->getStructs();
237
    }
238
    /**
239
     * Sets the optionCategory value
240
     * @return string
241
     */
242 390
    public function getOptionCategory()
243
    {
244 390
        return $this->options->getCategory();
245
    }
246
    /**
247
     * Sets the optionCategory value
248
     * @param string $category
249
     * @return Generator
250
     */
251 75
    public function setOptionCategory($category)
252
    {
253 75
        $this->options->setCategory($category);
254 75
        return $this;
255
    }
256
    /**
257
     * Sets the optionGatherMethods value
258
     * @return string
259
     */
260 420
    public function getOptionGatherMethods()
261
    {
262 420
        return $this->options->getGatherMethods();
263
    }
264
    /**
265
     * Sets the optionGatherMethods value
266
     * @param string $gatherMethods
267
     * @return Generator
268
     */
269 85
    public function setOptionGatherMethods($gatherMethods)
270
    {
271 85
        $this->options->setGatherMethods($gatherMethods);
272 85
        return $this;
273
    }
274
    /**
275
     * Gets the optionGenericConstantsNames value
276
     * @return bool
277
     */
278 80
    public function getOptionGenericConstantsNames()
279
    {
280 80
        return $this->options->getGenericConstantsName();
281
    }
282
    /**
283
     * Sets the optionGenericConstantsNames value
284
     * @param bool $genericConstantsNames
285
     * @return Generator
286
     */
287 10
    public function setOptionGenericConstantsNames($genericConstantsNames)
288
    {
289 10
        $this->options->setGenericConstantsName($genericConstantsNames);
290 10
        return $this;
291
    }
292
    /**
293
     * Gets the optionGenerateTutorialFile value
294
     * @return bool
295
     */
296 40
    public function getOptionGenerateTutorialFile()
297
    {
298 40
        return $this->options->getGenerateTutorialFile();
299
    }
300
    /**
301
     * Sets the optionGenerateTutorialFile value
302
     * @param bool $generateTutorialFile
303
     * @return Generator
304
     */
305 5
    public function setOptionGenerateTutorialFile($generateTutorialFile)
306
    {
307 5
        $this->options->setGenerateTutorialFile($generateTutorialFile);
308 5
        return $this;
309
    }
310
    /**
311
     * Gets the optionNamespacePrefix value
312
     * @return string
313
     */
314 360
    public function getOptionNamespacePrefix()
315
    {
316 360
        return $this->options->getNamespace();
317
    }
318
    /**
319
     * Sets the optionGenerateTutorialFile value
320
     * @param string $namespace
321
     * @return Generator
322
     */
323 25
    public function setOptionNamespacePrefix($namespace)
324
    {
325 25
        $this->options->setNamespace($namespace);
326 25
        return $this;
327
    }
328
    /**
329
     * Gets the optionAddComments value
330
     * @return array
331
     */
332 285
    public function getOptionAddComments()
333
    {
334 285
        return $this->options->getAddComments();
335
    }
336
    /**
337
     * Sets the optionAddComments value
338
     * @param array $addComments
339
     * @return Generator
340
     */
341 70
    public function setOptionAddComments($addComments)
342
    {
343 70
        $this->options->setAddComments($addComments);
344 70
        return $this;
345
    }
346
    /**
347
     * Gets the optionStandalone value
348
     * @return bool
349
     */
350 80
    public function getOptionStandalone()
351
    {
352 80
        return $this->options->getStandalone();
353
    }
354
    /**
355
     * Sets the optionStandalone value
356
     * @param bool $standalone
357
     * @return Generator
358
     */
359 15
    public function setOptionStandalone($standalone)
360
    {
361 15
        $this->options->setStandalone($standalone);
362 15
        return $this;
363
    }
364
    /**
365
     * Gets the optionValidation value
366
     * @return bool
367
     */
368 165
    public function getOptionValidation()
369
    {
370 165
        return $this->options->getValidation();
371
    }
372
    /**
373
     * Sets the optionValidation value
374
     * @param bool $validation
375
     * @return Generator
376
     */
377 35
    public function setOptionValidation($validation)
378
    {
379 35
        $this->options->setValidation($validation);
380 35
        return $this;
381
    }
382
    /**
383
     * Gets the optionStructClass value
384
     * @return string
385
     */
386 140
    public function getOptionStructClass()
387
    {
388 140
        return $this->options->getStructClass();
389
    }
390
    /**
391
     * Sets the optionStructClass value
392
     * @param string $structClass
393
     * @return Generator
394
     */
395 15
    public function setOptionStructClass($structClass)
396
    {
397 15
        $this->options->setStructClass($structClass);
398 15
        return $this;
399
    }
400
    /**
401
     * Gets the optionStructArrayClass value
402
     * @return string
403
     */
404 50
    public function getOptionStructArrayClass()
405
    {
406 50
        return $this->options->getStructArrayClass();
407
    }
408
    /**
409
     * Sets the optionStructArrayClass value
410
     * @param string $structArrayClass
411
     * @return Generator
412
     */
413 5
    public function setOptionStructArrayClass($structArrayClass)
414
    {
415 5
        $this->options->setStructArrayClass($structArrayClass);
416 5
        return $this;
417
    }
418
    /**
419
     * Gets the optionSoapClientClass value
420
     * @return string
421
     */
422 125
    public function getOptionSoapClientClass()
423
    {
424 125
        return $this->options->getSoapClientClass();
425
    }
426
    /**
427
     * Sets the optionSoapClientClass value
428
     * @param string $soapClientClass
429
     * @return Generator
430
     */
431 5
    public function setOptionSoapClientClass($soapClientClass)
432
    {
433 5
        $this->options->setSoapClientClass($soapClientClass);
434 5
        return $this;
435
    }
436
    /**
437
     * Gets the package name prefix
438
     * @param bool $ucFirst ucfirst package name prefix or not
439
     * @return string
440
     */
441 740
    public function getOptionPrefix($ucFirst = true)
442
    {
443 740
        return $ucFirst ? ucfirst($this->getOptions()->getPrefix()) : $this->getOptions()->getPrefix();
444
    }
445
    /**
446
     * Sets the package name prefix
447
     * @param string $optionPrefix
448
     * @return Generator
449
     */
450 160
    public function setOptionPrefix($optionPrefix)
451
    {
452 160
        $this->options->setPrefix($optionPrefix);
453 160
        return $this;
454
    }
455
    /**
456
     * Gets the package name suffix
457
     * @param bool $ucFirst ucfirst package name suffix or not
458
     * @return string
459
     */
460 710
    public function getOptionSuffix($ucFirst = true)
461
    {
462 710
        return $ucFirst ? ucfirst($this->getOptions()->getSuffix()) : $this->getOptions()->getSuffix();
463
    }
464
    /**
465
     * Sets the package name suffix
466
     * @param string $optionSuffix
467
     * @return Generator
468
     */
469 35
    public function setOptionSuffix($optionSuffix)
470
    {
471 35
        $this->options->setSuffix($optionSuffix);
472 35
        return $this;
473
    }
474
    /**
475
     * Gets the optionBasicLogin value
476
     * @return string
477
     */
478 750
    public function getOptionBasicLogin()
479
    {
480 750
        return $this->options->getBasicLogin();
481
    }
482
    /**
483
     * Sets the optionBasicLogin value
484
     * @param string $optionBasicLogin
485
     * @return Generator
486
     */
487 5
    public function setOptionBasicLogin($optionBasicLogin)
488
    {
489 5
        $this->options->setBasicLogin($optionBasicLogin);
490 5
        return $this;
491
    }
492
    /**
493
     * Gets the optionBasicPassword value
494
     * @return string
495
     */
496 750
    public function getOptionBasicPassword()
497
    {
498 750
        return $this->options->getBasicPassword();
499
    }
500
    /**
501
     * Sets the optionBasicPassword value
502
     * @param string $optionBasicPassword
503
     * @return Generator
504
     */
505 5
    public function setOptionBasicPassword($optionBasicPassword)
506
    {
507 5
        $this->options->setBasicPassword($optionBasicPassword);
508 5
        return $this;
509
    }
510
    /**
511
     * Gets the optionProxyHost value
512
     * @return string
513
     */
514 750
    public function getOptionProxyHost()
515
    {
516 750
        return $this->options->getProxyHost();
517
    }
518
    /**
519
     * Sets the optionProxyHost value
520
     * @param string $optionProxyHost
521
     * @return Generator
522
     */
523 5
    public function setOptionProxyHost($optionProxyHost)
524
    {
525 5
        $this->options->setProxyHost($optionProxyHost);
526 5
        return $this;
527
    }
528
    /**
529
     * Gets the optionProxyPort value
530
     * @return string
531
     */
532 750
    public function getOptionProxyPort()
533
    {
534 750
        return $this->options->getProxyPort();
535
    }
536
    /**
537
     * Sets the optionProxyPort value
538
     * @param string $optionProxyPort
539
     * @return Generator
540
     */
541 5
    public function setOptionProxyPort($optionProxyPort)
542
    {
543 5
        $this->options->setProxyPort($optionProxyPort);
544 5
        return $this;
545
    }
546
    /**
547
     * Gets the optionProxyLogin value
548
     * @return string
549
     */
550 750
    public function getOptionProxyLogin()
551
    {
552 750
        return $this->options->getProxyLogin();
553
    }
554
    /**
555
     * Sets the optionProxyLogin value
556
     * @param string $optionProxyLogin
557
     * @return Generator
558
     */
559 5
    public function setOptionProxyLogin($optionProxyLogin)
560
    {
561 5
        $this->options->setProxyLogin($optionProxyLogin);
562 5
        return $this;
563
    }
564
    /**
565
     * Gets the optionProxyPassword value
566
     * @return string
567
     */
568 750
    public function getOptionProxyPassword()
569
    {
570 750
        return $this->options->getProxyPassword();
571
    }
572
    /**
573
     * Sets the optionProxyPassword value
574
     * @param string $optionProxyPassword
575
     * @return Generator
576
     */
577 5
    public function setOptionProxyPassword($optionProxyPassword)
578
    {
579 5
        $this->options->setProxyPassword($optionProxyPassword);
580 5
        return $this;
581
    }
582
    /**
583
     * Gets the optionOrigin value
584
     * @return string
585
     */
586 745
    public function getOptionOrigin()
587
    {
588 745
        return $this->options->getOrigin();
589
    }
590
    /**
591
     * Sets the optionOrigin value
592
     * @param string $optionOrigin
593
     * @return Generator
594
     */
595 5
    public function setOptionOrigin($optionOrigin)
596
    {
597 5
        $this->options->setOrigin($optionOrigin);
598 5
        $this->initWsdl();
599 5
        return $this;
600
    }
601
    /**
602
     * Gets the optionDestination value
603
     * @return string
604
     */
605 415
    public function getOptionDestination()
606
    {
607 415
        $destination = $this->options->getDestination();
608 415
        if (!empty($destination)) {
609 410
            $destination = rtrim($destination, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
610 246
        }
611 415
        return $destination;
612
    }
613
    /**
614
     * Sets the optionDestination value
615
     * @param string $optionDestination
616
     * @return Generator
617
     */
618 15
    public function setOptionDestination($optionDestination)
619
    {
620 15
        if (!empty($optionDestination)) {
621 10
            $this->options->setDestination(rtrim($optionDestination, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR);
622 6
        } else {
623 5
            throw new \InvalidArgumentException('Package\'s destination can\'t be empty', __LINE__);
624
        }
625 10
        return $this;
626
    }
627
    /**
628
     * Gets the optionSrcDiname value
629
     * @return string
630
     */
631 360
    public function getOptionSrcDirname()
632
    {
633 360
        return $this->options->getSrcDirname();
634
    }
635
    /**
636
     * Sets the optionSrcDirname value
637
     * @param string $optionSrcDirname
638
     * @return Generator
639
     */
640 15
    public function setOptionSrcDirname($optionSrcDirname)
641
    {
642 15
        $this->options->setSrcDirname($optionSrcDirname);
643 15
        return $this;
644
    }
645
    /**
646
     * Gets the optionSoapOptions value
647
     * @return string
648
     */
649 740
    public function getOptionSoapOptions()
650
    {
651 740
        return $this->options->getSoapOptions();
652
    }
653
    /**
654
     * Sets the optionSoapOptions value
655
     * @param array $optionSoapOptions
656
     * @return Generator
657
     */
658 5
    public function setOptionSoapOptions($optionSoapOptions)
659
    {
660 5
        $this->options->setSoapOptions($optionSoapOptions);
661 5
        if ($this->getSoapClient() instanceof GeneratorSoapClient) {
662 5
            $this->getSoapClient()->initSoapClient();
663 3
        }
664 5
        return $this;
665
    }
666
    /**
667
     * Gets the optionComposerName value
668
     * @return string
669
     */
670 65
    public function getOptionComposerName()
671
    {
672 65
        return $this->options->getComposerName();
673
    }
674
    /**
675
     * Sets the optionComposerName value
676
     * @param string $optionComposerName
677
     * @return Generator
678
     */
679 35
    public function setOptionComposerName($optionComposerName)
680
    {
681 35
        if (!empty($optionComposerName)) {
682 30
            $this->options->setComposerName($optionComposerName);
683 18
        } else {
684 5
            throw new \InvalidArgumentException('Package\'s composer name can\'t be empty', __LINE__);
685
        }
686 30
        return $this;
687
    }
688
    /**
689
     * Gets the optionComposerSettings value
690
     * @return array
691
     */
692 50
    public function getOptionComposerSettings()
693
    {
694 50
        return $this->options->getComposerSettings();
695
    }
696
    /**
697
     * Sets the optionComposerSettings value
698
     * @param array $optionComposerSettings
699
     * @return Generator
700
     */
701 10
    public function setOptionComposerSettings(array $optionComposerSettings = array())
702
    {
703 10
        $this->options->setComposerSettings($optionComposerSettings);
704 10
        return $this;
705
    }
706
    /**
707
     * Gets the optionStructsFolder value
708
     * @return string
709
     */
710 360
    public function getOptionStructsFolder()
711
    {
712 360
        return $this->options->getStructsFolder();
713
    }
714
    /**
715
     * Sets the optionStructsFolder value
716
     * @param string $optionStructsFolder
717
     * @return Generator
718
     */
719 5
    public function setOptionStructsFolder($optionStructsFolder)
720
    {
721 5
        $this->options->setStructsFolder($optionStructsFolder);
722 5
        return $this;
723
    }
724
    /**
725
     * Gets the optionArraysFolder value
726
     * @return string
727
     */
728 70
    public function getOptionArraysFolder()
729
    {
730 70
        return $this->options->getArraysFolder();
731
    }
732
    /**
733
     * Sets the optionArraysFolder value
734
     * @param string $optionArraysFolder
735
     * @return Generator
736
     */
737 5
    public function setOptionArraysFolder($optionArraysFolder)
738
    {
739 5
        $this->options->setArraysFolder($optionArraysFolder);
740 5
        return $this;
741
    }
742
    /**
743
     * Gets the optionEnumsFolder value
744
     * @return string
745
     */
746 140
    public function getOptionEnumsFolder()
747
    {
748 140
        return $this->options->getEnumsFolder();
749
    }
750
    /**
751
     * Sets the optionEnumsFolder value
752
     * @param string $optionEnumsFolder
753
     * @return Generator
754
     */
755 5
    public function setOptionEnumsFolder($optionEnumsFolder)
756
    {
757 5
        $this->options->setEnumsFolder($optionEnumsFolder);
758 5
        return $this;
759
    }
760
    /**
761
     * Gets the optionServicesFolder value
762
     * @return string
763
     */
764 705
    public function getOptionServicesFolder()
765
    {
766 705
        return $this->options->getServicesFolder();
767
    }
768
    /**
769
     * Sets the optionServicesFolder value
770
     * @param string $optionServicesFolder
771
     * @return Generator
772
     */
773 5
    public function setOptionServicesFolder($optionServicesFolder)
774
    {
775 5
        $this->options->setServicesFolder($optionServicesFolder);
776 5
        return $this;
777
    }
778
    /**
779
     * Gets the WSDL
780
     * @return Wsdl|null
781
     */
782 570
    public function getWsdl()
783
    {
784 570
        return $this->wsdl;
785
    }
786
    /**
787
     * Sets the WSDLs
788
     * @param Wsdl $wsdl
789
     * @return Generator
790
     */
791 725
    protected function setWsdl(Wsdl $wsdl)
792
    {
793 725
        $this->wsdl = $wsdl;
794 725
        return $this;
795
    }
796
    /**
797
     * Adds Wsdl location
798
     * @param Wsdl $wsdl
799
     * @param string $schemaLocation
800
     * @return Generator
801
     */
802 180
    public function addSchemaToWsdl(Wsdl $wsdl, $schemaLocation)
803
    {
804 180
        if (!empty($schemaLocation) && $wsdl->getContent() instanceof WsdlDocument && $wsdl->getContent()->getExternalSchema($schemaLocation) === null) {
805 180
            $wsdl->getContent()->addExternalSchema(new Schema($wsdl->getGenerator(), $schemaLocation, $this->getUrlContent($schemaLocation)));
806 108
        }
807 180
        return $this;
808
    }
809
    /**
810
     * Gets gather name class
811
     * @param AbstractModel $model the model for which we generate the folder
812
     * @return string
813
     */
814 390
    private function getGather(AbstractModel $model)
815
    {
816 390
        return Utils::getPart($this->getOptionGatherMethods(), $model->getCleanName());
817
    }
818
    /**
819
     * Returns the service name associated to the method/operation name in order to gather them in one service class
820
     * @uses Generator::getGather()
821
     * @param string $methodName original operation/method name
822
     * @return string
823
     */
824 410
    public function getServiceName($methodName)
825
    {
826 410
        return ucfirst($this->getOptionGatherMethods() === GeneratorOptions::VALUE_NONE ? Service::DEFAULT_SERVICE_CLASS_NAME : $this->getGather(new EmptyModel($this, $methodName)));
827
    }
828
    /**
829
     * @param GeneratorOptions $options
830
     * @return Generator
831
     */
832 730
    protected function setOptions(GeneratorOptions $options = null)
833
    {
834 730
        $this->options = $options;
835 730
        return $this;
836
    }
837
    /**
838
     * @return GeneratorOptions
839
     */
840 750
    public function getOptions()
841
    {
842 750
        return $this->options;
843
    }
844
    /**
845
     * @return GeneratorSoapClient
846
     */
847 365
    public function getSoapClient()
848
    {
849 365
        return $this->soapClient;
850
    }
851
    /**
852
     * @param string $url
853
     * @return string
854
     */
855 735
    public function getUrlContent($url)
856
    {
857 735
        if (strpos($url, '://') !== false) {
858 10
            return Utils::getContentFromUrl($url, $this->getOptionBasicLogin(), $this->getOptionBasicPassword(), $this->getOptionProxyHost(), $this->getOptionProxyPort(), $this->getOptionProxyLogin(), $this->getOptionProxyPassword(), $this->getSoapClient()->getSoapClientStreamContextOptions());
859 725
        } elseif (is_file($url)) {
860 720
            return file_get_contents($url);
861
        }
862 5
        return null;
863
    }
864
    /**
865
     * @return GeneratorContainers
866
     */
867 295
    public function getContainers()
868
    {
869 295
        return $this->containers;
870
    }
871
    /**
872
     * @return array
873
     */
874 5
    public function jsonSerialize()
875
    {
876
        return array(
877 5
            'containers' => $this->containers,
878 5
            'options' => $this->options,
879 3
        );
880
    }
881
    /**
882
     * @param string $json
883
     * @throws \InvalidArgumentException
884
     * @return Generator
885
     */
886 295
    public static function instanceFromSerializedJson($json)
887
    {
888 295
        $decodedJson = json_decode($json, true);
889 295
        if (json_last_error() === JSON_ERROR_NONE) {
890
            // load options first
891 295
            $options = GeneratorOptions::instance();
892 295
            foreach ($decodedJson['options']as $name => $value) {
893 295
                $options->setOptionValue($name, $value);
894 177
            }
895
            // create generator instance with options
896 295
            $instance = new static($options);
897
            // load services
898 295
            foreach ($decodedJson['containers']['services'] as $service) {
899 295
                $instance->getContainers()->getServices()->add(self::getModelInstanceFromJsonArrayEntry($instance, $service));
900 177
            }
901
            // load sructs
902 295
            foreach ($decodedJson['containers']['structs'] as $struct) {
903 295
                $instance->getContainers()->getStructs()->add(self::getModelInstanceFromJsonArrayEntry($instance, $struct));
904 177
            }
905 177
        } else {
906
            throw new \InvalidArgumentException(sprintf('Json is invalid, please check error %s', json_last_error()));
907
        }
908 295
        return $instance;
909
    }
910
    /**
911
     * @param Generator $generator
912
     * @param array $jsonArrayEntry
913
     * @return AbstractModel
914
     */
915 295
    private static function getModelInstanceFromJsonArrayEntry(Generator $generator, array $jsonArrayEntry)
916
    {
917 295
        return AbstractModel::instanceFromSerializedJson($generator, $jsonArrayEntry);
918
    }
919
}
920