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

GeneratorFiles   A

Complexity

Total Complexity 20

Size/Duplication

Total Lines 117
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 13

Test Coverage

Coverage 85.25%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 20
c 2
b 0
f 0
lcom 1
cbo 13
dl 0
loc 117
ccs 52
cts 61
cp 0.8525
rs 10

8 Methods

Rating   Name   Duplication   Size   Complexity  
A getClassmapFile() 0 10 2
A doGenerate() 0 8 1
A generateStructsClasses() 0 10 3
A getStructFile() 0 11 3
B generateServicesClasses() 0 19 5
A generateClassMap() 0 5 1
A generateTutorialFile() 0 8 3
A generateComposerFile() 0 8 2
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