Completed
Push — master ( 060bfa...009823 )
by Mikaël
50:16 queued 31:14
created

GeneratorFiles::doGenerate()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 1

Importance

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