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.
Completed
Pull Request — master (#225)
by joseph
39:33
created

CreateEntityAction::getCreatedEntityFilePath()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

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