Completed
Pull Request — develop (#311)
by
unknown
17:12
created

AttachableEntityTrait   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

Changes 0
Metric Value
dl 0
loc 76
c 0
b 0
f 0
wmc 8
lcom 1
cbo 1
rs 10

6 Methods

Rating   Name   Duplication   Size   Complexity  
A setAttachedEntitiesCollection() 0 10 2
A attachEntity() 0 6 1
A detachEntity() 0 6 1
A getAttachedEntity() 0 4 1
A hasAttachedEntity() 0 4 1
A getAttachedEntitiesCollection() 0 8 2
1
<?php
2
/**
3
 * YAWIK
4
 *
5
 * @filesource
6
 * @copyright (c) 2013 - 2016 Cross Solution (http://cross-solution.de)
7
 * @license   MIT
8
 * @author Miroslav Fedeleš <[email protected]>
9
 * @since 0.28
10
 */
11
namespace Core\Entity;
12
13
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
14
use Core\Entity\Collection\AttachedEntitiesCollection;
15
use LogicException;
16
17
/**
18
 * @see AttachableEntityInterface
19
 */
20
trait AttachableEntityTrait
21
{
22
23
    /**
24
     * @var AttachedEntitiesCollection
25
     * @ODM\EmbedMany(
26
     *      strategy="set",
27
     *      collectionClass="\Core\Entity\Collection\AttachedEntitiesCollection",
28
     *      targetDocument="\Core\Entity\AttachedEntityReference"
29
     * )
30
     */
31
    protected $attachedEntitiesCollection;
32
    
33
    /**
34
     * @see AttachableEntityInterface::setAttachedEntitiesCollection()
35
     */
36
    public function setAttachedEntitiesCollection(AttachedEntitiesCollection $collection)
37
    {
38
        if (isset($this->attachedEntitiesCollection)) {
39
            throw new LogicException('Attached entity collection is already set');
40
        }
41
        
42
        $this->attachedEntitiesCollection = $collection;
43
        
44
        return $this;
45
    }
46
47
    /**
48
     * @see AttachableEntityInterface::attachEntity()
49
     */
50
    public function attachEntity(IdentifiableEntityInterface $entity, $key = null)
51
    {
52
        $this->getAttachedEntitiesCollection()->setAttachedEntity($key, $entity);
53
        
54
        return $this;
55
    }
56
57
    /**
58
     * @see AttachableEntityInterface::detachEntity()
59
     */
60
    public function detachEntity($key)
61
    {
62
        $this->getAttachedEntitiesCollection()->removeAttachedEntity($key);
63
        
64
        return $this;
65
    }
66
67
    /**
68
     * @see AttachableEntityInterface::getAttachedEntity()
69
     */
70
    public function getAttachedEntity($key)
71
    {
72
        return $this->getAttachedEntitiesCollection()->getAttachedEntity($key);
73
    }
74
    
75
    /**
76
     * @see AttachableEntityInterface::hasAttachedEntity()
77
     */
78
    public function hasAttachedEntity($key)
79
    {
80
        return (bool) $this->getAttachedEntitiesCollection()->getAttachedEntity($key);
81
    }
82
    
83
    /**
84
     * @throws LogicException
85
     * @return AttachedEntitiesCollection
86
     */
87
    protected function getAttachedEntitiesCollection()
88
    {
89
        if (!isset($this->attachedEntitiesCollection)) {
90
            throw new LogicException('No attached entity collection is set');
91
        }
92
        
93
        return $this->attachedEntitiesCollection;
94
    }
95
}
96