/**
  * Overwrite to set the node name if not set
  *
  * @param EntityInterface $entity
  * @throws \RuntimeException
  * @return bool|void
  */
 public function store(EntityInterface $entity)
 {
     /** @var $meta \Doctrine\ODM\PHPCR\Mapping\ClassMetadata */
     $meta = $this->om->getClassMetaData(get_class($entity->getObject()));
     if (!property_exists($entity->getObject(), $meta->nodename)) {
         throw new RuntimeException('nodename need to be mapped to ' . get_class($entity->getObject()));
     }
     $nodename = $meta->getFieldValue($entity->getObject(), $meta->nodename);
     if (empty($nodename)) {
         //in case of node creation the nodename is empty
         $name = $this->generateNodeName($entity);
         //set a guessed nodename
         $meta->setFieldValue($entity->getObject(), $meta->nodename, $name);
     }
     try {
         return parent::store($entity);
     } catch (ItemExistsException $iee) {
         //an item with the same title already exists
         return false;
     }
 }
 /**
  * {@inheritDoc}
  *
  * In addition to create the object, try to find the parent relation if one exists.
  */
 public function prepareObject(TypeInterface $type, $parent = null)
 {
     $object = parent::prepareObject($type);
     $config = $type->getConfig();
     $needParent = isset($config['parent_required']) && (bool) $config['parent_required'];
     if (null == $parent) {
         if ($needParent) {
             throw new RuntimeException(sprintf('Parent is required for object of type %s', get_class($object)));
         }
         return $object;
     }
     /** @var ClassMetadata $metaData */
     $metaData = $this->om->getClassMetaData(get_class($object));
     $parentMappingField = $this->findParentMapping($parent, $metaData);
     if (false === $parentMappingField) {
         if ($needParent) {
             throw new RuntimeException(sprintf('No mapping for parent class %s found in metadata of %s', ClassUtils::getClass($parent), $metaData->getName()));
         }
         return $object;
     }
     $metaData->setFieldValue($object, $parentMappingField, $parent);
     return $object;
 }