public function reverseTransform($value)
 {
     if (empty($value)) {
         $this->property->getMetadata()->remove('link');
         return null;
     }
     $metadata = $this->property->getMetadata();
     if (!$metadata->offsetExists('link')) {
         $metadata->set('link', new BlockPropertyMetadata('link', $this->property));
     }
     $metaItem = $metadata->get('link');
     /* @var $metaItem BlockPropertyMetadata */
     $element = new LinkReferencedElement();
     // @TODO: some data validation must happen here.
     $element->fillFromArray($value);
     $metaItem->setReferencedElement($element);
     return null;
 }
 public static function getLinkReferencedElementUrl(LinkReferencedElement $element, EntityManager $entityManager, LocaleInterface $currenctLocale)
 {
     switch ($element->getResource()) {
         case LinkReferencedElement::RESOURCE_LINK:
             return $element->getHref();
         case LinkReferencedElement::RESOURCE_PAGE:
             $localization = $entityManager->getRepository(PageLocalization::CN())->findOneBy(array('master' => $element->getPageId(), 'locale' => $currenctLocale->getId()));
             /* @var $localization PageLocalization */
             if ($localization !== null) {
                 // @TODO: allow to affect the path somehow?
                 return $localization->getFullPath(Path::FORMAT_LEFT_DELIMITER);
             }
             break;
         case LinkReferencedElement::RESOURCE_FILE:
             // @FIXME: get the filestorage somehow, or use File entity?
             throw new \Exception('Implement me, I have no file storage here.');
             break;
         default:
             throw new \UnexpectedValueException("Unrecognized resource type [{$element->getResource()}].");
     }
     return null;
     // @TODO: 'email' resource type handling?
 }