Passed
Push — master ( ab6b67...a48167 )
by Mikaël
74:03 queued 50:14
created

StructEnum::getEnumMethodValueIsValid()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 5
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 126
    protected function getClassConstants(ConstantContainer $constants)
28
    {
29 126
        foreach ($this->getModel()->getValues() as $value) {
30 126
            $constants->add(new PhpConstant($value->getCleanName(), $value->getValue()));
31 63
        }
32 126
    }
33
    /**
34
     * @param PhpConstant $constant
35
     * @return PhpAnnotationBlock
36
     */
37 126
    protected function getConstantAnnotationBlock(PhpConstant $constant)
38
    {
39 126
        $block = new PhpAnnotationBlock([
40 126
            sprintf('Constant for value \'%s\'', $constant->getValue()),
41 63
        ]);
42 126
        if (($value = $this->getModel()->getValue($constant->getValue())) instanceof StructValueModel) {
43 126
            $this->defineModelAnnotationsFromWsdl($block, $value);
44 63
        }
45 126
        $block->addChild(new PhpAnnotation(self::ANNOTATION_RETURN, sprintf('string \'%s\'', $constant->getValue())));
46 126
        return $block;
47
    }
48 126
    protected function fillClassMethods()
49
    {
50 126
        $this->methods->add($this->getEnumMethodGetValidValues());
51 126
    }
52
    /**
53
     * @param PhpMethod $method
54
     * @return PhpAnnotationBlock|null
55
     */
56 126
    protected function getMethodAnnotationBlock(PhpMethod $method)
57
    {
58 126
        $block = null;
59 126
        switch ($method->getName()) {
60 126
            case self::METHOD_GET_VALID_VALUES:
61 126
                $block = $this->getEnumGetValidValuesAnnotationBlock();
62 126
                break;
63 63
        }
64 126
        return $block;
65
    }
66
    /**
67
     * @return PhpMethod
68
     */
69 126
    protected function getEnumMethodGetValidValues()
70
    {
71 126
        $method = new PhpMethod(self::METHOD_GET_VALID_VALUES, [], PhpMethod::ACCESS_PUBLIC, false, true);
72 126
        $validValues = $this->getEnumMethodValues();
73 126
        $method->addChild('return array(');
74 126
        foreach ($validValues as $validValue) {
75 126
            $method->addChild(sprintf('%s,', $method->getIndentedString($validValue, 1)));
76 63
        }
77 126
        $method->addChild(');');
78 126
        return $method;
79
    }
80
    /**
81
     * @return string[]
82
     */
83 126
    protected function getEnumMethodValues()
84
    {
85 126
        $values = [];
86 126
        foreach ($this->getModel()->getValues() as $value) {
87 126
            $values[] = sprintf('self::%s', $value->getCleanName());
88 63
        }
89 126
        return $values;
90
    }
91
    /**
92
     * @return PhpAnnotationBlock
93
     */
94 126
    protected function getEnumGetValidValuesAnnotationBlock()
95
    {
96 126
        $annotationBlock = new PhpAnnotationBlock([
97 126
            'Return allowed values',
98 63
        ]);
99 126
        foreach ($this->getEnumMethodValues() as $value) {
100 126
            $annotationBlock->addChild(new PhpAnnotation(self::ANNOTATION_USES, $value));
101 63
        }
102 126
        $annotationBlock->addChild(new PhpAnnotation(self::ANNOTATION_RETURN, 'string[]'));
103 126
        return $annotationBlock;
104
    }
105
    /**
106
     * @see \WsdlToPhp\PackageGenerator\File\AbstractModelFile::setModel()
107
     * @throws \InvalidArgumentException
108
     * @param AbstractModel $model
109
     * @return StructArray
110
     */
111 138
    public function setModel(AbstractModel $model)
112
    {
113 138
        if ($model instanceof StructModel && !$model->isRestriction()) {
114 6
            throw new \InvalidArgumentException('Model must be a restriction containing values', __LINE__);
115
        }
116 132
        return parent::setModel($model);
117
    }
118
}
119