Completed
Push — master ( c9073d...17137d )
by Thomas
17:02
created

ModelResponseTraitGenerator::generate()   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 1
1
<?php
2
namespace keeko\tools\generator\response\base;
3
4
use gossi\codegen\model\AbstractPhpStruct;
5
use gossi\codegen\model\PhpMethod;
6
use gossi\codegen\model\PhpParameter;
7
use gossi\codegen\model\PhpTrait;
8
use keeko\core\schema\ActionSchema;
9
use keeko\tools\generator\AbstractResponseGenerator;
10
use keeko\tools\utils\NameUtils;
11
12
class ModelResponseTraitGenerator extends AbstractResponseGenerator {
13
14
	/**
15
	 * Generates a json response class for the given action
16
	 *
17
	 * @param ActionSchema $action
18
	 * @return PhpTrait
19
	 */
20
	public function generate(ActionSchema $action) {
21
		return $this->doGenerate($action, 'json');
22
	}
23
	
24
	/**
25
	 * Generates the struct
26
	 *
27
	 * @param ActionSchema $action
28
	 * @param string $format
29
	 * @return PhpTrat
30
	 */
31
	protected function generateStruct(ActionSchema $action, $format) {
32
		$modelName = $this->modelService->getModelNameByAction($action);
33
		$model = $this->modelService->getModel($modelName);
34
35
		$namespace = $this->modelService->getDatabase()->getNamespace();
36
		$nsModelName = $namespace . '\\' . $model->getPhpName();
37
38
		$response = $action->getResponse($format);
39
		$name = str_replace('action', 'response', $response);
40
		$ns = dirname(str_replace('\\', '/', $name));
41
		$name = str_replace('/', '\\', $ns) . '\\' . $model->getPhpName() . 'ResponseTrait';
42
		
43
		return PhpTrait::create($name)
44
			->setDescription('Automatically generated common response methods for ' . $modelName)
45
			->addUseStatement($nsModelName);
46
	}
47
	
48
	protected function ensureUseStatements(AbstractPhpStruct $struct) {
49
		$struct->addUseStatement('keeko\\core\\utils\\FilterUtils');
50
		$struct->addUseStatement('Propel\\Runtime\\Map\\TableMap');
51
	}
52
	
53
	protected function addMethods(PhpTrait $trait, ActionSchema $action) {
54
		$modelName = $this->modelService->getModelNameByAction($action);
55
		$model = $this->modelService->getModel($modelName);
56
		$modelVariableName = NameUtils::toCamelCase($modelName);
57
		$modelObjectName = $model->getPhpName();
58
		$codegen = $this->codegenService->getCodegen();
59
60
		// method: filter(array ${{model}})
61
		$trait->setMethod(PhpMethod::create('filter')
62
			->setDescription('Automatically generated method, will be overridden')
63
			->addParameter(PhpParameter::create($modelVariableName)->setType('array'))
64
			->setVisibility('protected')
65
			->setBody($this->twig->render('filter.twig', [
66
				'model' => $modelVariableName,
67
				'filter' => $this->codegenService->arrayToCode($codegen->getReadFilter($modelName))
68
			]))
69
		);
70
	
71
		// method: {{model}}toArray({{Model}} ${{model}})
72
		$trait->setMethod(PhpMethod::create($modelVariableName . 'ToArray')
73
			->setDescription('Automatically generated method, will be overridden')
74
			->addParameter(PhpParameter::create($modelVariableName)->setType($modelObjectName))
75
			->setVisibility('protected')
76
			->setBody($this->twig->render('modelToArray.twig', ['model' => $modelVariableName]))
77
		);
78
	}
79
	
80
}
81