@@ -65,13 +65,11 @@ public function __construct($dependentEntities = null)
6565 * @param boolean $fromArray
6666 * @return array
6767 * @throws \Exception
68- * @SuppressWarnings(PHPMD.CyclomaticComplexity)
6968 * @SuppressWarnings(PHPMD.NPathComplexity)
7069 * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
7170 */
7271 public function resolveOperationDataArray ($ entityObject , $ operationMetadata , $ operation , $ fromArray = false )
7372 {
74- //TODO: Refactor to reduce Cyclomatic Complexity, remove SupressWarning accordingly.
7573 $ operationDataArray = [];
7674 self ::incrementSequence ($ entityObject ->getName ());
7775
@@ -105,80 +103,21 @@ public function resolveOperationDataArray($entityObject, $operationMetadata, $op
105103 $ operationElementType = $ operationElement ->getValue ();
106104
107105 if (in_array ($ operationElementType , self ::PRIMITIVE_TYPES )) {
108- $ elementData = $ this ->resolvePrimitiveReference (
106+ $ this ->resolvePrimitiveReferenceElement (
109107 $ entityObject ,
110- $ operationElement ->getKey (),
111- $ operationElement ->getType ()
108+ $ operationElement ,
109+ $ operationElementType ,
110+ $ operationDataArray
112111 );
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- }
138112 } 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+ );
182121 }
183122 }
184123
@@ -394,5 +333,106 @@ private function castValue($type, $value)
394333
395334 return $ newVal ;
396335 }
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+ }
397437 // @codingStandardsIgnoreEnd
398438}
0 commit comments