convertToEntitiesSource()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 20
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 9
c 1
b 0
f 0
nc 3
nop 3
dl 0
loc 20
rs 9.9666
1
<?php
2
3
namespace Malef\Associate\DoctrineOrm\Loader\ArgumentConverter;
4
5
use Doctrine\Common\Collections\ArrayCollection;
6
use Malef\Associate\DoctrineOrm\Metadata\MetadataAdapterProvider;
7
use Malef\Associate\DoctrineOrm\Source\EntitySource;
8
use Malef\Associate\DoctrineOrm\Source\UniqueEntitySet;
9
10
class EntitiesArgumentConverter
11
{
12
    /**
13
     * @throws \Exception
14
     */
15
    public function convertToEntitiesSource(
16
        iterable $entities,
17
        ?string $entityClass,
18
        MetadataAdapterProvider $metadataAdapterProvider
19
    ): EntitySource {
20
        $entities = $this->convertEntitiesToArrayCollection($entities);
21
22
        if ($entities->isEmpty()) {
23
            return new EntitySource($entities);
24
        }
25
26
        if (!$entityClass) {
27
            $entityClass = $metadataAdapterProvider->getClassNameForEntities($entities);
28
        }
29
        $entityClassMetadataAdapter = $metadataAdapterProvider->getClassMetadataAdapterByClassName($entityClass);
30
31
        $entitySource = new EntitySource($entities, $entityClass);
32
        $entitySource->setClassMetadataAdapter($entityClassMetadataAdapter);
33
34
        return $entitySource;
35
    }
36
37
    public function convertEntitiesToArrayCollection(iterable $entities): ArrayCollection
38
    {
39
        if (!is_array($entities)) {
40
            $rootEntities = new UniqueEntitySet();
41
            foreach ($entities as $entity) {
42
                $rootEntities->addOne($entity);
43
            }
44
45
            return $rootEntities->getAll();
46
        }
47
48
        return new ArrayCollection($entities);
49
    }
50
}
51