entity)) { throw new MissingDataException("Unable to get property $property_name as no entity has been provided."); } return $this->getConfigTypedData()->get($property_name); } /** * {@inheritdoc} */ public function set($property_name, $value, $notify = TRUE) { if (!isset($this->entity)) { throw new MissingDataException("Unable to set property $property_name as no entity has been provided."); } $this->entity->set($property_name, $value, $notify); return $this; } /** * {@inheritdoc} */ public function getProperties($include_computed = FALSE) { if (!isset($this->entity)) { throw new MissingDataException('Unable to get properties as no entity has been provided.'); } return $this->getConfigTypedData()->getProperties($include_computed); } /** * {@inheritdoc} */ public function onChange($property_name) { if (isset($this->entity)) { // Let the entity know of any changes. $this->getConfigTypedData()->onChange($property_name); } } /** * {@inheritdoc} */ public function getIterator() { if (isset($this->entity)) { return $this->getConfigTypedData()->getIterator(); } return new \ArrayIterator([]); } /** * Gets the typed data manager. * * @return \Drupal\Core\Config\TypedConfigManagerInterface * The typed data manager. */ public function getTypedDataManager() { if (empty($this->typedDataManager)) { $this->typedDataManager = \Drupal::service('config.typed'); } return $this->typedDataManager; } /** * {@inheritdoc} */ public function applyDefaultValue($notify = TRUE) { // @todo Figure out what to do for this method, see // https://www.drupal.org/project/drupal/issues/2945635. throw new \BadMethodCallException('Method not supported'); } /** * Gets typed data for config entity. * * @return \Drupal\Core\TypedData\ComplexDataInterface * The typed data. */ protected function getConfigTypedData() { return $this->getTypedDataManager()->createFromNameAndData($this->entity->getConfigDependencyName(), $this->entity->toArray()); } }