/**
  * @TODO: can we avoid use of entity manager here?
  *
  * @param ApplicationLocalization $page
  * @param EntityManager $entityManager
  * @return PageApplication
  */
 public function createApplicationFor(ApplicationLocalization $localization, EntityManager $entityManager)
 {
     $applicationPage = $localization->getMaster();
     if (!$applicationPage instanceof ApplicationPage) {
         throw new \UnexpectedValueException('Expecting ApplicationPage to be master of [%], [%s] received', $localization->getId(), get_class($applicationPage));
     }
     $appId = $applicationPage->getApplicationId();
     // @TODO: this looks lame
     $application = clone $this->getApplication($appId);
     $application->setApplicationLocalization($localization);
     $application->setEntityManager($entityManager);
     return $application;
 }
 protected function prepareData(ClassMetadata $metadata, array $data)
 {
     foreach ($data as $name => &$entityData) {
         switch ($metadata->name) {
             case Localization::CN():
             case PageLocalization::CN():
             case TemplateLocalization::CN():
             case ApplicationLocalization::CN():
                 $entityData['publishedRevision'] = null;
                 $args = array($entityData['locale']);
                 break;
             case PageLocalizationPath::CN():
                 $args = array(str_ireplace('pageLocalizationPath', '', $name), $entityData['locale']);
                 break;
             case TemplateLayout::CN():
                 $args = array($entityData['media']);
                 break;
             case BlockPropertyMetadata::CN():
                 $args = array($entityData['name'], $entityData['blockProperty']);
                 break;
             case BlockProperty::CN():
                 $args = array($entityData['name']);
                 break;
             case PagePlaceHolder::CN():
             case TemplatePlaceHolder::CN():
                 $args = array($entityData['name']);
                 break;
             default:
                 $constructor = new \ReflectionMethod($metadata->name, '__construct');
                 if ($constructor->getNumberOfRequiredParameters() === 0) {
                     return parent::prepareData($metadata, $data);
                 }
                 throw new \RuntimeException(sprintf('Don\'t know how to build constructor required for [%s].', $metadata->name));
         }
         $entityData = array_merge(array('__construct' => $args), $entityData);
     }
     return parent::prepareData($metadata, $data);
 }
 /**
  * @param ApplicationLocalization $localization
  * @return array
  */
 private function getApplicationPageLocalizationData(ApplicationLocalization $localization)
 {
     $applicationId = $localization->getMaster()->getApplicationId();
     $application = $this->getPageApplicationManager()->getApplication($applicationId);
     $applicationData = $this->getPageApplicationData($application);
     $applicationData['application_id'] = $applicationData['id'];
     return $applicationData;
 }