/**
  * {@inheritDoc}
  */
 public function loadMetadataForClass($className)
 {
     $class = new ReflectionClass($className);
     $classAnnotations = $this->reader->getClassAnnotations($class);
     if ($classAnnotations) {
         foreach ($classAnnotations as $key => $annot) {
             if (!is_numeric($key)) {
                 continue;
             }
             $classAnnotations[get_class($annot)] = $annot;
         }
     }
     if (!isset($classAnnotations['ML\\HydraBundle\\Mapping\\Expose'])) {
         return null;
     }
     $annotation = $classAnnotations['ML\\HydraBundle\\Mapping\\Expose'];
     $metadata = new ClassMetadata($className);
     $metadata->setExposeAs($annotation->as);
     $metadata->setIri($annotation->getIri());
     $this->documentRouteAndOperations($metadata, $class);
     $this->documentProperties($metadata, $class);
     // If this class represents an external definition, we don't need to
     // collect all data; just the one necessary for the serializer
     if ($metadata->isExternalReference()) {
         return $metadata;
     }
     $docu = $this->getDocBlockText($class);
     $metadata->setTitle($docu['title']);
     $metadata->setDescription($docu['description']);
     return $metadata;
 }
 /**
  * Completes the metadata by setting missing fields that can be inferred
  * by other fields
  *
  * Furthermore, the type of properties which is returned as string by
  * the metadata driver is replaced with a ClassMetadata instance.
  *
  * @param ClassMetadata $class The metadata to complete
  */
 protected function completeMetadata(ClassMetadata $class)
 {
     $className = $class->getName();
     if (null === $class->getIri()) {
         $class->setIri($this->namingStrategy->classIriFragment($className));
     }
     if (null === $class->getExposeAs()) {
         $class->setExposeAs($this->namingStrategy->classShortName($className));
     }
     // If no title has been set for this class, use it's short name
     if (null === $class->getTitle()) {
         $class->setTitle($this->namingStrategy->classShortName($className));
     }
     foreach ($class->getProperties() as $property) {
         $propertyName = $property->getName();
         if (null === $property->getIri()) {
             $property->setIri($this->namingStrategy->propertyIriFragment($className, $propertyName));
         }
         if (null === $property->getExposeAs()) {
             $property->setExposeAs($this->namingStrategy->propertyShortName($className, $propertyName));
         }
         // If no title has been set for this property, use it's short name
         if (null === $property->getTitle()) {
             $property->setTitle($this->namingStrategy->propertyShortName($className, $propertyName));
         }
     }
 }