/**
  * {@inheritdoc}
  */
 public function loadClassMetadata(ClassMetadataInterface $classMetadata, array $normalizationGroups = null, array $denormalizationGroups = null, array $validationGroups = null)
 {
     $validatorClassMetadata = $this->validatorMetadataFactory->getMetadataFor($classMetadata->getName());
     foreach ($classMetadata->getAttributesMetadata() as $attributeName => $attributeMetadata) {
         foreach ($validatorClassMetadata->getPropertyMetadata($attributeName) as $propertyMetadata) {
             if (null === $validationGroups) {
                 foreach ($propertyMetadata->findConstraints($validatorClassMetadata->getDefaultGroup()) as $constraint) {
                     if ($this->isRequired($constraint)) {
                         $attributeMetadata = $attributeMetadata->withRequired(true);
                         break 2;
                     }
                 }
             } else {
                 foreach ($validationGroups as $validationGroup) {
                     if (!is_string($validationGroup)) {
                         continue;
                     }
                     foreach ($propertyMetadata->findConstraints($validationGroup) as $constraint) {
                         if ($this->isRequired($constraint)) {
                             $attributeMetadata = $attributeMetadata->withRequired(true);
                             break 3;
                         }
                     }
                 }
             }
         }
         $classMetadata = $classMetadata->withAttributeMetadata($attributeName, $attributeMetadata);
     }
     return $classMetadata;
 }
 public function getAttributeMetadataFor(ClassMetadataInterface $classMetadata, $attributeName, array $normalizationGroups = null, array $denormalizationGroups = null)
 {
     if ($classMetadata->hasAttributeMetadata($attributeName)) {
         return $classMetadata->getAttributeMetadata($attributeName);
     }
     $attributeMetadata = new AttributeMetadata();
     $reflectionProperty = $this->getReflectionProperty($classMetadata->getReflectionClass(), $attributeName);
     if (!$reflectionProperty) {
         return $attributeMetadata;
     }
     $types = $this->propertyInfo->getTypes($reflectionProperty);
     if (!isset($types[0])) {
         return $attributeMetadata;
     }
     $type = $types[0];
     $attributeMetadata = $attributeMetadata->withType($type);
     $class = $type->getClass();
     $link = $this->resourceCollection->getResourceForEntity($class) || $type->isCollection() && $type->getCollectionType() && ($class = $type->getCollectionType()->getClass()) && $this->resourceCollection->getResourceForEntity($class);
     $attributeMetadata = $attributeMetadata->withLink($link)->withLinkClass($class);
     if (!$link) {
         return $attributeMetadata;
     }
     if (null === $normalizationGroups) {
         $attributeMetadata = $attributeMetadata->withNormalizationLink(true);
     }
     if (null === $denormalizationGroups) {
         $attributeMetadata = $attributeMetadata->withDenormalizationLink(true);
     }
     return $attributeMetadata;
 }
 /**
  * {@inheritdoc}
  */
 public function loadClassMetadata(ClassMetadataInterface $classMetadata, array $normalizationGroups = null, array $denormalizationGroups = null, array $validationGroups = null)
 {
     if (null !== $normalizationGroups && null !== $denormalizationGroups) {
         return $classMetadata;
     }
     $reflectionClass = $classMetadata->getReflectionClass();
     $classMetadata = $this->populateFromPublicMethods($reflectionClass, $classMetadata, $normalizationGroups, $denormalizationGroups);
     $classMetadata = $this->populateFromPublicProperties($reflectionClass, $classMetadata, $normalizationGroups, $denormalizationGroups);
     return $classMetadata;
 }
