public function handle($className, Property $property)
 {
     try {
         if ($type = $this->guesser->guessType($className, $property->getName())) {
             $property->addType($this->getPropertyType($type));
             $property->setFormat($this->getPropertyFormat($type));
             if (in_array($type->getType(), array('document', 'entity'))) {
                 $options = $type->getOptions();
                 if (isset($options['class']) && $this->registry->hasNamespace($options['class'])) {
                     $alias = $this->registry->getAlias($options['class']);
                     if ($alias) {
                         $property->setObject($alias);
                         if (isset($options['multiple']) && $options['multiple'] == true) {
                             $property->setMultiple(true);
                         }
                     }
                 }
             }
         }
         if ($required = $this->guesser->guessRequired($className, $property->getName())) {
             $property->setRequired($required->getValue());
         }
         if ($pattern = $this->guesser->guessPattern($className, $property->getName())) {
             $property->setPattern($pattern->getValue());
         }
         if ($maximum = $this->guesser->guessMaxLength($className, $property->getName())) {
             $property->setMaximum($maximum->getValue());
         }
         if ($property->getTitle() == null) {
             $title = ucwords(str_replace('_', ' ', Inflector::tableize($property->getName())));
             $property->setTitle($title);
         }
     } catch (MappingException $e) {
     }
 }
 public function handle($className, Property $property)
 {
     try {
         $metadata = $this->containerInterface->get('doctrine.odm.mongodb.document_manager')->getClassMetadata($className);
     } catch (MappingException $e) {
         return;
         //entity doens't support mongo reflection
     }
     if ($metadata->hasReference($property->getName())) {
         $targetDocumentClass = $this->containerInterface->get('doctrine.odm.mongodb.document_manager')->getClassMetadata($metadata->fieldMappings[$property->getName()]['targetDocument']);
         $targetDocumentType = $targetDocumentClass->isIdGeneratorIncrement() ? Property::TYPE_INTEGER : Property::TYPE_STRING;
         $isCollection = $metadata->isCollectionValuedReference($property->getName());
         $property->setType($targetDocumentType);
         $link = new Link();
         /**
          * @var ResourceTypeInterface $targetDocument
          */
         $targetDocument = $targetDocumentClass->getReflectionClass()->newInstance();
         $resourceName = $targetDocument->getResourceType()->getValue();
         $link->setHref($this->containerInterface->get('router')->generate("get_{$resourceName}", array('id' => '{$}'), \Symfony\Component\Routing\Generator\UrlGeneratorInterface::ABSOLUTE_URL));
         $property->setLink($link);
     } else {
         if ($metadata->hasEmbed($property->getName()) && !empty($metadata->fieldMappings[$property->getName()]['discriminatorMap'])) {
             $property->setType(Property::TYPE_OBJECT);
             if ($property->getPolymorphicType()) {
                 $property->setObject($this->containerInterface->get('json_schema.registry')->getAlias($metadata->fieldMappings[$property->getName()]['discriminatorMap'][$property->getPolymorphicType()]));
             } else {
                 $property->setOneOf($this->containerInterface->get('json_schema.generator')->getOneOf($metadata->fieldMappings[$property->getName()]['discriminatorMap']));
             }
         } else {
             if (is_array($metadata->getIdentifierFieldNames()) && !empty($metadata->getIdentifierFieldNames()) && $metadata->getIdentifierFieldNames()[0] == $property->getName()) {
                 //$property->setIgnored(true);
                 $property->setType($metadata->isIdGeneratorIncrement() ? Property::TYPE_INTEGER : Property::TYPE_STRING);
             }
         }
     }
 }