Passed
Push — feature/initial-implementation ( 3b7c72...40c5a6 )
by Fike
01:49
created

Registry   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 89
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 10
dl 0
loc 89
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A getAll() 0 3 1
A find() 0 9 3
B withDefaultParameters() 0 40 2
A getInstance() 0 6 2
A createDefault() 0 3 1
A register() 0 5 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace AmaTeam\ElasticSearch\Mapping\Type\Parameter\Infrastructure;
6
7
use AmaTeam\ElasticSearch\API\Mapping\Type\ParameterInterface;
8
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\AnalyzerParameter;
9
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\CoerceParameter;
10
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\CopyToParameter;
11
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\DocValuesParameter;
12
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\DynamicParameter;
13
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\EagerGlobalOrdinalsParameter;
14
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\EnabledParameter;
15
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\EnablePositionIncrementsParameter;
16
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\FieldDataFrequencyFilterParameter;
17
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\FieldDataParameter;
18
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\FieldsParameter;
19
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\FormatParameter;
20
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\IgnoreAboveParameter;
21
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\IgnoreMalformedParameter;
22
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\IndexOptionsParameter;
23
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\IndexParameter;
24
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\LocaleParameter;
25
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\NormalizerParameter;
26
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\NormsParameter;
27
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\NullValueParameter;
28
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\PositionIncrementGapParameter;
29
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\PropertiesParameter;
30
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\RelationsParameter;
31
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\ScalingFactorParameter;
32
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\SearchAnalyzerParameter;
33
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\SearchQuoteAnalyzerParameter;
34
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\SimilarityParameter;
35
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\SourceParameter;
36
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\StoreParameter;
37
use AmaTeam\ElasticSearch\Mapping\Type\Parameter\TermVectorParameter;
38
39
class Registry
40
{
41
    /**
42
     * @var ParameterInterface[]
43
     */
44
    private $idIndex = [];
45
    /**
46
     * @var ParameterInterface[]
47
     */
48
    private $friendlyIdIndex = [];
49
50
    public function register(ParameterInterface $parameter): Registry
51
    {
52
        $this->idIndex[$parameter->getId()] = $parameter;
53
        $this->friendlyIdIndex[$parameter->getFriendlyId()] = $parameter;
54
        return $this;
55
    }
56
57
    public function getAll()
58
    {
59
        return array_values($this->idIndex);
60
    }
61
62
    public function find(string $id): ?ParameterInterface
63
    {
64
        if (isset($this->idIndex[$id])) {
65
            return $this->idIndex[$id];
66
        }
67
        if (isset($this->friendlyIdIndex[$id])) {
68
            return $this->friendlyIdIndex[$id];
69
        }
70
        return null;
71
    }
72
73
    public function withDefaultParameters(): Registry
74
    {
75
        // TODO: use code generation
76
        /** @var ParameterInterface[] $parameters */
77
        $parameters = [
78
            AnalyzerParameter::getInstance(),
79
            CoerceParameter::getInstance(),
80
            CopyToParameter::getInstance(),
81
            DocValuesParameter::getInstance(),
82
            DynamicParameter::getInstance(),
83
            EagerGlobalOrdinalsParameter::getInstance(),
84
            EnabledParameter::getInstance(),
85
            EnablePositionIncrementsParameter::getInstance(),
86
            FieldDataFrequencyFilterParameter::getInstance(),
87
            FieldDataParameter::getInstance(),
88
            FieldsParameter::getInstance(),
89
            FormatParameter::getInstance(),
90
            IgnoreAboveParameter::getInstance(),
91
            IgnoreMalformedParameter::getInstance(),
92
            IndexOptionsParameter::getInstance(),
93
            IndexParameter::getInstance(),
94
            LocaleParameter::getInstance(),
95
            NormalizerParameter::getInstance(),
96
            NormsParameter::getInstance(),
97
            NullValueParameter::getInstance(),
98
            PositionIncrementGapParameter::getInstance(),
99
            PropertiesParameter::getInstance(),
100
            RelationsParameter::getInstance(),
101
            ScalingFactorParameter::getInstance(),
102
            SearchAnalyzerParameter::getInstance(),
103
            SearchQuoteAnalyzerParameter::getInstance(),
104
            SimilarityParameter::getInstance(),
105
            SourceParameter::getInstance(),
106
            StoreParameter::getInstance(),
107
            TermVectorParameter::getInstance()
108
        ];
109
        foreach ($parameters as $parameter) {
110
            $this->register($parameter);
111
        }
112
        return $this;
113
    }
114
115
    public static function createDefault(): Registry
116
    {
117
        return (new Registry())->withDefaultParameters();
118
    }
119
120
    private static $instance;
121
122
    public static function getInstance(): Registry
123
    {
124
        if (!isset(static::$instance)) {
0 ignored issues
show
Bug introduced by
Since $instance is declared private, accessing it with static will lead to errors in possible sub-classes; you can either use self, or increase the visibility of $instance to at least protected.
Loading history...
125
            static::$instance = static::createDefault();
126
        }
127
        return static::$instance;
128
    }
129
}
130