Completed
Push — master ( d4f4f0...01653d )
by Matthew
04:03
created

DtcQueueListener::processRun()   B

Complexity

Conditions 4
Paths 4

Size

Total Lines 23
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 15
CRAP Score 4

Importance

Changes 1
Bugs 1 Features 0
Metric Value
dl 0
loc 23
ccs 15
cts 15
cp 1
rs 8.7972
c 1
b 1
f 0
cc 4
eloc 14
nc 4
nop 2
crap 4
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 8
    public function __construct(ContainerInterface $container)
23
    {
24 8
        $this->container = $container;
25 8
    }
26
27 22
    public function preRemove(LifecycleEventArgs $eventArgs)
28
    {
29 22
        $object = $eventArgs->getObject();
30 22
        $objectManager = $eventArgs->getObjectManager();
31
32 22
        if ($object instanceof \Dtc\QueueBundle\Model\Job) {
33 21
            $this->processJob($object);
34 7
        } elseif ($object instanceof Run) {
35 7
            $this->processRun($object, $objectManager);
36
        }
37 22
    }
38
39 7
    public function processRun(Run $object, ObjectManager $objectManager)
40
    {
41
        /** @var BaseRunManager $runManager */
42 7
        $runManager = $this->container->get('dtc_queue.run_manager');
43
44 7
        $runArchiveClass = $runManager->getRunArchiveClass();
45 7
        if ($object instanceof $runArchiveClass) {
46 7
            return;
47 7
        }
48 7
49
        $runArchive = new $runArchiveClass();
50 2
        Util::copy($object, $runArchive);
51 2
        $metadata = $objectManager->getClassMetadata($runArchiveClass);
52 5
        if ($objectManager instanceof EntityManager) {
53
            /* @var \Doctrine\ORM\Mapping\ClassMetadata $metadata */
54 5
            $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE);
55
            $metadata->setIdGenerator(new AssignedGenerator());
56 7
        } elseif ($objectManager instanceof DocumentManager) {
57 7
            /* @var ClassMetadata $metadata */
58
            $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE);
59 21
        }
60
        $objectManager->persist($runArchive);
61 21
    }
62
63 21
    public function processJob(\Dtc\QueueBundle\Model\Job $object)
64 21
    {
65
        $jobManager = $this->container->get('dtc_queue.job_manager');
66 21
67 21
        if ($object instanceof \Dtc\QueueBundle\Document\Job ||
68 21
            $object instanceof \Dtc\QueueBundle\Entity\Job) {
69 21
            /** @var JobManager $jobManager */
70 21
            $archiveObjectName = $jobManager->getArchiveObjectName();
71
            $objectManager = $jobManager->getObjectManager();
72
            $repository = $objectManager->getRepository($archiveObjectName);
73 21
            $jobManager->stopIdGenerator($jobManager->getArchiveObjectName());
74 21
            $className = $repository->getClassName();
75 21
76 21
            /** @var RetryableJob $jobArchive */
77
            $jobArchive = new $className();
78 21
            Util::copy($object, $jobArchive);
79
            $jobArchive->setUpdatedAt(new \DateTime());
80 18
            $objectManager->persist($jobArchive);
81
        }
82 18
    }
83 18
84 16
    public function preUpdate(LifecycleEventArgs $eventArgs)
85 16
    {
86
        $object = $eventArgs->getObject();
87 18
        if ($object instanceof \Dtc\QueueBundle\Model\RetryableJob) {
88
            $dateTime = new \DateTime();
89 30
            $object->setUpdatedAt($dateTime);
90
        }
91 30
    }
92
93 30
    public function prePersist(LifecycleEventArgs $eventArgs)
94 29
    {
95 29
        $object = $eventArgs->getObject();
96 29
97
        if ($object instanceof \Dtc\QueueBundle\Model\RetryableJob) {
98 29
            $dateTime = new \DateTime();
99
            if (!$object->getCreatedAt()) {
100 30
                $object->setCreatedAt($dateTime);
101
            }
102
            $object->setUpdatedAt($dateTime);
103
        }
104
    }
105
}
106