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

ReadOnlyDomainTraitGenerator::getClassName()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 3
nc 1
nop 1
1
<?php
2
namespace keeko\tools\generator\domain;
3
4
use Propel\Generator\Model\Table;
5
use gossi\codegen\model\PhpTrait;
6
use gossi\codegen\model\PhpMethod;
7
use gossi\codegen\model\PhpParameter;
8
use keeko\framework\utils\NameUtils;
9
10
class ReadOnlyDomainTraitGenerator extends AbstractDomainGenerator {
11
	
12
	public function generate(Table $model) {
13
		$trait = $this->generateTrait($model);
14
		
15
		$this->generateRead($trait, $model);
16
		$this->generatePaginate($trait, $model);
17
		
18
		return $trait;
19
	}
20
	
21
	protected function generateTrait(Table $model) {
22
		$trait = PhpTrait::create()
23
			->setNamespace(str_replace('model', 'domain\\base', $model->getNamespace()))
24
			->setName($model->getPhpName() . 'DomainTrait')
25
			->addUseStatement($model->getNamespace() . '\\' . $model->getPhpName())
26
			->addUseStatement($model->getNamespace() . '\\' . $model->getPhpName() . 'Query')
27
			->addUseStatement('keeko\\framework\\service\\ServiceContainer')
28
			->setMethod(PhpMethod::create('getServiceContainer')
29
				->setVisibility(PhpMethod::VISIBILITY_PROTECTED)
30
				->setAbstract(true)
31
				->setType('ServiceContainer')
32
				->setDescription('Returns the service container')
33
			)
34
		;
35
36
		return $trait;
37
	}
38
	
39
	protected function generateRead(PhpTrait $trait, Table $model) {
40
		$trait->addUseStatement('keeko\\framework\\domain\\payload\\Found');
41
		$trait->addUseStatement('keeko\\framework\\domain\\payload\\NotFound');
42
		
43
		$trait->setMethod(PhpMethod::create('read')
44
			->addParameter(PhpParameter::create('id'))
45
			->setBody($this->twig->render('read.twig', [
46
				'model' => NameUtils::toCamelCase($model->getOriginCommonName()),
47
				'class' => $model->getPhpName()
48
			]))
49
			->setDescription('Returns one ' . $model->getPhpName() . ' with the given id')
50
		);
51
	}
52
	
53
	protected function generatePaginate(PhpTrait $trait, Table $model) {
54
		$trait->addUseStatement('keeko\\framework\\domain\\payload\\Found');
55
		$trait->addUseStatement('Tobscure\\JsonApi\\Parameters');
56
		$trait->addUseStatement('keeko\\framework\\utils\\NameUtils');
57
		
58
		$trait->setMethod(PhpMethod::create('paginate')
59
			->addParameter(PhpParameter::create('params')
60
				->setType('Parameters')
61
			)
62
			->setBody($this->twig->render('paginate.twig', [
63
				'model' => NameUtils::toCamelCase($model->getOriginCommonName()),
64
				'class' => $model->getPhpName()
65
			]))
66
			->setDescription('Returns a paginated result')
67
		);
68
		
69
		$trait->setMethod(PhpMethod::create('applyFilter')
70
			->addParameter(PhpParameter::create('query')
71
				->setType($model->getPhpName() . 'Query')
72
			)
73
			->setVisibility(PhpMethod::VISIBILITY_PROTECTED)
74
			->setAbstract(true)
75
			->setDescription('Implement this functionality at ' . $this->getClassName($model))
76
		);
77
	}
78
	
79
	protected function getClassName(Table $model) {
80
		return str_replace('model', 'domain', $model->getNamespace()) .
81
			'\\' . $model->getPhpName() . 'Domain';
82
	}
83
}
84