Completed
Pull Request — master (#188)
by Bene
03:46 queued 01:21
created

newStatementListDeserializer()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

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