Example #4
0
 /**
  * {@inheritdoc}
  */
 public function loadClassMetadata(ClassMetadataInterface $classMetadata, array $normalizationGroups = null, array $denormalizationGroups = null, array $validationGroups = null)
 {
     if (($classReflector = $this->getClassReflector($classMetadata->getReflectionClass())) && ($docBlock = $classReflector->getDocBlock())) {
         $classMetadata = $classMetadata->withDescription($docBlock->getShortDescription());
     }
     foreach ($classMetadata->getAttributesMetadata() as $attributeName => $attributeMetadata) {
         if ($reflectionProperty = $this->getReflectionProperty($classMetadata->getReflectionClass(), $attributeName)) {
             $attributeMetadata = $attributeMetadata->withDescription($this->propertyInfo->getShortDescription($reflectionProperty));
             $classMetadata = $classMetadata->withAttributeMetadata($attributeName, $attributeMetadata);
         }
     }
     return $classMetadata;
 }
 /**
  * {@inheritdoc}
  */
 public function loadClassMetadata(ClassMetadataInterface $classMetadata, array $normalizationGroups = null, array $denormalizationGroups = null, array $validationGroups = null)
 {
     $reflectionClass = $classMetadata->getReflectionClass();
     if ($iri = $this->reader->getClassAnnotation($reflectionClass, self::IRI_ANNOTATION_NAME)) {
         $classMetadata = $classMetadata->withIri($iri->value);
     }
     foreach ($classMetadata->getAttributesMetadata() as $attributeName => $attributeMetadata) {
         if ($reflectionProperty = $this->getReflectionProperty($reflectionClass, $attributeName)) {
             if ($iri = $this->reader->getPropertyAnnotation($reflectionProperty, self::IRI_ANNOTATION_NAME)) {
                 $classMetadata = $classMetadata->withAttributeMetadata($attributeName, $attributeMetadata->withIri($iri->value));
             }
         }
     }
     return $classMetadata;
 }
 /**
  * {@inheritdoc}
  */
 public function loadClassMetadata(ClassMetadataInterface $classMetadata, array $normalizationGroups = null, array $denormalizationGroups = null, array $validationGroups = null)
 {
     $className = $classMetadata->getReflectionClass()->name;
     $manager = $this->managerRegistry->getManagerForClass($className);
     if (!$manager) {
         return $classMetadata;
     }
     $doctrineClassMetadata = $manager->getClassMetadata($className);
     if (!$doctrineClassMetadata) {
         return $classMetadata;
     }
     $identifiers = $doctrineClassMetadata->getIdentifier();
     if (1 !== count($identifiers)) {
         return $classMetadata;
     }
     $identifierName = $identifiers[0];
     if (!$classMetadata->hasAttributeMetadata($identifierName)) {
         $attributeMetadata = $this->attributeMetadataFactory->getAttributeMetadataFor($classMetadata, $identifierName, $normalizationGroups, $denormalizationGroups);
         if ($doctrineClassMetadata->isIdentifierNatural()) {
             $attributeMetadata = $attributeMetadata->withWritable(false);
         }
         $classMetadata = $classMetadata->withAttributeMetadata($identifierName, $attributeMetadata);
     }
     $classMetadata = $classMetadata->withIdentifierName($identifierName);
     return $classMetadata;
 }
 /**
  * Populates normalization and denormalization links.
  *
  * @param ClassMetadataInterface     $classMetadata
  * @param string                     $attributeName
  * @param AttributeMetadataInterface $attributeMetadata
  * @param array|null                 $normalizationGroups
  * @param array|null                 $denormalizationGroups
  *
  * @return ClassMetadataInterface
  */
 private function populateNormalizationLinks(ClassMetadataInterface $classMetadata, $attributeName, AttributeMetadataInterface $attributeMetadata, array $normalizationGroups = null, array $denormalizationGroups = null)
 {
     if (!$classMetadata->hasAttributeMetadata($attributeName) || !$attributeMetadata->isLink() || $attributeMetadata->isNormalizationLink() && $attributeMetadata->isDenormalizationLink()) {
         return $classMetadata;
     }
     $relationSerializerMetadata = $this->serializerClassMetadataFactory->getMetadataFor($attributeMetadata->getLinkClass());
     if (!$relationSerializerMetadata) {
         $attributeMetadata = $attributeMetadata->withNormalizationLink(true)->withDenormalizationLink(true);
         return $classMetadata->withAttributeMetadata($attributeName, $attributeMetadata);
     }
     foreach ($relationSerializerMetadata->getAttributesMetadata() as $serializerAttributeMetadata) {
         $serializerAttributeGroups = $serializerAttributeMetadata->getGroups();
         if (null !== $normalizationGroups && 1 <= count(array_intersect($normalizationGroups, $serializerAttributeGroups))) {
             $normalizationLink = false;
         }
         if (null !== $denormalizationGroups && 1 <= count(array_intersect($denormalizationGroups, $serializerAttributeGroups))) {
             $denormalizationLink = false;
         }
         if (isset($normalizationLink) && isset($denormalizationLink)) {
             $classMetadata = $classMetadata->withAttributeMetadata($attributeName, $attributeMetadata);
         }
     }
     if (!isset($normalizationLink)) {
         $attributeMetadata = $attributeMetadata->withNormalizationLink(true);
     }
     if (!isset($denormalizationLink)) {
         $attributeMetadata = $attributeMetadata->withDenormalizationLink(true);
     }
     return $classMetadata->withAttributeMetadata($attributeName, $attributeMetadata);
 }