These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | use Net\Bazzline\Propel\Behavior\EntityInstantiator\Manager; |
||
4 | use Net\Bazzline\Propel\Behavior\EntityInstantiator\ObjectEntity; |
||
5 | use Net\Bazzline\Propel\Behavior\EntityInstantiator\QueryEntity; |
||
6 | |||
7 | //@todo do we need this if dependencies are managed via composer and composer autoloader? |
||
8 | $pathToClasses = __DIR__ . '/'; |
||
9 | |||
10 | require_once($pathToClasses . 'AbstractEntity.php'); |
||
11 | require_once($pathToClasses . 'Configuration.php'); |
||
12 | require_once($pathToClasses . 'EntityCollection.php'); |
||
13 | require_once($pathToClasses . 'FileContentGenerator.php'); |
||
14 | require_once($pathToClasses . 'Manager.php'); |
||
15 | require_once($pathToClasses . 'ObjectEntity.php'); |
||
16 | require_once($pathToClasses . 'QueryEntity.php'); |
||
17 | |||
18 | /** |
||
19 | * @author stev leibelt <[email protected]> |
||
20 | * @since 2015-08-02 |
||
21 | * @todo make parameters optional (only set them when they are set) - this would enable it to define everything in the database scope and the rest in the table scope without overwriting database scoped things |
||
22 | */ |
||
23 | class AddToEntityInstantiatorBehavior extends Behavior |
||
24 | { |
||
25 | const PARAMETER_ENTITY_INSTANTIATOR_ADD_IT_TO_ENTITY_INSTANTIATOR = 'entity_instantiator_add_to_entity_instantiator'; |
||
26 | const PARAMETER_ENTITY_INSTANTIATOR_DEFAULT_CONNECTION_MODE = 'entity_instantiator_default_connection_mode'; |
||
27 | const PARAMETER_ENTITY_INSTANTIATOR_DEFAULT_CONNECTION_NAME = 'entity_instantiator_default_connection_name'; |
||
28 | const PARAMETER_ENTITY_INSTANTIATOR_CLASS_NAME = 'entity_instantiator_class_name'; |
||
29 | const PARAMETER_ENTITY_INSTANTIATOR_EXTENDS = 'entity_instantiator_extends'; |
||
30 | const PARAMETER_ENTITY_INSTANTIATOR_INDENTION = 'entity_instantiator_indention'; |
||
31 | const PARAMETER_ENTITY_INSTANTIATOR_METHOD_NAME_PREFIX = 'entity_instantiator_method_name_prefix'; |
||
32 | const PARAMETER_ENTITY_INSTANTIATOR_NAMESPACE = 'entity_instantiator_namespace'; |
||
33 | const PARAMETER_ENTITY_INSTANTIATOR_PATH_TO_OUTPUT = 'entity_instantiator_path_to_output'; |
||
34 | const PARAMETER_ENTITY_INSTANTIATOR_USE_FULLY_QUALIFIED_NAME = 'entity_instantiator_use_fully_qualified_name'; |
||
35 | |||
36 | /** @var array */ |
||
37 | protected $parameters = [ |
||
38 | self::PARAMETER_ENTITY_INSTANTIATOR_ADD_IT_TO_ENTITY_INSTANTIATOR => 'true', |
||
39 | self::PARAMETER_ENTITY_INSTANTIATOR_DEFAULT_CONNECTION_MODE => null, |
||
40 | self::PARAMETER_ENTITY_INSTANTIATOR_DEFAULT_CONNECTION_NAME => null, |
||
41 | self::PARAMETER_ENTITY_INSTANTIATOR_CLASS_NAME => 'DatabaseEntityInstantiator', |
||
42 | self::PARAMETER_ENTITY_INSTANTIATOR_INDENTION => ' ', |
||
43 | self::PARAMETER_ENTITY_INSTANTIATOR_METHOD_NAME_PREFIX => null, |
||
44 | self::PARAMETER_ENTITY_INSTANTIATOR_NAMESPACE => null, |
||
45 | self::PARAMETER_ENTITY_INSTANTIATOR_PATH_TO_OUTPUT => 'data', |
||
46 | self::PARAMETER_ENTITY_INSTANTIATOR_USE_FULLY_QUALIFIED_NAME => 'false' |
||
47 | ]; |
||
48 | |||
49 | |||
50 | |||
51 | /** |
||
52 | * @param DataModelBuilder $builder |
||
53 | * @return string |
||
54 | * @throws InvalidArgumentException |
||
55 | */ |
||
56 | public function queryMethods($builder) |
||
57 | { |
||
58 | $this->addQueryToGenerator($builder); |
||
59 | |||
60 | return ''; |
||
61 | } |
||
62 | |||
63 | |||
64 | |||
65 | /** |
||
66 | * @param DataModelBuilder $builder |
||
67 | * @return string |
||
68 | * @throws InvalidArgumentException |
||
69 | */ |
||
70 | public function objectMethods($builder) |
||
71 | { |
||
72 | $this->addObjectToGenerator($builder); |
||
73 | |||
74 | return ''; |
||
75 | } |
||
76 | |||
77 | /** |
||
78 | * @param DataModelBuilder $builder |
||
79 | * @throws InvalidArgumentException |
||
80 | */ |
||
81 | View Code Duplication | public function addObjectToGenerator(DataModelBuilder $builder) |
|
0 ignored issues
–
show
|
|||
82 | { |
||
83 | if ($this->addIt()) { |
||
84 | $manager = $this->getManager(); |
||
85 | $entity = $this->buildEntityFromObject($builder); |
||
86 | $manager->add($entity); |
||
87 | } |
||
88 | } |
||
89 | |||
90 | /** |
||
91 | * @param DataModelBuilder $builder |
||
92 | * @throws InvalidArgumentException |
||
93 | */ |
||
94 | View Code Duplication | public function addQueryToGenerator(DataModelBuilder $builder) |
|
0 ignored issues
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository.
Loading history...
|
|||
95 | { |
||
96 | if ($this->addIt()) { |
||
97 | $manager = $this->getManager(); |
||
98 | $entity = $this->buildEntityFromQuery($builder); |
||
99 | $manager->add($entity); |
||
100 | } |
||
101 | } |
||
102 | |||
103 | /** |
||
104 | * @param DataModelBuilder $builder |
||
105 | * @return ObjectEntity |
||
106 | */ |
||
107 | private function buildEntityFromObject(DataModelBuilder $builder) |
||
108 | { |
||
109 | $methodNamePrefix = $this->returnDatabaseNameIfMethodNamePrefixIsNotProvided($builder); |
||
110 | |||
111 | return new ObjectEntity( |
||
112 | $builder->getStubObjectBuilder()->getClassname(), |
||
113 | $builder->getDatabase()->getName(), |
||
114 | $builder->getStubObjectBuilder()->getFullyQualifiedClassname(), |
||
115 | $methodNamePrefix |
||
116 | ); |
||
117 | } |
||
118 | |||
119 | /** |
||
120 | * @param DataModelBuilder $builder |
||
121 | * @return QueryEntity |
||
122 | */ |
||
123 | private function buildEntityFromQuery(DataModelBuilder $builder) |
||
124 | { |
||
125 | $methodNamePrefix = $this->returnDatabaseNameIfMethodNamePrefixIsNotProvided($builder); |
||
126 | |||
127 | return new QueryEntity( |
||
128 | $builder->getStubQueryBuilder()->getClassname(), |
||
129 | $builder->getDatabase()->getName(), |
||
130 | $builder->getStubQueryBuilder()->getFullyQualifiedClassname(), |
||
131 | $methodNamePrefix |
||
132 | ); |
||
133 | } |
||
134 | |||
135 | /** |
||
136 | * @param DataModelBuilder $builder |
||
137 | * @return string |
||
138 | */ |
||
139 | private function returnDatabaseNameIfMethodNamePrefixIsNotProvided(DataModelBuilder $builder) |
||
140 | { |
||
141 | $methodNamePrefix = (is_null($this->parameters[self::PARAMETER_ENTITY_INSTANTIATOR_METHOD_NAME_PREFIX])) |
||
142 | ? 'create' . ucfirst($builder->getDatabase()->getName()) |
||
143 | : $this->parameters[self::PARAMETER_ENTITY_INSTANTIATOR_METHOD_NAME_PREFIX]; |
||
144 | |||
145 | return $methodNamePrefix; |
||
146 | } |
||
147 | |||
148 | /** |
||
149 | * @return Manager |
||
150 | * @throws InvalidArgumentException |
||
151 | */ |
||
152 | private function getManager() |
||
153 | { |
||
154 | $manager = Manager::getInstance(); |
||
155 | |||
156 | if ($manager->isNotConfigured()) { |
||
157 | $pathToOutput = $this->parameters[self::PARAMETER_ENTITY_INSTANTIATOR_PATH_TO_OUTPUT]; |
||
158 | $isAbsolutePath = (strncmp($pathToOutput, DIRECTORY_SEPARATOR, strlen(DIRECTORY_SEPARATOR)) === 0); //like /foo/bar |
||
159 | $isResource = (strpos($pathToOutput, '://') !== false); //like vfs:// |
||
160 | |||
161 | $isAbsolutePathOrResource = ($isAbsolutePath || $isResource); |
||
162 | |||
163 | $absolutePathToOutput = ($isAbsolutePathOrResource) |
||
164 | ? $pathToOutput |
||
165 | : getcwd() . (str_repeat(DIRECTORY_SEPARATOR . '..', 4)) . DIRECTORY_SEPARATOR . $pathToOutput; |
||
166 | $className = $this->parameters[self::PARAMETER_ENTITY_INSTANTIATOR_CLASS_NAME]; |
||
167 | $defaultConnectionMode = $this->parameters[self::PARAMETER_ENTITY_INSTANTIATOR_DEFAULT_CONNECTION_MODE]; |
||
168 | $defaultConnectionName = $this->parameters[self::PARAMETER_ENTITY_INSTANTIATOR_DEFAULT_CONNECTION_NAME]; |
||
169 | $extends = $this->parameters[self::PARAMETER_ENTITY_INSTANTIATOR_EXTENDS]; |
||
170 | $indention = $this->parameters[self::PARAMETER_ENTITY_INSTANTIATOR_INDENTION]; |
||
171 | $namespace = $this->parameters[self::PARAMETER_ENTITY_INSTANTIATOR_NAMESPACE]; |
||
172 | $useFullyQualifiedName = ($this->parameters[self::PARAMETER_ENTITY_INSTANTIATOR_USE_FULLY_QUALIFIED_NAME] === 'true'); |
||
173 | |||
174 | $manager->configure( |
||
175 | $className, |
||
176 | $indention, |
||
177 | $absolutePathToOutput, |
||
178 | $namespace, |
||
179 | $extends, |
||
180 | $defaultConnectionMode, |
||
181 | $defaultConnectionName, |
||
182 | $useFullyQualifiedName |
||
183 | ); |
||
184 | } |
||
185 | |||
186 | return $manager; |
||
187 | } |
||
188 | |||
189 | /** |
||
190 | * @return bool |
||
191 | */ |
||
192 | private function addIt() |
||
193 | { |
||
194 | return (isset($this->parameters[self::PARAMETER_ENTITY_INSTANTIATOR_ADD_IT_TO_ENTITY_INSTANTIATOR])) |
||
195 | ? ($this->parameters[self::PARAMETER_ENTITY_INSTANTIATOR_ADD_IT_TO_ENTITY_INSTANTIATOR] === 'true') |
||
196 | : false; |
||
197 | } |
||
198 | } |
||
199 |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.