33 * Copyright © Magento, Inc. All rights reserved.
44 * See COPYING.txt for license details.
55 */
6+
67namespace Magento \FunctionalTestingFramework \DataGenerator \Handlers ;
78
89use Magento \FunctionalTestingFramework \DataGenerator \Objects \OperationDefinitionObject ;
@@ -42,73 +43,72 @@ class OperationDefinitionObjectHandler implements ObjectHandlerInterface
4243 const ENTITY_OPERATION_REQUIRED = 'required ' ;
4344
4445 /**
45- * Singleton Instance of class
46+ * The singleton instance of this class
4647 *
4748 * @var OperationDefinitionObjectHandler
4849 */
49- private static $ DATA_DEFINITION_OBJECT_HANDLER ;
50+ private static $ INSTANCE ;
5051
5152 /**
52- * Array containing all Data Definition Objects
53+ * An array containing all <operation>
5354 *
54- * @var array
55+ * @var OperationDefinitionObject[]
5556 */
56- private $ operationDefinitions = [];
57+ private $ operationDefinitionObjects = [];
5758
5859 /**
59- * Object used to extract dataObjects from array into DataElements
60+ * A helper used to convert the primitive array parser output into objects.
6061 *
6162 * @var OperationElementExtractor
6263 */
63- private $ dataDefExtractor ;
64+ private $ operationElementExtractor ;
65+
66+ /**
67+ * The constructor
68+ */
69+ private function __construct ()
70+ {
71+ $ this ->operationElementExtractor = new OperationElementExtractor ();
72+ }
6473
6574 /**
66- * Singleton method to return DataDefinitionProcessor.
75+ * Return the singleton instance of this class
6776 *
6877 * @return OperationDefinitionObjectHandler
6978 */
7079 public static function getInstance ()
7180 {
72- if (!self ::$ DATA_DEFINITION_OBJECT_HANDLER ) {
73- self ::$ DATA_DEFINITION_OBJECT_HANDLER = new OperationDefinitionObjectHandler ();
74- self ::$ DATA_DEFINITION_OBJECT_HANDLER -> initDataDefinitions ();
81+ if (!self ::$ INSTANCE ) {
82+ self ::$ INSTANCE = new OperationDefinitionObjectHandler ();
83+ self ::$ INSTANCE -> initialize ();
7584 }
7685
77- return self ::$ DATA_DEFINITION_OBJECT_HANDLER ;
86+ return self ::$ INSTANCE ;
7887 }
7988
8089 /**
81- * Returns a OperationDefinitionObject object based on name
90+ * Return an <operation> by the " name" attribute
8291 *
83- * @param string $operationDefinitionName
92+ * @param string $name
8493 * @return OperationDefinitionObject
8594 */
86- public function getObject ($ operationDefinitionName )
95+ public function getObject ($ name )
8796 {
88- return $ this ->operationDefinitions [ $ operationDefinitionName ];
97+ return $ this ->getAllObjects ()[ $ name ];
8998 }
9099
91100 /**
92- * Returns all data Definition objects
101+ * Return all <operation>
93102 *
94- * @return array
103+ * @return OperationDefinitionObject[]
95104 */
96105 public function getAllObjects ()
97106 {
98- return $ this ->operationDefinitions ;
107+ return $ this ->operationDefinitionObjects ;
99108 }
100109
101110 /**
102- * DataDefintionArrayProcessor constructor.
103- */
104- private function __construct ()
105- {
106- $ this ->dataDefExtractor = new OperationElementExtractor ();
107- }
108-
109- /**
110- * This method takes an operation such as create and a data type such as 'customer' and returns the corresponding
111- * data definition defined in metadata.xml
111+ * Return an <operation> by operation and type. Eg. "create" and "address"
112112 *
113113 * @param string $operation
114114 * @param string $dataType
@@ -120,20 +120,22 @@ public function getOperationDefinition($operation, $dataType)
120120 }
121121
122122 /**
123- * This method reads all dataDefinitions from metadata xml into memory.
123+ * Read metadata xml via the Magento parser and then convert the primitive array output
124+ * into an array of objects.
125+ *
124126 * @return void
125127 * @SuppressWarnings(PHPMD.CyclomaticComplexity)
126128 * @SuppressWarnings(PHPMD.NPathComplexity)
127129 * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
128130 * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
129131 */
130- private function initDataDefinitions ()
132+ private function initialize ()
131133 {
132134 //TODO: Reduce CyclomaticComplexity/NPathComplexity/Length of method, remove warning suppression.
133135 $ objectManager = ObjectManagerFactory::getObjectManager ();
134- $ metadataParser = $ objectManager ->create (OperationDefinitionParser::class);
135- foreach ( $ metadataParser ->readOperationMetadata ()
136- [OperationDefinitionObjectHandler:: ENTITY_OPERATION_ROOT_TAG ] as $ dataDefName => $ opDefArray ) {
136+ $ parser = $ objectManager ->create (OperationDefinitionParser::class);
137+ $ parserOutput = $ parser ->readOperationMetadata ()[OperationDefinitionObjectHandler:: ENTITY_OPERATION_ROOT_TAG ];
138+ foreach ( $ parserOutput as $ dataDefName => $ opDefArray ) {
137139 $ operation = $ opDefArray [OperationDefinitionObjectHandler::ENTITY_OPERATION_TYPE ];
138140 $ dataType = $ opDefArray [OperationDefinitionObjectHandler::ENTITY_OPERATION_DATA_TYPE ];
139141 $ url = $ opDefArray [OperationDefinitionObjectHandler::ENTITY_OPERATION_URL ] ?? null ;
@@ -168,7 +170,7 @@ private function initDataDefinitions()
168170 // extract relevant OperationObjects as OperationElements
169171 if (array_key_exists (OperationDefinitionObjectHandler::ENTITY_OPERATION_OBJECT , $ opDefArray )) {
170172 foreach ($ opDefArray [OperationDefinitionObjectHandler::ENTITY_OPERATION_OBJECT ] as $ opElementArray ) {
171- $ operationElements [] = $ this ->dataDefExtractor ->extractOperationElement ($ opElementArray );
173+ $ operationElements [] = $ this ->operationElementExtractor ->extractOperationElement ($ opElementArray );
172174 }
173175 }
174176
@@ -195,7 +197,7 @@ private function initDataDefinitions()
195197 OperationDefinitionObjectHandler::ENTITY_OPERATION_OBJECT ,
196198 $ operationField
197199 )) {
198- $ nestedDataElement = $ this ->dataDefExtractor ->extractOperationElement (
200+ $ nestedDataElement = $ this ->operationElementExtractor ->extractOperationElement (
199201 $ operationField [OperationDefinitionObjectHandler::ENTITY_OPERATION_OBJECT ][0 ]
200202 );
201203 $ subOperationElements [$ nestedDataElement ->getKey ()] = $ nestedDataElement ;
@@ -217,7 +219,7 @@ private function initDataDefinitions()
217219 }
218220 }
219221
220- $ this ->operationDefinitions [$ operation . $ dataType ] = new OperationDefinitionObject (
222+ $ this ->operationDefinitionObjects [$ operation . $ dataType ] = new OperationDefinitionObject (
221223 $ dataDefName ,
222224 $ operation ,
223225 $ dataType ,
0 commit comments