Completed
Push — master ( f1c264...f58245 )
by Thomas
04:22
created

ModelDomainGenerator   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 41
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 6
c 1
b 0
f 0
lcom 1
cbo 5
dl 0
loc 41
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A generate() 0 11 1
A getClassName() 0 4 1
A ensureModelUseStatements() 0 3 1
A generateApplyFilter() 0 11 2
A ensureDomainTrait() 0 5 1
1
<?php
2
namespace keeko\tools\generator\domain;
3
4
use gossi\codegen\model\PhpClass;
5
use gossi\codegen\model\PhpMethod;
6
use gossi\codegen\model\PhpParameter;
7
use Propel\Generator\Model\Table;
8
9
class ModelDomainGenerator extends AbstractDomainGenerator {
10
	
11
	public function generate(Table $model) {
12
		$class = $this->generateClass($this->getClassName($model));
13
		$class = $this->loadClass($class);
14
		$this->ensureBasicSetup($class);
15
		
16
		$this->ensureModelUseStatements($class, $model);
17
		$this->generateApplyFilter($class, $model);
18
		$this->ensureDomainTrait($class, $model);
19
		
20
		return $class;
21
	}
22
	
23
	protected function getClassName(Table $model) {
24
		return str_replace('model', 'domain', $model->getNamespace()) . 
25
			'\\' . $model->getPhpName() . 'Domain';
26
	}
27
	
28
	protected function ensureModelUseStatements(PhpClass $class, Table $model) {
29
		$class->addUseStatement($model->getNamespace() . '\\' . $model->getPhpName() . 'Query');
30
	}
31
	
32
	protected function generateApplyFilter(PhpClass $class, Table $model) {
33
		if (!$class->hasMethod('applyFilter')) {
34
			$class->setMethod(PhpMethod::create('applyFilter')
35
				->addParameter(PhpParameter::create('query')
36
					->setType($model->getPhpName() . 'Query')
37
				)
38
				->addParameter(PhpParameter::create('filter'))
39
				->setVisibility(PhpMethod::VISIBILITY_PROTECTED)
40
			);
41
		}
42
	}
43
	
44
	protected function ensureDomainTrait(PhpClass $class, Table $model) {
45
		$class->addUseStatement(str_replace('model', 'domain\\base', $model->getNamespace()) . 
46
			'\\' . $model->getPhpName() . 'DomainTrait');
47
		$class->addTrait($model->getPhpName() . 'DomainTrait');
48
	}
49
}