Passed
Push — lineLength100 ( bfb78a...a4fcf1 )
by no
08:28 queued 05:54
created

DeserializerFactory::newItemDeserializer()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 9
rs 9.6666
cc 1
eloc 7
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
	 * @param Deserializer $dataValueDeserializer deserializer for DataValue objects
46
	 * @param EntityIdParser $entityIdParser
47
	 */
48
	public function __construct(
49
		Deserializer $dataValueDeserializer,
50
		EntityIdParser $entityIdParser
51
	) {
52
		$this->dataValueDeserializer = $dataValueDeserializer;
53
		$this->entityIdParser = $entityIdParser;
54
	}
55
56
	/**
57
	 * Returns a Deserializer that can deserialize Entity objects.
58
	 *
59
	 * @return DispatchableDeserializer
60
	 */
61
	public function newEntityDeserializer() {
62
		return new DispatchingDeserializer( array(
63
			$this->newItemDeserializer(),
64
			$this->newPropertyDeserializer()
65
		) );
66
	}
67
68
	/**
69
	 * Returns a Deserializer that can deserialize Item objects.
70
	 *
71
	 * @since 2.1
72
	 *
73
	 * @return Deserializer
74
	 */
75
	public function newItemDeserializer() {
76
		return new ItemDeserializer(
77
			$this->newEntityIdDeserializer(),
78
			$this->newTermListDeserializer(),
79
			$this->newAliasGroupListDeserializer(),
80
			$this->newStatementListDeserializer(),
81
			$this->newSiteLinkDeserializer()
82
		);
83
	}
84
85
	/**
86
	 * Returns a Deserializer that can deserialize Property objects.
87
	 *
88
	 * @since 2.1
89
	 *
90
	 * @return Deserializer
91
	 */
92
	public function newPropertyDeserializer() {
93
		return new PropertyDeserializer(
94
			$this->newEntityIdDeserializer(),
95
			$this->newTermListDeserializer(),
96
			$this->newAliasGroupListDeserializer(),
97
			$this->newStatementListDeserializer()
98
		);
99
	}
100
101
	/**
102
	 * Returns a Deserializer that can deserialize SiteLink objects.
103
	 *
104
	 * @return Deserializer
105
	 */
106
	public function newSiteLinkDeserializer() {
107
		return new SiteLinkDeserializer( $this->newEntityIdDeserializer() );
108
	}
109
110
	/**
111
	 * Returns a Deserializer that can deserialize StatementList objects.
112
	 *
113
	 * @since 1.4
114
	 *
115
	 * @return Deserializer
116
	 */
117
	public function newStatementListDeserializer() {
118
		return new StatementListDeserializer( $this->newStatementDeserializer() );
119
	}
120
121
	/**
122
	 * Returns a Deserializer that can deserialize Statement objects.
123
	 *
124
	 * @since 1.4
125
	 *
126
	 * @return DispatchableDeserializer
127
	 */
128
	public function newStatementDeserializer() {
129
		return new StatementDeserializer(
130
			$this->newSnakDeserializer(),
131
			$this->newSnakListDeserializer(),
132
			$this->newReferencesDeserializer()
133
		);
134
	}
135
136
	/**
137
	 * Returns a Deserializer that can deserialize ReferenceList objects.
138
	 *
139
	 * @return Deserializer
140
	 */
141
	public function newReferencesDeserializer() {
142
		return new ReferenceListDeserializer( $this->newReferenceDeserializer() );
143
	}
144
145
	/**
146
	 * Returns a Deserializer that can deserialize Reference objects.
147
	 *
148
	 * @return Deserializer
149
	 */
150
	public function newReferenceDeserializer() {
151
		return new ReferenceDeserializer( $this->newSnakListDeserializer() );
152
	}
153
154
	/**
155
	 * Returns a Deserializer that can deserialize SnakList objects.
156
	 *
157
	 * @since 1.4
158
	 *
159
	 * @return Deserializer
160
	 */
161
	public function newSnakListDeserializer() {
162
		return new SnakListDeserializer( $this->newSnakDeserializer() );
163
	}
164
165
	/**
166
	 * Returns a Deserializer that can deserialize Snak objects.
167
	 *
168
	 * @return Deserializer
169
	 */
170
	public function newSnakDeserializer() {
171
		return new SnakDeserializer( $this->dataValueDeserializer, $this->newEntityIdDeserializer() );
172
	}
173
174
	/**
175
	 * Returns a Deserializer that can deserialize EntityId objects.
176
	 *
177
	 * @return Deserializer
178
	 */
179
	public function newEntityIdDeserializer() {
180
		return new EntityIdDeserializer( $this->entityIdParser );
181
	}
182
183
	/**
184
	 * Returns a Deserializer that can deserialize Term objects.
185
	 *
186
	 * @since 1.5
187
	 *
188
	 * @return Deserializer
189
	 */
190
	public function newTermDeserializer() {
191
		return new TermDeserializer();
192
	}
193
194
	/**
195
	 * Returns a Deserializer that can deserialize TermList objects.
196
	 *
197
	 * @since 1.5
198
	 *
199
	 * @return Deserializer
200
	 */
201
	public function newTermListDeserializer() {
202
		return new TermListDeserializer( $this->newTermDeserializer() );
203
	}
204
205
	/**
206
	 * Returns a Deserializer that can deserialize AliasGroupList objects.
207
	 *
208
	 * @since 1.5
209
	 *
210
	 * @return Deserializer
211
	 */
212
	public function newAliasGroupListDeserializer() {
213
		return new AliasGroupListDeserializer();
214
	}
215
216
}
217