Completed
Push — thereIsNoEntity ( ef775f )
by no
07:23
created

DeserializerFactory::newReferenceDeserializer()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 3
rs 10
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
namespace Wikibase\DataModel;
4
5
use Deserializers\Deserializer;
6
use Deserializers\DispatchableDeserializer;
7
use Wikibase\DataModel\Deserializers\AliasGroupListDeserializer;
8
use Wikibase\DataModel\Deserializers\EntityIdDeserializer;
9
use Wikibase\DataModel\Deserializers\ItemDeserializer;
10
use Wikibase\DataModel\Deserializers\PropertyDeserializer;
11
use Wikibase\DataModel\Deserializers\ReferenceDeserializer;
12
use Wikibase\DataModel\Deserializers\ReferenceListDeserializer;
13
use Wikibase\DataModel\Deserializers\SiteLinkDeserializer;
14
use Wikibase\DataModel\Deserializers\SnakDeserializer;
15
use Wikibase\DataModel\Deserializers\SnakListDeserializer;
16
use Wikibase\DataModel\Deserializers\StatementDeserializer;
17
use Wikibase\DataModel\Deserializers\StatementListDeserializer;
18
use Wikibase\DataModel\Deserializers\TermDeserializer;
19
use Wikibase\DataModel\Deserializers\TermListDeserializer;
20
use Wikibase\DataModel\Entity\EntityIdParser;
21
22
/**
23
 * Factory for constructing Deserializer objects that can deserialize WikibaseDataModel objects.
24
 *
25
 * @since 0.1
26
 *
27
 * @license GPL-2.0+
28
 * @author Thomas Pellissier Tanon
29
 * @author Bene* < [email protected] >
30
 */
31
class DeserializerFactory {
32
33
	/**
34
	 * @var Deserializer
35
	 */
36
	private $dataValueDeserializer;
37
38
	/**
39
	 * @var EntityIdParser
40
	 */
41
	private $entityIdParser;
42
43
	/**
44
	 * @param Deserializer $dataValueDeserializer deserializer for DataValue objects
45
	 * @param EntityIdParser $entityIdParser
46
	 */
47
	public function __construct(
48
		Deserializer $dataValueDeserializer,
49
		EntityIdParser $entityIdParser
50
	) {
51
		$this->dataValueDeserializer = $dataValueDeserializer;
52
		$this->entityIdParser = $entityIdParser;
53
	}
54
55
	/**
56
	 * Returns a Deserializer that can deserialize Item objects.
57
	 *
58
	 * @since 2.1
59
	 *
60
	 * @return Deserializer
61
	 */
62
	public function newItemDeserializer() {
63
		return new ItemDeserializer(
64
			$this->newEntityIdDeserializer(),
65
			$this->newTermListDeserializer(),
66
			$this->newAliasGroupListDeserializer(),
67
			$this->newStatementListDeserializer(),
68
			$this->newSiteLinkDeserializer()
69
		);
70
	}
71
72
	/**
73
	 * Returns a Deserializer that can deserialize Property objects.
74
	 *
75
	 * @since 2.1
76
	 *
77
	 * @return Deserializer
78
	 */
79
	public function newPropertyDeserializer() {
80
		return new PropertyDeserializer(
81
			$this->newEntityIdDeserializer(),
82
			$this->newTermListDeserializer(),
83
			$this->newAliasGroupListDeserializer(),
84
			$this->newStatementListDeserializer()
85
		);
86
	}
87
88
	/**
89
	 * Returns a Deserializer that can deserialize SiteLink objects.
90
	 *
91
	 * @return Deserializer
92
	 */
93
	public function newSiteLinkDeserializer() {
94
		return new SiteLinkDeserializer( $this->newEntityIdDeserializer() );
95
	}
96
97
	/**
98
	 * Returns a Deserializer that can deserialize StatementList objects.
99
	 *
100
	 * @since 1.4
101
	 *
102
	 * @return Deserializer
103
	 */
104
	public function newStatementListDeserializer() {
105
		return new StatementListDeserializer( $this->newStatementDeserializer() );
106
	}
107
108
	/**
109
	 * Returns a Deserializer that can deserialize Statement objects.
110
	 *
111
	 * @since 1.4
112
	 *
113
	 * @return DispatchableDeserializer
114
	 */
115
	public function newStatementDeserializer() {
116
		return new StatementDeserializer(
117
			$this->newSnakDeserializer(),
118
			$this->newSnakListDeserializer(),
119
			$this->newReferencesDeserializer()
120
		);
121
	}
122
123
	/**
124
	 * Returns a Deserializer that can deserialize ReferenceList objects.
125
	 *
126
	 * @return Deserializer
127
	 */
128
	public function newReferencesDeserializer() {
129
		return new ReferenceListDeserializer( $this->newReferenceDeserializer() );
130
	}
131
132
	/**
133
	 * Returns a Deserializer that can deserialize Reference objects.
134
	 *
135
	 * @return Deserializer
136
	 */
137
	public function newReferenceDeserializer() {
138
		return new ReferenceDeserializer( $this->newSnakListDeserializer() );
139
	}
140
141
	/**
142
	 * Returns a Deserializer that can deserialize SnakList objects.
143
	 *
144
	 * @since 1.4
145
	 *
146
	 * @return Deserializer
147
	 */
148
	public function newSnakListDeserializer() {
149
		return new SnakListDeserializer( $this->newSnakDeserializer() );
150
	}
151
152
	/**
153
	 * Returns a Deserializer that can deserialize Snak objects.
154
	 *
155
	 * @return Deserializer
156
	 */
157
	public function newSnakDeserializer() {
158
		return new SnakDeserializer( $this->dataValueDeserializer, $this->newEntityIdDeserializer() );
159
	}
160
161
	/**
162
	 * Returns a Deserializer that can deserialize EntityId objects.
163
	 *
164
	 * @return Deserializer
165
	 */
166
	public function newEntityIdDeserializer() {
167
		return new EntityIdDeserializer( $this->entityIdParser );
168
	}
169
170
	/**
171
	 * Returns a Deserializer that can deserialize Term objects.
172
	 *
173
	 * @since 1.5
174
	 *
175
	 * @return Deserializer
176
	 */
177
	public function newTermDeserializer() {
178
		return new TermDeserializer();
179
	}
180
181
	/**
182
	 * Returns a Deserializer that can deserialize TermList objects.
183
	 *
184
	 * @since 1.5
185
	 *
186
	 * @return Deserializer
187
	 */
188
	public function newTermListDeserializer() {
189
		return new TermListDeserializer( $this->newTermDeserializer() );
190
	}
191
192
	/**
193
	 * Returns a Deserializer that can deserialize AliasGroupList objects.
194
	 *
195
	 * @since 1.5
196
	 *
197
	 * @return Deserializer
198
	 */
199
	public function newAliasGroupListDeserializer() {
200
		return new AliasGroupListDeserializer();
201
	}
202
203
}
204