/** * Apply this patch to an object. * * @param \DataDefinition\Data\ObjectInterface $object * * @return \DataDefinition\Data\ObjectInterface */ public function applyObject(ObjectInterface $object) { // Get the newly modified structure. $structure = $this->applyStructure($object->getStructure()); // Get the original values from the object. $values = array(); foreach ($object as $key => $value) { $values[$key] = $value->getValue(); } // Get the name and the default value for the field. $name = $this->field->getName(); $value = $this->field->getValue()->getValue(); // Apply the patching. switch ($this->type) { case 'add': if (!array_key_exists($name, $values)) { $values[$name] = $value; } break; case 'remove': if (array_key_exists($name, $values)) { unset($values[$name]); } break; case 'replace': if (array_key_exists($name, $values)) { $values[$name] = $value; } break; case 'copy': $original = $this->original->getName(); if (array_key_exists($original, $values) && !array_key_exists($name, $values)) { $values[$name] = $values[$original]; } break; case 'move': $original = $this->original->getName(); if (array_key_exists($original, $values) && !array_key_exists($name, $values)) { $values[$name] = $values[$original]; unset($values[$original]); } break; } // Create a new object. $class = get_class($object); $patched = new $class($structure, $object->getIdentifier(), $object->getOptions()); // Apply new values to the patched object. foreach ($values as $key => $value) { $patched[$key] = $value; } // Return the newly patched object. return $patched; }
/** * {@inheritdoc} */ public function getValue() { return (new ArrayValue($this->field->getValue(), $this->constructor))->setConfig($this->getConfig()); }