Completed
Push — master ( 203a9c...2f9634 )
by Matthew
05:23 queued 25s
created

DtcQueueListener   A

Complexity

Total Complexity 15

Size/Duplication

Total Lines 85
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 11

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 15
lcom 0
cbo 11
dl 0
loc 85
ccs 52
cts 52
cp 1
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A preRemove() 0 11 3
A processRun() 0 19 3
A processJob() 0 20 3
A preUpdate() 0 8 2
A prePersist() 0 12 3
1
<?php
2
3
namespace Dtc\QueueBundle\Doctrine;
4
5
use Doctrine\Common\Persistence\Event\LifecycleEventArgs;
6
use Doctrine\Common\Persistence\ObjectManager;
7
use Doctrine\ODM\MongoDB\DocumentManager;
8
use Doctrine\ODM\MongoDB\Mapping\ClassMetadata;
9
use Doctrine\ORM\EntityManager;
10
use Doctrine\ORM\Id\AssignedGenerator;
11
use Dtc\QueueBundle\Model\RetryableJob;
12
use Dtc\QueueBundle\Model\Run;
13
use Dtc\QueueBundle\ODM\JobManager;
14
use Dtc\QueueBundle\Util\Util;
15
use Symfony\Component\DependencyInjection\ContainerInterface;
16
17
class DtcQueueListener
18
{
19
    /** @var ContainerInterface */
20
    private $container;
21
22 2
    public function __construct(ContainerInterface $container)
23
    {
24 2
        $this->container = $container;
25 2
    }
26
27 16
    public function preRemove(LifecycleEventArgs $eventArgs)
28
    {
29 16
        $object = $eventArgs->getObject();
30 16
        $objectManager = $eventArgs->getObjectManager();
31
32 16
        if ($object instanceof \Dtc\QueueBundle\Model\Job) {
33 16
            $this->processJob($object);
34 4
        } elseif ($object instanceof Run) {
35 4
            $this->processRun($object, $objectManager);
36
        }
37 16
    }
38
39 4
    public function processRun(Run $object, ObjectManager $objectManager)
40
    {
41
        /** @var BaseJobManager $jobManager */
42 4
        $jobManager = $this->container->get('dtc_queue.job_manager');
43
44 4
        $runArchiveClass = $jobManager->getRunArchiveClass();
45 4
        $runArchive = new $runArchiveClass();
46 4
        Util::copy($object, $runArchive);
47 4
        $metadata = $objectManager->getClassMetadata($runArchiveClass);
48 4
        if ($objectManager instanceof EntityManager) {
49
            /* @var \Doctrine\ORM\Mapping\ClassMetadata $metadata */
50 2
            $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE);
51 2
            $metadata->setIdGenerator(new AssignedGenerator());
52 2
        } elseif ($objectManager instanceof DocumentManager) {
53
            /* @var ClassMetadata $metadata */
54 2
            $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE);
55
        }
56 4
        $objectManager->persist($runArchive);
57 4
    }
58
59 16
    public function processJob(\Dtc\QueueBundle\Model\Job $object)
60
    {
61 16
        $jobManager = $this->container->get('dtc_queue.job_manager');
62
63 16
        if ($object instanceof \Dtc\QueueBundle\Document\Job ||
64 16
            $object instanceof \Dtc\QueueBundle\Entity\Job) {
65
            /** @var JobManager $jobManager */
66 16
            $archiveObjectName = $jobManager->getArchiveObjectName();
67 16
            $objectManager = $jobManager->getObjectManager();
68 16
            $repository = $objectManager->getRepository($archiveObjectName);
69 16
            $jobManager->stopIdGenerator($jobManager->getArchiveObjectName());
70 16
            $className = $repository->getClassName();
71
72
            /** @var RetryableJob $jobArchive */
73 16
            $jobArchive = new $className();
74 16
            Util::copy($object, $jobArchive);
75 16
            $jobArchive->setUpdatedAt(new \DateTime());
76 16
            $objectManager->persist($jobArchive);
77
        }
78 16
    }
79
80 14
    public function preUpdate(LifecycleEventArgs $eventArgs)
81
    {
82 14
        $object = $eventArgs->getObject();
83 14
        if ($object instanceof \Dtc\QueueBundle\Model\RetryableJob) {
84 14
            $dateTime = new \DateTime();
85 14
            $object->setUpdatedAt($dateTime);
86
        }
87 14
    }
88
89 22
    public function prePersist(LifecycleEventArgs $eventArgs)
90
    {
91 22
        $object = $eventArgs->getObject();
92
93 22
        if ($object instanceof \Dtc\QueueBundle\Model\RetryableJob) {
94 22
            $dateTime = new \DateTime();
95 22
            if (!$object->getCreatedAt()) {
96 22
                $object->setCreatedAt($dateTime);
97
            }
98 22
            $object->setUpdatedAt($dateTime);
99
        }
100 22
    }
101
}
102