Passed
Push — feature/issue-170 ( 2776fe )
by Mikaël
49:22
created

StructEnum::getEnumValueIsValidAnnotationBlock()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 0
dl 0
loc 7
ccs 6
cts 6
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace WsdlToPhp\PackageGenerator\File;
4
5
use WsdlToPhp\PackageGenerator\Model\AbstractModel;
6
use WsdlToPhp\PackageGenerator\Model\Struct as StructModel;
7
use WsdlToPhp\PackageGenerator\Model\StructValue as StructValueModel;
8
use WsdlToPhp\PackageGenerator\Container\PhpElement\Constant as ConstantContainer;
9
use WsdlToPhp\PhpGenerator\Element\PhpConstant;
10
use WsdlToPhp\PhpGenerator\Element\PhpMethod;
11
use WsdlToPhp\PhpGenerator\Element\PhpAnnotation;
12
use WsdlToPhp\PhpGenerator\Element\PhpAnnotationBlock;
13
14
class StructEnum extends Struct
15
{
16
    /**
17
     * @var string
18
     */
19
    const METHOD_VALUE_IS_VALID = 'valueIsValid';
20
    /**
21
     * @var string
22
     */
23
    const METHOD_GET_VALID_VALUES = 'getValidValues';
24
    /**
25
     * @param ConstantContainer $constants
26
     */
27
    protected function getClassConstants(ConstantContainer $constants)
28
    {
29
        foreach ($this->getModel()->getValues() as $value) {
30
            $constants->add(new PhpConstant($value->getCleanName(), $value->getValue()));
31
        }
32
    }
33
    /**
34
     * @param PhpConstant $constant
35
     * @return PhpAnnotationBlock
36
     */
37
    protected function getConstantAnnotationBlock(PhpConstant $constant)
38
    {
39
        $block = new PhpAnnotationBlock([
40
            sprintf('Constant for value \'%s\'', $constant->getValue()),
41
        ]);
42
        if (($value = $this->getModel()->getValue($constant->getValue())) instanceof StructValueModel) {
43
            $this->defineModelAnnotationsFromWsdl($block, $value);
44
        }
45
        $block->addChild(new PhpAnnotation(self::ANNOTATION_RETURN, sprintf('string \'%s\'', $constant->getValue())));
46
        return $block;
47
    }
48
    protected function fillClassMethods()
49
    {
50
        $this->methods->add($this->getEnumMethodGetValidValues());
51
    }
52
    /**
53
     * @param PhpMethod $method
54
     * @return PhpAnnotationBlock|null
55
     */
56
    protected function getMethodAnnotationBlock(PhpMethod $method)
57
    {
58
        $block = null;
59
        switch ($method->getName()) {
60
            case self::METHOD_GET_VALID_VALUES:
61
                $block = $this->getEnumGetValidValuesAnnotationBlock();
62
                break;
63
        }
64
        return $block;
65
    }
66
    /**
67
     * @return PhpMethod
68
     */
69
    protected function getEnumMethodGetValidValues()
70
    {
71
        $method = new PhpMethod(self::METHOD_GET_VALID_VALUES, [], PhpMethod::ACCESS_PUBLIC, false, true);
72
        $validValues = $this->getEnumMethodValues();
73
        $method->addChild('return array(');
74
        foreach ($validValues as $validValue) {
75
            $method->addChild(sprintf('%s,', $method->getIndentedString($validValue, 1)));
76
        }
77
        $method->addChild(');');
78
        return $method;
79
    }
80
    /**
81
     * @return string[]
82
     */
83
    protected function getEnumMethodValues()
84
    {
85
        $values = [];
86
        foreach ($this->getModel()->getValues() as $value) {
87
            $values[] = sprintf('self::%s', $value->getCleanName());
88
        }
89
        return $values;
90
    }
91
    /**
92
     * @return PhpAnnotationBlock
93
     */
94
    protected function getEnumGetValidValuesAnnotationBlock()
95
    {
96
        $annotationBlock = new PhpAnnotationBlock([
97
            'Return allowed values',
98
        ]);
99
        foreach ($this->getEnumMethodValues() as $value) {
100
            $annotationBlock->addChild(new PhpAnnotation(self::ANNOTATION_USES, $value));
101
        }
102
        $annotationBlock->addChild(new PhpAnnotation(self::ANNOTATION_RETURN, 'string[]'));
103
        return $annotationBlock;
104
    }
105
    /**
106
     * @see \WsdlToPhp\PackageGenerator\File\AbstractModelFile::setModel()
107
     * @throws \InvalidArgumentException
108
     * @param AbstractModel $model
109
     * @return StructArray
110
     */
111
    public function setModel(AbstractModel $model)
112
    {
113
        if ($model instanceof StructModel && !$model->isRestriction()) {
114
            throw new \InvalidArgumentException('Model must be a restriction containing values', __LINE__);
115
        }
116
        return parent::setModel($model);
117
    }
118
}
119