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 (#221)
by joseph
96:29 queued 93:03
created

CreateEntityAction::setProjectRootNamespace()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 19
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 17
CRAP Score 1

Importance

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