Passed
Push — new-entity-serializers ( 00afbd )
by Bene
02:29
created

DeserializerFactory::newPropertyDeserializer()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

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