/**
  * {@inheritDoc}
  */
 public function save($settings, $namespace = null)
 {
     if ($namespace === null) {
         $namespace = $this->detectNamespace($settings);
     }
     $namespaceParameters = $this->settingsMapper->findByNamespace($namespace);
     $hydrator = $this->namespaceHydratorProvider->getHydrator($namespace);
     $arrayData = $hydrator->extract($settings);
     $eventParams = ['settings' => $settings, 'array_data' => $arrayData, 'namespace' => $namespace];
     $this->getEventManager()->trigger(__FUNCTION__, $this, $eventParams);
     foreach ($arrayData as $name => $value) {
         $parameter = $this->findParameter($namespace, $name, $namespaceParameters);
         if ($parameter !== null) {
             if ($parameter->getValue() != $value) {
                 $parameter->setValue($value);
                 $this->getEventManager()->trigger('updateParameter', $this, ['parameter' => $parameter]);
                 $this->settingsMapper->updateParameter($parameter);
             }
         } else {
             $parameterEntityClass = $this->options->getParameterEntityClass();
             $parameter = $parameterEntityClass::create($namespace, $name, $value);
             $this->getEventManager()->trigger('insertParameter', $this, ['parameter' => $parameter]);
             $this->settingsMapper->insertParameter($parameter);
         }
     }
     if ($this->options->getCacheOptions()->isEnabled()) {
         $this->getCacheManager()->delete($namespace);
         $this->getCacheManager()->create($namespace, $settings);
     }
     $this->getEventManager()->trigger(__FUNCTION__ . '.post', $this, $eventParams);
 }
 /**
  * Gets settings from real source, most probably from database
  *
  * @param  string $namespace
  * @return object
  */
 protected function getSettingsFromRealSource($namespace)
 {
     $arraySettings = $this->getSettingsArray($namespace);
     $namespaceOptions = $this->options->getNamespaceOptions($namespace);
     $entity = clone $namespaceOptions->getEntityPrototype();
     if (!empty($arraySettings)) {
         $hydrator = $this->namespaceHydratorProvider->getHydrator($namespace);
         $entity = $hydrator->hydrate($arraySettings, $entity);
     }
     return $entity;
 }