Passed
Push — deprecations25 ( d669bc )
by no
03:09
created

SerializerFactory::newEntitySerializer()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 6
ccs 0
cts 0
cp 0
rs 9.4285
cc 1
eloc 4
nc 1
nop 0
crap 2
1
<?php
2
3
namespace Wikibase\DataModel;
4
5
use InvalidArgumentException;
6
use Serializers\DispatchingSerializer;
7
use Serializers\Serializer;
8
use Wikibase\DataModel\Serializers\AliasGroupListSerializer;
9
use Wikibase\DataModel\Serializers\AliasGroupSerializer;
10
use Wikibase\DataModel\Serializers\ItemSerializer;
11
use Wikibase\DataModel\Serializers\PropertySerializer;
12
use Wikibase\DataModel\Serializers\ReferenceListSerializer;
13
use Wikibase\DataModel\Serializers\ReferenceSerializer;
14
use Wikibase\DataModel\Serializers\SiteLinkSerializer;
15
use Wikibase\DataModel\Serializers\SnakListSerializer;
16
use Wikibase\DataModel\Serializers\SnakSerializer;
17
use Wikibase\DataModel\Serializers\StatementListSerializer;
18
use Wikibase\DataModel\Serializers\StatementSerializer;
19
use Wikibase\DataModel\Serializers\TermListSerializer;
20
use Wikibase\DataModel\Serializers\TermSerializer;
21
use Wikibase\DataModel\Serializers\TypedSnakSerializer;
22
23
/**
24
 * Factory for constructing Serializer objects that can serialize WikibaseDataModel objects.
25
 *
26
 * @since 0.1
27
 *
28
 * @license GPL-2.0+
29
 * @author Thomas Pellissier Tanon
30
 * @author Bene* < [email protected] >
31
 * @author Addshore
32
 */
