/**
  * 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));
         }
     }
 }