Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
FormIdDeserializer
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
2 / 2
4
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 deserialize
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
3
1<?php
2
3namespace Wikibase\Lexeme\Presentation\ChangeOp\Deserialization;
4
5use Wikibase\DataModel\Entity\EntityIdParser;
6use Wikibase\DataModel\Entity\EntityIdParsingException;
7use Wikibase\Lexeme\Domain\Model\Form;
8use Wikibase\Lexeme\Domain\Model\FormId;
9use Wikibase\Lexeme\MediaWiki\Api\Error\ParameterIsNotFormId;
10
11/**
12 * A throwing ValidationContext guards us from actual null return values,
13 * w/o it the result is too fuzzy to regard it clean
14 *
15 * @license GPL-2.0-or-later
16 */
17class FormIdDeserializer {
18
19    /**
20     * @var EntityIdParser
21     */
22    private $entityIdParser;
23
24    public function __construct( EntityIdParser $idParser ) {
25        $this->entityIdParser = $idParser;
26    }
27
28    /**
29     * @param string $id
30     * @param ValidationContext $validationContext
31     * @return FormId|null
32     */
33    public function deserialize( $id, ValidationContext $validationContext ) {
34        try {
35            $formId = $this->entityIdParser->parse( $id );
36        } catch ( EntityIdParsingException $e ) {
37            $validationContext->addViolation( new ParameterIsNotFormId( $id ) );
38            return null;
39        }
40
41        if ( $formId->getEntityType() !== Form::ENTITY_TYPE ) {
42            $validationContext->addViolation( new ParameterIsNotFormId( $id ) );
43            return null;
44        }
45
46        /** @var FormId $formId */
47        '@phan-var FormId $formId';
48        return $formId;
49    }
50
51}