Completed
Push — master ( 56265b...886536 )
by Thomas
09:04
created

DomainGenerator::ensureUseStatements()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 3
rs 10
cc 1
eloc 2
nc 1
nop 2
1
<?php
2
namespace keeko\tools\generator\domain;
3
4
use keeko\tools\generator\domain\AbstractDomainGenerator;
5
use Propel\Generator\Model\Table;
6
use gossi\codegen\model\PhpClass;
7
use phootwork\file\File;
8
use gossi\codegen\model\PhpMethod;
9
use gossi\codegen\model\PhpParameter;
10
11
class DomainGenerator extends AbstractDomainGenerator {
12
	
13
	public function generate(Table $model) {
14
		$class = $this->generateClass($model);
15
		$file = new File($this->codegenService->getFilename($class));
16
		
17
		// load from file, if exists
18
		if ($file->exists()) {
19
			$class = PhpClass::fromFile($file->getPathname());
20
		}
21
		
22
		$this->ensureUseStatements($class, $model);
23
		$this->generateApplyFilter($class, $model);
24
		$this->ensureDomainTrait($class, $model);
25
		
26
		return $class;
27
	}
28
	
29
	protected function generateClass(Table $model) {
30
		return PhpClass::create($this->getClassName($model))
31
			->setParentClassName('AbstractDomain')
32
			->addUseStatement('keeko\\framework\\foundation\\AbstractDomain')
33
		;
34
	}
35
	
36
	protected function getClassName(Table $model) {
37
		return str_replace('model', 'domain', $model->getNamespace()) . 
38
			'\\' . $model->getPhpName() . 'Domain';
39
	}
40
	
41
	protected function ensureUseStatements(PhpClass $class, Table $model) {
42
		$class->addUseStatement($model->getNamespace() . '\\' . $model->getPhpName() . 'Query');
43
	}
44
	
45
	protected function generateApplyFilter(PhpClass $class, Table $model) {
46
		if (!$class->hasMethod('applyFilter')) {
47
			$class->setMethod(PhpMethod::create('applyFilter')
48
				->addParameter(PhpParameter::create('query')
49
					->setType($model->getPhpName() . 'Query')
50
				)
51
				->setVisibility(PhpMethod::VISIBILITY_PROTECTED)
52
			);
53
		}
54
	}
55
	
56
	protected function ensureDomainTrait(PhpClass $class, Table $model) {
57
		$class->addUseStatement(str_replace('model', 'domain\\base', $model->getNamespace()) . 
58
			'\\' . $model->getPhpName() . 'DomainTrait');
59
		$class->addTrait($model->getPhpName() . 'DomainTrait');
60
	}
61
}