Completed
Push — master ( cdc419...060bfa )
by Mikaël
49:47
created

GeneratorFiles::generateServicesClasses()   B

Complexity

Conditions 5
Paths 4

Size

Total Lines 19
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 5

Importance

Changes 2
Bugs 0 Features 0
Metric Value
dl 0
loc 19
ccs 7
cts 7
cp 1
rs 8.8571
c 2
b 0
f 0
cc 5
eloc 13
nc 4
nop 0
crap 5
1
<?php
2
3
namespace WsdlToPhp\PackageGenerator\Generator;
4
5
use WsdlToPhp\PackageGenerator\Model\Struct as StructModel;
6
use WsdlToPhp\PackageGenerator\Model\Service as ServiceModel;
7
use WsdlToPhp\PackageGenerator\Model\EmptyModel;
8
use WsdlToPhp\PackageGenerator\File\Struct as StructFile;
9
use WsdlToPhp\PackageGenerator\File\StructArray as StructArrayFile;
10
use WsdlToPhp\PackageGenerator\File\StructEnum as StructEnumFile;
11
use WsdlToPhp\PackageGenerator\File\Service as ServiceFile;
12
use WsdlToPhp\PackageGenerator\File\Tutorial as TutorialFile;
13
use WsdlToPhp\PackageGenerator\File\ClassMap as ClassMapFile;
14
use WsdlToPhp\PackageGenerator\File\Composer as ComposerFile;
15
use WsdlToPhp\PackageGenerator\Container\Model\Service as ServiceContainer;
16
use WsdlToPhp\PackageGenerator\ConfigurationReader\GeneratorOptions;
17
18
class GeneratorFiles extends AbstractGeneratorAware
19
{
20
    /**
21
     * Use classmap file object
22
     * @var ClassMapFile
23
     */
24
    private $classmapFile;
25 72
    /**
26
     * @return ClassMapFile
27 72
     */
28 72
    public function getClassmapFile()
29 72
    {
30 72
        if (!isset($this->classmapFile)) {
31 72
            $classMapModel = new EmptyModel($this->generator, 'ClassMap');
32 48
            $classMap = new ClassMapFile($this->generator, $classMapModel->getPackagedName());
33 72
            $classMap->setModel($classMapModel);
34
            $this->classmapFile = $classMap;
35
        }
36
        return $this->classmapFile;
37
    }
38 36
    /**
39
     * @return GeneratorFiles
40 36
     */
41 36
    public function doGenerate()
42 36
    {
43 36
        return $this->generateStructsClasses()
44 36
            ->generateServicesClasses()
45
            ->generateClassMap()
46
            ->generateTutorialFile()
47
            ->generateComposerFile();
48
    }
49
    /**
50 36
     * Generates structs classes based on structs collected
51
     * @return GeneratorFiles
52 36
     */
53 36
    protected function generateStructsClasses()
54 24
    {
55
        foreach ($this->getGenerator()->getStructs() as $struct) {
56 36
            if (!$struct->isStruct()) {
57 24
                continue;
58 36
            }
59
            $this->getStructFile($struct)->setModel($struct)->write();
60
        }
61
        return $this;
62
    }
63
    /**
64 36
     * @param StructModel $struct
65
     * @return StructEnumFile|StructArrayFile|StructFile
66 36
     */
67 36
    protected function getStructFile(StructModel $struct)
68 36
    {
69 18
        if ($struct->isRestriction()) {
70 12
            $file = new StructEnumFile($this->generator, $struct->getPackagedName());
71 36
        } elseif ($struct->isArray()) {
72
            $file = new StructArrayFile($this->generator, $struct->getPackagedName());
73 36
        } else {
74
            $file = new StructFile($this->generator, $struct->getPackagedName());
75
        }
76
        return $file;
77
    }
78
    /**
79 36
     * Generates methods by class
80
     * @return GeneratorFiles
81 36
     */
82
    protected function generateServicesClasses()
83
    {
84
        $services = $this->getGenerator()->getServices();
85 36
        if ($this->generator->getOptionGatherMethods() === GeneratorOptions::VALUE_NONE) {
86 36
            $services = new ServiceContainer($this->generator);
87 24
            $service = new ServiceModel($this->generator, ServiceModel::DEFAULT_SERVICE_CLASS_NAME);
88 36
            foreach ($this->getGenerator()->getServices() as $service) {
89
                foreach ($service->getMethods() as $method) {
90
                    $service->getMethods()->add($method);
91
                }
92
            }
93
            $services->add($service);
94 36
        }
95
        foreach ($services as $service) {
96 36
            $file = new ServiceFile($this->generator, $service->getPackagedName());
97 36
            $file->setModel($service)->write();
98
        }
99
        return $this;
100
    }
101
    /**
102
     * Generates classMap class
103 36
     * @return GeneratorFiles
104
     */
105 36
    protected function generateClassMap()
106 36
    {
107 36
        $this->getClassmapFile()->write();
108 24
        return $this;
109 36
    }
110
    /**
111
     * Generates tutorial file
112
     * @return GeneratorFiles
113
     */
114
    protected function generateTutorialFile()
115 36
    {
116
        if ($this->generator->getOptionGenerateTutorialFile() === true && $this->getClassmapFile() instanceof ClassMapFile) {
117 36
            $tutorialFile = new TutorialFile($this->generator, 'tutorial');
118 30
            $tutorialFile->write();
119 30
        }
120 20
        return $this;
121 36
    }
122
    /**
123
     * @throws \InvalidArgumentException
124
     * @return GeneratorFiles
125
     */
126
    protected function generateComposerFile()
127
    {
128
        if ($this->generator->getOptionStandalone() === true) {
129
            $composerFile = new ComposerFile($this->generator, 'composer');
130
            $composerFile->write();
131
        }
132
        return $this;
133
    }
134
}
135