33
class SerializerFactory {
34
35
	const OPTION_DEFAULT = 0;
36
	/** @since 1.2.0 */
37
	const OPTION_OBJECTS_FOR_MAPS = 1;
38
	/** @since 1.7.0 */
39
	const OPTION_SERIALIZE_MAIN_SNAKS_WITHOUT_HASH = 2;
40
	const OPTION_SERIALIZE_QUALIFIER_SNAKS_WITHOUT_HASH = 4;
41
	const OPTION_SERIALIZE_REFERENCE_SNAKS_WITHOUT_HASH = 8;
42
43
	/**
44
	 * @var int
45
	 */
46
	private $options;
47
48
	/**
49
	 * @var Serializer
50
	 */
51
	private $dataValueSerializer;
52
53
	/**
54
	 * @param Serializer $dataValueSerializer serializer for DataValue objects
55
	 * @param int $options set multiple with bitwise or
56
	 *
57
	 * @throws InvalidArgumentException
58
	 */
59 52
	public function __construct( Serializer $dataValueSerializer, $options = 0 ) {
60 52
		if ( !is_int( $options ) ) {
61 1
			throw new InvalidArgumentException( '$options must be an integer' );
62
		}
63
64 51
		$this->dataValueSerializer = $dataValueSerializer;
65 51
		$this->options = $options;
66 51
	}
67
68
	/**
69
	 * @return bool
70
	 */
71 38
	private function shouldUseObjectsForMaps() {
72 38
		return (bool)( $this->options & self::OPTION_OBJECTS_FOR_MAPS );
73
	}
74
75
	/**
76
	 * @return bool
77
	 */
78 22
	private function shouldSerializeMainSnaksWithHash() {
79 22
		return !(bool)( $this->options & self::OPTION_SERIALIZE_MAIN_SNAKS_WITHOUT_HASH );
80
	}
81
82
	/**
83
	 * @return bool
84
	 */
85 22
	private function shouldSerializeQualifierSnaksWithHash() {
86 22
		return !(bool)( $this->options & self::OPTION_SERIALIZE_QUALIFIER_SNAKS_WITHOUT_HASH );
87
	}
88
89
	/**
90
	 * @return bool
91
	 */
92 30
	private function shouldSerializeReferenceSnaksWithHash() {
93 30
		return !(bool)( $this->options & self::OPTION_SERIALIZE_REFERENCE_SNAKS_WITHOUT_HASH );
94
	}
95
96
	/**
97
	 * @deprecated since 2.5, use a DispatchingSerializer containing the exact entity serializers
98
	 * you need instead.
99
	 *
100
	 * @return Serializer that can only serialize Item and Property objects.
101
	 */
102
	public function newEntitySerializer() {
103
		return new DispatchingSerializer( array(
0 ignored issues
show
Documentation introduced by
array($this->newItemSeri...ewPropertySerializer()) is of type array<integer,object<Ser...alizers\\Serializer>"}>, but the function expects a array<integer,object<Ser...ispatchableSerializer>>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
104
			$this->newItemSerializer(),
105
			$this->newPropertySerializer()
106
		) );
107
	}
108
109
	/**
110
	 * Returns a Serializer that can serialize Item objects.
111
	 *
112
	 * @since 2.1
113
	 *
114
	 * @return Serializer
115
	 */
116 9
	public function newItemSerializer() {
117 9
		return new ItemSerializer(
118 9
			$this->newTermListSerializer(),
119 9
			$this->newAliasGroupListSerializer(),
120 9
			$this->newStatementListSerializer(),
121 9
			$this->newSiteLinkSerializer(),
122 9
			$this->shouldUseObjectsForMaps()
123
		);
124
	}
125
126
	/**
127
	 * Returns a Serializer that can serialize Property objects.
128
	 *
129
	 * @since 2.1
130
	 *
131
	 * @return Serializer
132
	 */
133 9
	public function newPropertySerializer() {
134 9
		return new PropertySerializer(
135 9
			$this->newTermListSerializer(),
136 9
			$this->newAliasGroupListSerializer(),
137 9
			$this->newStatementListSerializer()
138
		);
139
	}
140
141
	/**
142
	 * Returns a Serializer that can serialize SiteLink objects.
143
	 *
144
	 * @return Serializer
145
	 */
146 13
	public function newSiteLinkSerializer() {
147 13
		return new SiteLinkSerializer();
148
	}
149
150
	/**
151
	 * Returns a Serializer that can serialize StatementList objects.
152
	 *
153
	 * @since 1.4
154
	 *
155
	 * @return Serializer
156
	 */
157 14
	public function newStatementListSerializer() {
158 14
		return new StatementListSerializer(
159 14
			$this->newStatementSerializer(),
160 14
			$this->shouldUseObjectsForMaps()
161
		);
162
	}
163
164
	/**
165
	 * Returns a Serializer that can serialize Statement objects.
166
	 *
167
	 * @since 1.4
168
	 *
169
	 * @return Serializer
170
	 */
171 22
	public function newStatementSerializer() {
172 22
		return new StatementSerializer(
173 22
			$this->newSnakSerializer( $this->shouldSerializeMainSnaksWithHash() ),
174 22
			$this->newSnakListSerializer( $this->shouldSerializeQualifierSnaksWithHash() ),
175 22
			$this->newReferencesSerializer()
176
		);
177
	}
178
179
	/**
180
	 * Returns a Serializer that can serialize ReferenceList objects.
181
	 *
182
	 * @return Serializer
183
	 */
184 26
	public function newReferencesSerializer() {
185 26
		return new ReferenceListSerializer( $this->newReferenceSerializer() );
186
	}
187
188
	/**
189
	 * Returns a Serializer that can serialize Reference objects.
190
	 *
191
	 * @return Serializer
192
	 */
193 30
	public function newReferenceSerializer() {
194 30
		return new ReferenceSerializer(
195 30
			$this->newSnakListSerializer(
196 30
				$this->shouldSerializeReferenceSnaksWithHash()
197
			)
198
		);
199
	}
200
201
	/**
202
	 * Returns a Serializer that can serialize SnakList objects.
203
	 *
204
	 * @param bool $serializeSnaksWithHash
205
	 *
206
	 * @since 1.4
207
	 *
208
	 * @return Serializer
209
	 */
210 36
	public function newSnakListSerializer( $serializeSnaksWithHash = true ) {
211 36
		return new SnakListSerializer(
212 36
			$this->newSnakSerializer( $serializeSnaksWithHash ),
213 36
			$this->shouldUseObjectsForMaps()
214
		);
215
	}
216
217
	/**
218
	 * Returns a Serializer that can serialize Snak objects.
219
	 *
220
	 * @param bool $serializeWithHash
221
	 *
222
	 * @return Serializer
223
	 */
224 43
	public function newSnakSerializer( $serializeWithHash = true ) {
225 43
		return new SnakSerializer( $this->dataValueSerializer, $serializeWithHash );
226
	}
227
228
	/**
229
	 * Returns a Serializer that can serialize TypedSnak objects.
230
	 *
231
	 * @param bool $serializeWithHash
232
	 *
233
	 * @since 1.3
234
	 *
235
	 * @return Serializer
236
	 */
237 1
	public function newTypedSnakSerializer( $serializeWithHash = true ) {
238 1
		return new TypedSnakSerializer( $this->newSnakSerializer( $serializeWithHash ) );
239
	}
240
241
	/**
242
	 * Returns a Serializer that can serialize Term objects.
243
	 *
244
	 * @since 1.5
245
	 *
246
	 * @return Serializer
247
	 */
248 12
	public function newTermSerializer() {
249 12
		return new TermSerializer();
250
	}
251
252
	/**
253
	 * Returns a Serializer that can serialize TermList objects.
254
	 *
255
	 * @since 1.5
256
	 *
257
	 * @return Serializer
258
	 */
259 11
	public function newTermListSerializer() {
260 11
		return new TermListSerializer( $this->newTermSerializer(), $this->shouldUseObjectsForMaps() );
261
	}
262
263
	/**
264
	 * Returns a Serializer that can serialize AliasGroup objects.
265
	 *
266
	 * @since 1.6
267
	 *
268
	 * @return Serializer
269
	 */
270 12
	public function newAliasGroupSerializer() {
271 12
		return new AliasGroupSerializer();
272
	}
273
274
	/**
275
	 * Returns a Serializer that can serialize AliasGroupList objects.
276
	 *
277
	 * @since 1.5
278
	 *
279
	 * @return Serializer
280
	 */
281 11
	public function newAliasGroupListSerializer() {
282 11
		return new AliasGroupListSerializer( $this->newAliasGroupSerializer(), $this->shouldUseObjectsForMaps() );
283
	}
284
285
}
286