GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Passed
Pull Request — master (#192)
by joseph
40:19
created

CreateEntityAction::setEntityFqn()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 16
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 14
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 13
nc 1
nop 1
dl 0
loc 16
rs 9.8333
c 0
b 0
f 0
ccs 14
cts 14
cp 1
crap 1
1
<?php declare(strict_types=1);
2
3
namespace EdmondsCommerce\DoctrineStaticMeta\CodeGeneration\Action;
4
5
use EdmondsCommerce\DoctrineStaticMeta\CodeGeneration\Creation\Process\ReplaceEntityIdFieldProcess;
6
use EdmondsCommerce\DoctrineStaticMeta\CodeGeneration\Creation\Src\Entities\EntityCreator;
7
use EdmondsCommerce\DoctrineStaticMeta\CodeGeneration\Creation\Src\Entity\DataTransferObjects\DtoCreator;
8
use EdmondsCommerce\DoctrineStaticMeta\CodeGeneration\Creation\Src\Entity\Factories\AbstractEntityFactoryCreator;
9
use EdmondsCommerce\DoctrineStaticMeta\CodeGeneration\Creation\Src\Entity\Factories\EntityDtoFactoryCreator;
10
use EdmondsCommerce\DoctrineStaticMeta\CodeGeneration\Creation\Src\Entity\Factories\EntityFactoryCreator;
11
use EdmondsCommerce\DoctrineStaticMeta\CodeGeneration\Creation\Src\Entity\Interfaces\EntityInterfaceCreator;
12
use EdmondsCommerce\DoctrineStaticMeta\CodeGeneration\Creation\Src\Entity\Repositories\AbstractEntityRepositoryCreator;
13
use EdmondsCommerce\DoctrineStaticMeta\CodeGeneration\Creation\Src\Entity\Repositories\EntityRepositoryCreator;
14
use EdmondsCommerce\DoctrineStaticMeta\CodeGeneration\Creation\Src\Entity\Savers\EntitySaverCreator;
15
use EdmondsCommerce\DoctrineStaticMeta\CodeGeneration\Creation\Src\Entity\Savers\EntityUnitOfWorkHelperCreator;
16
use EdmondsCommerce\DoctrineStaticMeta\CodeGeneration\Creation\Src\Entity\Savers\EntityUpserterCreator;
17
use EdmondsCommerce\DoctrineStaticMeta\CodeGeneration\Creation\Tests\Assets\Entity\Fixtures\EntityFixtureCreator;
18
use EdmondsCommerce\DoctrineStaticMeta\CodeGeneration\Creation\Tests\BootstrapCreator;
19
use EdmondsCommerce\DoctrineStaticMeta\CodeGeneration\Creation\Tests\Entities\AbstractEntityTestCreator;
20
use EdmondsCommerce\DoctrineStaticMeta\CodeGeneration\Creation\Tests\Entities\EntityTestCreator;
21
use EdmondsCommerce\DoctrineStaticMeta\CodeGeneration\NamespaceHelper;
22
use EdmondsCommerce\DoctrineStaticMeta\MappingHelper;
23
24
/**
25
 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
26
 * @SuppressWarnings(PHPMD.ExcessiveParameterList)
27
 * @SuppressWarnings(PHPMD.StaticAccess)
28
 * @SuppressWarnings(PHPMD.TooManyFields)
29
 */
30
class CreateEntityAction implements ActionInterface
31
{
32
    /**
33
     * @var EntityCreator
34
     */
35
    private $entityCreator;
36
    /**
37
     * @var AbstractEntityFactoryCreator
38
     */
39
    private $abstractEntityFactoryCreator;
40
    /**
41
     * @var EntityFactoryCreator
42
     */
43
    private $entityFactoryCreator;
44
    /**
45
     * @var EntityInterfaceCreator
46
     */
47
    private $entityInterfaceCreator;
48
    /**
49
     * @var AbstractEntityRepositoryCreator
50
     */
51
    private $abstractEntityRepositoryCreator;
52
    /**
53
     * @var EntityRepositoryCreator
54
     */
55
    private $entityRepositoryCreator;
56
57
    /**
58
     * @var string
59
     */
60
    private $entityFqn;
61
    /**
62
     * @var EntityFixtureCreator
63
     */
64
    private $entityFixtureCreator;
65
    /**
66
     * @var AbstractEntityTestCreator
67
     */
68
    private $abstractEntityTestCreator;
69
    /**
70
     * @var EntityTestCreator
71
     */
72
    private $entityTestCreator;
73
    /**
74
     * @var EntitySaverCreator
75
     */
76
    private $entitySaverCreator;
77
    /**
78
     * @var EntityUnitOfWorkHelperCreator
79
     */
80
    private $entityUnitOfWorkHelperCreator;
81
82
    /**
83
     * @var bool
84
     */
85
    private $generateSaver = false;
86
    /**
87
     * @var BootstrapCreator
88
     */
89
    private $bootstrapCreator;
90
    /**
91
     * @var DtoCreator
92
     */
93
    private $dataTransferObjectCreator;
94
    /**
95
     * @var EntityDtoFactoryCreator
96
     */
97
    private $entityDtoFactoryCreator;
98
    /**
99
     * @var EntityUpserterCreator
100
     */
101
    private $entityUpserterCreator;
102
103 5
    public function __construct(
104
        EntityCreator $entityCreator,
105
        AbstractEntityFactoryCreator $abstractEntityFactoryCreator,
106
        EntityFactoryCreator $entityFactoryCreator,
107
        EntityInterfaceCreator $entityInterfaceCreator,
108
        AbstractEntityRepositoryCreator $abstractEntityRepositoryCreator,
109
        EntityRepositoryCreator $entityRepositoryCreator,
110
        EntitySaverCreator $entitySaverCreator,
111
        EntityFixtureCreator $entityFixtureCreator,
112
        AbstractEntityTestCreator $abstractEntityTestCreator,
113
        BootstrapCreator $bootstrapCreator,
114
        EntityTestCreator $entityTestCreator,
115
        DtoCreator $dataTransferObjectCreator,
116
        EntityDtoFactoryCreator $entityDtoFactoryCreator,
117
        EntityUpserterCreator $entityUpserterCreator,
118
        EntityUnitOfWorkHelperCreator $entityUnitOfWorkHelperCreator
119
    ) {
120 5
        $this->entityCreator                   = $entityCreator;
121 5
        $this->abstractEntityFactoryCreator    = $abstractEntityFactoryCreator;
122 5
        $this->entityFactoryCreator            = $entityFactoryCreator;
123 5
        $this->entityInterfaceCreator          = $entityInterfaceCreator;
124 5
        $this->abstractEntityRepositoryCreator = $abstractEntityRepositoryCreator;
125 5
        $this->entityRepositoryCreator         = $entityRepositoryCreator;
126 5
        $this->entitySaverCreator              = $entitySaverCreator;
127 5
        $this->entityFixtureCreator            = $entityFixtureCreator;
128 5
        $this->abstractEntityTestCreator       = $abstractEntityTestCreator;
129 5
        $this->entityTestCreator               = $entityTestCreator;
130 5
        $this->bootstrapCreator                = $bootstrapCreator;
131 5
        $this->dataTransferObjectCreator       = $dataTransferObjectCreator;
132 5
        $this->entityDtoFactoryCreator         = $entityDtoFactoryCreator;
133 5
        $this->entityUpserterCreator           = $entityUpserterCreator;
134 5
        $this->entityUnitOfWorkHelperCreator = $entityUnitOfWorkHelperCreator;
135 5
    }
136
137 5
    public function setEntityFqn(string $entityFqn): self
138
    {
139 5
        $this->assertSingularEntityName($entityFqn);
140 2
        $this->entityFqn = $entityFqn;
141 2
        $this->entityFactoryCreator->setNewObjectFqnFromEntityFqn($entityFqn);
142 2
        $this->entityInterfaceCreator->setNewObjectFqnFromEntityFqn($entityFqn);
143 2
        $this->entityRepositoryCreator->setNewObjectFqnFromEntityFqn($entityFqn);
144 2
        $this->entitySaverCreator->setNewObjectFqnFromEntityFqn($entityFqn);
145 2
        $this->entityFixtureCreator->setNewObjectFqnFromEntityFqn($entityFqn);
146 2
        $this->entityTestCreator->setNewObjectFqnFromEntityFqn($entityFqn);
147 2
        $this->dataTransferObjectCreator->setNewObjectFqnFromEntityFqn($entityFqn);
148 2
        $this->entityDtoFactoryCreator->setNewObjectFqnFromEntityFqn($entityFqn);
149 2
        $this->entityUpserterCreator->setNewObjectFqnFromEntityFqn($entityFqn);
150 2
        $this->entityUnitOfWorkHelperCreator->setNewObjectFqnFromEntityFqn($entityFqn);
151
152 2
        return $this;
153
    }
154
155 5
    private function assertSingularEntityName(string $entityFqn): void
156
    {
157 5
        $namespaceHelper = new NamespaceHelper();
158 5
        $shortName       = $namespaceHelper->getClassShortName($entityFqn);
159 5
        $singular        = ucfirst(MappingHelper::getSingularForFqn($entityFqn));
160 5
        if ($shortName !== $singular) {
161 3
            throw new \InvalidArgumentException(
162 3
                "Your Entity Name must be Singular, eg not $shortName but $singular"
163
            );
164
        }
165 2
    }
166
167
    public function setPrimaryKeyTraitFqn(string $primaryKeyTraitFqn)
168
    {
169
        $replaceIdFieldProcess = new ReplaceEntityIdFieldProcess();
170
        $replaceIdFieldProcess->setIdTraitFqn($primaryKeyTraitFqn);
171
        $this->entityCreator->setReplaceIdFieldProcess($replaceIdFieldProcess);
172
        $this->entityInterfaceCreator->setIsSettableUuid(
173
            \ts\stringContains($primaryKeyTraitFqn, 'Uuid')
174
        );
175
    }
176
177
    /**
178
     * Create all the Entity related code
179
     *
180
     * @throws \EdmondsCommerce\DoctrineStaticMeta\Exception\DoctrineStaticMetaException
181
     */
182 2
    public function run(): void
183
    {
184 2
        $this->entityCreator->createTargetFileObject($this->entityFqn)->write();
185
186 2
        $this->abstractEntityFactoryCreator->createTargetFileObject()->writeIfNotExists();
187
188 2
        $this->entityFactoryCreator->createTargetFileObject()->write();
189
190 2
        $this->entityInterfaceCreator->createTargetFileObject()->write();
191
192 2
        $this->abstractEntityRepositoryCreator->createTargetFileObject()->writeIfNotExists();
193
194 2
        $this->entityRepositoryCreator->createTargetFileObject()->write();
195
196 2
        if (true === $this->generateSaver) {
197
            $this->entitySaverCreator->createTargetFileObject()->write();
198
        }
199
200 2
        $this->entityFixtureCreator->createTargetFileObject()->write();
201
202 2
        $this->abstractEntityTestCreator->createTargetFileObject()->writeIfNotExists();
203
204 2
        $this->bootstrapCreator->createTargetFileObject()->writeIfNotExists();
205
206 2
        $this->entityTestCreator->createTargetFileObject()->write();
207
208 2
        $this->dataTransferObjectCreator->createTargetFileObject()->write();
209
210 2
        $this->entityDtoFactoryCreator->createTargetFileObject()->write();
211
212 2
        $this->entityUpserterCreator->createTargetFileObject()->write();
213
214 2
        $this->entityUnitOfWorkHelperCreator->createTargetFileObject()->write();
215 2
    }
216
217
    public function getCreatedEntityFilePath(): string
218
    {
219
        return $this->entityCreator->getTargetFile()->getPath();
220
    }
221
222 5
    public function setProjectRootNamespace(string $projectRootNamespace): self
223
    {
224 5
        $this->entityCreator->setProjectRootNamespace($projectRootNamespace);
225 5
        $this->abstractEntityFactoryCreator->setProjectRootNamespace($projectRootNamespace);
226 5
        $this->entityFactoryCreator->setProjectRootNamespace($projectRootNamespace);
227 5
        $this->entityInterfaceCreator->setProjectRootNamespace($projectRootNamespace);
228 5
        $this->abstractEntityRepositoryCreator->setProjectRootNamespace($projectRootNamespace);
229 5
        $this->entityRepositoryCreator->setProjectRootNamespace($projectRootNamespace);
230 5
        $this->entitySaverCreator->setProjectRootNamespace($projectRootNamespace);
231 5
        $this->entityFixtureCreator->setProjectRootNamespace($projectRootNamespace);
232 5
        $this->abstractEntityTestCreator->setProjectRootNamespace($projectRootNamespace);
233 5
        $this->bootstrapCreator->setProjectRootNamespace($projectRootNamespace);
234 5
        $this->entityTestCreator->setProjectRootNamespace($projectRootNamespace);
235 5
        $this->dataTransferObjectCreator->setProjectRootNamespace($projectRootNamespace);
236 5
        $this->entityDtoFactoryCreator->setProjectRootNamespace($projectRootNamespace);
237 5
        $this->entityUpserterCreator->setProjectRootNamespace($projectRootNamespace);
238 5
        $this->entityUnitOfWorkHelperCreator->setProjectRootNamespace($projectRootNamespace);
239
240 5
        return $this;
241
    }
242
243 5
    public function setProjectRootDirectory(string $projectRootDirectory): self
244
    {
245 5
        $this->entityCreator->setProjectRootDirectory($projectRootDirectory);
246 5
        $this->abstractEntityFactoryCreator->setProjectRootDirectory($projectRootDirectory);
247 5
        $this->entityFactoryCreator->setProjectRootDirectory($projectRootDirectory);
248 5
        $this->entityInterfaceCreator->setProjectRootDirectory($projectRootDirectory);
249 5
        $this->abstractEntityRepositoryCreator->setProjectRootDirectory($projectRootDirectory);
250 5
        $this->entityRepositoryCreator->setProjectRootDirectory($projectRootDirectory);
251 5
        $this->entitySaverCreator->setProjectRootDirectory($projectRootDirectory);
252 5
        $this->entityFixtureCreator->setProjectRootDirectory($projectRootDirectory);
253 5
        $this->abstractEntityTestCreator->setProjectRootDirectory($projectRootDirectory);
254 5
        $this->bootstrapCreator->setProjectRootDirectory($projectRootDirectory);
255 5
        $this->entityTestCreator->setProjectRootDirectory($projectRootDirectory);
256 5
        $this->dataTransferObjectCreator->setProjectRootDirectory($projectRootDirectory);
257 5
        $this->entityDtoFactoryCreator->setProjectRootDirectory($projectRootDirectory);
258 5
        $this->entityUpserterCreator->setProjectRootDirectory($projectRootDirectory);
259 5
        $this->entityUnitOfWorkHelperCreator->setProjectRootDirectory($projectRootDirectory);
260
261 5
        return $this;
262
    }
263
264
    /**
265
     * @param bool $generateSaver
266
     *
267
     * @return CreateEntityAction
268
     */
269
    public function setGenerateSaver(bool $generateSaver): CreateEntityAction
270
    {
271
        $this->generateSaver = $generateSaver;
272
273
        return $this;
274
    }
275
}
276