Completed
Branch conditions-refactoring (4b1dba)
by Romain
03:17
created

ConditionParserFactory::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
/*
3
 * 2016 Romain CANON <[email protected]>
4
 *
5
 * This file is part of the TYPO3 Formz project.
6
 * It is free software; you can redistribute it and/or modify it
7
 * under the terms of the GNU General Public License, either
8
 * version 3 of the License, or any later version.
9
 *
10
 * For the full copyright and license information, see:
11
 * http://www.gnu.org/licenses/gpl-3.0.html
12
 */
13
14
namespace Romm\Formz\Condition\Parser;
15
16
use Romm\Formz\Condition\ConditionTree;
17
use Romm\Formz\Configuration\Form\Condition\Activation\ActivationInterface;
18
use Romm\Formz\Form\FormObject;
19
use TYPO3\CMS\Core\Utility\GeneralUtility;
20
21
/**
22
 * @todo
23
 */
24
class ConditionParserFactory
25
{
26
    /**
27
     * @var ConditionParserFactory[]
28
     */
29
    private static $instances = [];
30
31
    /**
32
     * @var ConditionTree[]
33
     */
34
    private $trees = [];
35
36
    /**
37
     * @var FormObject
38
     */
39
    private $formObject;
40
41
    /**
42
     * @param FormObject $formObject
43
     */
44
    public function __construct(FormObject $formObject)
45
    {
46
        $this->formObject = $formObject;
47
    }
48
49
    /**
50
     * @param FormObject $formObject
51
     * @return ConditionParserFactory
52
     */
53
    public static function get(FormObject $formObject)
54
    {
55
        $hash = $formObject->getHash();
56
57
        if (false === array_key_exists($hash, self::$instances)) {
58
            self::$instances[$hash] = GeneralUtility::makeInstance(self::class, $formObject);
59
        }
60
61
        return self::$instances[$hash];
62
    }
63
64
    /**
65
     * @todo
66
     *
67
     * @param ActivationInterface $condition The condition instance.
68
     * @return ConditionTree
69
     */
70
    public function parse(ActivationInterface $condition)
71
    {
72
        $hash = sha1(serialize([
73
            $condition->getCondition(),
74
            $condition->getItems()
75
        ]));
76
77
        if (false === array_key_exists($hash, $this->trees)) {
78
            $this->trees[$hash] = ConditionParser::get()->parse($condition);
79
        }
80
81
        return $this->trees[$hash];
82
    }
83
}
84