/**
  * 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));
         }
     }
 }
Пример #2
0
 /**
  * Documents the properties of the passed ClassMetadata object
  *
  * @param ML\HydraBundle\Mapping\ClassMetadata $class The class metadata
  *
  * @return array The JSON-LD serialization of the class' properties.
  */
 private function documentClassProperties(\ML\HydraBundle\Mapping\ClassMetadata $class)
 {
     $result = array();
     $propertyDomain = $this->getTypeReferenceIri($class->getName());
     foreach ($class->getProperties() as $property) {
         if (0 === strncmp('@', $property->getExposeAs(), 1)) {
             continue;
             // ignore properties that are mapped to keywords
         }
         $result[] = array('property' => $property->isExternalReference() ? $property->getIri() : array('@id' => 'vocab:' . $property->getIri(), '@type' => $property->getRoute() ? 'hydra:Link' : 'rdf:Property', 'label' => $property->getTitle(), 'description' => $property->getDescription(), 'domain' => $propertyDomain, 'range' => $this->getTypeReferenceIri($property->getType()), 'supportedOperation' => $this->documentOperations($property->getOperations())), 'hydra:title' => $property->getTitle(), 'hydra:description' => $property->getDescription(), 'required' => $property->getRequired(), 'readonly' => $property->isReadOnly(), 'writeonly' => $property->isWriteOnly());
     }
     return $result;
 }