Completed
Push — master ( c2be12...4adc53 )
by adam
02:59
created

WikibaseFactory::newEntityDocumentSaver()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 3
rs 10
ccs 0
cts 0
cp 0
cc 1
eloc 2
nc 1
nop 0
crap 2
1
<?php
2
3
namespace Wikibase\Api;
4
5
use Deserializers\Deserializer;
6
use Mediawiki\Api\MediawikiApi;
7
use Serializers\Serializer;
8
use Wikibase\Api\Lookup\EntityApiLookup;
9
use Wikibase\Api\Lookup\EntityRedirectApiLookup;
10
use Wikibase\Api\Lookup\ItemApiLookup;
11
use Wikibase\Api\Lookup\PropertyApiLookup;
12
use Wikibase\Api\Lookup\TermApiLookup;
13
use Wikibase\Api\Service\AliasGroupSetter;
14
use Wikibase\Api\Service\BadgeIdsGetter;
15
use Wikibase\Api\Service\EntityDocumentSaver;
16
use Wikibase\Api\Service\StatementCreator;
17
use Wikibase\Api\Service\StatementGetter;
18
use Wikibase\Api\Service\StatementRemover;
19
use Wikibase\Api\Service\StatementSetter;
20
use Wikibase\Api\Service\DescriptionSetter;
21
use Wikibase\Api\Service\ItemMerger;
22
use Wikibase\Api\Service\LabelSetter;
23
use Wikibase\Api\Service\RedirectCreator;
24
use Wikibase\Api\Service\ReferenceRemover;
25
use Wikibase\Api\Service\ReferenceSetter;
26
use Wikibase\Api\Service\RevisionGetter;
27
use Wikibase\Api\Service\RevisionSaver;
28
use Wikibase\Api\Service\RevisionsGetter;
29
use Wikibase\Api\Service\SiteLinkLinker;
30
use Wikibase\Api\Service\SiteLinkSetter;
31
use Wikibase\Api\Service\ValueFormatter;
32
use Wikibase\Api\Service\ValueParser;
33
use Wikibase\DataModel\DeserializerFactory;
34
use Wikibase\DataModel\SerializerFactory;
35
use Wikibase\DataModel\Entity\BasicEntityIdParser;
36
use Wikibase\DataModel\Services\Lookup\EntityLookup;
37
use Wikibase\DataModel\Services\Lookup\ItemLookup;
38
use Wikibase\DataModel\Services\Lookup\PropertyLookup;
39
use Wikibase\DataModel\Services\Lookup\TermLookup;
40
41
/**
42
 * @access public
43
 */
