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
Push — master ( 0b4676...ecfcbd )
by joseph
17s queued 14s
created

CreateEntityAction   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 244
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
eloc 108
dl 0
loc 244
ccs 0
cts 135
cp 0
rs 10
c 0
b 0
f 0
wmc 11

9 Methods

Rating   Name   Duplication   Size   Complexity  
A getCreatedEntityFilePath() 0 3 1
A setPrimaryKeyTraitFqn() 0 7 1
A setGenerateSaver() 0 5 1
A setProjectRootNamespace() 0 19 1
A setEntityFqn() 0 16 1
A run() 0 33 2
A __construct() 0 32 1
A assertSingularEntityName() 0 8 2
A setProjectRootDirectory() 0 19 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
    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
        $this->entityCreator                   = $entityCreator;
121
        $this->abstractEntityFactoryCreator    = $abstractEntityFactoryCreator;
122
        $this->entityFactoryCreator            = $entityFactoryCreator;
123
        $this->entityInterfaceCreator          = $entityInterfaceCreator;
124
        $this->abstractEntityRepositoryCreator = $abstractEntityRepositoryCreator;
125
        $this->entityRepositoryCreator         = $entityRepositoryCreator;
126
        $this->entitySaverCreator              = $entitySaverCreator;
127
        $this->entityFixtureCreator            = $entityFixtureCreator;
128
        $this->abstractEntityTestCreator       = $abstractEntityTestCreator;
129
        $this->entityTestCreator               = $entityTestCreator;
130
        $this->bootstrapCreator                = $bootstrapCreator;
131
        $this->dataTransferObjectCreator       = $dataTransferObjectCreator;
132
        $this->entityDtoFactoryCreator         = $entityDtoFactoryCreator;
133
        $this->entityUpserterCreator           = $entityUpserterCreator;
134
        $this->entityUnitOfWorkHelperCreator = $entityUnitOfWorkHelperCreator;
135
    }
136
137
    public function setEntityFqn(string $entityFqn): self
138
    {
139
        $this->assertSingularEntityName($entityFqn);
140
        $this->entityFqn = $entityFqn;
141
        $this->entityFactoryCreator->setNewObjectFqnFromEntityFqn($entityFqn);
142
        $this->entityInterfaceCreator->setNewObjectFqnFromEntityFqn($entityFqn);
143
        $this->entityRepositoryCreator->setNewObjectFqnFromEntityFqn($entityFqn);
144
        $this->entitySaverCreator->setNewObjectFqnFromEntityFqn($entityFqn);
145
        $this->entityFixtureCreator->setNewObjectFqnFromEntityFqn($entityFqn);
146
        $this->entityTestCreator->setNewObjectFqnFromEntityFqn($entityFqn);
147
        $this->dataTransferObjectCreator->setNewObjectFqnFromEntityFqn($entityFqn);
148
        $this->entityDtoFactoryCreator->setNewObjectFqnFromEntityFqn($entityFqn);
149
        $this->entityUpserterCreator->setNewObjectFqnFromEntityFqn($entityFqn);
150
        $this->entityUnitOfWorkHelperCreator->setNewObjectFqnFromEntityFqn($entityFqn);
151
152
        return $this;
153
    }
154
155
    private function assertSingularEntityName(string $entityFqn): void
156
    {
157
        $namespaceHelper = new NamespaceHelper();
158
        $shortName       = $namespaceHelper->getClassShortName($entityFqn);
159
        $singular        = ucfirst(MappingHelper::getSingularForFqn($entityFqn));
160
        if ($shortName !== $singular) {
161
            throw new \InvalidArgumentException(
162
                "Your Entity Name must be Singular, eg not $shortName but $singular"
163
            );
164
        }
165
    }
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
    public function run(): void
