Completed
Push — master ( 586166...fecb59 )
by Paweł
47:58
created

ParentRouteToIdTransformer::transform()   A

Complexity

Conditions 4
Paths 3

Size

Total Lines 17
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 5.4042

Importance

Changes 0
Metric Value
dl 0
loc 17
ccs 5
cts 9
cp 0.5556
rs 9.2
c 0
b 0
f 0
cc 4
eloc 10
nc 3
nop 1
crap 5.4042
1
<?php
2
3
/**
4
 * This file is part of the Superdesk Web Publisher Content Bundle.
5
 *
6
 * Copyright 2016 Sourcefabric z.ú. and contributors.
7
 *
8
 * For the full copyright and license information, please see the
9
 * AUTHORS and LICENSE files distributed with this source code.
10
 *
11
 * @copyright 2016 Sourcefabric z.ú
12
 * @license http://www.superdesk.org/license
13
 */
14
15
namespace SWP\Bundle\ContentBundle\Form\DataTransformer;
16
17
use Doctrine\ODM\PHPCR\Document\Generic;
18
use SWP\Bundle\ContentBundle\Model\RouteInterface;
19
use SWP\Bundle\ContentBundle\Provider\RouteProviderInterface;
20
use Symfony\Component\Form\DataTransformerInterface;
21
use Symfony\Component\Form\Exception\TransformationFailedException;
22
23
final class ParentRouteToIdTransformer implements DataTransformerInterface
24
{
25
    /**
26
     * @var RouteProviderInterface
27
     */
28
    private $routeProvider;
29
30
    /**
31
     * RouteToIdTransformer constructor.
32
     *
33
     * @param RouteProviderInterface $routeProvider
34
     */
35 16
    public function __construct(RouteProviderInterface $routeProvider)
36
    {
37 16
        $this->routeProvider = $routeProvider;
38 16
    }
39
40
    /**
41
     * Transforms an object (route) to a string (id).
42
     *
43
     * @param RouteInterface|string $route
44
     *
45
     * @return string
46
     *
47
     * @throws TransformationFailedException if object (route) is of wrong type
48
     */
49 16
    public function transform($route)
50
    {
51 16
        if (null === $route) {
52 15
            return;
53
        }
54
55 4
        if ($route instanceof RouteInterface || $route instanceof Generic) {
56 4
            return $route->getId();
57
        }
58
59
        throw new TransformationFailedException(sprintf(
60
            '"%s" should be of type %s or %s!',
61
            get_class($route),
62
            RouteInterface::class,
63
            Generic::class
64
        ));
65
    }
66
67
    /**
68
     * Transforms an id to an object (route).
69
     *
70
     * @param string $routeId
71
     *
72
     * @return RouteInterface
73
     *
74
     * @throws TransformationFailedException if object (route) is not found
75
     */
76 16
    public function reverseTransform($routeId)
77
    {
78 16
        $route = $this->routeProvider->getOneById($routeId);
79
80 16
        if (null === $route) {
81
            throw new TransformationFailedException(sprintf(
82
                'Route with id "%s" does not exist!',
83
                $routeId
84
            ));
85
        }
86
87 16
        return $route;
88
    }
89
}
90