-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGenericFieldSetBuilder.php
116 lines (92 loc) · 2.69 KB
/
GenericFieldSetBuilder.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?php
declare(strict_types=1);
/*
* This file is part of the RollerworksSearch package.
*
* (c) Sebastiaan Stok <[email protected]>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace Rollerworks\Component\Search;
use Rollerworks\Component\Search\Exception\InvalidArgumentException;
use Rollerworks\Component\Search\Field\FieldConfig;
/**
* The FieldSetBuilder helps with building a {@link FieldSet}.
*
* @author Sebastiaan Stok <[email protected]>
*/
final class GenericFieldSetBuilder implements FieldSetBuilder
{
/**
* @var FieldConfig[]
*/
private $fields = [];
/**
* @var array[]
*/
private $unresolvedFields = [];
/**
* @var SearchFactory
*/
private $searchFactory;
public function __construct(SearchFactory $searchFactory)
{
$this->searchFactory = $searchFactory;
}
public function set(FieldConfig $field)
{
$this->fields[$field->getName()] = $field;
return $this;
}
public function add(string $name, string $type, array $options = [])
{
$this->unresolvedFields[$name] = [
'type' => $type,
'options' => $options,
];
return $this;
}
public function remove(string $name)
{
unset($this->fields[$name], $this->unresolvedFields[$name]);
return $this;
}
public function has(string $name): bool
{
if (isset($this->unresolvedFields[$name])) {
return true;
}
if (isset($this->fields[$name])) {
return true;
}
return false;
}
public function get(string $name): FieldConfig
{
if (isset($this->unresolvedFields[$name])) {
$this->fields[$name] = $this->searchFactory->createField(
$name,
$this->unresolvedFields[$name]['type'],
$this->unresolvedFields[$name]['options']
);
unset($this->unresolvedFields[$name]);
}
if (isset($this->fields[$name])) {
return $this->fields[$name];
}
throw new InvalidArgumentException(\sprintf('The field with the name "%s" does not exist.', $name));
}
public function getFieldSet(?string $setName = null): FieldSet
{
foreach ($this->unresolvedFields as $name => $field) {
$this->fields[$name] = $this->searchFactory->createField(
$name,
$field['type'],
$field['options']
);
unset($this->unresolvedFields[$name]);
}
return new GenericFieldSet($this->fields, $setName);
}
}