183
    {
184
        $this->entityCreator->createTargetFileObject($this->entityFqn)->write();
185
186
        $this->abstractEntityFactoryCreator->createTargetFileObject()->writeIfNotExists();
187
188
        $this->entityFactoryCreator->createTargetFileObject()->write();
189
190
        $this->entityInterfaceCreator->createTargetFileObject()->write();
191
192
        $this->abstractEntityRepositoryCreator->createTargetFileObject()->writeIfNotExists();
193
194
        $this->entityRepositoryCreator->createTargetFileObject()->write();
195
196
        if (true === $this->generateSaver) {
197
            $this->entitySaverCreator->createTargetFileObject()->write();
198
        }
199
200
        $this->entityFixtureCreator->createTargetFileObject()->write();
201
202
        $this->abstractEntityTestCreator->createTargetFileObject()->writeIfNotExists();
203
204
        $this->bootstrapCreator->createTargetFileObject()->writeIfNotExists();
205
206
        $this->entityTestCreator->createTargetFileObject()->write();
207
208
        $this->dataTransferObjectCreator->createTargetFileObject()->write();
209
210
        $this->entityDtoFactoryCreator->createTargetFileObject()->write();
211
212
        $this->entityUpserterCreator->createTargetFileObject()->write();
213
214
        $this->entityUnitOfWorkHelperCreator->createTargetFileObject()->write();
215
    }
216
217
    public function getCreatedEntityFilePath(): string
218
    {
219
        return $this->entityCreator->getTargetFile()->getPath();
220
    }
221
222
    public function setProjectRootNamespace(string $projectRootNamespace): self
223
    {
224
        $this->entityCreator->setProjectRootNamespace($projectRootNamespace);
225
        $this->abstractEntityFactoryCreator->setProjectRootNamespace($projectRootNamespace);
226
        $this->entityFactoryCreator->setProjectRootNamespace($projectRootNamespace);
227
        $this->entityInterfaceCreator->setProjectRootNamespace($projectRootNamespace);
228
        $this->abstractEntityRepositoryCreator->setProjectRootNamespace($projectRootNamespace);
229
        $this->entityRepositoryCreator->setProjectRootNamespace($projectRootNamespace);
230
        $this->entitySaverCreator->setProjectRootNamespace($projectRootNamespace);
231
        $this->entityFixtureCreator->setProjectRootNamespace($projectRootNamespace);
232
        $this->abstractEntityTestCreator->setProjectRootNamespace($projectRootNamespace);
233
        $this->bootstrapCreator->setProjectRootNamespace($projectRootNamespace);
234
        $this->entityTestCreator->setProjectRootNamespace($projectRootNamespace);
235
        $this->dataTransferObjectCreator->setProjectRootNamespace($projectRootNamespace);
236
        $this->entityDtoFactoryCreator->setProjectRootNamespace($projectRootNamespace);
237
        $this->entityUpserterCreator->setProjectRootNamespace($projectRootNamespace);
238
        $this->entityUnitOfWorkHelperCreator->setProjectRootNamespace($projectRootNamespace);
239
240
        return $this;
241
    }
242
243
    public function setProjectRootDirectory(string $projectRootDirectory): self
244
    {
245
        $this->entityCreator->setProjectRootDirectory($projectRootDirectory);
246
        $this->abstractEntityFactoryCreator->setProjectRootDirectory($projectRootDirectory);
247
        $this->entityFactoryCreator->setProjectRootDirectory($projectRootDirectory);
248
        $this->entityInterfaceCreator->setProjectRootDirectory($projectRootDirectory);
249
        $this->abstractEntityRepositoryCreator->setProjectRootDirectory($projectRootDirectory);
250
        $this->entityRepositoryCreator->setProjectRootDirectory($projectRootDirectory);
251
        $this->entitySaverCreator->setProjectRootDirectory($projectRootDirectory);
252
        $this->entityFixtureCreator->setProjectRootDirectory($projectRootDirectory);
253
        $this->abstractEntityTestCreator->setProjectRootDirectory($projectRootDirectory);
254
        $this->bootstrapCreator->setProjectRootDirectory($projectRootDirectory);
255
        $this->entityTestCreator->setProjectRootDirectory($projectRootDirectory);
256
        $this->dataTransferObjectCreator->setProjectRootDirectory($projectRootDirectory);
257
        $this->entityDtoFactoryCreator->setProjectRootDirectory($projectRootDirectory);
258
        $this->entityUpserterCreator->setProjectRootDirectory($projectRootDirectory);
259
        $this->entityUnitOfWorkHelperCreator->setProjectRootDirectory($projectRootDirectory);
260
261
        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