Completed
Push — master ( 1f90e4...0f8170 )
by Jean-Christophe
02:14
created

ModelParser   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 52
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
wmc 8
lcom 1
cbo 2
dl 0
loc 52
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A parse() 0 20 4
A __toString() 0 19 4
1
<?php
2
3
namespace micro\orm;
4
5
use micro\utils\JArray;
6
7
class ModelParser {
8
	protected $global;
9
	protected $primaryKeys;
10
	protected $manytoOneMembers;
11
	protected $oneToManyMembers;
12
	protected $manyToManyMembers;
13
	protected $joinColumnMembers;
14
	protected $nullableMembers;
15
	protected $notSerializableMembers=[];
16
	protected $fieldNames;
17
18
	public function parse($modelClass){
19
		$instance=new $modelClass();
20
		$this->primaryKeys=Reflexion::getKeyFields($instance);
21
		$this->oneToManyMembers=Reflexion::getMembersAnnotationWithAnnotation($modelClass, "@oneToMany");
22
		$this->manytoOneMembers=Reflexion::getMembersNameWithAnnotation($modelClass, "@manyToOne");
23
		$this->manyToManyMembers=Reflexion::getMembersAnnotationWithAnnotation($modelClass, "@manyToMany");
24
		$this->joinColumnMembers=Reflexion::getMembersAnnotationWithAnnotation($modelClass, "@joinColumn");
25
		$properties=Reflexion::getProperties($instance);
26
		foreach ($properties as $property){
27
			$propName=$property->getName();
28
			$this->fieldNames[$propName]=Reflexion::getFieldName($modelClass, $propName);
29
			$nullable=Reflexion::isNullable($modelClass, $propName);
30
			$serializable=Reflexion::isSerializable($modelClass, $propName);
31
			if($nullable)
32
				$this->nullableMembers[]=$propName;
33
			if(!$serializable)
34
				$this->notSerializableMembers[]=$propName;
35
		}
36
		$this->global["#tableName"]=Reflexion::getTableName($modelClass);
37
	}
38
39
	public function __toString(){
40
		$result=$this->global;
41
		$result["#primaryKeys"]=$this->primaryKeys;
42
		$result["#manyToOne"]=$this->manytoOneMembers;
43
		$result["#fieldNames"]=$this->fieldNames;
44
		$result["#nullable"]=$this->nullableMembers;
45
		$result["#notSerializable"]=$this->notSerializableMembers;
46
		foreach ($this->oneToManyMembers as $member=>$annotation){
47
			$result["#oneToMany"][$member]=$annotation->getPropertiesAndValues();
48
		}
49
		foreach ($this->manyToManyMembers as $member=>$annotation){
50
			$result["#manyToMany"][$member]=$annotation->getPropertiesAndValues();
51
		}
52
		foreach ($this->joinColumnMembers as $member=>$annotation){
53
			$result["#joinColumn"][$member]=$annotation->getPropertiesAndValues();
54
			$result["#invertedJoinColumn"][$annotation->name]=["member"=>$member,"className"=>$annotation->className];
55
		}
56
		return "return ".JArray::asPhpArray($result,"array").";";
57
	}
58
}