44
class WikibaseFactory {
45
46
	/**
47
	 * @var MediawikiApi
48
	 */
49
	private $api;
50
51
	/**
52
	 * @var Deserializer
53
	 */
54
	private $dataValueDeserializer;
55
56
	/**
57
	 * @var Serializer
58
	 */
59
	private $dataValueSerializer;
60
61
	/**
62
	 * @param MediawikiApi $api
63
	 * @param Deserializer $dvDeserializer
64
	 * @param Serializer $dvSerializer
65 16
	 */
66 16
	public function __construct( MediawikiApi $api, Deserializer $dvDeserializer, Serializer $dvSerializer ) {
67 16
		$this->api = $api;
68 16
		$this->dataValueDeserializer = $dvDeserializer;
69 16
		$this->dataValueSerializer = $dvSerializer;
70
	}
71
72
	/**
73
	 * @since 0.1
74
	 * @return RevisionSaver
75 1
	 */
76 1
	public function newRevisionSaver() {
77 1
		return new RevisionSaver(
78 1
			$this->newWikibaseApi(),
79 1
			$this->newDataModelDeserializerFactory()->newEntityDeserializer(),
80 1
			$this->newDataModelSerializerFactory()->newEntitySerializer()
81
		);
82
	}
83
84
	/**
85
	 * @since 0.1
86
	 * @return RevisionGetter
87 1
	 */
88 1
	public function newRevisionGetter() {
89 1
		return new RevisionGetter(
90 1
			$this->api,
91 1
			$this->newDataModelDeserializerFactory()->newEntityDeserializer()
92
		);
93
	}
94
95
	/**
96
	 * @since 0.4
97
	 * @return RevisionsGetter
98 1
	 */
99
	public function newRevisionsGetter() {
100
		return new RevisionsGetter(
101
			$this->api,
102 1
			$this->newDataModelDeserializerFactory()->newEntityDeserializer()
103 1
		);
104
	}
105
106
	/**
107
	 * @since 0.2
108
	 * @return ValueParser
109 2
	 */
110 2
	public function newValueParser() {
111 1
		return new ValueParser(
112 1
			$this->api,
113 1
			$this->dataValueDeserializer
114
		);
115
	}
116
117
	/**
118
	 * @since 0.2
119
	 * @return ValueFormatter
120 1
	 */
121 1
	public function newValueFormatter() {
122 1
		return new ValueFormatter(
123 1
			$this->api,
124 1
			$this->dataValueDeserializer
125
		);
126
	}
127
128
	/**
129
	 * @since 0.2
130
	 * @return ItemMerger
131 1
	 */
132 1
	public function newItemMerger() {
133
		return new ItemMerger( $this->newWikibaseApi() );
134
	}
135
136
	/**
137
	 * @since 0.2
138
	 * @return AliasGroupSetter
139 1
	 */
140 1
	public function newAliasGroupSetter() {
141
		return new AliasGroupSetter( $this->newWikibaseApi() );
142
	}
143
144
	/**
145
	 * @since 0.2
146
	 * @return DescriptionSetter
147 1
	 */
148 1
	public function newDescriptionSetter() {
149 1
		return new DescriptionSetter( $this->newWikibaseApi() );
150
	}
151
152
	/**
153
	 * @since 0.2
154
	 * @return LabelSetter
155 1
	 */
156 1
	public function newLabelSetter() {
157
		return new LabelSetter( $this->newWikibaseApi() );
158
	}
159
160
	/**
161
	 * @since 0.2
162
	 * @return ReferenceRemover
163 1
	 */
164 1
	public function newReferenceRemover() {
165
		return new ReferenceRemover( $this->newWikibaseApi() );
166
	}
167
168
	/**
169
	 * @since 0.2
170
	 * @return ReferenceSetter
171 1
	 */
172 1
	public function newReferenceSetter() {
173 1
		return new ReferenceSetter(
174 1
			$this->newWikibaseApi(),
175 1
			$this->newDataModelSerializerFactory()->newReferenceSerializer()
176
		);
177
	}
178
179
	/**
180
	 * @since 0.2
181
	 * @return SiteLinkLinker
182 1
	 */
183 1
	public function newSiteLinkLinker() {
184
		return new SiteLinkLinker( $this->newWikibaseApi() );
185
	}
186
187
	/**
188
	 * @since 0.2
189
	 * @return SiteLinkSetter
190 1
	 */
191 1
	public function newSiteLinkSetter() {
192
		return new SiteLinkSetter( $this->newWikibaseApi() );
193
	}
194
195
	/**
196
	 * @since 0.5
197
	 * @return BadgeIdsGetter
198
	 */
199
	public function newBadgeIdsGetter() {
200
		return new BadgeIdsGetter( $this->api );
201
	}
202
203
	/**
204
	 * @since 0.5
205
	 * @return RedirectCreator
206
	 */
207
	public function newRedirectCreator() {
208
		return new RedirectCreator( $this->newWikibaseApi() );
209
	}
210 3
211 3
	private function newDataModelDeserializerFactory() {
212 3
		return new DeserializerFactory(
213 3
			$this->dataValueDeserializer,
214 3
			new BasicEntityIdParser()
215
		);
216
	}
217 3
218 3
	private function newDataModelSerializerFactory() {
219
		return new SerializerFactory( $this->dataValueSerializer );
220
	}
221
222
	/**
223
	 * @since 0.5
224
	 * @return StatementGetter
225 1
	 */
226 1
	public function newStatementGetter() {
227 1
		return new StatementGetter(
228 1
			$this->api,
229 1
			$this->newDataModelDeserializerFactory()->newStatementDeserializer()
230
		);
231
	}
232
233
	/**
234
	 * @since 0.5
235
	 * @return StatementSetter
236 1
	 */
237 1
	public function newStatementSetter() {
238 1
		return new StatementSetter(
239 1
			$this->newWikibaseApi(),
240 1
			$this->newDataModelSerializerFactory()->newStatementSerializer()
241
		);
242
	}
243
244
	/**
245
	 * @since 0.5
246
	 * @return StatementCreator
247 1
	 */
248 1
	public function newStatementCreator() {
249 1
		return new StatementCreator(
250 1
			$this->newWikibaseApi(),
251 1
			$this->dataValueSerializer
252
		);
253
	}
254
255
	/**
256
	 * @since 0.5
257
	 * @return StatementRemover
258 1
	 */
259 1
	public function newStatementRemover() {
260
		return new StatementRemover( $this->newWikibaseApi() );
261
	}
262
263
	/**
264
	 * @return WikibaseApi
265 12
	 */
266 12
	private function newWikibaseApi() {
267
		return new WikibaseApi( $this->api );
268
	}
269
270
	/**
271
	 * @since 0.7
272
	 * @return EntityLookup
273
	 */
274
	public function newEntityLookup() {
275
		return new EntityApiLookup( $this->newRevisionGetter() );
276
	}
277
278
	/**
279
	 * @since 0.7
280
	 * @return ItemLookup
281
	 */
282
	public function newItemLookup() {
283
		return new ItemApiLookup( $this->newEntityLookup() );
284
	}
285
286
	/**
287
	 * @since 0.7
288
	 * @return PropertyLookup
289
	 */
290
	public function newPropertyLookup() {
291
		return new PropertyApiLookup( $this->newEntityLookup() );
292
	}
293
294
	/**
295
	 * @since 0.7
296
	 * @return TermLookup
297
	 */
298
	public function newTermLookup() {
299
		return new TermApiLookup( $this->newEntityLookup() );
300
	}
301
302
	/**
303
	 * @since 0.7
304
	 * @return EntityDocumentSaver
305
	 */
306
	public function newEntityDocumentSaver() {
307
		return new EntityDocumentSaver( $this->newRevisionSaver() );
308
	}
309
310
}
311