Completed
Push — master ( 55b21a...aec22b )
by Thomas
06:20
created

BuilderFactory   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 69
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 8

Test Coverage

Coverage 96.55%

Importance

Changes 0
Metric Value
wmc 10
c 0
b 0
f 0
lcom 1
cbo 8
dl 0
loc 69
ccs 28
cts 29
cp 0.9655
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 11 1
D getBuilder() 0 35 9
1
<?php
2
namespace gossi\codegen\generator;
3
4
use gossi\codegen\generator\builder\AbstractBuilder;
5
use gossi\codegen\generator\builder\ClassBuilder;
6
use gossi\codegen\generator\builder\ConstantBuilder;
7
use gossi\codegen\generator\builder\FunctionBuilder;
8
use gossi\codegen\generator\builder\InterfaceBuilder;
9
use gossi\codegen\generator\builder\MethodBuilder;
10
use gossi\codegen\generator\builder\ParameterBuilder;
11
use gossi\codegen\generator\builder\PropertyBuilder;
12
use gossi\codegen\generator\builder\TraitBuilder;
13
use gossi\codegen\model\AbstractModel;
14
use gossi\codegen\model\PhpClass;
15
use gossi\codegen\model\PhpConstant;
16
use gossi\codegen\model\PhpFunction;
17
use gossi\codegen\model\PhpInterface;
18
use gossi\codegen\model\PhpMethod;
19
use gossi\codegen\model\PhpParameter;
20
use gossi\codegen\model\PhpProperty;
21
use gossi\codegen\model\PhpTrait;
22
23
class BuilderFactory {
24
25
	/** @var ModelGenerator */
26
	private $generator;
27
	
28
	private $classBuilder;
29
	private $constantBuilder;
30
	private $functionBuilder;
31
	private $interfaceBuilder;
32
	private $methodBuilder;
33
	private $parameterBuilder;
34
	private $propertyBuilder;
35
	private $traitBuilder;
36
	
37 39
	public function __construct(ModelGenerator $generator) {
38 39
		$this->generator = $generator;
39 39
		$this->classBuilder = new ClassBuilder($generator);
40 39
		$this->constantBuilder = new ConstantBuilder($generator);
41 39
		$this->functionBuilder = new FunctionBuilder($generator);
42 39
		$this->interfaceBuilder = new InterfaceBuilder($generator);
43 39
		$this->methodBuilder = new MethodBuilder($generator);
44 39
		$this->parameterBuilder = new ParameterBuilder($generator);
45 39
		$this->propertyBuilder = new PropertyBuilder($generator);
46 39
		$this->traitBuilder = new TraitBuilder($generator);
47 39
	}
48
	
49
	/**
50
	 * Returns the related builder for the given model
51
	 * 
52
	 * @param AbstractModel $model
53
	 * @return AbstractBuilder
54
	 */
55 37
	public function getBuilder(AbstractModel $model) {
56 37
		if ($model instanceof PhpClass) {
57 11
			return $this->classBuilder;
58
		}
59
		
60 29
		if ($model instanceof PhpConstant) {
61 3
			return $this->constantBuilder;
62
		}
63
		
64 28
		if ($model instanceof PhpFunction) {
65 4
			return $this->functionBuilder;
66
		}
67
		
68 26
		if ($model instanceof PhpInterface) {
69 2
			return $this->interfaceBuilder;
70
		}
71
		
72 24
		if ($model instanceof PhpMethod) {
73 11
			return $this->methodBuilder;
74
		}
75
		
76 17
		if ($model instanceof PhpParameter) {
77 10
			return $this->parameterBuilder;
78
		}
79
		
80 9
		if ($model instanceof PhpProperty) {
81 8
			return $this->propertyBuilder;
82
		}
83
		
84 1
		if ($model instanceof PhpTrait) {
85 1
			return $this->traitBuilder;
86
		}
87
		
88
		return null;
89
	}
90
	
91
}
92