/**
  * Process the event.
  *
  * @param AbstractModelAwareEvent $event The event.
  *
  * @return void
  */
 private function handleFallback(AbstractModelAwareEvent $event)
 {
     $model = $event->getModel();
     $dataProvider = $event->getEnvironment()->getDataProvider($model->getProviderName());
     $properties = $event->getEnvironment()->getDataDefinition()->getPropertiesDefinition();
     foreach (array_keys($model->getPropertiesAsArray()) as $propertyName) {
         if (!$properties->hasProperty($propertyName)) {
             continue;
         }
         $extra = (array) $properties->getProperty($propertyName)->getExtra();
         if (array_key_exists('fallback', $extra) && true === $extra['fallback']) {
             if (!$dataProvider->isUniqueValue($propertyName, $model->getProperty($propertyName), $model->getId())) {
                 // Reset fallback and save model again to have the correct value.
                 $dataProvider->resetFallback($propertyName);
                 $dataProvider->save($model);
             }
         }
     }
 }