@@ -65,13 +65,11 @@ public function __construct($dependentEntities = null)
65
65
* @param boolean $fromArray
66
66
* @return array
67
67
* @throws \Exception
68
- * @SuppressWarnings(PHPMD.CyclomaticComplexity)
69
68
* @SuppressWarnings(PHPMD.NPathComplexity)
70
69
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
71
70
*/
72
71
public function resolveOperationDataArray ($ entityObject , $ operationMetadata , $ operation , $ fromArray = false )
73
72
{
74
- //TODO: Refactor to reduce Cyclomatic Complexity, remove SupressWarning accordingly.
75
73
$ operationDataArray = [];
76
74
self ::incrementSequence ($ entityObject ->getName ());
77
75
@@ -105,80 +103,21 @@ public function resolveOperationDataArray($entityObject, $operationMetadata, $op
105
103
$ operationElementType = $ operationElement ->getValue ();
106
104
107
105
if (in_array ($ operationElementType , self ::PRIMITIVE_TYPES )) {
108
- $ elementData = $ this ->resolvePrimitiveReference (
106
+ $ this ->resolvePrimitiveReferenceElement (
109
107
$ entityObject ,
110
- $ operationElement ->getKey (),
111
- $ operationElement ->getType ()
108
+ $ operationElement ,
109
+ $ operationElementType ,
110
+ $ operationDataArray
112
111
);
113
-
114
- // If data was defined at all, attempt to put it into operation data array
115
- // If data was not defined, and element is required, throw exception
116
- // If no data is defined, don't input defaults per primitive into operation data array
117
- if ($ elementData != null ) {
118
- if (array_key_exists ($ operationElement ->getKey (), $ entityObject ->getUniquenessData ())) {
119
- $ uniqueData = $ entityObject ->getUniquenessDataByName ($ operationElement ->getKey ());
120
- if ($ uniqueData === 'suffix ' ) {
121
- $ elementData .= (string )self ::getSequence ($ entityObject ->getName ());
122
- } else {
123
- $ elementData = (string )self ::getSequence ($ entityObject ->getName ()) . $ elementData ;
124
- }
125
- }
126
- $ operationDataArray [$ operationElement ->getKey ()] = $ this ->castValue (
127
- $ operationElementType ,
128
- $ elementData
129
- );
130
- } elseif ($ operationElement ->isRequired ()) {
131
- throw new \Exception (sprintf (
132
- self ::EXCEPTION_REQUIRED_DATA ,
133
- $ operationElement ->getType (),
134
- $ operationElement ->getKey (),
135
- $ entityObject ->getName ()
136
- ));
137
- }
138
112
} else {
139
- $ operationElementProperty = null ;
140
- if (strpos ($ operationElementType , '. ' ) !== false ) {
141
- $ operationElementComponents = explode ('. ' , $ operationElementType );
142
- $ operationElementType = $ operationElementComponents [0 ];
143
- $ operationElementProperty = $ operationElementComponents [1 ];
144
- }
145
-
146
- $ entityNamesOfType = $ entityObject ->getLinkedEntitiesOfType ($ operationElementType );
147
-
148
- // If an element is required by metadata, but was not provided in the entity, throw an exception
149
- if ($ operationElement ->isRequired () && $ entityNamesOfType == null ) {
150
- throw new \Exception (sprintf (
151
- self ::EXCEPTION_REQUIRED_DATA ,
152
- $ operationElement ->getType (),
153
- $ operationElement ->getKey (),
154
- $ entityObject ->getName ()
155
- ));
156
- }
157
- foreach ($ entityNamesOfType as $ entityName ) {
158
- if ($ operationElementProperty === null ) {
159
- $ operationDataSubArray = $ this ->resolveNonPrimitiveElement (
160
- $ entityName ,
161
- $ operationElement ,
162
- $ operation ,
163
- $ fromArray
164
- );
165
- } else {
166
- $ linkedEntityObj = $ this ->resolveLinkedEntityObject ($ entityName );
167
- $ operationDataSubArray = $ linkedEntityObj ->getDataByName ($ operationElementProperty , 0 );
168
-
169
- if ($ operationDataSubArray === null ) {
170
- throw new \Exception (
171
- sprintf ('Property %s not found in entity %s \n ' , $ operationElementProperty , $ entityName )
172
- );
173
- }
174
- }
175
-
176
- if ($ operationElement ->getType () == OperationDefinitionObjectHandler::ENTITY_OPERATION_ARRAY ) {
177
- $ operationDataArray [$ operationElement ->getKey ()][] = $ operationDataSubArray ;
178
- } else {
179
- $ operationDataArray [$ operationElement ->getKey ()] = $ operationDataSubArray ;
180
- }
181
- }
113
+ $ this ->resolveNonPrimitiveReferenceElement (
114
+ $ entityObject ,
115
+ $ operation ,
116
+ $ fromArray ,
117
+ $ operationElementType ,
118
+ $ operationElement ,
119
+ $ operationDataArray
120
+ );
182
121
}
183
122
}
184
123
@@ -394,5 +333,106 @@ private function castValue($type, $value)
394
333
395
334
return $ newVal ;
396
335
}
336
+
337
+ /**
338
+ * Resolve a reference for a primitive piece of data
339
+ *
340
+ * @param EntityDataObject $entityObject
341
+ * @param $operationElement
342
+ * @param $operationElementType
343
+ * @param array $operationDataArray
344
+ * @throws TestFrameworkException
345
+ */
346
+ private function resolvePrimitiveReferenceElement ($ entityObject , $ operationElement , $ operationElementType , array &$ operationDataArray )
347
+ {
348
+ $ elementData = $ this ->resolvePrimitiveReference (
349
+ $ entityObject ,
350
+ $ operationElement ->getKey (),
351
+ $ operationElement ->getType ()
352
+ );
353
+
354
+ // If data was defined at all, attempt to put it into operation data array
355
+ // If data was not defined, and element is required, throw exception
356
+ // If no data is defined, don't input defaults per primitive into operation data array
357
+ if ($ elementData != null ) {
358
+ if (array_key_exists ($ operationElement ->getKey (), $ entityObject ->getUniquenessData ())) {
359
+ $ uniqueData = $ entityObject ->getUniquenessDataByName ($ operationElement ->getKey ());
360
+ if ($ uniqueData === 'suffix ' ) {
361
+ $ elementData .= (string )self ::getSequence ($ entityObject ->getName ());
362
+ } else {
363
+ $ elementData = (string )self ::getSequence ($ entityObject ->getName ()) . $ elementData ;
364
+ }
365
+ }
366
+ $ operationDataArray [$ operationElement ->getKey ()] = $ this ->castValue (
367
+ $ operationElementType ,
368
+ $ elementData
369
+ );
370
+ } elseif ($ operationElement ->isRequired ()) {
371
+ throw new \Exception (sprintf (
372
+ self ::EXCEPTION_REQUIRED_DATA ,
373
+ $ operationElement ->getType (),
374
+ $ operationElement ->getKey (),
375
+ $ entityObject ->getName ()
376
+ ));
377
+ }
378
+ }
379
+
380
+ /**
381
+ * Resolves DataObjects referenced by the operation
382
+ *
383
+ * @param $entityObject
384
+ * @param $operation
385
+ * @param $fromArray
386
+ * @param $operationElementType
387
+ * @param $operationElement
388
+ * @param array $operationDataArray
389
+ * @throws TestFrameworkException
390
+ */
391
+ private function resolveNonPrimitiveReferenceElement ($ entityObject , $ operation , $ fromArray , &$ operationElementType , $ operationElement , array &$ operationDataArray )
392
+ {
393
+ $ operationElementProperty = null ;
394
+ if (strpos ($ operationElementType , '. ' ) !== false ) {
395
+ $ operationElementComponents = explode ('. ' , $ operationElementType );
396
+ $ operationElementType = $ operationElementComponents [0 ];
397
+ $ operationElementProperty = $ operationElementComponents [1 ];
398
+ }
399
+
400
+ $ entityNamesOfType = $ entityObject ->getLinkedEntitiesOfType ($ operationElementType );
401
+
402
+ // If an element is required by metadata, but was not provided in the entity, throw an exception
403
+ if ($ operationElement ->isRequired () && $ entityNamesOfType == null ) {
404
+ throw new \Exception (sprintf (
405
+ self ::EXCEPTION_REQUIRED_DATA ,
406
+ $ operationElement ->getType (),
407
+ $ operationElement ->getKey (),
408
+ $ entityObject ->getName ()
409
+ ));
410
+ }
411
+ foreach ($ entityNamesOfType as $ entityName ) {
412
+ if ($ operationElementProperty === null ) {
413
+ $ operationDataSubArray = $ this ->resolveNonPrimitiveElement (
414
+ $ entityName ,
415
+ $ operationElement ,
416
+ $ operation ,
417
+ $ fromArray
418
+ );
419
+ } else {
420
+ $ linkedEntityObj = $ this ->resolveLinkedEntityObject ($ entityName );
421
+ $ operationDataSubArray = $ linkedEntityObj ->getDataByName ($ operationElementProperty , 0 );
422
+
423
+ if ($ operationDataSubArray === null ) {
424
+ throw new \Exception (
425
+ sprintf ('Property %s not found in entity %s \n ' , $ operationElementProperty , $ entityName )
426
+ );
427
+ }
428
+ }
429
+
430
+ if ($ operationElement ->getType () == OperationDefinitionObjectHandler::ENTITY_OPERATION_ARRAY ) {
431
+ $ operationDataArray [$ operationElement ->getKey ()][] = $ operationDataSubArray ;
432
+ } else {
433
+ $ operationDataArray [$ operationElement ->getKey ()] = $ operationDataSubArray ;
434
+ }
435
+ }
436
+ }
397
437
// @codingStandardsIgnoreEnd
398
438
}
0 commit comments