83 $data = $this->joinProcessor->extractExtensionAttributes(get_class($dataObject),
$data);
100 $dataObjectMethods = get_class_methods(get_class($dataObject));
105 'set' . $camelCaseKey,
106 'setIs' . $camelCaseKey,
110 && is_array(
$data[$key])
111 && !empty(
$data[$key])
113 foreach (
$data[$key] as $customAttribute) {
114 $dataObject->setCustomAttribute(
119 }
elseif ($methodNames = array_intersect($possibleMethods, $dataObjectMethods)) {
120 $methodName = array_values($methodNames)[0];
122 if ($methodName ===
'setExtensionAttributes' &&
$value ===
null) {
125 $dataObject->$methodName(
$value);
128 $getterMethodName =
'get' . $camelCaseKey;
132 $dataObject->setCustomAttribute($key,
$value);
155 if ($interfaceName ==
null) {
156 $interfaceName = get_class($dataObject);
158 $returnType = $this->methodsMapProcessor->getMethodReturnType($interfaceName, $getterMethodName);
159 if ($this->typeProcessor->isTypeSimple($returnType)) {
160 $dataObject->$methodName(
$value);
164 if ($this->typeProcessor->isArrayType($returnType)) {
165 $type = $this->typeProcessor->getArrayItemType($returnType);
167 foreach (
$value as $arrayElementData) {
168 $object = $this->objectFactory->create(
$type, []);
170 $objects[] = $object;
172 $dataObject->$methodName($objects);
177 $object = $this->objectFactory->create($returnType, []);
180 foreach (
$value as $extensionAttributeKey => $extensionAttributeValue) {
181 $extensionAttributeGetterMethodName
183 $extensionAttributeKey
185 $methodReturnType = $this->methodsMapProcessor->getMethodReturnType(
187 $extensionAttributeGetterMethodName
189 $extensionAttributeType = $this->typeProcessor->isArrayType($methodReturnType)
190 ? $this->typeProcessor->getArrayItemType($methodReturnType)
192 if ($this->typeProcessor->isTypeSimple($extensionAttributeType)) {
193 $value[$extensionAttributeKey] = $extensionAttributeValue;
195 if ($this->typeProcessor->isArrayType($methodReturnType)) {
196 foreach ($extensionAttributeValue as $key => $extensionAttributeArrayValue) {
197 $extensionAttribute = $this->objectFactory->create($extensionAttributeType, []);
200 $extensionAttributeArrayValue,
201 $extensionAttributeType
203 $value[$extensionAttributeKey][$key] = $extensionAttribute;
206 $value[$extensionAttributeKey] = $this->objectFactory->create(
207 $extensionAttributeType,
208 [
'data' => $extensionAttributeValue]
213 $object = $this->extensionFactory->create(get_class($dataObject), [
'data' =>
$value]);
215 $object = $this->objectFactory->create($returnType,
$value);
217 $dataObject->$methodName($object);
235 if (!$firstDataObject instanceof $interfaceName || !$secondDataObject instanceof $interfaceName) {
236 throw new \LogicException(
'Wrong prototype object given. It can only be of "' . $interfaceName .
'" type.');
238 $secondObjectArray = $this->objectProcessor->buildOutputDataArray($secondDataObject, $interfaceName);
239 $this->
_setDataValues($firstDataObject, $secondObjectArray, $interfaceName);
252 $attributeValueArray = [];
254 return $attributeValueArray;
257 if ($attributeValue->getValue() instanceof
$type) {
258 $attributeValueArray[] = $attributeValue;
261 return $attributeValueArray;
populateWithArray($dataObject, array $data, $interfaceName)
is_subclass_of($obj, $className)
static snakeCaseToUpperCamelCase($input)
elseif(isset( $params[ 'redirect_parent']))
getCustomAttributeValueByType(array $attributeValues, $type)
__construct(ObjectFactory $objectFactory, \Magento\Framework\Reflection\DataObjectProcessor $objectProcessor, \Magento\Framework\Reflection\TypeProcessor $typeProcessor, \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory, \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $joinProcessor, MethodsMap $methodsMapProcessor)
_setDataValues($dataObject, array $data, $interfaceName)
setComplexValue( $dataObject, $getterMethodName, $methodName, array $value, $interfaceName)
mergeDataObjects( $interfaceName, $firstDataObject, $secondDataObject)