Completed
Push — master ( 7880aa...3f359c )
by Thomas
05:14
created

WikibaseValueParserFactory   B

Complexity

Total Complexity 3

Size/Duplication

Total Lines 72
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 16

Test Coverage

Coverage 22.22%

Importance

Changes 5
Bugs 0 Features 3
Metric Value
wmc 3
c 5
b 0
f 3
lcom 1
cbo 16
dl 0
loc 72
ccs 6
cts 27
cp 0.2222
rs 8.4614

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A newWikibaseValueParser() 0 20 1
A newWikibaseEntityParser() 0 11 1
1
<?php
2
3
namespace PPP\Wikidata\ValueParsers;
4
5
use DataValues\Geo\Parsers\GlobeCoordinateParser;
6
use ValueParsers\DispatchingValueParser;
7
use ValueParsers\EraParser;
8
use ValueParsers\IsoTimestampParser;
9
use ValueParsers\MonolingualMonthNameProvider;
10
use ValueParsers\MonthNameUnlocalizer;
11
use ValueParsers\ParserOptions;
12
use ValueParsers\PhpDateTimeParser;
13
use ValueParsers\QuantityParser;
14
use ValueParsers\ValueParser;
15
use ValueParsers\YearMonthDayTimeParser;
16
use ValueParsers\YearMonthTimeParser;
17
use ValueParsers\YearTimeParser;
18
use Wikibase\EntityStore\EntityStore;
19
20
/**
21
 * Build a parser for Wikibase value
22
 *
23
 * @licence GPLv2+
24
 * @author Thomas Pellissier Tanon
25
 */
26
class WikibaseValueParserFactory {
27
28
	private static $MONTH_NAMES = array(
29
		1 => 'January',
30
		2 => 'February',
31
		3 => 'March',
32
		4 => 'April',
33
		5 => 'May',
34
		6 => 'June',
35
		7 => 'July',
36
		8 => 'August',
37
		9 => 'September',
38
		10 => 'October',
39
		11 => 'November',
40
		12 => 'December'
41
	);
42
43
	/**
44
	 * @var string language code
45
	 */
46
	private $languageCode;
47
48
	/**
49
	 * @var EntityStore
50
	 */
51
	private $entityStore;
52
53
	/**
54
	 * @param $languageCode
55
	 * @param EntityStore $entityStore
56
	 */
57 8
	public function __construct($languageCode, EntityStore $entityStore) {
58 8
		$this->languageCode = $languageCode;
59 8
		$this->entityStore = $entityStore;
60
	}
61
62
	/**
63
	 * @return WikibaseValueParser
64
	 */
65 8
	public function newWikibaseValueParser() {
66
		return new WikibaseValueParser(array(
67
			'commonsMedia' => new StringParser(),
68
			'external-id' => new StringParser(),
69
			'globe-coordinate' => new GlobeCoordinateParser(),
70
			'quantity' => new QuantityParser(),
71
			'monolingualtext' => new MonolingualTextParser(),
72
			'string' => new StringParser(),
73
			'time' => new DispatchingValueParser(array(
74
				new IsoTimestampParser(),
75
				new YearMonthDayTimeParser(),
76
				new YearMonthTimeParser(new MonolingualMonthNameProvider(self::$MONTH_NAMES)), //TODO: localisation
77
				new YearTimeParser(),
78
				new PhpDateTimeParser(new MonthNameUnlocalizer(array()), new EraParser(), new IsoTimestampParser())
79
			), 'time'),
80
			'url' => new StringParser(),
81 8
			'wikibase-item' => $this->newWikibaseEntityParser('item'),
82 8
			'wikibase-property' => $this->newWikibaseEntityParser('property')
83
		));
84
	}
85
86
	private function newWikibaseEntityParser($type) {
87
		$parserOptions = new ParserOptions(array(
88
			ValueParser::OPT_LANG => $this->languageCode,
89
			WikibaseEntityIdParser::OPT_ENTITY_TYPE => $type
90
		));
91
92
		return new WikibaseEntityIdParser(
93
			$this->entityStore,
94
			$parserOptions
95
		);
96
	}
97
}
98