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